From 2d01c4ca4cc02109892ebb10d84091e7ca66af77 Mon Sep 17 00:00:00 2001 From: Sergey Bogolepov Date: Fri, 9 Feb 2024 15:02:47 +0200 Subject: [PATCH] [Native][Tests] Extract more common code * modulemap files are required for Swift export integration tests * we are going to reuse legacy test infrastructure for now --- .../konan/test/blackbox/FrameworkTest.kt | 20 ++--------- .../test/blackbox/SwiftTypeCheckBaseTest.kt | 11 ++----- .../konan/test/blackbox/support/util/Clang.kt | 13 ++++++++ .../support/util/LegacySwiftTestInfra.kt | 33 +++++++++++++++++++ 4 files changed, 50 insertions(+), 27 deletions(-) create mode 100644 native/native.tests/tests/org/jetbrains/kotlin/konan/test/blackbox/support/util/LegacySwiftTestInfra.kt diff --git a/native/native.tests/tests/org/jetbrains/kotlin/konan/test/blackbox/FrameworkTest.kt b/native/native.tests/tests/org/jetbrains/kotlin/konan/test/blackbox/FrameworkTest.kt index c19d87a4eb4..cd4b38af731 100644 --- a/native/native.tests/tests/org/jetbrains/kotlin/konan/test/blackbox/FrameworkTest.kt +++ b/native/native.tests/tests/org/jetbrains/kotlin/konan/test/blackbox/FrameworkTest.kt @@ -15,6 +15,7 @@ import org.jetbrains.kotlin.konan.test.blackbox.support.runner.TestExecutable import org.jetbrains.kotlin.konan.test.blackbox.support.runner.TestRunCheck import org.jetbrains.kotlin.konan.test.blackbox.support.runner.TestRunChecks import org.jetbrains.kotlin.konan.test.blackbox.support.settings.* +import org.jetbrains.kotlin.konan.test.blackbox.support.util.createTestProvider import org.jetbrains.kotlin.native.executors.runProcess import org.jetbrains.kotlin.test.KtAssert.fail import org.jetbrains.kotlin.test.services.JUnit5Assertions.assertTrue @@ -453,24 +454,7 @@ abstract class FrameworkTestBase : AbstractNativeSimpleTest() { swiftExtraOpts: List, ): TestCompilationResult.Success { // create a test provider and get main entry point - val provider = buildDir.resolve("provider.swift") - FileWriter(provider).use { writer -> - val providers = testSources - .map { file -> - file.name.toString().removeSuffix(".swift").replaceFirstChar { it.uppercase() } - } - .map { "${it}Tests" } - - writer.write( - """ - |// THIS IS AUTOGENERATED FILE - |// This method is invoked by the main routine to get a list of tests - |func registerProviders() { - | ${providers.joinToString("\n ") { "$it()" }} - |} - """.trimMargin() - ) - } + val provider = createTestProvider(buildDir, testSources) val frameworkOpts = listOf( "-Xlinker", "-rpath", "-Xlinker", "@executable_path/Frameworks", "-Xlinker", "-rpath", "-Xlinker", buildDir.absolutePath, diff --git a/native/native.tests/tests/org/jetbrains/kotlin/konan/test/blackbox/SwiftTypeCheckBaseTest.kt b/native/native.tests/tests/org/jetbrains/kotlin/konan/test/blackbox/SwiftTypeCheckBaseTest.kt index 2db32f96bd2..ea0a36df528 100644 --- a/native/native.tests/tests/org/jetbrains/kotlin/konan/test/blackbox/SwiftTypeCheckBaseTest.kt +++ b/native/native.tests/tests/org/jetbrains/kotlin/konan/test/blackbox/SwiftTypeCheckBaseTest.kt @@ -10,6 +10,7 @@ import org.jetbrains.kotlin.konan.target.AppleConfigurables import org.jetbrains.kotlin.konan.target.withOSVersion import org.jetbrains.kotlin.konan.test.blackbox.support.compilation.invokeSwiftC import org.jetbrains.kotlin.konan.test.blackbox.support.settings.configurables +import org.jetbrains.kotlin.konan.test.blackbox.support.util.createModuleMap import org.jetbrains.kotlin.utils.fileUtils.withReplacedExtensionOrNull import org.junit.jupiter.api.Assertions.assertEquals import org.junit.jupiter.api.Assumptions @@ -53,15 +54,7 @@ abstract class SwiftTypeCheckBaseTest : AbstractNativeSimpleTest() { val configs = testRunSettings.configurables as AppleConfigurables val swiftTarget = configs.targetTriple.withOSVersion(configs.osVersionMin).toString() - val bridgeModuleFile = buildDir.resolve("module.modulemap").apply { - writeText(""" - module KotlinBridges { - umbrella header "${cHeader.absolutePath}" - export * - } - """.trimIndent() - ) - } + val bridgeModuleFile = createModuleMap(buildDir, cHeader) val args = listOf( "-typecheck", swiftFile.absolutePath, diff --git a/native/native.tests/tests/org/jetbrains/kotlin/konan/test/blackbox/support/util/Clang.kt b/native/native.tests/tests/org/jetbrains/kotlin/konan/test/blackbox/support/util/Clang.kt index f2166045576..da47570e3f0 100644 --- a/native/native.tests/tests/org/jetbrains/kotlin/konan/test/blackbox/support/util/Clang.kt +++ b/native/native.tests/tests/org/jetbrains/kotlin/konan/test/blackbox/support/util/Clang.kt @@ -9,6 +9,7 @@ import org.jetbrains.kotlin.cli.common.ExitCode import org.jetbrains.kotlin.konan.target.ClangArgs import org.jetbrains.kotlin.konan.target.Family import org.jetbrains.kotlin.konan.test.blackbox.AbstractNativeSimpleTest +import org.jetbrains.kotlin.konan.test.blackbox.buildDir import org.jetbrains.kotlin.konan.test.blackbox.support.LoggedData import org.jetbrains.kotlin.konan.test.blackbox.support.compilation.TestCompilationArtifact import org.jetbrains.kotlin.konan.test.blackbox.support.compilation.TestCompilationResult @@ -116,4 +117,16 @@ internal class ClangParameters( appendLine("- $it") } } +} + +internal fun createModuleMap(directory: File, umbrellaHeader: File): File { + return directory.resolve("module.modulemap").apply { + writeText(""" + module KotlinBridges { + umbrella header "${umbrellaHeader.absolutePath}" + export * + } + """.trimIndent() + ) + } } \ No newline at end of file diff --git a/native/native.tests/tests/org/jetbrains/kotlin/konan/test/blackbox/support/util/LegacySwiftTestInfra.kt b/native/native.tests/tests/org/jetbrains/kotlin/konan/test/blackbox/support/util/LegacySwiftTestInfra.kt new file mode 100644 index 00000000000..e533f572ad8 --- /dev/null +++ b/native/native.tests/tests/org/jetbrains/kotlin/konan/test/blackbox/support/util/LegacySwiftTestInfra.kt @@ -0,0 +1,33 @@ +/* + * Copyright 2010-2024 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. + */ + +package org.jetbrains.kotlin.konan.test.blackbox.support.util + +import org.jetbrains.kotlin.konan.test.blackbox.buildDir +import java.io.File +import java.io.FileWriter + +internal fun createTestProvider(parentDirectory: File, testSources: List): File { + // create a test provider and get main entry point + val provider = parentDirectory.resolve("provider.swift") + FileWriter(provider).use { writer -> + val providers = testSources + .map { file -> + file.name.toString().removeSuffix(".swift").replaceFirstChar { it.uppercase() } + } + .map { "${it}Tests" } + + writer.write( + """ + |// THIS IS AUTOGENERATED FILE + |// This method is invoked by the main routine to get a list of tests + |func registerProviders() { + | ${providers.joinToString("\n ") { "$it()" }} + |} + """.trimMargin() + ) + } + return provider +} \ No newline at end of file