В gradle kotlin dsl, как вызвать тестовое расширение Dynami c? - PullRequest
1 голос
/ 27 мая 2020

Я пытаюсь добавить новый параметр конфигурации при использовании плагина Gradle ScalaTest:

https://github.com/maiflai/gradle-scalatest

В его исходный код была введена конфигурация в класс Test как динамическое c расширение:

    static void configure(Test test) {
        ...
        Map<String, ?> config = [:]
        test.extensions.add(ScalaTestAction.CONFIG, config)
        test.extensions.add("config", { String name, value -> config.put(name, value) })
        test.extensions.add("configMap", { Map<String, ?> c -> config.putAll(c) })
        ...
    }

При использовании groovy в качестве dsl вызвать это свойство легко:

test {
    configMap([
        'db.name': 'testdb'
        'server': '192.168.1.188'
        ])
}

к сожалению, kotlin dsl не может использовать этот метод из-за набора c stati, при вызове в качестве тестового плагина он четко виден в тестовой области, например, при использовании extension.getByName:

tasks {

    test {

        val map = extensions.getByName("configMap")
        println(map)
    }
}

Результат следующий вывод:

...


> Configure project :
com.github.maiflai.ScalaTestPlugin$_configure_closure6@45c21cac

Но нет способа получить или подтвердить его тип во время компиляции, и он оказывается бесполезным (если не используется отражение, что противоречит философии дизайна kotlin dsl). Есть ли простой способ для kotlin dsl добиться того же?

1 Ответ

1 голос
/ 27 мая 2020

Я видел в плагине Scala test gradle, что расширение Dynami c определяется следующим образом:

test.extensions.add("configMap", { Map<String, ?> c -> config.putAll(c) })

com.github.maiflai.ScalaTestPlugin$_configure_closure6@45c21cac, которое вы видели, должно быть закрытием типа (Map<String, Any>) -> Unit, что означает, что вы можете это сделать. Нам придется изменить значения карты, поэтому предположим, что она также изменяема.

extensions.getByName("configMap").closureOf<MutableMap<String, Any?>> {
    this["db.name"] = "testdb"
    this["server"] = "192.168.1.188"
}

Эта сборка работает нормально, но у меня нет Scala установлен и никогда не использовался Scala test. Понятия не имею, работает ли это на самом деле, поэтому скажите, пожалуйста.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...