Как добавить зависимость задачи Gradle к сгенерированному плагином CUnit?

Я запрыгнул в машину возврата проекта и обнаружил, что работаю с подключаемыми плагинами 'c' и 'cunit-test-suite'. Похоже, что они полагаются на настройку сборки через пространство модели (я признаю, что мое понимание пространства модели все еще находится на очень высоком уровне).

плагин CUnit генерирует ряд задач для запуска тестов. Многие из моих тестов зависят от конфигурационных файлов или сгенерированных наборов данных. я хотел сделать то, что мне показалось довольно простым: перед запуском тестов скопируйте входные файлы теста в каталог build/test-results/; рабочий каталог для тестового прогона. для этого я хотел, чтобы задача CUnit installVmeTestCUnitExe зависела от моей задачи копирования.

проблема, с которой я столкнулся, состоит в том, что сгенерированные задачи не известны корневому проекту. никакое количество попыток сослаться на сгенерированную CUnit задачу в пространстве модели не сработало. В итоге я создал плагин, определяющий правило, которое программно создает копию и устанавливает зависимость через ModelMap of Task:

class TestInputsTask extends RuleSource {
    @Mutate void createCopyTask(ModelMap<Task> tasks) {
        def vmeInstall = tasks.get("installVmeTestCUnitExe")
        def taskName = "copyTestResources"
        def copyTask = tasks.create(taskName, Copy) {
            from project.getProjectDir().getAbsolutePath() + "/testFiles/input"
            into project.getBuildDir().getAbsolutePath() + "/test-results/vmeTest"
        }
        vmeInstall.dependsOn tasks[taskName]
    }
}
apply plugin: TestInputsTask

должен быть более простой / лучший способ сделать это (если не считать наличия тестового кода с использованием каталога проекта и знания того, где находятся файлы). что это? Я хотел бы понять правила и модельные пространства немного лучше, по крайней мере.

вот мое определение пространства модели:

apply plugin : 'c'
apply plugin: 'cunit-test-suite'

model {

buildTypes {
    debug
    release
}

binaries {
    all {
        if (toolChain in Clang && buildType == buildTypes.debug) {
            cCompiler.args "-g"
            cCompiler.args "-O0"
            cCompiler.args "-Werror"
        }
        if (toolChain in Clang && buildType == buildTypes.release) {
            cCompiler.args "-O2"
            cCompiler.args "-Werror"
        }
    }
    withType(CUnitTestSuiteBinarySpec) {
        lib library: "cunit", linkage: "static"

        // so non-unit test driver "main" doesn't conflict
        cCompiler.define "CU_TEST"
    }
}

repositories {
    libs(PrebuiltLibraries) { 
        curl {
            headers.srcDir '/usr/include/curl'
            binaries.withType(PrebuiltSharedLibraryBinary) {
                sharedLibraryFile = file("/usr/lib/libcurl.dylib")
            }
        }
        cunit {
            headers.srcDir "/usr/local/include"
            binaries.withType(StaticLibraryBinary) {
                staticLibraryFile =
                    file("/usr/local/lib/libcunit.dylib")
            }
        }
    }
}
components {
    vme(NativeLibrarySpec) {
        sources {
            c.lib library : 'curl', linkage: 'shared'
        }
    }
}

testSuites {
    vmeTest(CUnitTestSuiteSpec) {
        testing $.components.vme
    }
}
}

0 ответов

Другие вопросы по тегам