如何将gradle任务依赖项添加到CUnit插件生成的依赖项?

时间:2018-06-25 17:59:53

标签: build.gradle gradle-plugin gradle-dependencies cunit gradle-task

我跳进了一个项目的返回机器,发现自己正在使用'c'和'cunit-test-suite'gradle插件。这些似乎依赖于通过模型空间配置构建(我承认我对模型空间的理解仍然非常高)。

CUnit插件生成许多任务来激发测试。我的许多测试都取决于配置文件或生成的数据集。我想做一些我认为很简单的事情:在运行测试之前,将测试输入文件复制到build / test-results /目录中;测试运行的工作目录。为此,我希望CUnit installVmeTestCUnitExe任务依赖于我的复制任务。

我遇到的问题是根项目不知道生成的任务。在模型空间中似乎没有多少尝试引用CUnit生成的任务的尝试。我最终创建了一个定义规则的插件,该规则以编程方式创建一个Copy并通过Task的ModelMap设置依赖项:

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 个答案:

没有答案
相关问题