From 9180befd834a8c4af3613ed7b6b1bb0f673573d2 Mon Sep 17 00:00:00 2001 From: Svyatoslav Scherbina Date: Mon, 14 Oct 2019 13:14:51 +0300 Subject: [PATCH] Support testing multiple frameworks in single FrameworkTest --- backend.native/tests/build.gradle | 18 ++++++---- .../org/jetbrains/kotlin/FrameworkTest.kt | 33 ++++++++++++------- 2 files changed, 33 insertions(+), 18 deletions(-) diff --git a/backend.native/tests/build.gradle b/backend.native/tests/build.gradle index 2c0d080fc79..fb080741510 100644 --- a/backend.native/tests/build.gradle +++ b/backend.native/tests/build.gradle @@ -3657,9 +3657,11 @@ def targetName = target.name if (isAppleTarget(project)) { task testValuesFramework(type: FrameworkTest) { - frameworkName = 'Values' + final String frameworkName = 'Values' + testName = frameworkName + frameworkNames = [frameworkName] - final String dir = "$testOutputFramework/$frameworkName" + final String dir = "$testOutputFramework/$testName" final File lazyHeader = file("$dir/$target-lazy.h") doLast { @@ -3693,12 +3695,14 @@ if (isAppleTarget(project)) { } task testValuesGenericsFramework(type: FrameworkTest) { - frameworkName = 'ValuesGenerics' + final String frameworkName = 'ValuesGenerics' + testName = frameworkName + frameworkNames = [frameworkName] konanArtifacts { framework(frameworkName, targets: [ target ]) { srcDir 'framework/values' srcDir 'framework/values_generics' - baseDir "$testOutputFramework/$frameworkName" + baseDir "$testOutputFramework/$testName" if (!useCustomDist) { dependsOn ":${target}CrossDistRuntime", ':commonDistRuntime', ':distCompiler' @@ -3712,12 +3716,14 @@ if (isAppleTarget(project)) { } task testStdlibFramework(type: FrameworkTest) { - frameworkName = 'Stdlib' + final String frameworkName = 'Stdlib' + testName = frameworkName + frameworkNames = [frameworkName] fullBitcode = true konanArtifacts { framework(frameworkName, targets: [ targetName ]) { srcDir 'framework/stdlib' - baseDir "$testOutputFramework/$frameworkName" + baseDir "$testOutputFramework/$testName" if (!useCustomDist) { dependsOn ":${targetName}CrossDistRuntime", ':commonDistRuntime', ':distCompiler' diff --git a/build-tools/src/main/kotlin/org/jetbrains/kotlin/FrameworkTest.kt b/build-tools/src/main/kotlin/org/jetbrains/kotlin/FrameworkTest.kt index 1176603787d..be37ee9c957 100644 --- a/build-tools/src/main/kotlin/org/jetbrains/kotlin/FrameworkTest.kt +++ b/build-tools/src/main/kotlin/org/jetbrains/kotlin/FrameworkTest.kt @@ -19,14 +19,18 @@ import java.nio.file.Paths * according to a pattern "compileKonan${frameworkName}". * * @property swiftSources Swift-language test sources that use a given framework - * @property frameworkName a framework name + * @property testName test name + * @property frameworkNames names of frameworks */ open class FrameworkTest : DefaultTask() { @Input lateinit var swiftSources: List @Input - lateinit var frameworkName: String + lateinit var testName: String + + @Input + lateinit var frameworkNames: List @Input var fullBitcode: Boolean = false @@ -41,8 +45,11 @@ open class FrameworkTest : DefaultTask() { if (!(project.property("useCustomDist") as Boolean)) { setRootDependency("${target}CrossDist", "${target}CrossDistRuntime", "commonDistRuntime", "distCompiler") } - check(::frameworkName.isInitialized) { "Framework name should be set" } - dependsOn(project.tasks.getByName("compileKonan$frameworkName")) + check(::testName.isInitialized) { "Test name should be set" } + check(::frameworkNames.isInitialized) { "Framework names should be set" } + frameworkNames.forEach { frameworkName -> + dependsOn(project.tasks.getByName("compileKonan$frameworkName")) + } return this } @@ -50,21 +57,23 @@ open class FrameworkTest : DefaultTask() { @TaskAction fun run() { - val frameworkParentDirPath = "$testOutput/$frameworkName/${project.testTarget.name}" - val frameworkPath = "$frameworkParentDirPath/$frameworkName.framework" - val frameworkBinaryPath = "$frameworkPath/$frameworkName" - validateBitcodeEmbedding(frameworkBinaryPath) - codesign(project, frameworkPath) + val frameworkParentDirPath = "$testOutput/$testName/${project.testTarget.name}" + frameworkNames.forEach { frameworkName -> + val frameworkPath = "$frameworkParentDirPath/$frameworkName.framework" + val frameworkBinaryPath = "$frameworkPath/$frameworkName" + validateBitcodeEmbedding(frameworkBinaryPath) + codesign(project, frameworkPath) + } // create a test provider and get main entry point - val provider = Paths.get(testOutput, frameworkName, "provider.swift") + val provider = Paths.get(testOutput, testName, "provider.swift") FileWriter(provider.toFile()).use { it.write(""" |// THIS IS AUTOGENERATED FILE |// This method is invoked by the main routine to get a list of tests |func registerProvider() { | // TODO: assuming this naming for now - | ${frameworkName}Tests() + | ${testName}Tests() |} """.trimMargin()) } @@ -80,7 +89,7 @@ open class FrameworkTest : DefaultTask() { "-F", frameworkParentDirPath, "-Xcc", "-Werror" // To fail compilation on warnings in framework header. ) - val testExecutable = Paths.get(testOutput, frameworkName, "swiftTestExecutable") + val testExecutable = Paths.get(testOutput, testName, "swiftTestExecutable") compileSwift(project, project.testTarget, sources, options, testExecutable, fullBitcode) runTest(testExecutable)