Support testing multiple frameworks in single FrameworkTest

This commit is contained in:
Svyatoslav Scherbina
2019-10-14 13:14:51 +03:00
committed by SvyatoslavScherbina
parent c19e21b491
commit 9180befd83
2 changed files with 33 additions and 18 deletions
+12 -6
View File
@@ -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'
@@ -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<String>
@Input
lateinit var frameworkName: String
lateinit var testName: String
@Input
lateinit var frameworkNames: List<String>
@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)