From 4ffb43c5bdee749b12d44b936859e59dde5f31a0 Mon Sep 17 00:00:00 2001 From: Sergey Bogolepov Date: Thu, 12 Jan 2023 13:29:58 +0200 Subject: [PATCH] [K/N] Cover `objcClassesIncludingCategories` with smoke tests --- .../cases/smoke0/contents.gold.txt | 36 ++++++++++++ .../cases/smoke0/dependency.def | 3 + .../cases/smoke1/contents.gold.txt | 40 +++++++++++++ .../cases/smoke1/dependency.def | 3 + .../cases/smoke2/contents.gold.txt | 32 +++++++++++ .../cases/smoke2/dependency.def | 3 + .../cases/smoke3/contents.gold.txt | 23 ++++++++ .../cases/smoke3/dependency.def | 2 + .../cases/smoke4/contents.gold.txt | 25 +++++++++ .../cases/smoke4/dependency.def | 3 + .../Headers/dependency1.h | 24 ++++++++ .../Modules/module.modulemap | 6 ++ .../Headers/dependency2.h | 7 +++ .../Modules/module.modulemap | 6 ++ .../Headers/dependency3.h | 8 +++ .../Modules/module.modulemap | 6 ++ ...InteropIncludeCategoriesTestGenerated.java | 56 +++++++++++++++++++ .../generators/tests/GenerateNativeTests.kt | 5 ++ .../AbstractNativeCInteropTest.kt | 8 +++ 19 files changed, 296 insertions(+) create mode 100644 native/native.tests/testData/CInterop/frameworkIncludeCategories/cases/smoke0/contents.gold.txt create mode 100644 native/native.tests/testData/CInterop/frameworkIncludeCategories/cases/smoke0/dependency.def create mode 100644 native/native.tests/testData/CInterop/frameworkIncludeCategories/cases/smoke1/contents.gold.txt create mode 100644 native/native.tests/testData/CInterop/frameworkIncludeCategories/cases/smoke1/dependency.def create mode 100644 native/native.tests/testData/CInterop/frameworkIncludeCategories/cases/smoke2/contents.gold.txt create mode 100644 native/native.tests/testData/CInterop/frameworkIncludeCategories/cases/smoke2/dependency.def create mode 100644 native/native.tests/testData/CInterop/frameworkIncludeCategories/cases/smoke3/contents.gold.txt create mode 100644 native/native.tests/testData/CInterop/frameworkIncludeCategories/cases/smoke3/dependency.def create mode 100644 native/native.tests/testData/CInterop/frameworkIncludeCategories/cases/smoke4/contents.gold.txt create mode 100644 native/native.tests/testData/CInterop/frameworkIncludeCategories/cases/smoke4/dependency.def create mode 100644 native/native.tests/testData/CInterop/frameworkIncludeCategories/dependency1.framework/Headers/dependency1.h create mode 100644 native/native.tests/testData/CInterop/frameworkIncludeCategories/dependency1.framework/Modules/module.modulemap create mode 100644 native/native.tests/testData/CInterop/frameworkIncludeCategories/dependency2.framework/Headers/dependency2.h create mode 100644 native/native.tests/testData/CInterop/frameworkIncludeCategories/dependency2.framework/Modules/module.modulemap create mode 100644 native/native.tests/testData/CInterop/frameworkIncludeCategories/dependency3.framework/Headers/dependency3.h create mode 100644 native/native.tests/testData/CInterop/frameworkIncludeCategories/dependency3.framework/Modules/module.modulemap create mode 100644 native/native.tests/tests-gen/org/jetbrains/kotlin/konan/blackboxtest/CInteropIncludeCategoriesTestGenerated.java diff --git a/native/native.tests/testData/CInterop/frameworkIncludeCategories/cases/smoke0/contents.gold.txt b/native/native.tests/testData/CInterop/frameworkIncludeCategories/cases/smoke0/contents.gold.txt new file mode 100644 index 00000000000..57495e546e3 --- /dev/null +++ b/native/native.tests/testData/CInterop/frameworkIncludeCategories/cases/smoke0/contents.gold.txt @@ -0,0 +1,36 @@ + +package dependency { + + @ExternalObjCClass open class MyClass : ObjCObjectBase { + protected constructor() + @ObjCMethod(encoding = "v16@0:8", isStret = false, selector = "instanceMethod") open external fun instanceMethod() + companion object : MyClassMeta, ObjCClassOf + } + + @ExternalObjCClass open class MyClassMeta : ObjCObjectBaseMeta { + protected constructor() + @ObjCMethod(encoding = "v16@0:8", isStret = false, selector = "classMethod") open external fun classMethod() + } + + @ExternalObjCClass open class SkipClass : ObjCObjectBase { + protected constructor() + @ObjCMethod(encoding = "v16@0:8", isStret = false, selector = "instanceMethod") open external fun instanceMethod() + companion object : SkipClassMeta, ObjCClassOf + } + + @ExternalObjCClass open class SkipClassMeta : ObjCObjectBaseMeta { + protected constructor() + @ObjCMethod(encoding = "v16@0:8", isStret = false, selector = "classMethod") open external fun classMethod() + } + +} + +package dependency { + @ObjCMethod(encoding = "v16@0:8", isStret = false, selector = "categoryClassMethod") external fun MyClassMeta.categoryClassMethod() + @ObjCMethod(encoding = "v16@0:8", isStret = false, selector = "categoryClassMethod") external fun SkipClassMeta.categoryClassMethod() + @ObjCMethod(encoding = "v16@0:8", isStret = false, selector = "categoryClassMethod2") external fun MyClassMeta.categoryClassMethod2() + @ObjCMethod(encoding = "v16@0:8", isStret = false, selector = "categoryInstanceMethod") external fun MyClass.categoryInstanceMethod() + @ObjCMethod(encoding = "v16@0:8", isStret = false, selector = "categoryInstanceMethod") external fun SkipClass.categoryInstanceMethod() + @ObjCMethod(encoding = "v16@0:8", isStret = false, selector = "categoryInstanceMethod2") external fun MyClass.categoryInstanceMethod2() +} + diff --git a/native/native.tests/testData/CInterop/frameworkIncludeCategories/cases/smoke0/dependency.def b/native/native.tests/testData/CInterop/frameworkIncludeCategories/cases/smoke0/dependency.def new file mode 100644 index 00000000000..7748f1ca1f7 --- /dev/null +++ b/native/native.tests/testData/CInterop/frameworkIncludeCategories/cases/smoke0/dependency.def @@ -0,0 +1,3 @@ +# Check that we don't add category contents to classes by default +language = Objective-C +modules=dependency1 diff --git a/native/native.tests/testData/CInterop/frameworkIncludeCategories/cases/smoke1/contents.gold.txt b/native/native.tests/testData/CInterop/frameworkIncludeCategories/cases/smoke1/contents.gold.txt new file mode 100644 index 00000000000..7bd5862cf96 --- /dev/null +++ b/native/native.tests/testData/CInterop/frameworkIncludeCategories/cases/smoke1/contents.gold.txt @@ -0,0 +1,40 @@ + +package dependency { + + @ExternalObjCClass open class MyClass : ObjCObjectBase { + protected constructor() + @ObjCMethod(encoding = "v16@0:8", isStret = false, selector = "categoryInstanceMethod") open external fun categoryInstanceMethod() + @ObjCMethod(encoding = "v16@0:8", isStret = false, selector = "categoryInstanceMethod2") open external fun categoryInstanceMethod2() + @ObjCMethod(encoding = "v16@0:8", isStret = false, selector = "instanceMethod") open external fun instanceMethod() + companion object : MyClassMeta, ObjCClassOf + } + + @ExternalObjCClass open class MyClassMeta : ObjCObjectBaseMeta { + protected constructor() + @ObjCMethod(encoding = "v16@0:8", isStret = false, selector = "categoryClassMethod") open external fun categoryClassMethod() + @ObjCMethod(encoding = "v16@0:8", isStret = false, selector = "categoryClassMethod2") open external fun categoryClassMethod2() + @ObjCMethod(encoding = "v16@0:8", isStret = false, selector = "classMethod") open external fun classMethod() + } + + @ExternalObjCClass open class SkipClass : ObjCObjectBase { + protected constructor() + @ObjCMethod(encoding = "v16@0:8", isStret = false, selector = "instanceMethod") open external fun instanceMethod() + companion object : SkipClassMeta, ObjCClassOf + } + + @ExternalObjCClass open class SkipClassMeta : ObjCObjectBaseMeta { + protected constructor() + @ObjCMethod(encoding = "v16@0:8", isStret = false, selector = "classMethod") open external fun classMethod() + } + +} + +package dependency { + @ObjCMethod(encoding = "v16@0:8", isStret = false, selector = "categoryClassMethod") @Deprecated(level = DeprecationLevel.WARNING, message = "Use class method instead", replaceWith = ReplaceWith(imports = {})) external fun MyClassMeta.categoryClassMethod() + @ObjCMethod(encoding = "v16@0:8", isStret = false, selector = "categoryClassMethod") external fun SkipClassMeta.categoryClassMethod() + @ObjCMethod(encoding = "v16@0:8", isStret = false, selector = "categoryClassMethod2") @Deprecated(level = DeprecationLevel.WARNING, message = "Use class method instead", replaceWith = ReplaceWith(imports = {})) external fun MyClassMeta.categoryClassMethod2() + @ObjCMethod(encoding = "v16@0:8", isStret = false, selector = "categoryInstanceMethod") @Deprecated(level = DeprecationLevel.WARNING, message = "Use instance method instead", replaceWith = ReplaceWith(imports = {})) external fun MyClass.categoryInstanceMethod() + @ObjCMethod(encoding = "v16@0:8", isStret = false, selector = "categoryInstanceMethod") external fun SkipClass.categoryInstanceMethod() + @ObjCMethod(encoding = "v16@0:8", isStret = false, selector = "categoryInstanceMethod2") @Deprecated(level = DeprecationLevel.WARNING, message = "Use instance method instead", replaceWith = ReplaceWith(imports = {})) external fun MyClass.categoryInstanceMethod2() +} + diff --git a/native/native.tests/testData/CInterop/frameworkIncludeCategories/cases/smoke1/dependency.def b/native/native.tests/testData/CInterop/frameworkIncludeCategories/cases/smoke1/dependency.def new file mode 100644 index 00000000000..11e431bb47c --- /dev/null +++ b/native/native.tests/testData/CInterop/frameworkIncludeCategories/cases/smoke1/dependency.def @@ -0,0 +1,3 @@ +language = Objective-C +modules=dependency1 +objcClassesIncludingCategories = MyClass diff --git a/native/native.tests/testData/CInterop/frameworkIncludeCategories/cases/smoke2/contents.gold.txt b/native/native.tests/testData/CInterop/frameworkIncludeCategories/cases/smoke2/contents.gold.txt new file mode 100644 index 00000000000..9f662ec19b7 --- /dev/null +++ b/native/native.tests/testData/CInterop/frameworkIncludeCategories/cases/smoke2/contents.gold.txt @@ -0,0 +1,32 @@ + +package dependency { + + @ExternalObjCClass open class MyClass : ObjCObjectBase { + protected constructor() + var categoryProperty: Float + @ObjCMethod(encoding = "f16@0:8", isStret = false, selector = "categoryProperty") get + @ObjCMethod(encoding = "v20@0:8f16", isStret = false, selector = "setCategoryProperty:") set + var instanceProperty: Float + @ObjCMethod(encoding = "f16@0:8", isStret = false, selector = "instanceProperty") get + @ObjCMethod(encoding = "v20@0:8f16", isStret = false, selector = "setInstanceProperty:") set + @ObjCMethod(encoding = "f16@0:8", isStret = false, selector = "categoryProperty") open external fun categoryProperty(): Float + @ObjCMethod(encoding = "f16@0:8", isStret = false, selector = "instanceProperty") open external fun instanceProperty(): Float + @ObjCMethod(encoding = "v20@0:8f16", isStret = false, selector = "setCategoryProperty:") open external fun setCategoryProperty(categoryProperty: Float) + @ObjCMethod(encoding = "v20@0:8f16", isStret = false, selector = "setInstanceProperty:") open external fun setInstanceProperty(instanceProperty: Float) + companion object : MyClassMeta, ObjCClassOf + } + + @ExternalObjCClass open class MyClassMeta : ObjCObjectBaseMeta { + protected constructor() + } + +} + +package dependency { + @Deprecated(level = DeprecationLevel.WARNING, message = "Use instance property instead", replaceWith = ReplaceWith(imports = {})) var MyClass.categoryProperty: Float + @ObjCMethod(encoding = "f16@0:8", isStret = false, selector = "categoryProperty") @Deprecated(level = DeprecationLevel.WARNING, message = "Use instance method instead", replaceWith = ReplaceWith(imports = {})) get + @ObjCMethod(encoding = "v20@0:8f16", isStret = false, selector = "setCategoryProperty:") @Deprecated(level = DeprecationLevel.WARNING, message = "Use instance method instead", replaceWith = ReplaceWith(imports = {})) set + @ObjCMethod(encoding = "f16@0:8", isStret = false, selector = "categoryProperty") @Deprecated(level = DeprecationLevel.WARNING, message = "Use instance method instead", replaceWith = ReplaceWith(imports = {})) external fun MyClass.categoryProperty(): Float + @ObjCMethod(encoding = "v20@0:8f16", isStret = false, selector = "setCategoryProperty:") @Deprecated(level = DeprecationLevel.WARNING, message = "Use instance method instead", replaceWith = ReplaceWith(imports = {})) external fun MyClass.setCategoryProperty(categoryProperty: Float) +} + diff --git a/native/native.tests/testData/CInterop/frameworkIncludeCategories/cases/smoke2/dependency.def b/native/native.tests/testData/CInterop/frameworkIncludeCategories/cases/smoke2/dependency.def new file mode 100644 index 00000000000..f4e3725bf2c --- /dev/null +++ b/native/native.tests/testData/CInterop/frameworkIncludeCategories/cases/smoke2/dependency.def @@ -0,0 +1,3 @@ +language = Objective-C +modules=dependency2 +objcClassesIncludingCategories = MyClass diff --git a/native/native.tests/testData/CInterop/frameworkIncludeCategories/cases/smoke3/contents.gold.txt b/native/native.tests/testData/CInterop/frameworkIncludeCategories/cases/smoke3/contents.gold.txt new file mode 100644 index 00000000000..4d54da265cb --- /dev/null +++ b/native/native.tests/testData/CInterop/frameworkIncludeCategories/cases/smoke3/contents.gold.txt @@ -0,0 +1,23 @@ + +package dependency { + + @ExternalObjCClass open class MyClass : ObjCObjectBase { + @ObjCConstructor(designated = true, initSelector = "initWithFloat:") constructor(float: Float) + @ObjCConstructor(designated = true, initSelector = "initWithPointer:") constructor(pointer: COpaquePointer? /* = CPointer? */) + protected constructor() + @Deprecated(level = DeprecationLevel.ERROR, message = "Use constructor instead", replaceWith = ReplaceWith(expression = "MyClass(number)", imports = {})) @ObjCMethod(encoding = "@20@0:8f16", isStret = false, selector = "initWithFloat:") @CCall.ConsumesReceiver @CCall.ReturnsRetained open external fun initWithFloat(number: Float): Any? + @Deprecated(level = DeprecationLevel.ERROR, message = "Use constructor instead", replaceWith = ReplaceWith(expression = "MyClass(any)", imports = {})) @ObjCMethod(encoding = "@24@0:8^v16", isStret = false, selector = "initWithPointer:") @CCall.ConsumesReceiver @CCall.ReturnsRetained open external fun initWithPointer(any: COpaquePointer? /* = CPointer? */): MyClass? + companion object : MyClassMeta, ObjCClassOf + } + + @ExternalObjCClass open class MyClassMeta : ObjCObjectBaseMeta { + protected constructor() + } + +} + +package dependency { + @ObjCFactory(encoding = "@24@0:8@16", isStret = false, selector = "initWithAnother:") @CCall.ConsumesReceiver @CCall.ReturnsRetained external fun ObjCClassOf.create(another: MyClass?): T? + @Deprecated(level = DeprecationLevel.ERROR, message = "Use factory method instead", replaceWith = ReplaceWith(expression = "MyClass.create(instance)", imports = {})) @ObjCMethod(encoding = "@24@0:8@16", isStret = false, selector = "initWithAnother:") @CCall.ConsumesReceiver @CCall.ReturnsRetained external fun MyClass.initWithAnother(instance: MyClass?): Any? +} + diff --git a/native/native.tests/testData/CInterop/frameworkIncludeCategories/cases/smoke3/dependency.def b/native/native.tests/testData/CInterop/frameworkIncludeCategories/cases/smoke3/dependency.def new file mode 100644 index 00000000000..23fc0e6b70d --- /dev/null +++ b/native/native.tests/testData/CInterop/frameworkIncludeCategories/cases/smoke3/dependency.def @@ -0,0 +1,2 @@ +language = Objective-C +modules=dependency3 diff --git a/native/native.tests/testData/CInterop/frameworkIncludeCategories/cases/smoke4/contents.gold.txt b/native/native.tests/testData/CInterop/frameworkIncludeCategories/cases/smoke4/contents.gold.txt new file mode 100644 index 00000000000..11c0228e4ac --- /dev/null +++ b/native/native.tests/testData/CInterop/frameworkIncludeCategories/cases/smoke4/contents.gold.txt @@ -0,0 +1,25 @@ + +package dependency { + + @ExternalObjCClass open class MyClass : ObjCObjectBase { + @ObjCConstructor(designated = true, initSelector = "initWithFloat:") constructor(float: Float) + @ObjCConstructor(designated = true, initSelector = "initWithPointer:") constructor(pointer: COpaquePointer? /* = CPointer? */) + @ObjCConstructor(designated = true, initSelector = "initWithAnother:") constructor(another: MyClass?) + protected constructor() + @Deprecated(level = DeprecationLevel.ERROR, message = "Use constructor instead", replaceWith = ReplaceWith(expression = "MyClass(instance)", imports = {})) @ObjCMethod(encoding = "@24@0:8@16", isStret = false, selector = "initWithAnother:") @CCall.ConsumesReceiver @CCall.ReturnsRetained open external fun initWithAnother(instance: MyClass?): Any? + @Deprecated(level = DeprecationLevel.ERROR, message = "Use constructor instead", replaceWith = ReplaceWith(expression = "MyClass(number)", imports = {})) @ObjCMethod(encoding = "@20@0:8f16", isStret = false, selector = "initWithFloat:") @CCall.ConsumesReceiver @CCall.ReturnsRetained open external fun initWithFloat(number: Float): Any? + @Deprecated(level = DeprecationLevel.ERROR, message = "Use constructor instead", replaceWith = ReplaceWith(expression = "MyClass(any)", imports = {})) @ObjCMethod(encoding = "@24@0:8^v16", isStret = false, selector = "initWithPointer:") @CCall.ConsumesReceiver @CCall.ReturnsRetained open external fun initWithPointer(any: COpaquePointer? /* = CPointer? */): MyClass? + companion object : MyClassMeta, ObjCClassOf + } + + @ExternalObjCClass open class MyClassMeta : ObjCObjectBaseMeta { + protected constructor() + } + +} + +package dependency { + @ObjCFactory(encoding = "@24@0:8@16", isStret = false, selector = "initWithAnother:") @CCall.ConsumesReceiver @CCall.ReturnsRetained external fun ObjCClassOf.create(another: MyClass?): T? + @Deprecated(level = DeprecationLevel.ERROR, message = "Use factory method instead", replaceWith = ReplaceWith(expression = "MyClass.create(instance)", imports = {})) @ObjCMethod(encoding = "@24@0:8@16", isStret = false, selector = "initWithAnother:") @CCall.ConsumesReceiver @CCall.ReturnsRetained external fun MyClass.initWithAnother(instance: MyClass?): Any? +} + diff --git a/native/native.tests/testData/CInterop/frameworkIncludeCategories/cases/smoke4/dependency.def b/native/native.tests/testData/CInterop/frameworkIncludeCategories/cases/smoke4/dependency.def new file mode 100644 index 00000000000..06728e67190 --- /dev/null +++ b/native/native.tests/testData/CInterop/frameworkIncludeCategories/cases/smoke4/dependency.def @@ -0,0 +1,3 @@ +language = Objective-C +modules=dependency3 +objcClassesIncludingCategories = MyClass diff --git a/native/native.tests/testData/CInterop/frameworkIncludeCategories/dependency1.framework/Headers/dependency1.h b/native/native.tests/testData/CInterop/frameworkIncludeCategories/dependency1.framework/Headers/dependency1.h new file mode 100644 index 00000000000..86c6957db3f --- /dev/null +++ b/native/native.tests/testData/CInterop/frameworkIncludeCategories/dependency1.framework/Headers/dependency1.h @@ -0,0 +1,24 @@ +@interface MyClass +-(void) instanceMethod; ++(void) classMethod; +@end; + +@interface MyClass(IncludeCategory) +-(void) categoryInstanceMethod; ++(void) categoryClassMethod; +@end; + +@interface MyClass(IncludeCategory2) +-(void) categoryInstanceMethod2; ++(void) categoryClassMethod2; +@end; + +@interface SkipClass +-(void) instanceMethod; ++(void) classMethod; +@end + +@interface SkipClass(IncludeCategory) +-(void) categoryInstanceMethod; ++(void) categoryClassMethod; +@end; diff --git a/native/native.tests/testData/CInterop/frameworkIncludeCategories/dependency1.framework/Modules/module.modulemap b/native/native.tests/testData/CInterop/frameworkIncludeCategories/dependency1.framework/Modules/module.modulemap new file mode 100644 index 00000000000..6b8f2e0ffff --- /dev/null +++ b/native/native.tests/testData/CInterop/frameworkIncludeCategories/dependency1.framework/Modules/module.modulemap @@ -0,0 +1,6 @@ +framework module dependency1 { + umbrella header "dependency1.h" + + export * + module * { export * } +} \ No newline at end of file diff --git a/native/native.tests/testData/CInterop/frameworkIncludeCategories/dependency2.framework/Headers/dependency2.h b/native/native.tests/testData/CInterop/frameworkIncludeCategories/dependency2.framework/Headers/dependency2.h new file mode 100644 index 00000000000..044e6d17df1 --- /dev/null +++ b/native/native.tests/testData/CInterop/frameworkIncludeCategories/dependency2.framework/Headers/dependency2.h @@ -0,0 +1,7 @@ +@interface MyClass +@property float instanceProperty; +@end; + +@interface MyClass(IncludeCategory) +@property float categoryProperty; +@end; \ No newline at end of file diff --git a/native/native.tests/testData/CInterop/frameworkIncludeCategories/dependency2.framework/Modules/module.modulemap b/native/native.tests/testData/CInterop/frameworkIncludeCategories/dependency2.framework/Modules/module.modulemap new file mode 100644 index 00000000000..48c8ab138c2 --- /dev/null +++ b/native/native.tests/testData/CInterop/frameworkIncludeCategories/dependency2.framework/Modules/module.modulemap @@ -0,0 +1,6 @@ +framework module dependency2 { + umbrella header "dependency2.h" + + export * + module * { export * } +} \ No newline at end of file diff --git a/native/native.tests/testData/CInterop/frameworkIncludeCategories/dependency3.framework/Headers/dependency3.h b/native/native.tests/testData/CInterop/frameworkIncludeCategories/dependency3.framework/Headers/dependency3.h new file mode 100644 index 00000000000..fac3481881a --- /dev/null +++ b/native/native.tests/testData/CInterop/frameworkIncludeCategories/dependency3.framework/Headers/dependency3.h @@ -0,0 +1,8 @@ +@interface MyClass +- (id)initWithFloat:(float)number; +- (instancetype)initWithPointer:(void*)any; +@end; + +@interface MyClass(IncludeCategory) +- (id)initWithAnother:(MyClass*) instance; +@end; diff --git a/native/native.tests/testData/CInterop/frameworkIncludeCategories/dependency3.framework/Modules/module.modulemap b/native/native.tests/testData/CInterop/frameworkIncludeCategories/dependency3.framework/Modules/module.modulemap new file mode 100644 index 00000000000..47ca5050418 --- /dev/null +++ b/native/native.tests/testData/CInterop/frameworkIncludeCategories/dependency3.framework/Modules/module.modulemap @@ -0,0 +1,6 @@ +framework module dependency3 { + umbrella header "dependency3.h" + + export * + module * { export * } +} \ No newline at end of file diff --git a/native/native.tests/tests-gen/org/jetbrains/kotlin/konan/blackboxtest/CInteropIncludeCategoriesTestGenerated.java b/native/native.tests/tests-gen/org/jetbrains/kotlin/konan/blackboxtest/CInteropIncludeCategoriesTestGenerated.java new file mode 100644 index 00000000000..77a66d265ea --- /dev/null +++ b/native/native.tests/tests-gen/org/jetbrains/kotlin/konan/blackboxtest/CInteropIncludeCategoriesTestGenerated.java @@ -0,0 +1,56 @@ +/* + * 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.blackboxtest; + +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/frameworkIncludeCategories/cases") +@TestDataPath("$PROJECT_ROOT") +public class CInteropIncludeCategoriesTestGenerated extends AbstractNativeCInteropIncludeCategoriesTest { + @Test + public void testAllFilesPresentInCases() throws Exception { + KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("native/native.tests/testData/CInterop/frameworkIncludeCategories/cases"), Pattern.compile("^([^_](.+))$"), null, false); + } + + @Test + @TestMetadata("smoke0") + public void testSmoke0() throws Exception { + runTest("native/native.tests/testData/CInterop/frameworkIncludeCategories/cases/smoke0/"); + } + + @Test + @TestMetadata("smoke1") + public void testSmoke1() throws Exception { + runTest("native/native.tests/testData/CInterop/frameworkIncludeCategories/cases/smoke1/"); + } + + @Test + @TestMetadata("smoke2") + public void testSmoke2() throws Exception { + runTest("native/native.tests/testData/CInterop/frameworkIncludeCategories/cases/smoke2/"); + } + + @Test + @TestMetadata("smoke3") + public void testSmoke3() throws Exception { + runTest("native/native.tests/testData/CInterop/frameworkIncludeCategories/cases/smoke3/"); + } + + @Test + @TestMetadata("smoke4") + public void testSmoke4() throws Exception { + runTest("native/native.tests/testData/CInterop/frameworkIncludeCategories/cases/smoke4/"); + } +} 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 f4c0fead28e..35429c83acd 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 @@ -93,6 +93,11 @@ fun main() { ) { model("CInterop/KT-39120/defs", pattern = "^([^_](.+))$", recursive = false) } + testClass( + suiteTestClassName = "CInteropIncludeCategoriesTestGenerated" + ) { + model("CInterop/frameworkIncludeCategories/cases", pattern = "^([^_](.+))$", recursive = false) + } } // LLDB integration tests. diff --git a/native/native.tests/tests/org/jetbrains/kotlin/konan/blackboxtest/AbstractNativeCInteropTest.kt b/native/native.tests/tests/org/jetbrains/kotlin/konan/blackboxtest/AbstractNativeCInteropTest.kt index 9af81ed2e77..62f60ea5819 100644 --- a/native/native.tests/tests/org/jetbrains/kotlin/konan/blackboxtest/AbstractNativeCInteropTest.kt +++ b/native/native.tests/tests/org/jetbrains/kotlin/konan/blackboxtest/AbstractNativeCInteropTest.kt @@ -35,6 +35,14 @@ abstract class AbstractNativeCInteropNoFModulesTest : AbstractNativeCInteropTest override val defFileName: String = "pod1.def" } +abstract class AbstractNativeCInteropIncludeCategoriesTest : AbstractNativeCInteropTest() { + override val fmodules: Boolean + get() = false + + override val defFileName: String + get() = "dependency.def" +} + @Tag("cinterop") abstract class AbstractNativeCInteropTest : AbstractNativeCInteropBaseTest() { abstract val fmodules: Boolean