diff --git a/native/native.tests/testData/CInterop/executable/KT-63048/library.def b/native/native.tests/testData/CInterop/executable/KT-63048/library.def new file mode 100644 index 00000000000..7935e0cbdcc --- /dev/null +++ b/native/native.tests/testData/CInterop/executable/KT-63048/library.def @@ -0,0 +1,2 @@ +language = Objective-C +headers = library.h diff --git a/native/native.tests/testData/CInterop/KT-63048/library.def b/native/native.tests/testData/CInterop/executable/KT-63048/library.h similarity index 79% rename from native/native.tests/testData/CInterop/KT-63048/library.def rename to native/native.tests/testData/CInterop/executable/KT-63048/library.h index 95736ce3bd7..802879c6d1d 100644 --- a/native/native.tests/testData/CInterop/KT-63048/library.def +++ b/native/native.tests/testData/CInterop/executable/KT-63048/library.h @@ -1,7 +1,3 @@ -depends = Foundation -language = Objective-C - ---- #import "Foundation/NSString.h" #import "Foundation/NSObject.h" diff --git a/native/native.tests/testData/CInterop/executable/KT-63048/library.m b/native/native.tests/testData/CInterop/executable/KT-63048/library.m new file mode 100644 index 00000000000..1a7a6a46cf5 --- /dev/null +++ b/native/native.tests/testData/CInterop/executable/KT-63048/library.m @@ -0,0 +1,6 @@ +#import "library.h" + +@implementation WithClassProperty : NSObject +-(instancetype) init {} ++ (NSString *) stringProperty { return @"153"; } +@end diff --git a/native/native.tests/testData/CInterop/KT-63048/usage.kt b/native/native.tests/testData/CInterop/executable/KT-63048/usage.kt similarity index 65% rename from native/native.tests/testData/CInterop/KT-63048/usage.kt rename to native/native.tests/testData/CInterop/executable/KT-63048/usage.kt index 7e40eb3559b..59593aba963 100644 --- a/native/native.tests/testData/CInterop/KT-63048/usage.kt +++ b/native/native.tests/testData/CInterop/executable/KT-63048/usage.kt @@ -10,6 +10,13 @@ class Impl : WithClassProperty() { } } +@ObjCName("KotlinImplWithoutCompanionPropertyOverride") +class ImplWithoutOverride : WithClassProperty() { + companion object : WithClassPropertyMeta() { + } +} + fun main() { assertEquals("42", Impl.stringProperty()) + assertEquals("153", ImplWithoutOverride.stringProperty()) } \ No newline at end of file diff --git a/native/native.tests/tests-gen/org/jetbrains/kotlin/konan/test/blackbox/ClassicNativeCInteropExecutableTest.java b/native/native.tests/tests-gen/org/jetbrains/kotlin/konan/test/blackbox/ClassicNativeCInteropExecutableTest.java new file mode 100644 index 00000000000..c691cdc3acd --- /dev/null +++ b/native/native.tests/tests-gen/org/jetbrains/kotlin/konan/test/blackbox/ClassicNativeCInteropExecutableTest.java @@ -0,0 +1,32 @@ +/* + * Copyright 2010-2023 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; + +import com.intellij.testFramework.TestDataPath; +import org.jetbrains.kotlin.test.util.KtTestUtil; +import org.jetbrains.kotlin.test.TestMetadata; +import org.junit.jupiter.api.Nested; +import org.junit.jupiter.api.Test; + +import java.io.File; +import java.util.regex.Pattern; + +/** This class is generated by {@link org.jetbrains.kotlin.generators.tests.GenerateNativeTestsKt}. DO NOT MODIFY MANUALLY */ +@SuppressWarnings("all") +@TestMetadata("native/native.tests/testData/CInterop/executable") +@TestDataPath("$PROJECT_ROOT") +public class ClassicNativeCInteropExecutableTest extends AbstractNativeCInteropExecutableTest { + @Test + public void testAllFilesPresentInExecutable() throws Exception { + KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("native/native.tests/testData/CInterop/executable"), Pattern.compile("^([^_](.+))$"), null, false); + } + + @Test + @TestMetadata("KT-63048") + public void testKT_63048() throws Exception { + runTest("native/native.tests/testData/CInterop/executable/KT-63048/"); + } +} diff --git a/native/native.tests/tests-gen/org/jetbrains/kotlin/konan/test/blackbox/FirNativeCInteropExecutableTest.java b/native/native.tests/tests-gen/org/jetbrains/kotlin/konan/test/blackbox/FirNativeCInteropExecutableTest.java new file mode 100644 index 00000000000..159d446577c --- /dev/null +++ b/native/native.tests/tests-gen/org/jetbrains/kotlin/konan/test/blackbox/FirNativeCInteropExecutableTest.java @@ -0,0 +1,36 @@ +/* + * Copyright 2010-2023 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; + +import com.intellij.testFramework.TestDataPath; +import org.jetbrains.kotlin.test.util.KtTestUtil; +import org.junit.jupiter.api.Tag; +import org.jetbrains.kotlin.konan.test.blackbox.support.group.FirPipeline; +import org.jetbrains.kotlin.test.TestMetadata; +import org.junit.jupiter.api.Nested; +import org.junit.jupiter.api.Test; + +import java.io.File; +import java.util.regex.Pattern; + +/** This class is generated by {@link org.jetbrains.kotlin.generators.tests.GenerateNativeTestsKt}. DO NOT MODIFY MANUALLY */ +@SuppressWarnings("all") +@TestMetadata("native/native.tests/testData/CInterop/executable") +@TestDataPath("$PROJECT_ROOT") +@Tag("frontend-fir") +@FirPipeline() +public class FirNativeCInteropExecutableTest extends AbstractNativeCInteropExecutableTest { + @Test + public void testAllFilesPresentInExecutable() throws Exception { + KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("native/native.tests/testData/CInterop/executable"), Pattern.compile("^([^_](.+))$"), null, false); + } + + @Test + @TestMetadata("KT-63048") + public void testKT_63048() throws Exception { + runTest("native/native.tests/testData/CInterop/executable/KT-63048/"); + } +} diff --git a/native/native.tests/tests/org/jetbrains/kotlin/generators/tests/GenerateNativeTests.kt b/native/native.tests/tests/org/jetbrains/kotlin/generators/tests/GenerateNativeTests.kt index 8ea7180af9f..fbe75753a60 100644 --- a/native/native.tests/tests/org/jetbrains/kotlin/generators/tests/GenerateNativeTests.kt +++ b/native/native.tests/tests/org/jetbrains/kotlin/generators/tests/GenerateNativeTests.kt @@ -183,6 +183,20 @@ fun main() { ) { model("CInterop/experimental/cases", pattern = "^([^_](.+))$", recursive = false) } + + testClass( + suiteTestClassName = "ClassicNativeCInteropExecutableTest", + ) { + model("CInterop/executable", pattern = "^([^_](.+))$", recursive = false) + } + testClass( + suiteTestClassName = "FirNativeCInteropExecutableTest", + annotations = listOf( + *frontendFir() + ), + ) { + model("CInterop/executable", pattern = "^([^_](.+))$", recursive = false) + } } // ObjCExport tests. diff --git a/native/native.tests/tests/org/jetbrains/kotlin/konan/test/blackbox/CInteropCheckersTest.kt b/native/native.tests/tests/org/jetbrains/kotlin/konan/test/blackbox/AbstractNativeCInteropExecutableTest.kt similarity index 64% rename from native/native.tests/tests/org/jetbrains/kotlin/konan/test/blackbox/CInteropCheckersTest.kt rename to native/native.tests/tests/org/jetbrains/kotlin/konan/test/blackbox/AbstractNativeCInteropExecutableTest.kt index d4d65debca4..e24aab7b9dd 100644 --- a/native/native.tests/tests/org/jetbrains/kotlin/konan/test/blackbox/CInteropCheckersTest.kt +++ b/native/native.tests/tests/org/jetbrains/kotlin/konan/test/blackbox/AbstractNativeCInteropExecutableTest.kt @@ -5,54 +5,48 @@ package org.jetbrains.kotlin.konan.test.blackbox -import com.intellij.testFramework.TestDataPath +import com.intellij.testFramework.TestDataFile import org.jetbrains.kotlin.konan.test.blackbox.support.ClassLevelProperty import org.jetbrains.kotlin.konan.test.blackbox.support.EnforcedProperty import org.jetbrains.kotlin.konan.test.blackbox.support.TestCase import org.jetbrains.kotlin.konan.test.blackbox.support.TestCompilerArgs import org.jetbrains.kotlin.konan.test.blackbox.support.TestKind import org.jetbrains.kotlin.konan.test.blackbox.support.compilation.TestCompilationResult.Companion.assertSuccess -import org.jetbrains.kotlin.konan.test.blackbox.support.group.FirPipeline +import org.jetbrains.kotlin.konan.test.blackbox.support.runner.TestExecutable import org.jetbrains.kotlin.konan.test.blackbox.support.settings.PipelineType -import org.jetbrains.kotlin.test.TestMetadata -import org.junit.jupiter.api.Tag -import org.junit.jupiter.api.Test import java.io.File -@TestDataPath("\$PROJECT_ROOT") @EnforcedProperty(ClassLevelProperty.COMPILER_OUTPUT_INTERCEPTOR, "NONE") -abstract class BaseCInteropCheckersTest : AbstractNativeSimpleTest() { - @Test - @TestMetadata(TEST_DATA_DIR) - fun testBuilding() { - val defFile = File(TEST_DATA_DIR, DEF_FILE) +abstract class AbstractNativeCInteropExecutableTest : AbstractNativeSimpleTest() { + + protected fun runTest(@TestDataFile testDataDir: String) { + val defFile = File(testDataDir, "library.def") muteCInteropTestIfNecessary(defFile, targets.testTarget) + val mFile = File(testDataDir, "library.m") + val ktFile = File(testDataDir, "usage.kt") + val library = cinteropToLibrary( targets = targets, defFile = defFile, outputDir = buildDir, - freeCompilerArgs = TestCompilerArgs.EMPTY + freeCompilerArgs = TestCompilerArgs( + listOf( + "-compiler-option", "-I$testDataDir", + "-Xcompile-source", mFile.absolutePath, + "-Xsource-compiler-option", "-DNS_FORMAT_ARGUMENT(A)=", + ) + ) ).assertSuccess().resultingArtifact val testCase = generateTestCaseWithSingleFile( - sourceFile = File(TEST_DATA_DIR, KT_FILE), + sourceFile = ktFile, freeCompilerArgs = TestCompilerArgs(testRunSettings.get().compilerFlags), testKind = TestKind.STANDALONE_NO_TR, extras = TestCase.NoTestRunnerExtras("main") ) val compilationResult = compileToExecutable(testCase, library.asLibraryDependency()).assertSuccess() - } - - companion object { - const val TEST_DATA_DIR = "native/native.tests/testData/CInterop/KT-63048" - const val DEF_FILE = "library.def" - const val KT_FILE = "usage.kt" + val testExecutable = TestExecutable.fromCompilationResult(testCase, compilationResult) + runExecutableAndVerify(testCase, testExecutable) } } - -class CInteropCheckersTest : BaseCInteropCheckersTest() - -@FirPipeline -@Tag("frontend-fir") -class FirCInteropCheckersTest : BaseCInteropCheckersTest()