Support testing multiple frameworks in single FrameworkTest
This commit is contained in:
committed by
SvyatoslavScherbina
parent
c19e21b491
commit
9180befd83
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user