[JS IR IC] Add Partial Linkage test
diff --git a/js/js.tests/test/org/jetbrains/kotlin/incremental/AbstractInvalidationTest.kt b/js/js.tests/test/org/jetbrains/kotlin/incremental/AbstractInvalidationTest.kt
index 236726a..48f5a40 100644
--- a/js/js.tests/test/org/jetbrains/kotlin/incremental/AbstractInvalidationTest.kt
+++ b/js/js.tests/test/org/jetbrains/kotlin/incremental/AbstractInvalidationTest.kt
@@ -12,7 +12,10 @@
import com.intellij.psi.SingleRootFileViewProvider
import org.jetbrains.kotlin.backend.common.phaser.PhaseConfig
import org.jetbrains.kotlin.backend.common.phaser.toPhaseMap
+import org.jetbrains.kotlin.cli.common.CLIConfigurationKeys
import org.jetbrains.kotlin.cli.common.messages.AnalyzerWithCompilerReport
+import org.jetbrains.kotlin.cli.common.messages.MessageRenderer
+import org.jetbrains.kotlin.cli.common.messages.PrintingMessageCollector
import org.jetbrains.kotlin.cli.js.klib.generateIrForKlibSerialization
import org.jetbrains.kotlin.cli.jvm.compiler.EnvironmentConfigFiles
import org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreEnvironment
@@ -120,6 +123,7 @@
copy.put(JSConfigurationKeys.MODULE_KIND, JS_MODULE_KIND)
copy.put(JSConfigurationKeys.PROPERTY_LAZY_INITIALIZATION, true)
copy.put(JSConfigurationKeys.SOURCE_MAP, true)
+ copy.put(JSConfigurationKeys.PARTIAL_LINKAGE, true)
copy.languageVersionSettings = with(LanguageVersionSettingsBuilder()) {
language.forEach {
diff --git a/js/js.tests/tests-gen/org/jetbrains/kotlin/incremental/JsIrES6InvalidationTestGenerated.java b/js/js.tests/tests-gen/org/jetbrains/kotlin/incremental/JsIrES6InvalidationTestGenerated.java
index 415c18f..08b1706 100644
--- a/js/js.tests/tests-gen/org/jetbrains/kotlin/incremental/JsIrES6InvalidationTestGenerated.java
+++ b/js/js.tests/tests-gen/org/jetbrains/kotlin/incremental/JsIrES6InvalidationTestGenerated.java
@@ -300,6 +300,11 @@
runTest("js/js.translator/testData/incremental/invalidation/nonInlineBecomeInline/");
}
+ @TestMetadata("partialLinkage")
+ public void testPartialLinkage() throws Exception {
+ runTest("js/js.translator/testData/incremental/invalidation/partialLinkage/");
+ }
+
@TestMetadata("privateDeclarationLeakThroughDefaultParam")
public void testPrivateDeclarationLeakThroughDefaultParam() throws Exception {
runTest("js/js.translator/testData/incremental/invalidation/privateDeclarationLeakThroughDefaultParam/");
diff --git a/js/js.tests/tests-gen/org/jetbrains/kotlin/incremental/JsIrInvalidationTestGenerated.java b/js/js.tests/tests-gen/org/jetbrains/kotlin/incremental/JsIrInvalidationTestGenerated.java
index 420db07..7a635ac 100644
--- a/js/js.tests/tests-gen/org/jetbrains/kotlin/incremental/JsIrInvalidationTestGenerated.java
+++ b/js/js.tests/tests-gen/org/jetbrains/kotlin/incremental/JsIrInvalidationTestGenerated.java
@@ -300,6 +300,11 @@
runTest("js/js.translator/testData/incremental/invalidation/nonInlineBecomeInline/");
}
+ @TestMetadata("partialLinkage")
+ public void testPartialLinkage() throws Exception {
+ runTest("js/js.translator/testData/incremental/invalidation/partialLinkage/");
+ }
+
@TestMetadata("privateDeclarationLeakThroughDefaultParam")
public void testPrivateDeclarationLeakThroughDefaultParam() throws Exception {
runTest("js/js.translator/testData/incremental/invalidation/privateDeclarationLeakThroughDefaultParam/");
diff --git a/js/js.translator/testData/incremental/invalidation/partialLinkage/lib1/l1.0.kt b/js/js.translator/testData/incremental/invalidation/partialLinkage/lib1/l1.0.kt
new file mode 100644
index 0000000..22669f4
--- /dev/null
+++ b/js/js.translator/testData/incremental/invalidation/partialLinkage/lib1/l1.0.kt
@@ -0,0 +1 @@
+fun foo() = 0
diff --git a/js/js.translator/testData/incremental/invalidation/partialLinkage/lib1/l1.1.kt b/js/js.translator/testData/incremental/invalidation/partialLinkage/lib1/l1.1.kt
new file mode 100644
index 0000000..0f63571
--- /dev/null
+++ b/js/js.translator/testData/incremental/invalidation/partialLinkage/lib1/l1.1.kt
@@ -0,0 +1 @@
+fun foo(x: Int) = x + 1
diff --git a/js/js.translator/testData/incremental/invalidation/partialLinkage/lib1/l1.2.kt b/js/js.translator/testData/incremental/invalidation/partialLinkage/lib1/l1.2.kt
new file mode 100644
index 0000000..07eb95e
--- /dev/null
+++ b/js/js.translator/testData/incremental/invalidation/partialLinkage/lib1/l1.2.kt
@@ -0,0 +1 @@
+fun foo() = 2
diff --git a/js/js.translator/testData/incremental/invalidation/partialLinkage/lib1/module.info b/js/js.translator/testData/incremental/invalidation/partialLinkage/lib1/module.info
new file mode 100644
index 0000000..89b531e
--- /dev/null
+++ b/js/js.translator/testData/incremental/invalidation/partialLinkage/lib1/module.info
@@ -0,0 +1,13 @@
+STEP 0:
+ modifications:
+ U : l1.0.kt -> l1.kt
+ added file: l1.kt
+STEP 1:
+ modifications:
+ U : l1.1.kt -> l1.kt
+ modified ir: l1.kt
+ updated exports: l1.kt
+STEP 2:
+ modifications:
+ U : l1.2.kt -> l1.kt
+ modified ir: l1.kt
diff --git a/js/js.translator/testData/incremental/invalidation/partialLinkage/main/m.kt b/js/js.translator/testData/incremental/invalidation/partialLinkage/main/m.kt
new file mode 100644
index 0000000..ce9d5a03
--- /dev/null
+++ b/js/js.translator/testData/incremental/invalidation/partialLinkage/main/m.kt
@@ -0,0 +1,8 @@
+fun box(stepId: Int): String {
+ val x = test()
+ when (stepId) {
+ in 0..2 -> if (stepId != x) return "Fail; got $x"
+ else -> return "Unknown"
+ }
+ return "OK"
+}
diff --git a/js/js.translator/testData/incremental/invalidation/partialLinkage/main/module.info b/js/js.translator/testData/incremental/invalidation/partialLinkage/main/module.info
new file mode 100644
index 0000000..7981283
--- /dev/null
+++ b/js/js.translator/testData/incremental/invalidation/partialLinkage/main/module.info
@@ -0,0 +1,12 @@
+STEP 0:
+ dependencies: lib1
+ modifications:
+ U : test.0.kt -> test.kt
+ added file: m.kt, test.kt
+STEP 1:
+ dependencies: lib1
+ rebuild klib: false
+ updated imports: test.kt
+STEP 2:
+ dependencies: lib1
+ rebuild klib: false
diff --git a/js/js.translator/testData/incremental/invalidation/partialLinkage/main/test.0.kt b/js/js.translator/testData/incremental/invalidation/partialLinkage/main/test.0.kt
new file mode 100644
index 0000000..b91367b
--- /dev/null
+++ b/js/js.translator/testData/incremental/invalidation/partialLinkage/main/test.0.kt
@@ -0,0 +1,7 @@
+fun test(): Int {
+ try {
+ return foo()
+ } catch (e: Error) {
+ return 1
+ }
+}
diff --git a/js/js.translator/testData/incremental/invalidation/partialLinkage/project.info b/js/js.translator/testData/incremental/invalidation/partialLinkage/project.info
new file mode 100644
index 0000000..48eccd6
--- /dev/null
+++ b/js/js.translator/testData/incremental/invalidation/partialLinkage/project.info
@@ -0,0 +1,8 @@
+MODULES: lib1, main
+
+STEP 0..1:
+ libs: lib1, main
+ dirty js: lib1, main
+STEP 2:
+ libs: lib1, main
+ dirty js: lib1