Skip to content

Commit fe65045

Browse files
tihonovcoreromanart
authored andcommitted
[JS BE] add es6 BE and relevant generated tests
1 parent a231b21 commit fe65045

File tree

12 files changed

+37011
-11
lines changed

12 files changed

+37011
-11
lines changed

compiler/tests-common/tests/org/jetbrains/kotlin/test/TargetBackend.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ enum class TargetBackend(
1515
JVM_IR(true, JVM),
1616
JS(false),
1717
JS_IR(true, JS),
18+
JS_IR_ES6(true, JS_IR),
1819
WASM(true),
1920
ANDROID(false, JVM);
2021

js/js.tests/build.gradle.kts

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -112,6 +112,7 @@ fun Test.setUpJsBoxTests(jsEnabled: Boolean, jsIrEnabled: Boolean) {
112112
}
113113

114114
exclude("org/jetbrains/kotlin/js/test/wasm/semantics/*")
115+
exclude("org/jetbrains/kotlin/js/test/es6/semantics/*")
115116

116117
if (jsEnabled && !jsIrEnabled) exclude("org/jetbrains/kotlin/js/test/ir/semantics/*")
117118
if (!jsEnabled && jsIrEnabled) include("org/jetbrains/kotlin/js/test/ir/semantics/*")
@@ -148,6 +149,28 @@ projectTest("jsIrTest", true) {
148149
setUpJsBoxTests(jsEnabled = false, jsIrEnabled = true)
149150
}
150151

152+
projectTest("jsEs6IrTest", true) {
153+
systemProperty("kotlin.js.ir.pir", "false")
154+
systemProperty("kotlin.js.ir.es6", "true")
155+
156+
dependsOn(":dist")
157+
dependsOn(":kotlin-stdlib-js-ir:compileKotlinJs")
158+
systemProperty("kotlin.js.full.stdlib.path", "libraries/stdlib/js-ir/build/classes/kotlin/js/main")
159+
dependsOn(":kotlin-stdlib-js-ir-minimal-for-test:compileKotlinJs")
160+
systemProperty("kotlin.js.reduced.stdlib.path", "libraries/stdlib/js-ir-minimal-for-test/build/classes/kotlin/js/main")
161+
dependsOn(":kotlin-test:kotlin-test-js-ir:compileKotlinJs")
162+
systemProperty("kotlin.js.kotlin.test.path", "libraries/kotlin.test/js-ir/build/classes/kotlin/js/main")
163+
164+
exclude("org/jetbrains/kotlin/js/test/wasm/semantics/*")
165+
exclude("org/jetbrains/kotlin/js/test/ir/semantics/*")
166+
exclude("org/jetbrains/kotlin/js/test/semantics/*")
167+
168+
include("org/jetbrains/kotlin/js/test/es6/semantics/*")
169+
170+
jvmArgs("-da:jdk.nashorn.internal.runtime.RecompilableScriptFunctionData") // Disable assertion which fails due to a bug in nashorn (KT-23637)
171+
setUpBoxTests()
172+
}
173+
151174
projectTest("jsPirTest", true) {
152175
systemProperty("kotlin.js.ir.skipRegularMode", "true")
153176
setUpJsBoxTests(jsEnabled = false, jsIrEnabled = true)

js/js.tests/test/org/jetbrains/kotlin/generators/tests/GenerateJsTests.kt

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ package org.jetbrains.kotlin.generators.tests
88
import org.jetbrains.kotlin.generators.tests.generator.testGroup
99
import org.jetbrains.kotlin.js.test.AbstractDceTest
1010
import org.jetbrains.kotlin.js.test.AbstractJsLineNumberTest
11+
import org.jetbrains.kotlin.js.test.es6.semantics.*
1112
import org.jetbrains.kotlin.js.test.ir.semantics.*
1213
import org.jetbrains.kotlin.js.test.semantics.*
1314
import org.jetbrains.kotlin.js.test.wasm.semantics.AbstractIrWasmBoxWasmTest
@@ -28,10 +29,18 @@ fun main(args: Array<String>) {
2829
model("box/", pattern = "^([^_](.+))\\.kt$", targetBackend = TargetBackend.JS_IR)
2930
}
3031

32+
testClass<AbstractIrBoxJsES6Test> {
33+
model("box/", pattern = "^([^_](.+))\\.kt$", targetBackend = TargetBackend.JS_IR_ES6)
34+
}
35+
3136
testClass<AbstractIrJsTypeScriptExportTest> {
3237
model("typescript-export/", pattern = "^([^_](.+))\\.kt$", targetBackend = TargetBackend.JS_IR)
3338
}
3439

40+
testClass<AbstractIrJsTypeScriptExportES6Test> {
41+
model("typescript-export/", pattern = "^([^_](.+))\\.kt$", targetBackend = TargetBackend.JS_IR_ES6)
42+
}
43+
3544
testClass<AbstractLegacyJsTypeScriptExportTest> {
3645
model("typescript-export/", pattern = "^([^_](.+))\\.kt$", targetBackend = TargetBackend.JS)
3746
}
@@ -71,6 +80,10 @@ fun main(args: Array<String>) {
7180
model("codegen/box", targetBackend = TargetBackend.JS_IR)
7281
}
7382

83+
testClass<AbstractIrJsCodegenBoxES6Test> {
84+
model("codegen/box", targetBackend = TargetBackend.JS_IR_ES6)
85+
}
86+
7487
testClass<AbstractJsCodegenInlineTest> {
7588
model("codegen/boxInline/", targetBackend = TargetBackend.JS)
7689
}
@@ -79,6 +92,10 @@ fun main(args: Array<String>) {
7992
model("codegen/boxInline/", targetBackend = TargetBackend.JS_IR)
8093
}
8194

95+
testClass<AbstractIrJsCodegenInlineES6Test> {
96+
model("codegen/boxInline/", targetBackend = TargetBackend.JS_IR_ES6)
97+
}
98+
8299
testClass<AbstractJsLegacyPrimitiveArraysBoxTest> {
83100
model("codegen/box/arrays", targetBackend = TargetBackend.JS)
84101
}

js/js.tests/test/org/jetbrains/kotlin/js/test/BasicBoxTest.kt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -178,7 +178,7 @@ abstract class BasicBoxTest(
178178
module.name.endsWith(OLD_MODULE_SUFFIX) -> null
179179
// JS_IR generates single js file for all modules (apart from runtime).
180180
// TODO: Split and refactor test runner for JS_IR
181-
targetBackend == TargetBackend.JS_IR && !isMainModule -> null
181+
targetBackend in listOf(TargetBackend.JS_IR, TargetBackend.JS_IR_ES6) && !isMainModule -> null
182182
else -> Pair(outputFileName, module)
183183
}
184184
}
@@ -680,6 +680,7 @@ abstract class BasicBoxTest(
680680
}
681681

682682
val libraries = when (targetBackend) {
683+
TargetBackend.JS_IR_ES6 -> dependencies
683684
TargetBackend.JS_IR -> dependencies
684685
TargetBackend.JS -> JsConfig.JS_STDLIB + JsConfig.JS_KOTLIN_TEST + dependencies
685686
else -> error("Unsupported target backend: $targetBackend")
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
/*
2+
* Copyright 2010-2020 JetBrains s.r.o. and Kotlin Programming Language contributors.
3+
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
4+
*/
5+
6+
package org.jetbrains.kotlin.js.test
7+
8+
import org.jetbrains.kotlin.test.TargetBackend
9+
10+
abstract class BasicIrBoxES6Test(
11+
pathToTestDir: String,
12+
testGroupOutputDirPrefix: String
13+
) : BasicIrBoxTest(
14+
pathToTestDir,
15+
testGroupOutputDirPrefix,
16+
targetBackend = TargetBackend.JS_IR_ES6
17+
)

js/js.tests/test/org/jetbrains/kotlin/js/test/BasicIrBoxTest.kt

Lines changed: 15 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ import org.jetbrains.kotlin.js.config.JsConfig
1616
import org.jetbrains.kotlin.js.facade.MainCallParameters
1717
import org.jetbrains.kotlin.js.facade.TranslationUnit
1818
import org.jetbrains.kotlin.name.FqName
19+
import org.jetbrains.kotlin.parsing.parseBoolean
1920
import org.jetbrains.kotlin.test.TargetBackend
2021
import org.jetbrains.kotlin.utils.fileUtils.withReplacedExtensionOrNull
2122
import java.io.File
@@ -30,28 +31,31 @@ abstract class BasicIrBoxTest(
3031
testGroupOutputDirPrefix: String,
3132
pathToRootOutputDir: String = TEST_DATA_DIR_PATH,
3233
generateSourceMap: Boolean = false,
33-
generateNodeJsRunner: Boolean = false
34+
generateNodeJsRunner: Boolean = false,
35+
targetBackend: TargetBackend = TargetBackend.JS_IR
3436
) : BasicBoxTest(
3537
pathToTestDir,
3638
testGroupOutputDirPrefix,
3739
pathToRootOutputDir = pathToRootOutputDir,
3840
typedArraysEnabled = true,
3941
generateSourceMap = generateSourceMap,
4042
generateNodeJsRunner = generateNodeJsRunner,
41-
targetBackend = TargetBackend.JS_IR
43+
targetBackend = targetBackend
4244
) {
4345
open val generateDts = false
4446

4547
override val skipMinification = true
4648

47-
private fun getBoolean(s: String, default: Boolean) = System.getProperty(s)?.let { getBoolean(it) } ?: default
49+
private fun getBoolean(s: String, default: Boolean) = System.getProperty(s)?.let { parseBoolean(it) } ?: default
4850

4951
override val skipRegularMode: Boolean = getBoolean("kotlin.js.ir.skipRegularMode")
5052

5153
override val runIrDce: Boolean = getBoolean("kotlin.js.ir.dce", true)
5254

5355
override val runIrPir: Boolean = getBoolean("kotlin.js.ir.pir", true)
5456

57+
val runEs6Mode: Boolean = getBoolean("kotlin.js.ir.es6", false)
58+
5559
// TODO Design incremental compilation for IR and add test support
5660
override val incrementalCompilationChecksEnabled = false
5761

@@ -104,19 +108,20 @@ abstract class BasicIrBoxTest(
104108
if (isMainModule) {
105109
val debugMode = getBoolean("kotlin.js.debugMode")
106110

111+
val phases = if (runEs6Mode) jsEs6Phases else jsPhases
107112
val phaseConfig = if (debugMode) {
108-
val allPhasesSet = jsPhases.toPhaseMap().values.toSet()
113+
val allPhasesSet = phases.toPhaseMap().values.toSet()
109114
val dumpOutputDir = File(outputFile.parent, outputFile.nameWithoutExtension + "-irdump")
110115
println("\n ------ Dumping phases to file://$dumpOutputDir")
111116
PhaseConfig(
112-
jsPhases,
117+
phases,
113118
dumpToDirectory = dumpOutputDir.path,
114119
toDumpStateAfter = allPhasesSet,
115120
toValidateStateAfter = allPhasesSet,
116121
dumpOnlyFqName = null
117122
)
118123
} else {
119-
PhaseConfig(jsPhases)
124+
PhaseConfig(phases)
120125
}
121126

122127
if (!skipRegularMode) {
@@ -131,7 +136,8 @@ abstract class BasicIrBoxTest(
131136
mainArguments = mainCallParameters.run { if (shouldBeGenerated()) arguments() else null },
132137
exportedDeclarations = setOf(FqName.fromSegments(listOfNotNull(testPackage, testFunction))),
133138
generateFullJs = true,
134-
generateDceJs = runIrDce
139+
generateDceJs = runIrDce,
140+
es6mode = runEs6Mode
135141
)
136142

137143
val wrappedCode =
@@ -161,7 +167,8 @@ abstract class BasicIrBoxTest(
161167
friendDependencies = emptyList(),
162168
mainArguments = mainCallParameters.run { if (shouldBeGenerated()) arguments() else null },
163169
exportedDeclarations = setOf(FqName.fromSegments(listOfNotNull(testPackage, testFunction))),
164-
dceDriven = true
170+
dceDriven = true,
171+
es6mode = runEs6Mode
165172
).jsCode!!.let { pirCode ->
166173
val pirWrappedCode = wrapWithModuleEmulationMarkers(pirCode, moduleId = config.moduleId, moduleKind = config.moduleKind)
167174
pirOutputFile.write(pirWrappedCode)

0 commit comments

Comments
 (0)