Kotlin задача Gradle делегирования - PullRequest
0 голосов
/ 07 мая 2020

У меня что-то вроде этого:

fun doSomething(specifyInput: Base.() -> Unit) {
    val spec = BaseImpl()
    spec.apply {
        specifyInput()
        validate()
    }

interface Base {
    var a: String?
    var b: String?
}

class BaseImpl(override var a: String?, override var b: String?) : Base {
    constructor() : this(null, null)
fun validate() {
        if (a == null) throw ExceptionForA()
        if (b == null) throw ExceptionForB()
    }
}

Это задача Gradle.

class A : DefaultTask(), Base by BaseImpl()

@TaskAction
fun doSomething() {
    doSomething {
       a = c
    }
}

Это мой тест:

val buildFile = File(testProjectDir, "build.gradle.kts")
        buildFile.createNewFile()
        buildFile.writeText("""
                tasks.register("task", A::class.java) {
                    c = "something"
                }
            """.trimIndent())
        val result = testProjectDir.executeAndFailGradleRunner("task")

        assertThat(result.output).contains("ExceptionForB")

Вы знаете, что мне нужно сделать, чтобы тест прошел?

Заранее спасибо.

Обновление: тем временем я расширил пример кода.

Нашел решение, которое я ищу.

1 Ответ

0 голосов
/ 12 мая 2020

Я нашел решение. Мне нужно использовать другую переменную и назначить в моей переменной из делегирования a = c, нельзя использовать a = a.

...