diff --git a/compiler/tests-common/tests/org/jetbrains/kotlin/compatibility/binary/AbstractKlibBinaryCompatibilityTest.kt b/compiler/tests-common/tests/org/jetbrains/kotlin/compatibility/binary/AbstractKlibBinaryCompatibilityTest.kt index 3c01a9bc064..9f4d6eb537f 100644 --- a/compiler/tests-common/tests/org/jetbrains/kotlin/compatibility/binary/AbstractKlibBinaryCompatibilityTest.kt +++ b/compiler/tests-common/tests/org/jetbrains/kotlin/compatibility/binary/AbstractKlibBinaryCompatibilityTest.kt @@ -52,12 +52,19 @@ abstract class AbstractKlibBinaryCompatibilityTest : KotlinTestWithEnvironment() } } - fun doTest(filePath: String, expectedResult: String) = doTest( - filePath, - expectedResult, - produceKlib = ::produceKlib, - produceAndRunProgram = ::produceAndRunProgram, - ) + open fun isIgnoredTest(filePath: String): Boolean = false + + fun doTest(filePath: String, expectedResult: String) { + if (isIgnoredTest(filePath)) + return + + doTest( + filePath, + expectedResult, + produceKlib = ::produceKlib, + produceAndRunProgram = ::produceAndRunProgram, + ) + } abstract fun produceKlib(module: TestModule, version: Int) abstract fun produceProgram(module: TestModule) diff --git a/js/js.tests/test/org/jetbrains/kotlin/generators/tests/GenerateJsTests.kt b/js/js.tests/test/org/jetbrains/kotlin/generators/tests/GenerateJsTests.kt index dce938dc1ad..7f422b7b674 100644 --- a/js/js.tests/test/org/jetbrains/kotlin/generators/tests/GenerateJsTests.kt +++ b/js/js.tests/test/org/jetbrains/kotlin/generators/tests/GenerateJsTests.kt @@ -16,7 +16,8 @@ import org.jetbrains.kotlin.js.test.ir.* import org.jetbrains.kotlin.js.testOld.AbstractDceTest import org.jetbrains.kotlin.test.TargetBackend import org.jetbrains.kotlin.js.test.fir.AbstractFirLightTreeJsIrTextTest -import org.jetbrains.kotlin.js.testOld.klib.AbstractJsKlibEvolutionTest +import org.jetbrains.kotlin.js.testOld.klib.AbstractClassicJsKlibEvolutionTest +import org.jetbrains.kotlin.js.testOld.klib.AbstractFirJsKlibEvolutionTest fun main(args: Array) { System.setProperty("java.awt.headless", "true") @@ -68,7 +69,10 @@ fun main(args: Array) { } testGroup("js/js.tests/tests-gen", "compiler/testData/binaryCompatibility", testRunnerMethodName = "runTest0") { - testClass { + testClass { + model("klibEvolution", targetBackend = TargetBackend.JS_IR) + } + testClass { model("klibEvolution", targetBackend = TargetBackend.JS_IR) } } diff --git a/js/js.tests/test/org/jetbrains/kotlin/js/testOld/klib/AbstractJsKlibEvolutionTest.kt b/js/js.tests/test/org/jetbrains/kotlin/js/testOld/klib/AbstractJsKlibEvolutionTest.kt index f5fbd9eec46..35de0ae92d0 100644 --- a/js/js.tests/test/org/jetbrains/kotlin/js/testOld/klib/AbstractJsKlibEvolutionTest.kt +++ b/js/js.tests/test/org/jetbrains/kotlin/js/testOld/klib/AbstractJsKlibEvolutionTest.kt @@ -15,11 +15,32 @@ import org.jetbrains.kotlin.cli.jvm.compiler.EnvironmentConfigFiles import org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreEnvironment import org.jetbrains.kotlin.config.* import org.jetbrains.kotlin.js.testOld.V8JsTestChecker +import org.jetbrains.kotlin.js.testOld.klib.AbstractJsKlibEvolutionTest.Companion.klib import org.jetbrains.kotlin.library.KLIB_FILE_EXTENSION +import org.jetbrains.kotlin.test.Directives import org.jetbrains.kotlin.test.KotlinBaseTest import java.io.File -abstract class AbstractJsKlibEvolutionTest : AbstractKlibBinaryCompatibilityTest() { +abstract class AbstractClassicJsKlibEvolutionTest : AbstractJsKlibEvolutionTest(CompilerType.K1) +abstract class AbstractFirJsKlibEvolutionTest : AbstractJsKlibEvolutionTest(CompilerType.K2) { + // TODO: unmute after fixing KT-57711 + override fun isIgnoredTest(filePath: String): Boolean { + val fileName = filePath.substringAfterLast('/') + return fileName == "addOrRemoveConst.kt" || fileName == "changeConstInitialization.kt" + } +} + +abstract class AbstractJsKlibEvolutionTest(val compilerType: CompilerType) : AbstractKlibBinaryCompatibilityTest() { + enum class CompilerType { + K1, + K2 { + override fun setup(args: K2JSCompilerArguments) { + args.languageVersion = "2.0" // Activate FIR. + } + }; + + open fun setup(args: K2JSCompilerArguments) = Unit + } override fun createEnvironment() = KotlinCoreEnvironment.createForTests(testRootDisposable, CompilerConfiguration(), EnvironmentConfigFiles.JS_CONFIG_FILES) @@ -61,10 +82,11 @@ abstract class AbstractJsKlibEvolutionTest : AbstractKlibBinaryCompatibilityTest file.absolutePath } - private fun runnerFunctionFile(): String { + private fun runnerFunctionFile(): Pair { val file = File(workingDir, RUNNER_FUNCTION_FILE) + val text = runnerFileText file.writeText(runnerFileText) - return file.absolutePath + return text to file } override fun produceKlib(module: TestModule, version: Int) { @@ -76,20 +98,28 @@ abstract class AbstractJsKlibEvolutionTest : AbstractKlibBinaryCompatibilityTest irProduceKlibFile = true irOnly = true irModuleName = module.name + compilerType.setup(this) } K2JSCompiler().exec(TestMessageCollector(), Services.EMPTY, args) } override fun produceProgram(module: TestModule) { assert(!module.hasVersions) + + val (text, file) = runnerFunctionFile() + TestFile(module, file.name, text, Directives()) + + produceKlib(module, version = 2) + val args = K2JSCompilerArguments().apply { - freeArgs = createFiles(module.files) + runnerFunctionFile() libraries = module.dependenciesToLibrariesArg(version = 2) + includes = File(workingDir, module.name(version = 2).klib).absolutePath outputDir = jsOutDir.normalize().absolutePath moduleName = module.name irProduceJs = true irOnly = true irModuleName = module.name + compilerType.setup(this) } K2JSCompiler().exec(TestMessageCollector(), Services.EMPTY, args) } diff --git a/js/js.tests/tests-gen/org/jetbrains/kotlin/js/testOld/klib/JsKlibEvolutionTestGenerated.java b/js/js.tests/tests-gen/org/jetbrains/kotlin/js/testOld/klib/ClassicJsKlibEvolutionTestGenerated.java similarity index 99% rename from js/js.tests/tests-gen/org/jetbrains/kotlin/js/testOld/klib/JsKlibEvolutionTestGenerated.java rename to js/js.tests/tests-gen/org/jetbrains/kotlin/js/testOld/klib/ClassicJsKlibEvolutionTestGenerated.java index 480e6229562..4bd66bc6853 100644 --- a/js/js.tests/tests-gen/org/jetbrains/kotlin/js/testOld/klib/JsKlibEvolutionTestGenerated.java +++ b/js/js.tests/tests-gen/org/jetbrains/kotlin/js/testOld/klib/ClassicJsKlibEvolutionTestGenerated.java @@ -21,7 +21,7 @@ import java.util.regex.Pattern; @TestMetadata("compiler/testData/binaryCompatibility/klibEvolution") @TestDataPath("$PROJECT_ROOT") @RunWith(JUnit3RunnerWithInners.class) -public class JsKlibEvolutionTestGenerated extends AbstractJsKlibEvolutionTest { +public class ClassicJsKlibEvolutionTestGenerated extends AbstractClassicJsKlibEvolutionTest { private void runTest(String testDataFilePath) throws Exception { KotlinTestUtils.runTest0(this::doTest, TargetBackend.JS_IR, testDataFilePath); } diff --git a/js/js.tests/tests-gen/org/jetbrains/kotlin/js/testOld/klib/FirJsKlibEvolutionTestGenerated.java b/js/js.tests/tests-gen/org/jetbrains/kotlin/js/testOld/klib/FirJsKlibEvolutionTestGenerated.java new file mode 100644 index 00000000000..a31498b07e4 --- /dev/null +++ b/js/js.tests/tests-gen/org/jetbrains/kotlin/js/testOld/klib/FirJsKlibEvolutionTestGenerated.java @@ -0,0 +1,227 @@ +/* + * 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.js.testOld.klib; + +import com.intellij.testFramework.TestDataPath; +import org.jetbrains.kotlin.test.JUnit3RunnerWithInners; +import org.jetbrains.kotlin.test.KotlinTestUtils; +import org.jetbrains.kotlin.test.util.KtTestUtil; +import org.jetbrains.kotlin.test.TargetBackend; +import org.jetbrains.kotlin.test.TestMetadata; +import org.junit.runner.RunWith; + +import java.io.File; +import java.util.regex.Pattern; + +/** This class is generated by {@link org.jetbrains.kotlin.generators.tests.GenerateJsTestsKt}. DO NOT MODIFY MANUALLY */ +@SuppressWarnings("all") +@TestMetadata("compiler/testData/binaryCompatibility/klibEvolution") +@TestDataPath("$PROJECT_ROOT") +@RunWith(JUnit3RunnerWithInners.class) +public class FirJsKlibEvolutionTestGenerated extends AbstractFirJsKlibEvolutionTest { + private void runTest(String testDataFilePath) throws Exception { + KotlinTestUtils.runTest0(this::doTest, TargetBackend.JS_IR, testDataFilePath); + } + + @TestMetadata("addAbstractMemberBody.kt") + public void testAddAbstractMemberBody() throws Exception { + runTest("compiler/testData/binaryCompatibility/klibEvolution/addAbstractMemberBody.kt"); + } + + @TestMetadata("addCompanionObject.kt") + public void testAddCompanionObject() throws Exception { + runTest("compiler/testData/binaryCompatibility/klibEvolution/addCompanionObject.kt"); + } + + @TestMetadata("addDefaultImplementations.kt") + public void testAddDefaultImplementations() throws Exception { + runTest("compiler/testData/binaryCompatibility/klibEvolution/addDefaultImplementations.kt"); + } + + @TestMetadata("addEnumClassMember.kt") + public void testAddEnumClassMember() throws Exception { + runTest("compiler/testData/binaryCompatibility/klibEvolution/addEnumClassMember.kt"); + } + + @TestMetadata("addLateinitToVar.kt") + public void testAddLateinitToVar() throws Exception { + runTest("compiler/testData/binaryCompatibility/klibEvolution/addLateinitToVar.kt"); + } + + @TestMetadata("addOpenToClass.kt") + public void testAddOpenToClass() throws Exception { + runTest("compiler/testData/binaryCompatibility/klibEvolution/addOpenToClass.kt"); + } + + @TestMetadata("addOpenToMember.kt") + public void testAddOpenToMember() throws Exception { + runTest("compiler/testData/binaryCompatibility/klibEvolution/addOpenToMember.kt"); + } + + @TestMetadata("addOrRemoveConst.kt") + public void testAddOrRemoveConst() throws Exception { + runTest("compiler/testData/binaryCompatibility/klibEvolution/addOrRemoveConst.kt"); + } + + @TestMetadata("addOrRemoveInitBlock.kt") + public void testAddOrRemoveInitBlock() throws Exception { + runTest("compiler/testData/binaryCompatibility/klibEvolution/addOrRemoveInitBlock.kt"); + } + + @TestMetadata("addOverloads.kt") + public void testAddOverloads() throws Exception { + runTest("compiler/testData/binaryCompatibility/klibEvolution/addOverloads.kt"); + } + + @TestMetadata("addParameterDefaulValue.kt") + public void testAddParameterDefaulValue() throws Exception { + runTest("compiler/testData/binaryCompatibility/klibEvolution/addParameterDefaulValue.kt"); + } + + @TestMetadata("addPropertyAccessor.kt") + public void testAddPropertyAccessor() throws Exception { + runTest("compiler/testData/binaryCompatibility/klibEvolution/addPropertyAccessor.kt"); + } + + @TestMetadata("addingSealedClassMember.kt") + public void testAddingSealedClassMember() throws Exception { + runTest("compiler/testData/binaryCompatibility/klibEvolution/addingSealedClassMember.kt"); + } + + public void testAllFilesPresentInKlibEvolution() throws Exception { + KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("compiler/testData/binaryCompatibility/klibEvolution"), Pattern.compile("^(.+)\\.kt$"), null, TargetBackend.JS_IR, true); + } + + @TestMetadata("changeBaseClassOrder.kt") + public void testChangeBaseClassOrder() throws Exception { + runTest("compiler/testData/binaryCompatibility/klibEvolution/changeBaseClassOrder.kt"); + } + + @TestMetadata("changeCompanionToNestedObject.kt") + public void testChangeCompanionToNestedObject() throws Exception { + runTest("compiler/testData/binaryCompatibility/klibEvolution/changeCompanionToNestedObject.kt"); + } + + @TestMetadata("changeConstInitialization.kt") + public void testChangeConstInitialization() throws Exception { + runTest("compiler/testData/binaryCompatibility/klibEvolution/changeConstInitialization.kt"); + } + + @TestMetadata("changeNamesOfTypeParameters.kt") + public void testChangeNamesOfTypeParameters() throws Exception { + runTest("compiler/testData/binaryCompatibility/klibEvolution/changeNamesOfTypeParameters.kt"); + } + + @TestMetadata("changeObjectToCompanion.kt") + public void testChangeObjectToCompanion() throws Exception { + runTest("compiler/testData/binaryCompatibility/klibEvolution/changeObjectToCompanion.kt"); + } + + @TestMetadata("changeParameterDefaultValue.kt") + public void testChangeParameterDefaultValue() throws Exception { + runTest("compiler/testData/binaryCompatibility/klibEvolution/changeParameterDefaultValue.kt"); + } + + @TestMetadata("changePropertyFromValToVar.kt") + public void testChangePropertyFromValToVar() throws Exception { + runTest("compiler/testData/binaryCompatibility/klibEvolution/changePropertyFromValToVar.kt"); + } + + @TestMetadata("changePropertyInitialization.kt") + public void testChangePropertyInitialization() throws Exception { + runTest("compiler/testData/binaryCompatibility/klibEvolution/changePropertyInitialization.kt"); + } + + @TestMetadata("constructorParameterMarkValVar.kt") + public void testConstructorParameterMarkValVar() throws Exception { + runTest("compiler/testData/binaryCompatibility/klibEvolution/constructorParameterMarkValVar.kt"); + } + + @TestMetadata("deleteOverrideMember.kt") + public void testDeleteOverrideMember() throws Exception { + runTest("compiler/testData/binaryCompatibility/klibEvolution/deleteOverrideMember.kt"); + } + + @TestMetadata("deletePrivateMembers.kt") + public void testDeletePrivateMembers() throws Exception { + runTest("compiler/testData/binaryCompatibility/klibEvolution/deletePrivateMembers.kt"); + } + + @TestMetadata("inlineBodyChange.kt") + public void testInlineBodyChange() throws Exception { + runTest("compiler/testData/binaryCompatibility/klibEvolution/inlineBodyChange.kt"); + } + + @TestMetadata("inlineFunction.kt") + public void testInlineFunction() throws Exception { + runTest("compiler/testData/binaryCompatibility/klibEvolution/inlineFunction.kt"); + } + + @TestMetadata("makeFunctionInfixOrTailrec.kt") + public void testMakeFunctionInfixOrTailrec() throws Exception { + runTest("compiler/testData/binaryCompatibility/klibEvolution/makeFunctionInfixOrTailrec.kt"); + } + + @TestMetadata("moreSpecificBaseClass.kt") + public void testMoreSpecificBaseClass() throws Exception { + runTest("compiler/testData/binaryCompatibility/klibEvolution/moreSpecificBaseClass.kt"); + } + + @TestMetadata("moveMemberUpInHierarchy.kt") + public void testMoveMemberUpInHierarchy() throws Exception { + runTest("compiler/testData/binaryCompatibility/klibEvolution/moveMemberUpInHierarchy.kt"); + } + + @TestMetadata("newFakeOverride.kt") + public void testNewFakeOverride() throws Exception { + runTest("compiler/testData/binaryCompatibility/klibEvolution/newFakeOverride.kt"); + } + + @TestMetadata("newOverrideMember.kt") + public void testNewOverrideMember() throws Exception { + runTest("compiler/testData/binaryCompatibility/klibEvolution/newOverrideMember.kt"); + } + + @TestMetadata("removeAbstractFromClass.kt") + public void testRemoveAbstractFromClass() throws Exception { + runTest("compiler/testData/binaryCompatibility/klibEvolution/removeAbstractFromClass.kt"); + } + + @TestMetadata("removeInfixOrTailrecFromFunction.kt") + public void testRemoveInfixOrTailrecFromFunction() throws Exception { + runTest("compiler/testData/binaryCompatibility/klibEvolution/removeInfixOrTailrecFromFunction.kt"); + } + + @TestMetadata("removeLateinitFromVar.kt") + public void testRemoveLateinitFromVar() throws Exception { + runTest("compiler/testData/binaryCompatibility/klibEvolution/removeLateinitFromVar.kt"); + } + + @TestMetadata("removePropertyAccessor.kt") + public void testRemovePropertyAccessor() throws Exception { + runTest("compiler/testData/binaryCompatibility/klibEvolution/removePropertyAccessor.kt"); + } + + @TestMetadata("renameArguments.kt") + public void testRenameArguments() throws Exception { + runTest("compiler/testData/binaryCompatibility/klibEvolution/renameArguments.kt"); + } + + @TestMetadata("reorderClassConstructors.kt") + public void testReorderClassConstructors() throws Exception { + runTest("compiler/testData/binaryCompatibility/klibEvolution/reorderClassConstructors.kt"); + } + + @TestMetadata("turnClassIntoDataClass.kt") + public void testTurnClassIntoDataClass() throws Exception { + runTest("compiler/testData/binaryCompatibility/klibEvolution/turnClassIntoDataClass.kt"); + } + + @TestMetadata("widenSuperMemberVisibility.kt") + public void testWidenSuperMemberVisibility() throws Exception { + runTest("compiler/testData/binaryCompatibility/klibEvolution/widenSuperMemberVisibility.kt"); + } +}