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)) {
|
if (isAppleTarget(project)) {
|
||||||
task testValuesFramework(type: FrameworkTest) {
|
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")
|
final File lazyHeader = file("$dir/$target-lazy.h")
|
||||||
|
|
||||||
doLast {
|
doLast {
|
||||||
@@ -3693,12 +3695,14 @@ if (isAppleTarget(project)) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
task testValuesGenericsFramework(type: FrameworkTest) {
|
task testValuesGenericsFramework(type: FrameworkTest) {
|
||||||
frameworkName = 'ValuesGenerics'
|
final String frameworkName = 'ValuesGenerics'
|
||||||
|
testName = frameworkName
|
||||||
|
frameworkNames = [frameworkName]
|
||||||
konanArtifacts {
|
konanArtifacts {
|
||||||
framework(frameworkName, targets: [ target ]) {
|
framework(frameworkName, targets: [ target ]) {
|
||||||
srcDir 'framework/values'
|
srcDir 'framework/values'
|
||||||
srcDir 'framework/values_generics'
|
srcDir 'framework/values_generics'
|
||||||
baseDir "$testOutputFramework/$frameworkName"
|
baseDir "$testOutputFramework/$testName"
|
||||||
|
|
||||||
if (!useCustomDist) {
|
if (!useCustomDist) {
|
||||||
dependsOn ":${target}CrossDistRuntime", ':commonDistRuntime', ':distCompiler'
|
dependsOn ":${target}CrossDistRuntime", ':commonDistRuntime', ':distCompiler'
|
||||||
@@ -3712,12 +3716,14 @@ if (isAppleTarget(project)) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
task testStdlibFramework(type: FrameworkTest) {
|
task testStdlibFramework(type: FrameworkTest) {
|
||||||
frameworkName = 'Stdlib'
|
final String frameworkName = 'Stdlib'
|
||||||
|
testName = frameworkName
|
||||||
|
frameworkNames = [frameworkName]
|
||||||
fullBitcode = true
|
fullBitcode = true
|
||||||
konanArtifacts {
|
konanArtifacts {
|
||||||
framework(frameworkName, targets: [ targetName ]) {
|
framework(frameworkName, targets: [ targetName ]) {
|
||||||
srcDir 'framework/stdlib'
|
srcDir 'framework/stdlib'
|
||||||
baseDir "$testOutputFramework/$frameworkName"
|
baseDir "$testOutputFramework/$testName"
|
||||||
|
|
||||||
if (!useCustomDist) {
|
if (!useCustomDist) {
|
||||||
dependsOn ":${targetName}CrossDistRuntime", ':commonDistRuntime', ':distCompiler'
|
dependsOn ":${targetName}CrossDistRuntime", ':commonDistRuntime', ':distCompiler'
|
||||||
|
|||||||
@@ -19,14 +19,18 @@ import java.nio.file.Paths
|
|||||||
* according to a pattern "compileKonan${frameworkName}".
|
* according to a pattern "compileKonan${frameworkName}".
|
||||||
*
|
*
|
||||||
* @property swiftSources Swift-language test sources that use a given framework
|
* @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() {
|
open class FrameworkTest : DefaultTask() {
|
||||||
@Input
|
@Input
|
||||||
lateinit var swiftSources: List<String>
|
lateinit var swiftSources: List<String>
|
||||||
|
|
||||||
@Input
|
@Input
|
||||||
lateinit var frameworkName: String
|
lateinit var testName: String
|
||||||
|
|
||||||
|
@Input
|
||||||
|
lateinit var frameworkNames: List<String>
|
||||||
|
|
||||||
@Input
|
@Input
|
||||||
var fullBitcode: Boolean = false
|
var fullBitcode: Boolean = false
|
||||||
@@ -41,8 +45,11 @@ open class FrameworkTest : DefaultTask() {
|
|||||||
if (!(project.property("useCustomDist") as Boolean)) {
|
if (!(project.property("useCustomDist") as Boolean)) {
|
||||||
setRootDependency("${target}CrossDist", "${target}CrossDistRuntime", "commonDistRuntime", "distCompiler")
|
setRootDependency("${target}CrossDist", "${target}CrossDistRuntime", "commonDistRuntime", "distCompiler")
|
||||||
}
|
}
|
||||||
check(::frameworkName.isInitialized) { "Framework name should be set" }
|
check(::testName.isInitialized) { "Test name should be set" }
|
||||||
dependsOn(project.tasks.getByName("compileKonan$frameworkName"))
|
check(::frameworkNames.isInitialized) { "Framework names should be set" }
|
||||||
|
frameworkNames.forEach { frameworkName ->
|
||||||
|
dependsOn(project.tasks.getByName("compileKonan$frameworkName"))
|
||||||
|
}
|
||||||
return this
|
return this
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -50,21 +57,23 @@ open class FrameworkTest : DefaultTask() {
|
|||||||
|
|
||||||
@TaskAction
|
@TaskAction
|
||||||
fun run() {
|
fun run() {
|
||||||
val frameworkParentDirPath = "$testOutput/$frameworkName/${project.testTarget.name}"
|
val frameworkParentDirPath = "$testOutput/$testName/${project.testTarget.name}"
|
||||||
val frameworkPath = "$frameworkParentDirPath/$frameworkName.framework"
|
frameworkNames.forEach { frameworkName ->
|
||||||
val frameworkBinaryPath = "$frameworkPath/$frameworkName"
|
val frameworkPath = "$frameworkParentDirPath/$frameworkName.framework"
|
||||||
validateBitcodeEmbedding(frameworkBinaryPath)
|
val frameworkBinaryPath = "$frameworkPath/$frameworkName"
|
||||||
codesign(project, frameworkPath)
|
validateBitcodeEmbedding(frameworkBinaryPath)
|
||||||
|
codesign(project, frameworkPath)
|
||||||
|
}
|
||||||
|
|
||||||
// create a test provider and get main entry point
|
// 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 {
|
FileWriter(provider.toFile()).use {
|
||||||
it.write("""
|
it.write("""
|
||||||
|// THIS IS AUTOGENERATED FILE
|
|// THIS IS AUTOGENERATED FILE
|
||||||
|// This method is invoked by the main routine to get a list of tests
|
|// This method is invoked by the main routine to get a list of tests
|
||||||
|func registerProvider() {
|
|func registerProvider() {
|
||||||
| // TODO: assuming this naming for now
|
| // TODO: assuming this naming for now
|
||||||
| ${frameworkName}Tests()
|
| ${testName}Tests()
|
||||||
|}
|
|}
|
||||||
""".trimMargin())
|
""".trimMargin())
|
||||||
}
|
}
|
||||||
@@ -80,7 +89,7 @@ open class FrameworkTest : DefaultTask() {
|
|||||||
"-F", frameworkParentDirPath,
|
"-F", frameworkParentDirPath,
|
||||||
"-Xcc", "-Werror" // To fail compilation on warnings in framework header.
|
"-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)
|
compileSwift(project, project.testTarget, sources, options, testExecutable, fullBitcode)
|
||||||
|
|
||||||
runTest(testExecutable)
|
runTest(testExecutable)
|
||||||
|
|||||||
Reference in New Issue
Block a user