[klib] Add an option to write out header klibs
The header klib is supposed to only contain the public abi of the module similar to jvm-abi-gen. It is intended to be used as a dependency for other klib compilations instead of the full klib for compilation avoidance. ^KT-60807
This commit is contained in:
+7
@@ -0,0 +1,7 @@
|
||||
package test
|
||||
|
||||
private val x = object { fun f() = 1 }
|
||||
|
||||
fun g() =
|
||||
x.f() +
|
||||
object { fun f() = 0 }.f()
|
||||
+3
@@ -0,0 +1,3 @@
|
||||
package test
|
||||
|
||||
fun g() = 1
|
||||
+3
@@ -0,0 +1,3 @@
|
||||
package test
|
||||
|
||||
class Class
|
||||
+3
@@ -0,0 +1,3 @@
|
||||
package test
|
||||
|
||||
open class Class
|
||||
+18
@@ -0,0 +1,18 @@
|
||||
package test
|
||||
|
||||
class A {
|
||||
val publicVal = 0
|
||||
fun publicMethod() = 0
|
||||
|
||||
internal val internalVal = 0
|
||||
internal fun internalMethod() = 0
|
||||
|
||||
protected val protectedVal = 0
|
||||
protected fun protectedMethod() = 0
|
||||
|
||||
private val privateVal = 0
|
||||
private fun privateMethod() = 0
|
||||
|
||||
val publicValBody = internalMethod() + privateMethod() + 2
|
||||
val publicMethodBody = publicValBody + 2
|
||||
}
|
||||
+15
@@ -0,0 +1,15 @@
|
||||
package test
|
||||
|
||||
class A {
|
||||
val publicVal = 0
|
||||
fun publicMethod() = 0
|
||||
|
||||
internal val internalVal = 42
|
||||
internal fun internalMethod() = 42
|
||||
|
||||
protected val protectedVal = 0
|
||||
protected fun protectedMethod() = 0
|
||||
|
||||
val publicValBody = internalMethod() + 1
|
||||
val publicMethodBody = publicValBody + 1
|
||||
}
|
||||
+3
@@ -0,0 +1,3 @@
|
||||
package test
|
||||
|
||||
const val x = 0
|
||||
+3
@@ -0,0 +1,3 @@
|
||||
package test
|
||||
|
||||
const val x = 1
|
||||
Vendored
+4
@@ -0,0 +1,4 @@
|
||||
package test
|
||||
|
||||
inline fun f() = 1
|
||||
inline fun g() = 2
|
||||
+7
@@ -0,0 +1,7 @@
|
||||
package test
|
||||
|
||||
inline fun g() = 2
|
||||
|
||||
inline fun f() = 1
|
||||
|
||||
// This changes the line numbers in f, g
|
||||
+10
@@ -0,0 +1,10 @@
|
||||
package test
|
||||
|
||||
fun sum(x: Int, y: Int): Int =
|
||||
try {
|
||||
var result = x
|
||||
result += y
|
||||
result
|
||||
} finally {
|
||||
// do nothing
|
||||
}
|
||||
+3
@@ -0,0 +1,3 @@
|
||||
package test
|
||||
|
||||
fun sum(x: Int, y: Int): Int = y + x
|
||||
+9
@@ -0,0 +1,9 @@
|
||||
private class A {
|
||||
inline fun test(crossinline s: () -> Unit) {
|
||||
object {
|
||||
fun run() {
|
||||
s()
|
||||
}
|
||||
}.run()
|
||||
}
|
||||
}
|
||||
+9
@@ -0,0 +1,9 @@
|
||||
private class A {
|
||||
inline fun test(crossinline s: () -> Unit) {
|
||||
object {
|
||||
fun run() {
|
||||
//s()
|
||||
}
|
||||
}.run()
|
||||
}
|
||||
}
|
||||
+11
@@ -0,0 +1,11 @@
|
||||
class A {
|
||||
private class B {
|
||||
inline fun test(crossinline s: () -> Unit) {
|
||||
object {
|
||||
fun run() {
|
||||
s()
|
||||
}
|
||||
}.run()
|
||||
}
|
||||
}
|
||||
}
|
||||
+11
@@ -0,0 +1,11 @@
|
||||
class A {
|
||||
private class B {
|
||||
inline fun test(crossinline s: () -> Unit) {
|
||||
object {
|
||||
fun run() {
|
||||
//s()
|
||||
}
|
||||
}.run()
|
||||
}
|
||||
}
|
||||
}
|
||||
Vendored
+3
@@ -0,0 +1,3 @@
|
||||
package test
|
||||
|
||||
inline fun sum(x: Int, y: Int): Int = x + y
|
||||
+3
@@ -0,0 +1,3 @@
|
||||
package test
|
||||
|
||||
inline fun sum(x: Int, y: Int): Int = y + x
|
||||
+4
@@ -0,0 +1,4 @@
|
||||
package test
|
||||
|
||||
private inline fun f() = { 1 }()
|
||||
fun g() = f()
|
||||
+3
@@ -0,0 +1,3 @@
|
||||
package test
|
||||
|
||||
fun g() = 1
|
||||
+3
@@ -0,0 +1,3 @@
|
||||
package test
|
||||
|
||||
fun id(x: Int): Int = x
|
||||
Vendored
+3
@@ -0,0 +1,3 @@
|
||||
package test
|
||||
|
||||
fun id(y: Int): Int = y
|
||||
+10
@@ -0,0 +1,10 @@
|
||||
package test
|
||||
|
||||
private interface A {
|
||||
fun foo() = 0
|
||||
fun bar(): String
|
||||
}
|
||||
|
||||
class B: A {
|
||||
override fun bar() = "test${foo()}"
|
||||
}
|
||||
+10
@@ -0,0 +1,10 @@
|
||||
package test
|
||||
|
||||
private interface A {
|
||||
fun foo() = 42
|
||||
fun bar(): String
|
||||
}
|
||||
|
||||
class B: A {
|
||||
override fun bar() = "test${foo()}"
|
||||
}
|
||||
Vendored
+13
@@ -0,0 +1,13 @@
|
||||
package test
|
||||
|
||||
class PublicClass1
|
||||
class PublicClass2
|
||||
|
||||
typealias PublicTypeAlias1 = PublicClass1
|
||||
typealias PublicTypeAlias2 = PublicClass1
|
||||
|
||||
internal typealias InternalTypeAlias1 = PublicClass1
|
||||
internal typealias InternalTypeAlias2 = PublicClass1
|
||||
|
||||
private typealias PrivateTypeAlias1 = PublicClass1
|
||||
private typealias PrivateTypeAlias2 = PublicClass1
|
||||
Vendored
+12
@@ -0,0 +1,12 @@
|
||||
package test
|
||||
|
||||
class PublicClass1
|
||||
class PublicClass2
|
||||
|
||||
typealias PublicTypeAlias1 = PublicClass1
|
||||
typealias PublicTypeAlias2 = PublicClass1
|
||||
|
||||
internal typealias InternalTypeAlias1 = PublicClass1
|
||||
internal typealias InternalTypeAlias2 = PublicClass1
|
||||
|
||||
private typealias PrivateTypeAlias1 = PublicClass2
|
||||
+3
@@ -0,0 +1,3 @@
|
||||
package test
|
||||
|
||||
fun foo() = 0
|
||||
Vendored
+3
@@ -0,0 +1,3 @@
|
||||
package test
|
||||
|
||||
fun foo() = "0"
|
||||
+4
@@ -0,0 +1,4 @@
|
||||
package test
|
||||
|
||||
open class A
|
||||
class B : A()
|
||||
Vendored
+4
@@ -0,0 +1,4 @@
|
||||
package test
|
||||
|
||||
open class A
|
||||
class B
|
||||
+7
@@ -0,0 +1,7 @@
|
||||
package test
|
||||
|
||||
private val x = 1
|
||||
|
||||
object A { fun f() = x }
|
||||
|
||||
val y = 2
|
||||
Vendored
+5
@@ -0,0 +1,5 @@
|
||||
package test
|
||||
|
||||
object A { fun f() = 1 }
|
||||
|
||||
val y = 2
|
||||
Vendored
+13
@@ -0,0 +1,13 @@
|
||||
package test
|
||||
|
||||
val publicVal = 0
|
||||
const val publicConst = 0
|
||||
fun publicFun() = 0
|
||||
|
||||
internal val internalVal = 0
|
||||
internal const val internalConst = 0
|
||||
internal fun internalFun() = 0
|
||||
|
||||
private val privateVal = 0
|
||||
private const val privateConst = 0
|
||||
private fun privateFun() = 0
|
||||
Vendored
+9
@@ -0,0 +1,9 @@
|
||||
package test
|
||||
|
||||
val publicVal = 0
|
||||
const val publicConst = 0
|
||||
fun publicFun() = 0
|
||||
|
||||
internal val internalVal = 0
|
||||
internal const val internalConst = 0
|
||||
internal fun internalFun() = 0
|
||||
+10
@@ -0,0 +1,10 @@
|
||||
package lib
|
||||
|
||||
interface Interface {
|
||||
fun getInt(): Int
|
||||
}
|
||||
|
||||
fun getInterface(): Interface =
|
||||
object : Interface {
|
||||
override fun getInt(): Int = 10
|
||||
}
|
||||
+11
@@ -0,0 +1,11 @@
|
||||
package app
|
||||
|
||||
import lib.*
|
||||
|
||||
fun runAppAndReturnOk(): String {
|
||||
val i = getInterface()
|
||||
val value = i.getInt()
|
||||
if (value != 10) error("getInterface().getInt() is '$value', but is expected to be '10'")
|
||||
|
||||
return "OK"
|
||||
}
|
||||
+31
@@ -0,0 +1,31 @@
|
||||
package lib
|
||||
|
||||
interface I {
|
||||
val iProperty: Int
|
||||
fun iMethod(): Int
|
||||
}
|
||||
|
||||
open class A : I {
|
||||
override val iProperty: Int = 0
|
||||
override fun iMethod(): Int = 10
|
||||
|
||||
val aProperty: Int = 20
|
||||
fun aMethod(): Int = 30
|
||||
inline fun aInlineMethod(): Int = 40
|
||||
|
||||
private class AB {}
|
||||
|
||||
companion object {
|
||||
const val aConst: Int = 50
|
||||
}
|
||||
}
|
||||
|
||||
class B : A() {
|
||||
val bProperty: Int = 60
|
||||
fun bMethod(): Int = 70
|
||||
inline fun bInlineMethod(): Int = 80
|
||||
|
||||
companion object {
|
||||
const val bConst: Int = 90
|
||||
}
|
||||
}
|
||||
+40
@@ -0,0 +1,40 @@
|
||||
package app
|
||||
|
||||
import lib.*
|
||||
|
||||
fun useI(i: I) {
|
||||
i.iProperty
|
||||
i.iMethod()
|
||||
}
|
||||
|
||||
fun useA(a: A) {
|
||||
a.iProperty
|
||||
a.iMethod()
|
||||
|
||||
a.aProperty
|
||||
a.aMethod()
|
||||
a.aInlineMethod()
|
||||
A.aConst
|
||||
}
|
||||
|
||||
fun useB(b: B) {
|
||||
b.iProperty
|
||||
b.iMethod()
|
||||
|
||||
b.aProperty
|
||||
b.aMethod()
|
||||
b.aInlineMethod()
|
||||
|
||||
b.bProperty
|
||||
b.bMethod()
|
||||
b.bInlineMethod()
|
||||
B.bConst
|
||||
}
|
||||
|
||||
fun runAppAndReturnOk(): String {
|
||||
useI(A())
|
||||
useA(A())
|
||||
useB(B())
|
||||
|
||||
return "OK"
|
||||
}
|
||||
+7
@@ -0,0 +1,7 @@
|
||||
package lib
|
||||
|
||||
object Object {
|
||||
val x = 1
|
||||
val y = 2
|
||||
val z = x + y
|
||||
}
|
||||
+5
@@ -0,0 +1,5 @@
|
||||
package lib
|
||||
|
||||
val x = 1
|
||||
val y = 2
|
||||
val z = x + y
|
||||
+10
@@ -0,0 +1,10 @@
|
||||
package app
|
||||
|
||||
import lib.*
|
||||
|
||||
fun runAppAndReturnOk(): String {
|
||||
if (Object.z != 3) error("lib.Object.z is ${Object.z}, but '3' was expected")
|
||||
if (z != 3) error("lib.z is $z, but '3' was expected")
|
||||
|
||||
return "OK"
|
||||
}
|
||||
Vendored
+5
@@ -0,0 +1,5 @@
|
||||
package lib
|
||||
|
||||
annotation class A(val value: String)
|
||||
|
||||
inline fun a() = A("OK")
|
||||
+7
@@ -0,0 +1,7 @@
|
||||
package app
|
||||
|
||||
import lib.*
|
||||
|
||||
fun runAppAndReturnOk(): String {
|
||||
return a().value
|
||||
}
|
||||
Vendored
+11
@@ -0,0 +1,11 @@
|
||||
package lib
|
||||
|
||||
interface Interface {
|
||||
fun getInt(): Int
|
||||
}
|
||||
|
||||
inline fun getCounter(crossinline init: () -> Int): Interface =
|
||||
object : Interface {
|
||||
var value = init()
|
||||
override fun getInt(): Int = value++
|
||||
}
|
||||
Vendored
+13
@@ -0,0 +1,13 @@
|
||||
package app
|
||||
|
||||
import lib.*
|
||||
|
||||
fun runAppAndReturnOk(): String {
|
||||
val a = lib.getCounter { 100 }
|
||||
val x = a.getInt()
|
||||
if (x != 100) error("a returned $x but expected '100'")
|
||||
val y = a.getInt()
|
||||
if (y != 101) error("a returned $y but expected '101'")
|
||||
|
||||
return "OK"
|
||||
}
|
||||
+10
@@ -0,0 +1,10 @@
|
||||
package lib
|
||||
|
||||
fun inlineCapture(s: String): String {
|
||||
return with(StringBuilder()) {
|
||||
val o = object {
|
||||
override fun toString() = s
|
||||
}
|
||||
append(o)
|
||||
}.toString()
|
||||
}
|
||||
+7
@@ -0,0 +1,7 @@
|
||||
package app
|
||||
|
||||
import lib.*
|
||||
|
||||
fun runAppAndReturnOk(): String {
|
||||
return inlineCapture("OK")
|
||||
}
|
||||
+19
@@ -0,0 +1,19 @@
|
||||
package lib
|
||||
|
||||
var result = "fail"
|
||||
|
||||
inline fun foo(crossinline s: () -> String) {
|
||||
object {
|
||||
private inline fun test(crossinline z: () -> String) {
|
||||
result = object { //should be marked as public abi as there is no regenerated abject on inline
|
||||
fun run(): String {
|
||||
return "O"
|
||||
}
|
||||
}.run() + z()
|
||||
}
|
||||
|
||||
fun foo() {
|
||||
test { s() }
|
||||
}
|
||||
}.foo()
|
||||
}
|
||||
Vendored
+10
@@ -0,0 +1,10 @@
|
||||
package app
|
||||
|
||||
import lib.*
|
||||
|
||||
fun runAppAndReturnOk(): String {
|
||||
foo {
|
||||
"K"
|
||||
}
|
||||
return result
|
||||
}
|
||||
Vendored
+4
@@ -0,0 +1,4 @@
|
||||
package lib
|
||||
|
||||
inline fun <reified T> safeCall(x: Any?, fn: (T) -> T): T? =
|
||||
if (x is T) fn(x) else null
|
||||
Vendored
+13
@@ -0,0 +1,13 @@
|
||||
package app
|
||||
|
||||
import lib.*
|
||||
|
||||
fun runAppAndReturnOk(): String {
|
||||
val a = safeCall<Int>(10) { it * it }
|
||||
if (a != 100) error("a is '$a', but is expected to be '100'")
|
||||
|
||||
val b = safeCall<Int>(null) { it * it }
|
||||
if (b != null) error("b is '$b', but is expected to be 'null'")
|
||||
|
||||
return "OK"
|
||||
}
|
||||
+10
@@ -0,0 +1,10 @@
|
||||
package lib
|
||||
|
||||
enum class E {
|
||||
A, B
|
||||
}
|
||||
|
||||
inline fun value(x: E) = when (x) {
|
||||
E.A -> "OK"
|
||||
E.B -> "Fail"
|
||||
}
|
||||
+5
@@ -0,0 +1,5 @@
|
||||
package app
|
||||
|
||||
import lib.*
|
||||
|
||||
fun runAppAndReturnOk(): String = value(E.A)
|
||||
Vendored
+19
@@ -0,0 +1,19 @@
|
||||
package lib
|
||||
|
||||
var result = "fail"
|
||||
|
||||
inline fun foo(crossinline s: () -> String) {
|
||||
object {
|
||||
private inline fun test(crossinline z: () -> String) {
|
||||
object {
|
||||
fun run() {
|
||||
result = z()
|
||||
}
|
||||
}.run()
|
||||
}
|
||||
|
||||
fun foo() {
|
||||
test { s() } // regenerated object should be marked as public abi
|
||||
}
|
||||
}.foo()
|
||||
}
|
||||
Vendored
+10
@@ -0,0 +1,10 @@
|
||||
package app
|
||||
|
||||
import lib.*
|
||||
|
||||
fun runAppAndReturnOk(): String {
|
||||
foo {
|
||||
"OK"
|
||||
}
|
||||
return result
|
||||
}
|
||||
+11
@@ -0,0 +1,11 @@
|
||||
package lib
|
||||
|
||||
inline fun anInlineFunction(crossinline crossInlineLamba: () -> Unit) {
|
||||
Foo().apply {
|
||||
barMethod { crossInlineLamba() }
|
||||
}
|
||||
}
|
||||
|
||||
class Foo {
|
||||
fun barMethod(aLambda: () -> Unit) { aLambda() }
|
||||
}
|
||||
+9
@@ -0,0 +1,9 @@
|
||||
package app
|
||||
|
||||
import lib.*
|
||||
|
||||
fun runAppAndReturnOk(): String {
|
||||
var result = "Fail"
|
||||
anInlineFunction { result = "OK" }
|
||||
return result
|
||||
}
|
||||
Vendored
+7
@@ -0,0 +1,7 @@
|
||||
package lib
|
||||
|
||||
class A private constructor(val x: Int) {
|
||||
companion object {
|
||||
fun create(x: Int): A = A(x * 2)
|
||||
}
|
||||
}
|
||||
Vendored
+10
@@ -0,0 +1,10 @@
|
||||
package app
|
||||
|
||||
import lib.*
|
||||
|
||||
fun runAppAndReturnOk(): String {
|
||||
val a = A.create(10)
|
||||
if (a.x != 20) error("a.x is '${a.x}', but is expected to be '20'")
|
||||
|
||||
return "OK"
|
||||
}
|
||||
Vendored
+6
@@ -0,0 +1,6 @@
|
||||
package lib
|
||||
|
||||
value class A private constructor(val value: String) {
|
||||
companion object { fun a() = A("OK") }
|
||||
inline fun b() = value
|
||||
}
|
||||
native/native.tests/testData/klib/header-klibs/compilation/privateValueClassConstructor/main/main.kt
Vendored
+7
@@ -0,0 +1,7 @@
|
||||
package app
|
||||
|
||||
import lib.*
|
||||
|
||||
fun runAppAndReturnOk(): String {
|
||||
return A.a().b()
|
||||
}
|
||||
+6
@@ -0,0 +1,6 @@
|
||||
package lib
|
||||
|
||||
val prop: Int = 1
|
||||
fun func(): Int = 2
|
||||
inline fun inlineFunc(): Int = 3
|
||||
const val constant: Int = 4
|
||||
+14
@@ -0,0 +1,14 @@
|
||||
package app
|
||||
|
||||
import lib.*
|
||||
|
||||
fun runAppAndReturnOk(): String {
|
||||
if (prop != 1) error("prop is '$prop', but is expected to be '1'")
|
||||
val funcValue = func()
|
||||
if (funcValue != 2) error("func() is '$funcValue', but is expected to be '2'")
|
||||
val inlineFuncValue = inlineFunc()
|
||||
if (inlineFuncValue != 3) error("inlineFunc() is '$inlineFuncValue', but is expected to be '3'")
|
||||
if (constant != 4) error("constant is '$constant', but is expected to be '4'")
|
||||
|
||||
return "OK"
|
||||
}
|
||||
+132
@@ -0,0 +1,132 @@
|
||||
/*
|
||||
* 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.junit.jupiter.api.Tag;
|
||||
import org.jetbrains.kotlin.konan.blackboxtest.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/klib/header-klibs/comparison")
|
||||
@TestDataPath("$PROJECT_ROOT")
|
||||
@Tag("frontend-fir")
|
||||
@FirPipeline()
|
||||
public class FirNativeHeaderKlibComparisonTestGenerated extends AbstractNativeHeaderKlibComparisonTest {
|
||||
@Test
|
||||
public void testAllFilesPresentInComparison() throws Exception {
|
||||
KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("native/native.tests/testData/klib/header-klibs/comparison"), Pattern.compile("^([^\\.]+)$"), null, false);
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("anonymousObjects")
|
||||
public void testAnonymousObjects() throws Exception {
|
||||
runTest("native/native.tests/testData/klib/header-klibs/comparison/anonymousObjects/");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("classFlags")
|
||||
public void testClassFlags() throws Exception {
|
||||
runTest("native/native.tests/testData/klib/header-klibs/comparison/classFlags/");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("classPrivateMembers")
|
||||
public void testClassPrivateMembers() throws Exception {
|
||||
runTest("native/native.tests/testData/klib/header-klibs/comparison/classPrivateMembers/");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("constant")
|
||||
public void testConstant() throws Exception {
|
||||
runTest("native/native.tests/testData/klib/header-klibs/comparison/constant/");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("declarationOrderInline")
|
||||
public void testDeclarationOrderInline() throws Exception {
|
||||
runTest("native/native.tests/testData/klib/header-klibs/comparison/declarationOrderInline/");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("functionBody")
|
||||
public void testFunctionBody() throws Exception {
|
||||
runTest("native/native.tests/testData/klib/header-klibs/comparison/functionBody/");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("inlineFunInPrivateClass")
|
||||
public void testInlineFunInPrivateClass() throws Exception {
|
||||
runTest("native/native.tests/testData/klib/header-klibs/comparison/inlineFunInPrivateClass/");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("inlineFunInPrivateNestedClass")
|
||||
public void testInlineFunInPrivateNestedClass() throws Exception {
|
||||
runTest("native/native.tests/testData/klib/header-klibs/comparison/inlineFunInPrivateNestedClass/");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("inlineFunctionBody")
|
||||
public void testInlineFunctionBody() throws Exception {
|
||||
runTest("native/native.tests/testData/klib/header-klibs/comparison/inlineFunctionBody/");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("lambdas")
|
||||
public void testLambdas() throws Exception {
|
||||
runTest("native/native.tests/testData/klib/header-klibs/comparison/lambdas/");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("parameterName")
|
||||
public void testParameterName() throws Exception {
|
||||
runTest("native/native.tests/testData/klib/header-klibs/comparison/parameterName/");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("privateInterface")
|
||||
public void testPrivateInterface() throws Exception {
|
||||
runTest("native/native.tests/testData/klib/header-klibs/comparison/privateInterface/");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("privateTypealias")
|
||||
public void testPrivateTypealias() throws Exception {
|
||||
runTest("native/native.tests/testData/klib/header-klibs/comparison/privateTypealias/");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("returnType")
|
||||
public void testReturnType() throws Exception {
|
||||
runTest("native/native.tests/testData/klib/header-klibs/comparison/returnType/");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("superClass")
|
||||
public void testSuperClass() throws Exception {
|
||||
runTest("native/native.tests/testData/klib/header-klibs/comparison/superClass/");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("syntheticAccessors")
|
||||
public void testSyntheticAccessors() throws Exception {
|
||||
runTest("native/native.tests/testData/klib/header-klibs/comparison/syntheticAccessors/");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("topLevelPrivateMembers")
|
||||
public void testTopLevelPrivateMembers() throws Exception {
|
||||
runTest("native/native.tests/testData/klib/header-klibs/comparison/topLevelPrivateMembers/");
|
||||
}
|
||||
}
|
||||
+114
@@ -0,0 +1,114 @@
|
||||
/*
|
||||
* 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.junit.jupiter.api.Tag;
|
||||
import org.jetbrains.kotlin.konan.blackboxtest.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/klib/header-klibs/compilation")
|
||||
@TestDataPath("$PROJECT_ROOT")
|
||||
@Tag("frontend-fir")
|
||||
@FirPipeline()
|
||||
public class FirNativeHeaderKlibCompilationTestGenerated extends AbstractNativeHeaderKlibCompilationTest {
|
||||
@Test
|
||||
public void testAllFilesPresentInCompilation() throws Exception {
|
||||
KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("native/native.tests/testData/klib/header-klibs/compilation"), Pattern.compile("^([^\\.]+)$"), null, false);
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("anonymousObject")
|
||||
public void testAnonymousObject() throws Exception {
|
||||
runTest("native/native.tests/testData/klib/header-klibs/compilation/anonymousObject/");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("classes")
|
||||
public void testClasses() throws Exception {
|
||||
runTest("native/native.tests/testData/klib/header-klibs/compilation/classes/");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("clinit")
|
||||
public void testClinit() throws Exception {
|
||||
runTest("native/native.tests/testData/klib/header-klibs/compilation/clinit/");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("inlineAnnotationInstantiation")
|
||||
public void testInlineAnnotationInstantiation() throws Exception {
|
||||
runTest("native/native.tests/testData/klib/header-klibs/compilation/inlineAnnotationInstantiation/");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("inlineAnonymousObject")
|
||||
public void testInlineAnonymousObject() throws Exception {
|
||||
runTest("native/native.tests/testData/klib/header-klibs/compilation/inlineAnonymousObject/");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("inlineCapture")
|
||||
public void testInlineCapture() throws Exception {
|
||||
runTest("native/native.tests/testData/klib/header-klibs/compilation/inlineCapture/");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("inlineNoRegeneration")
|
||||
public void testInlineNoRegeneration() throws Exception {
|
||||
runTest("native/native.tests/testData/klib/header-klibs/compilation/inlineNoRegeneration/");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("inlineReifiedFunction")
|
||||
public void testInlineReifiedFunction() throws Exception {
|
||||
runTest("native/native.tests/testData/klib/header-klibs/compilation/inlineReifiedFunction/");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("inlineWhenMappings")
|
||||
public void testInlineWhenMappings() throws Exception {
|
||||
runTest("native/native.tests/testData/klib/header-klibs/compilation/inlineWhenMappings/");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("innerObjectRegeneration")
|
||||
public void testInnerObjectRegeneration() throws Exception {
|
||||
runTest("native/native.tests/testData/klib/header-klibs/compilation/innerObjectRegeneration/");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("kt-40133")
|
||||
public void testKt_40133() throws Exception {
|
||||
runTest("native/native.tests/testData/klib/header-klibs/compilation/kt-40133/");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("privateOnlyConstructors")
|
||||
public void testPrivateOnlyConstructors() throws Exception {
|
||||
runTest("native/native.tests/testData/klib/header-klibs/compilation/privateOnlyConstructors/");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("privateValueClassConstructor")
|
||||
public void testPrivateValueClassConstructor() throws Exception {
|
||||
runTest("native/native.tests/testData/klib/header-klibs/compilation/privateValueClassConstructor/");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("topLevel")
|
||||
public void testTopLevel() throws Exception {
|
||||
runTest("native/native.tests/testData/klib/header-klibs/compilation/topLevel/");
|
||||
}
|
||||
}
|
||||
+128
@@ -0,0 +1,128 @@
|
||||
/*
|
||||
* 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/klib/header-klibs/comparison")
|
||||
@TestDataPath("$PROJECT_ROOT")
|
||||
public class NativeHeaderKlibComparisonTestGenerated extends AbstractNativeHeaderKlibComparisonTest {
|
||||
@Test
|
||||
public void testAllFilesPresentInComparison() throws Exception {
|
||||
KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("native/native.tests/testData/klib/header-klibs/comparison"), Pattern.compile("^([^\\.]+)$"), null, false);
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("anonymousObjects")
|
||||
public void testAnonymousObjects() throws Exception {
|
||||
runTest("native/native.tests/testData/klib/header-klibs/comparison/anonymousObjects/");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("classFlags")
|
||||
public void testClassFlags() throws Exception {
|
||||
runTest("native/native.tests/testData/klib/header-klibs/comparison/classFlags/");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("classPrivateMembers")
|
||||
public void testClassPrivateMembers() throws Exception {
|
||||
runTest("native/native.tests/testData/klib/header-klibs/comparison/classPrivateMembers/");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("constant")
|
||||
public void testConstant() throws Exception {
|
||||
runTest("native/native.tests/testData/klib/header-klibs/comparison/constant/");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("declarationOrderInline")
|
||||
public void testDeclarationOrderInline() throws Exception {
|
||||
runTest("native/native.tests/testData/klib/header-klibs/comparison/declarationOrderInline/");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("functionBody")
|
||||
public void testFunctionBody() throws Exception {
|
||||
runTest("native/native.tests/testData/klib/header-klibs/comparison/functionBody/");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("inlineFunInPrivateClass")
|
||||
public void testInlineFunInPrivateClass() throws Exception {
|
||||
runTest("native/native.tests/testData/klib/header-klibs/comparison/inlineFunInPrivateClass/");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("inlineFunInPrivateNestedClass")
|
||||
public void testInlineFunInPrivateNestedClass() throws Exception {
|
||||
runTest("native/native.tests/testData/klib/header-klibs/comparison/inlineFunInPrivateNestedClass/");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("inlineFunctionBody")
|
||||
public void testInlineFunctionBody() throws Exception {
|
||||
runTest("native/native.tests/testData/klib/header-klibs/comparison/inlineFunctionBody/");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("lambdas")
|
||||
public void testLambdas() throws Exception {
|
||||
runTest("native/native.tests/testData/klib/header-klibs/comparison/lambdas/");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("parameterName")
|
||||
public void testParameterName() throws Exception {
|
||||
runTest("native/native.tests/testData/klib/header-klibs/comparison/parameterName/");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("privateInterface")
|
||||
public void testPrivateInterface() throws Exception {
|
||||
runTest("native/native.tests/testData/klib/header-klibs/comparison/privateInterface/");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("privateTypealias")
|
||||
public void testPrivateTypealias() throws Exception {
|
||||
runTest("native/native.tests/testData/klib/header-klibs/comparison/privateTypealias/");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("returnType")
|
||||
public void testReturnType() throws Exception {
|
||||
runTest("native/native.tests/testData/klib/header-klibs/comparison/returnType/");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("superClass")
|
||||
public void testSuperClass() throws Exception {
|
||||
runTest("native/native.tests/testData/klib/header-klibs/comparison/superClass/");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("syntheticAccessors")
|
||||
public void testSyntheticAccessors() throws Exception {
|
||||
runTest("native/native.tests/testData/klib/header-klibs/comparison/syntheticAccessors/");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("topLevelPrivateMembers")
|
||||
public void testTopLevelPrivateMembers() throws Exception {
|
||||
runTest("native/native.tests/testData/klib/header-klibs/comparison/topLevelPrivateMembers/");
|
||||
}
|
||||
}
|
||||
+110
@@ -0,0 +1,110 @@
|
||||
/*
|
||||
* 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/klib/header-klibs/compilation")
|
||||
@TestDataPath("$PROJECT_ROOT")
|
||||
public class NativeHeaderKlibCompilationTestGenerated extends AbstractNativeHeaderKlibCompilationTest {
|
||||
@Test
|
||||
public void testAllFilesPresentInCompilation() throws Exception {
|
||||
KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("native/native.tests/testData/klib/header-klibs/compilation"), Pattern.compile("^([^\\.]+)$"), null, false);
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("anonymousObject")
|
||||
public void testAnonymousObject() throws Exception {
|
||||
runTest("native/native.tests/testData/klib/header-klibs/compilation/anonymousObject/");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("classes")
|
||||
public void testClasses() throws Exception {
|
||||
runTest("native/native.tests/testData/klib/header-klibs/compilation/classes/");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("clinit")
|
||||
public void testClinit() throws Exception {
|
||||
runTest("native/native.tests/testData/klib/header-klibs/compilation/clinit/");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("inlineAnnotationInstantiation")
|
||||
public void testInlineAnnotationInstantiation() throws Exception {
|
||||
runTest("native/native.tests/testData/klib/header-klibs/compilation/inlineAnnotationInstantiation/");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("inlineAnonymousObject")
|
||||
public void testInlineAnonymousObject() throws Exception {
|
||||
runTest("native/native.tests/testData/klib/header-klibs/compilation/inlineAnonymousObject/");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("inlineCapture")
|
||||
public void testInlineCapture() throws Exception {
|
||||
runTest("native/native.tests/testData/klib/header-klibs/compilation/inlineCapture/");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("inlineNoRegeneration")
|
||||
public void testInlineNoRegeneration() throws Exception {
|
||||
runTest("native/native.tests/testData/klib/header-klibs/compilation/inlineNoRegeneration/");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("inlineReifiedFunction")
|
||||
public void testInlineReifiedFunction() throws Exception {
|
||||
runTest("native/native.tests/testData/klib/header-klibs/compilation/inlineReifiedFunction/");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("inlineWhenMappings")
|
||||
public void testInlineWhenMappings() throws Exception {
|
||||
runTest("native/native.tests/testData/klib/header-klibs/compilation/inlineWhenMappings/");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("innerObjectRegeneration")
|
||||
public void testInnerObjectRegeneration() throws Exception {
|
||||
runTest("native/native.tests/testData/klib/header-klibs/compilation/innerObjectRegeneration/");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("kt-40133")
|
||||
public void testKt_40133() throws Exception {
|
||||
runTest("native/native.tests/testData/klib/header-klibs/compilation/kt-40133/");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("privateOnlyConstructors")
|
||||
public void testPrivateOnlyConstructors() throws Exception {
|
||||
runTest("native/native.tests/testData/klib/header-klibs/compilation/privateOnlyConstructors/");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("privateValueClassConstructor")
|
||||
public void testPrivateValueClassConstructor() throws Exception {
|
||||
runTest("native/native.tests/testData/klib/header-klibs/compilation/privateValueClassConstructor/");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("topLevel")
|
||||
public void testTopLevel() throws Exception {
|
||||
runTest("native/native.tests/testData/klib/header-klibs/compilation/topLevel/");
|
||||
}
|
||||
}
|
||||
+30
@@ -314,6 +314,36 @@ fun main() {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Header klib comparison tests
|
||||
testGroup("native/native.tests/tests-gen", "native/native.tests/testData") {
|
||||
testClass<AbstractNativeHeaderKlibComparisonTest>(
|
||||
suiteTestClassName = "NativeHeaderKlibComparisonTestGenerated",
|
||||
) {
|
||||
model("klib/header-klibs/comparison", extension = null, recursive = false)
|
||||
}
|
||||
testClass<AbstractNativeHeaderKlibComparisonTest>(
|
||||
suiteTestClassName = "FirNativeHeaderKlibComparisonTestGenerated",
|
||||
annotations = listOf(*frontendFir()),
|
||||
) {
|
||||
model("klib/header-klibs/comparison", extension = null, recursive = false)
|
||||
}
|
||||
}
|
||||
|
||||
// Header klib compilation tests
|
||||
testGroup("native/native.tests/tests-gen", "native/native.tests/testData") {
|
||||
testClass<AbstractNativeHeaderKlibCompilationTest>(
|
||||
suiteTestClassName = "NativeHeaderKlibCompilationTestGenerated",
|
||||
) {
|
||||
model("klib/header-klibs/compilation", extension = null, recursive = false)
|
||||
}
|
||||
testClass<AbstractNativeHeaderKlibCompilationTest>(
|
||||
suiteTestClassName = "FirNativeHeaderKlibCompilationTestGenerated",
|
||||
annotations = listOf(*frontendFir()),
|
||||
) {
|
||||
model("klib/header-klibs/compilation", extension = null, recursive = false)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+103
@@ -0,0 +1,103 @@
|
||||
/*
|
||||
* Copyright 2010-2022 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.TestDataFile
|
||||
import org.jetbrains.kotlin.konan.blackboxtest.support.*
|
||||
import org.jetbrains.kotlin.konan.blackboxtest.support.compilation.TestCompilationArtifact
|
||||
import org.jetbrains.kotlin.konan.blackboxtest.support.compilation.TestCompilationResult.Companion.assertSuccess
|
||||
import org.jetbrains.kotlin.konan.blackboxtest.support.group.UsePartialLinkage
|
||||
import org.jetbrains.kotlin.konan.blackboxtest.support.runner.TestRunChecks
|
||||
import org.jetbrains.kotlin.konan.blackboxtest.support.settings.Timeouts
|
||||
import org.jetbrains.kotlin.konan.blackboxtest.support.util.getAbsoluteFile
|
||||
import org.junit.jupiter.api.Tag
|
||||
import java.io.File
|
||||
import kotlin.test.assertContentEquals
|
||||
import kotlin.test.assertFailsWith
|
||||
|
||||
@Tag("klib")
|
||||
@UsePartialLinkage(UsePartialLinkage.Mode.ENABLED_WITH_ERROR)
|
||||
abstract class AbstractNativeHeaderKlibComparisonTest : AbstractNativeSimpleTest() {
|
||||
|
||||
protected fun runTest(@TestDataFile testPath: String) {
|
||||
val testPathFull = getAbsoluteFile(testPath)
|
||||
|
||||
val testCaseBase: TestCase = generateTestcaseFromDirectory(testPathFull, "base", listOf())
|
||||
compileToLibrary(testCaseBase).assertSuccess()
|
||||
val headerKlibBase = File(getHeaderPath("base"))
|
||||
assert(headerKlibBase.exists())
|
||||
|
||||
val sameAbiDir = testPathFull.resolve("sameAbi")
|
||||
val differentAbiDir = testPathFull.resolve("differentAbi")
|
||||
|
||||
assert(sameAbiDir.exists() || differentAbiDir.exists()) { "Nothing to compare" }
|
||||
|
||||
if (sameAbiDir.exists()) {
|
||||
val testCaseSameAbi: TestCase = generateTestcaseFromDirectory(testPathFull, "sameAbi", listOf())
|
||||
compileToLibrary(testCaseSameAbi).assertSuccess()
|
||||
val headerKlibSameAbi = File(getHeaderPath("sameAbi"))
|
||||
assert(headerKlibSameAbi.exists())
|
||||
assertContentEquals(headerKlibBase.readBytes(), headerKlibSameAbi.readBytes())
|
||||
}
|
||||
|
||||
if (differentAbiDir.exists()) {
|
||||
val testCaseDifferentAbi: TestCase = generateTestcaseFromDirectory(testPathFull, "differentAbi", listOf())
|
||||
compileToLibrary(testCaseDifferentAbi).assertSuccess()
|
||||
val headerKlibDifferentAbi = File(getHeaderPath("differentAbi"))
|
||||
assert(headerKlibDifferentAbi.exists())
|
||||
assertFailsWith<AssertionError>("base and differentAbi header klib are equal") {
|
||||
assertContentEquals(headerKlibBase.readBytes(), headerKlibDifferentAbi.readBytes())
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@Tag("klib")
|
||||
@UsePartialLinkage(UsePartialLinkage.Mode.ENABLED_WITH_ERROR)
|
||||
abstract class AbstractNativeHeaderKlibCompilationTest : AbstractNativeSimpleTest() {
|
||||
|
||||
protected fun runTest(@TestDataFile testPath: String) {
|
||||
val testPathFull = getAbsoluteFile(testPath)
|
||||
assert(testPathFull.exists())
|
||||
val testCaseLib: TestCase = generateTestcaseFromDirectory(testPathFull, "lib", listOf())
|
||||
val klibLib = compileToLibrary(testCaseLib)
|
||||
val headerKlibLib = File(getHeaderPath("lib"))
|
||||
assert(headerKlibLib.exists())
|
||||
val testPathApp = testPathFull.resolve("main")
|
||||
val klibAppFromHeader = compileToLibrary(testPathApp, TestCompilationArtifact.KLIB(headerKlibLib))
|
||||
val klibAppFromFull = compileToLibrary(testPathApp, klibLib.resultingArtifact)
|
||||
assertContentEquals(
|
||||
klibAppFromHeader.klibFile.readBytes(),
|
||||
klibAppFromFull.klibFile.readBytes()
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
private fun AbstractNativeSimpleTest.getHeaderPath(rev: String) = buildDir.absolutePath + "/header.$rev.klib"
|
||||
private fun AbstractNativeSimpleTest.generateTestcaseFromDirectory(source: File, rev: String, extraArgs: List<String>): TestCase {
|
||||
val moduleName: String = source.name
|
||||
val module = TestModule.Exclusive(moduleName, emptySet(), emptySet(), emptySet())
|
||||
source.resolve(rev).listFiles()?.forEach {
|
||||
muteTestIfNecessary(it)
|
||||
module.files += TestFile.createCommitted(it, module)
|
||||
}
|
||||
|
||||
val headerKlibPath = "-Xheader-klib-path=" + getHeaderPath(rev)
|
||||
val relativeBasePath = "-Xklib-relative-path-base=$source/$rev"
|
||||
|
||||
return TestCase(
|
||||
id = TestCaseId.Named(moduleName),
|
||||
kind = TestKind.STANDALONE,
|
||||
modules = setOf(module),
|
||||
freeCompilerArgs = TestCompilerArgs(extraArgs + relativeBasePath + headerKlibPath),
|
||||
nominalPackageName = PackageName.EMPTY,
|
||||
checks = TestRunChecks.Default(testRunSettings.get<Timeouts>().executionTimeout),
|
||||
extras = TestCase.WithTestRunnerExtras(TestRunnerType.DEFAULT)
|
||||
).apply {
|
||||
initialize(null, null)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user