[JS IR] Add tests for JS code KLIB diagnostics

^KT-62425
This commit is contained in:
Alexander Korepanov
2023-10-11 12:19:27 +02:00
committed by Space Team
parent 261527939b
commit 4ebfed04d3
22 changed files with 1223 additions and 0 deletions
@@ -0,0 +1,13 @@
// FIR_IDENTICAL
fun testSimpleString() {
js("var a = 123;")
}
fun testSimpleStringPlus() {
js("var a" + "=" + "123;")
}
fun testSimpleStringConcat() {
js("var a${"="}123;")
}
@@ -0,0 +1,96 @@
// FIR_DIFFERENCE
// The difference is okay: K1 and K2 report a bit differently
// MODULE: lib1
// FILE: A.kt
class ClassFromOtherModule {
companion object {
val valFromOtherModuleCompanion = "valFromOtherModuleCompanion"
}
}
// FILE: B.kt
class ClassFromOtherModule2 {
companion object {
val valFromOtherModuleCompanion2 = ClassFromOtherModule.valFromOtherModuleCompanion + "2"
}
}
// MODULE: main(lib1)
// FILE: A.kt
class ClassFromOtherFile {
companion object {
val valFromOtherFileCompanion = "valFromOtherFileCompanion"
}
}
// FILE: B.kt
class ClassFromOtherFile2 {
companion object {
val valFromOtherFileCompanion2 = ClassFromOtherFile.valFromOtherFileCompanion + "2"
}
}
// FILE: Main.kt
class ClassFromThisFile {
companion object {
val valFromThisFileCompanion = "valFromThisFileCompanion"
fun testCompanionFromThisCompanion() {
js(<!JSCODE_CAN_NOT_VERIFY_JAVASCRIPT!>"var ${<!JSCODE_ARGUMENT_NON_CONST_EXPRESSION!>valFromThisFileCompanion<!>} = 1;"<!>)
js(<!JSCODE_CAN_NOT_VERIFY_JAVASCRIPT!>"var " + <!JSCODE_ARGUMENT_NON_CONST_EXPRESSION!>valFromThisFileCompanion<!> + " = 1;"<!>)
}
}
fun testCompanionFromThis() {
js(<!JSCODE_CAN_NOT_VERIFY_JAVASCRIPT!>"var ${<!JSCODE_ARGUMENT_NON_CONST_EXPRESSION!>valFromThisFileCompanion<!>} = 1;"<!>)
js(<!JSCODE_CAN_NOT_VERIFY_JAVASCRIPT!>"var " + <!JSCODE_ARGUMENT_NON_CONST_EXPRESSION!>valFromThisFileCompanion<!> + " = 1;"<!>)
}
}
class ClassFromThisFile2 {
companion object {
val valFromThisFileCompanion2 = ClassFromThisFile.valFromThisFileCompanion + "2"
fun testCompanionFromThisCompanion() {
js(<!JSCODE_CAN_NOT_VERIFY_JAVASCRIPT!>"var ${<!JSCODE_ARGUMENT_NON_CONST_EXPRESSION!>valFromThisFileCompanion2<!>} = 1;"<!>)
js(<!JSCODE_CAN_NOT_VERIFY_JAVASCRIPT!>"var " + <!JSCODE_ARGUMENT_NON_CONST_EXPRESSION!>valFromThisFileCompanion2<!> + " = 1;"<!>)
}
}
fun testCompanionFromThis() {
js(<!JSCODE_CAN_NOT_VERIFY_JAVASCRIPT!>"var ${<!JSCODE_ARGUMENT_NON_CONST_EXPRESSION!>valFromThisFileCompanion2<!>} = 1;"<!>)
js(<!JSCODE_CAN_NOT_VERIFY_JAVASCRIPT!>"var " + <!JSCODE_ARGUMENT_NON_CONST_EXPRESSION!>valFromThisFileCompanion2<!> + " = 1;"<!>)
}
}
fun testCompanionValFromOtherModule() {
js(<!JSCODE_CAN_NOT_VERIFY_JAVASCRIPT!>"var ${<!JSCODE_ARGUMENT_NON_CONST_EXPRESSION!>ClassFromOtherModule.valFromOtherModuleCompanion<!>} = 1;"<!>)
js(<!JSCODE_CAN_NOT_VERIFY_JAVASCRIPT!>"var " + <!JSCODE_ARGUMENT_NON_CONST_EXPRESSION!>ClassFromOtherModule.valFromOtherModuleCompanion<!> + " = 1;"<!>)
}
fun testCompanionValFromOtherModule2() {
js(<!JSCODE_CAN_NOT_VERIFY_JAVASCRIPT!>"var ${<!JSCODE_ARGUMENT_NON_CONST_EXPRESSION!>ClassFromOtherModule2.valFromOtherModuleCompanion2<!>} = 1;"<!>)
js(<!JSCODE_CAN_NOT_VERIFY_JAVASCRIPT!>"var " + <!JSCODE_ARGUMENT_NON_CONST_EXPRESSION!>ClassFromOtherModule2.valFromOtherModuleCompanion2<!> + " = 1;"<!>)
}
fun testCompanionValFromOtherFile() {
js(<!JSCODE_CAN_NOT_VERIFY_JAVASCRIPT!>"var ${<!JSCODE_ARGUMENT_NON_CONST_EXPRESSION!>ClassFromOtherFile.valFromOtherFileCompanion<!>} = 1;"<!>)
js(<!JSCODE_CAN_NOT_VERIFY_JAVASCRIPT!>"var " + <!JSCODE_ARGUMENT_NON_CONST_EXPRESSION!>ClassFromOtherFile.valFromOtherFileCompanion<!> + " = 1;"<!>)
}
fun testCompanionValFromOtherFile2() {
js(<!JSCODE_CAN_NOT_VERIFY_JAVASCRIPT!>"var ${<!JSCODE_ARGUMENT_NON_CONST_EXPRESSION!>ClassFromOtherFile2.valFromOtherFileCompanion2<!>} = 1;"<!>)
js(<!JSCODE_CAN_NOT_VERIFY_JAVASCRIPT!>"var " + <!JSCODE_ARGUMENT_NON_CONST_EXPRESSION!>ClassFromOtherFile2.valFromOtherFileCompanion2<!> + " = 1;"<!>)
}
fun testCompanionValFromThisFile() {
js(<!JSCODE_CAN_NOT_VERIFY_JAVASCRIPT!>"var ${<!JSCODE_ARGUMENT_NON_CONST_EXPRESSION!>ClassFromThisFile.valFromThisFileCompanion<!>} = 1;"<!>)
js(<!JSCODE_CAN_NOT_VERIFY_JAVASCRIPT!>"var " + <!JSCODE_ARGUMENT_NON_CONST_EXPRESSION!>ClassFromThisFile.valFromThisFileCompanion<!> + " = 1;"<!>)
}
fun testCompanionValFromThisFile2() {
js(<!JSCODE_CAN_NOT_VERIFY_JAVASCRIPT!>"var ${<!JSCODE_ARGUMENT_NON_CONST_EXPRESSION!>ClassFromThisFile2.valFromThisFileCompanion2<!>} = 1;"<!>)
js(<!JSCODE_CAN_NOT_VERIFY_JAVASCRIPT!>"var " + <!JSCODE_ARGUMENT_NON_CONST_EXPRESSION!>ClassFromThisFile2.valFromThisFileCompanion2<!> + " = 1;"<!>)
}
@@ -0,0 +1,96 @@
// FIR_DIFFERENCE
// The difference is okay: K1 and K2 report a bit differently
// MODULE: lib1
// FILE: A.kt
class ClassFromOtherModule {
companion object {
val valFromOtherModuleCompanion = "valFromOtherModuleCompanion"
}
}
// FILE: B.kt
class ClassFromOtherModule2 {
companion object {
val valFromOtherModuleCompanion2 = ClassFromOtherModule.valFromOtherModuleCompanion + "2"
}
}
// MODULE: main(lib1)
// FILE: A.kt
class ClassFromOtherFile {
companion object {
val valFromOtherFileCompanion = "valFromOtherFileCompanion"
}
}
// FILE: B.kt
class ClassFromOtherFile2 {
companion object {
val valFromOtherFileCompanion2 = ClassFromOtherFile.valFromOtherFileCompanion + "2"
}
}
// FILE: Main.kt
class ClassFromThisFile {
companion object {
val valFromThisFileCompanion = "valFromThisFileCompanion"
fun testCompanionFromThisCompanion() {
js("var ${<!JSCODE_ARGUMENT_NON_CONST_EXPRESSION!>valFromThisFileCompanion<!>} = 1;")
js("var " + <!JSCODE_ARGUMENT_NON_CONST_EXPRESSION!>valFromThisFileCompanion<!> + " = 1;")
}
}
fun testCompanionFromThis() {
js("var ${<!JSCODE_ARGUMENT_NON_CONST_EXPRESSION!>valFromThisFileCompanion<!>} = 1;")
js("var " + <!JSCODE_ARGUMENT_NON_CONST_EXPRESSION!>valFromThisFileCompanion<!> + " = 1;")
}
}
class ClassFromThisFile2 {
companion object {
val valFromThisFileCompanion2 = ClassFromThisFile.valFromThisFileCompanion + "2"
fun testCompanionFromThisCompanion() {
js("var ${<!JSCODE_ARGUMENT_NON_CONST_EXPRESSION!>valFromThisFileCompanion2<!>} = 1;")
js("var " + <!JSCODE_ARGUMENT_NON_CONST_EXPRESSION!>valFromThisFileCompanion2<!> + " = 1;")
}
}
fun testCompanionFromThis() {
js("var ${<!JSCODE_ARGUMENT_NON_CONST_EXPRESSION!>valFromThisFileCompanion2<!>} = 1;")
js("var " + <!JSCODE_ARGUMENT_NON_CONST_EXPRESSION!>valFromThisFileCompanion2<!> + " = 1;")
}
}
fun testCompanionValFromOtherModule() {
js("var ${ClassFromOtherModule.<!JSCODE_ARGUMENT_NON_CONST_EXPRESSION!>valFromOtherModuleCompanion<!>} = 1;")
js("var " + ClassFromOtherModule.<!JSCODE_ARGUMENT_NON_CONST_EXPRESSION!>valFromOtherModuleCompanion<!> + " = 1;")
}
fun testCompanionValFromOtherModule2() {
js("var ${ClassFromOtherModule2.<!JSCODE_ARGUMENT_NON_CONST_EXPRESSION!>valFromOtherModuleCompanion2<!>} = 1;")
js("var " + ClassFromOtherModule2.<!JSCODE_ARGUMENT_NON_CONST_EXPRESSION!>valFromOtherModuleCompanion2<!> + " = 1;")
}
fun testCompanionValFromOtherFile() {
js("var ${ClassFromOtherFile.<!JSCODE_ARGUMENT_NON_CONST_EXPRESSION!>valFromOtherFileCompanion<!>} = 1;")
js("var " + ClassFromOtherFile.<!JSCODE_ARGUMENT_NON_CONST_EXPRESSION!>valFromOtherFileCompanion<!> + " = 1;")
}
fun testCompanionValFromOtherFile2() {
js("var ${ClassFromOtherFile2.<!JSCODE_ARGUMENT_NON_CONST_EXPRESSION!>valFromOtherFileCompanion2<!>} = 1;")
js("var " + ClassFromOtherFile2.<!JSCODE_ARGUMENT_NON_CONST_EXPRESSION!>valFromOtherFileCompanion2<!> + " = 1;")
}
fun testCompanionValFromThisFile() {
js("var ${ClassFromThisFile.<!JSCODE_ARGUMENT_NON_CONST_EXPRESSION!>valFromThisFileCompanion<!>} = 1;")
js("var " + ClassFromThisFile.<!JSCODE_ARGUMENT_NON_CONST_EXPRESSION!>valFromThisFileCompanion<!> + " = 1;")
}
fun testCompanionValFromThisFile2() {
js("var ${ClassFromThisFile2.<!JSCODE_ARGUMENT_NON_CONST_EXPRESSION!>valFromThisFileCompanion2<!>} = 1;")
js("var " + ClassFromThisFile2.<!JSCODE_ARGUMENT_NON_CONST_EXPRESSION!>valFromThisFileCompanion2<!> + " = 1;")
}
@@ -0,0 +1,76 @@
// FIR_IDENTICAL
// MODULE: lib1
// FILE: A.kt
const val constFromOtherModule = "constFromOtherModule"
class ClassFromOtherModule {
companion object {
const val constFromOtherModuleCompanion = "constFromOtherModuleCompanion"
}
}
// MODULE: main(lib1)
// FILE: A.kt
const val constFromOtherFile = "constFromOtherFile"
class ClassFromOtherFile {
companion object {
const val constFromOtherFileCompanion = "constFromOtherFileCompanion"
}
}
// FILE: Main.kt
const val constFromThisFile = "constFromThisFile"
open class ClassFromThisFile {
companion object {
const val constFromThisFileCompanion = "constFromThisFileCompanion"
fun testCompanionFromThisCompanion() {
js("var ${constFromThisFileCompanion} = 1;")
js("var " + constFromThisFileCompanion + " = 1;")
}
}
fun testCompanionFromThis() {
js("var ${constFromThisFileCompanion} = 1;")
js("var " + constFromThisFileCompanion + " = 1;")
}
}
class Class: ClassFromThisFile() {
fun testCompanionFromParent() {
js("var ${constFromThisFileCompanion} = 1;")
js("var " + constFromThisFileCompanion + " = 1;")
}
}
fun testConstFromOtherModule() {
js("var $constFromOtherModule = 1;")
js("var " + constFromOtherModule + " = 1;")
}
fun testCompanionConstFromOtherModule() {
js("var ${ClassFromOtherModule.constFromOtherModuleCompanion} = 1;")
js("var " + ClassFromOtherModule.constFromOtherModuleCompanion + " = 1;")
}
fun testConstFromOtherFile() {
js("var $constFromOtherFile = 1;")
js("var " + constFromOtherFile + " = 1;")
}
fun testCompanionConstFromOtherFile() {
js("var ${ClassFromOtherFile.constFromOtherFileCompanion} = 1;")
js("var " + ClassFromOtherFile.constFromOtherFileCompanion + " = 1;")
}
fun testConstFromThisFile() {
js("var $constFromThisFile = 1;")
js("var " + constFromThisFile + " = 1;")
}
fun testCompanionConstFromThisFile() {
js("var ${ClassFromThisFile.constFromThisFileCompanion} = 1;")
js("var " + ClassFromThisFile.constFromThisFileCompanion + " = 1;")
}
@@ -0,0 +1,39 @@
// FIR_DIFFERENCE
// The difference is okay: K1 and K2 report a bit differently
// ERROR_POLICY: SEMANTIC
@file:Suppress("NOTHING_TO_INLINE")
fun function1() = "function1"
inline fun inlineFunction1() = "inlineFunction1"
class Class {
fun method1() = "method1"
inline fun inlineMethod1() = "method1"
fun testMethodFromThis() {
js(<!JSCODE_CAN_NOT_VERIFY_JAVASCRIPT!>"var a = '${<!JSCODE_ARGUMENT_NON_CONST_EXPRESSION!>method1()<!>}' + '" + <!JSCODE_ARGUMENT_NON_CONST_EXPRESSION!>method1()<!> + "';"<!>)
}
fun testInlineMethodFromThis() {
js(<!JSCODE_CAN_NOT_VERIFY_JAVASCRIPT!>"var a = '${<!JSCODE_ARGUMENT_NON_CONST_EXPRESSION!>inlineMethod1()<!>}' + '" + <!JSCODE_ARGUMENT_NON_CONST_EXPRESSION!>inlineMethod1()<!> + "';"<!>)
}
}
fun testFunction() {
js(<!JSCODE_CAN_NOT_VERIFY_JAVASCRIPT!>"var a = '${<!JSCODE_ARGUMENT_NON_CONST_EXPRESSION!>function1()<!>}' + '" + <!JSCODE_ARGUMENT_NON_CONST_EXPRESSION!>function1()<!> + "';"<!>)
}
fun testInlineFunction() {
js(<!JSCODE_CAN_NOT_VERIFY_JAVASCRIPT!>"var a = '${<!JSCODE_ARGUMENT_NON_CONST_EXPRESSION!>inlineFunction1()<!>}' + '" + <!JSCODE_ARGUMENT_NON_CONST_EXPRESSION!>inlineFunction1()<!> + "';"<!>)
}
fun testMethod() {
val c = Class()
js(<!JSCODE_CAN_NOT_VERIFY_JAVASCRIPT!>"var a = '${<!JSCODE_ARGUMENT_NON_CONST_EXPRESSION!>c<!>.method1()}' + '" + <!JSCODE_ARGUMENT_NON_CONST_EXPRESSION!>c<!>.method1() + "';"<!>)
}
fun testInlineMethod() {
val c = Class()
js(<!JSCODE_CAN_NOT_VERIFY_JAVASCRIPT!>"var a = '${<!JSCODE_ARGUMENT_NON_CONST_EXPRESSION!>c<!>.inlineMethod1()}' + '" + <!JSCODE_ARGUMENT_NON_CONST_EXPRESSION!>c<!>.inlineMethod1() + "';"<!>)
}
@@ -0,0 +1,39 @@
// FIR_DIFFERENCE
// The difference is okay: K1 and K2 report a bit differently
// ERROR_POLICY: SEMANTIC
@file:Suppress("NOTHING_TO_INLINE")
fun function1() = "function1"
inline fun inlineFunction1() = "inlineFunction1"
class Class {
fun method1() = "method1"
inline fun inlineMethod1() = "method1"
fun testMethodFromThis() {
js(<!JSCODE_ARGUMENT_SHOULD_BE_CONSTANT!>"var a = '${method1()}' + '" + method1() + "';"<!>)
}
fun testInlineMethodFromThis() {
js(<!JSCODE_ARGUMENT_SHOULD_BE_CONSTANT!>"var a = '${inlineMethod1()}' + '" + inlineMethod1() + "';"<!>)
}
}
fun testFunction() {
js(<!JSCODE_ARGUMENT_SHOULD_BE_CONSTANT!>"var a = '${function1()}' + '" + function1() + "';"<!>)
}
fun testInlineFunction() {
js(<!JSCODE_ARGUMENT_SHOULD_BE_CONSTANT!>"var a = '${inlineFunction1()}' + '" + inlineFunction1() + "';"<!>)
}
fun testMethod() {
val c = Class()
js(<!JSCODE_ARGUMENT_SHOULD_BE_CONSTANT!>"var a = '${c.method1()}' + '" + c.method1() + "';"<!>)
}
fun testInlineMethod() {
val c = Class()
js(<!JSCODE_ARGUMENT_SHOULD_BE_CONSTANT!>"var a = '${c.inlineMethod1()}' + '" + c.inlineMethod1() + "';"<!>)
}
@@ -0,0 +1,122 @@
// FIR_DIFFERENCE
// The difference is okay: K1 and K2 report a bit differently
// ERROR_POLICY: SEMANTIC
@file:Suppress(
"DEPRECATED_IDENTITY_EQUALS",
"SENSELESS_COMPARISON"
)
fun testTrimMargin() {
js(<!JSCODE_ARGUMENT_NON_CONST_EXPRESSION!>"""
| var x = 1;
""".<!JSCODE_CAN_NOT_VERIFY_JAVASCRIPT!>trimMargin()<!><!>)
}
fun testTrimIndent() {
js(<!JSCODE_ARGUMENT_NON_CONST_EXPRESSION!>"""
var x = 1;
""".<!JSCODE_CAN_NOT_VERIFY_JAVASCRIPT!>trimIndent()<!><!>)
}
const val ONE = 1
const val UONE = 1U
const val HALF = 0.5
const val TRUE = true
const val STR = "str"
const val CHAR = 'C'
fun testStringSize() {
js("var a = ${STR.length};")
}
fun testSimpleStringConcat() {
js("{ var a = '${'b'}'; }")
js("{ var a = ${123}; }")
js("{ var a = ${123U}; }")
js("{ var a = ${123L}; }")
js("{ var a = ${123UL}; }")
js("{ var a = ${1.23}; }")
js("{ var a = ${1.23f}; }")
js("{ var a = ${true}; }")
js("{ var a = ${false}; }")
js("{ var a = ${null}; }")
js("{ var a = ${ONE}; }")
js("{ var a = ${UONE}; }")
js("{ var a = ${HALF}; }")
js("{ var a = ${TRUE}; }")
js("{ var a = '${STR}'; }")
js("{ var a = '${CHAR}'; }")
}
fun testArithmeticOperations() {
js("{ var a = ${1 + 2}; }")
js("{ var a = ${1 - 2}; }")
js("{ var a = ${1 * 2}; }")
js("{ var a = ${1 / 2}; }")
js("{ var a = ${1 % 2}; }")
js("{ var a = ${1.1 + 2.1}; }")
js("{ var a = ${1.1 - 2.1}; }")
js("{ var a = ${1.1 * 2.1}; }")
js("{ var a = ${1.1 / 2.1}; }")
js("{ var a = ${ONE + 2}; }")
js("{ var a = ${HALF + 2.1}; }")
js("{ var a = '${"foo" + "bar"}'; }")
js("{ var a = '${"foo" + 'c'}'; }")
js(<!JSCODE_CAN_NOT_VERIFY_JAVASCRIPT!>"{ var a = '${<!JSCODE_ARGUMENT_NON_CONST_EXPRESSION!>'c' + "foo"<!>}'; }"<!>)
js("{ var a = ${STR + STR}; }")
js("{ var a = ${STR + CHAR}; }")
js(<!JSCODE_CAN_NOT_VERIFY_JAVASCRIPT!>"{ var a = ${<!JSCODE_ARGUMENT_NON_CONST_EXPRESSION!>CHAR + STR<!>}; }"<!>)
}
fun testLogicOperations() {
js("{ var a = ${<!JSCODE_ARGUMENT_NON_CONST_EXPRESSION!>!true<!>}; }")
js("{ var a = ${<!JSCODE_ARGUMENT_NON_CONST_EXPRESSION!>true or false<!>}; }")
js(<!JSCODE_CAN_NOT_VERIFY_JAVASCRIPT!>"{ var a = ${true || false}; }"<!>)
js("{ var a = ${<!JSCODE_ARGUMENT_NON_CONST_EXPRESSION!>true and false<!>}; }")
js(<!JSCODE_CAN_NOT_VERIFY_JAVASCRIPT!>"{ var a = ${true && false}; }"<!>)
js(<!JSCODE_CAN_NOT_VERIFY_JAVASCRIPT!>"{ var a = ${TRUE && false}; }"<!>)
js("{ var a = ${TRUE or false}; }")
}
fun testEq() {
js("{ var a = ${<!JSCODE_ARGUMENT_NON_CONST_EXPRESSION!>1 == 1<!>}; }")
js(<!JSCODE_CAN_NOT_VERIFY_JAVASCRIPT!>"{ var a = ${<!JSCODE_ARGUMENT_NON_CONST_EXPRESSION!>1U == 1U<!>}; }"<!>)
js(<!JSCODE_CAN_NOT_VERIFY_JAVASCRIPT!>"{ var a = ${UONE == 1U}; }"<!>)
js("{ var a = ${"FOO" == STR}; }")
js("{ var a = ${TRUE == null}; }")
js("{ var a = ${STR == null}; }")
js("{ var a = ${<!JSCODE_ARGUMENT_NON_CONST_EXPRESSION!>1 != 1<!>}; }")
js(<!JSCODE_CAN_NOT_VERIFY_JAVASCRIPT!>"{ var a = ${<!JSCODE_ARGUMENT_NON_CONST_EXPRESSION!>1U != 1U<!>}; }"<!>)
js(<!JSCODE_CAN_NOT_VERIFY_JAVASCRIPT!>"{ var a = ${UONE != 1U}; }"<!>)
js("{ var a = ${"FOO" != STR}; }")
js("{ var a = ${TRUE != null}; }")
js("{ var a = ${STR != null}; }")
js(<!JSCODE_CAN_NOT_VERIFY_JAVASCRIPT!>"{ var a = ${<!JSCODE_ARGUMENT_NON_CONST_EXPRESSION!>1 === 1<!>}; }"<!>)
js(<!JSCODE_CAN_NOT_VERIFY_JAVASCRIPT!>"{ var a = ${TRUE === false}; }"<!>)
js(<!JSCODE_CAN_NOT_VERIFY_JAVASCRIPT!>"{ var a = ${CHAR === 's'}; }"<!>)
js(<!JSCODE_CAN_NOT_VERIFY_JAVASCRIPT!>"{ var a = ${<!JSCODE_ARGUMENT_NON_CONST_EXPRESSION!>1 !== 1<!>}; }"<!>)
js(<!JSCODE_CAN_NOT_VERIFY_JAVASCRIPT!>"{ var a = ${TRUE !== false}; }"<!>)
js(<!JSCODE_CAN_NOT_VERIFY_JAVASCRIPT!>"{ var a = ${CHAR !== 's'}; }"<!>)
}
fun testCmp() {
js("{ var a = ${1 < 1}; }")
js("{ var a = ${1 <= 1}; }")
js("{ var a = ${1 > 1}; }")
js("{ var a = ${1 >= 1}; }")
js("{ var a = ${"fo=" < "bar"}; }")
js("{ var a = ${'a' > 'c'}; }")
js("{ var a = ${ONE > 1}; }")
js("{ var a = ${STR <= "1"}; }")
}
@@ -0,0 +1,122 @@
// FIR_DIFFERENCE
// The difference is okay: K1 and K2 report a bit differently
// ERROR_POLICY: SEMANTIC
@file:Suppress(
"DEPRECATED_IDENTITY_EQUALS",
"SENSELESS_COMPARISON"
)
fun testTrimMargin() {
js(<!JSCODE_ARGUMENT_SHOULD_BE_CONSTANT!>"""
| var x = 1;
""".trimMargin()<!>)
}
fun testTrimIndent() {
js(<!JSCODE_ARGUMENT_SHOULD_BE_CONSTANT!>"""
var x = 1;
""".trimIndent()<!>)
}
const val ONE = 1
const val UONE = 1U
const val HALF = 0.5
const val TRUE = true
const val STR = "str"
const val CHAR = 'C'
fun testStringSize() {
js("var a = ${STR.<!JSCODE_ARGUMENT_NON_CONST_EXPRESSION!>length<!>};")
}
fun testSimpleStringConcat() {
js("{ var a = '${'b'}'; }")
js("{ var a = ${123}; }")
js("{ var a = ${123U}; }")
js("{ var a = ${123L}; }")
js("{ var a = ${123UL}; }")
js("{ var a = ${1.23}; }")
js("{ var a = ${1.23f}; }")
js("{ var a = ${true}; }")
js("{ var a = ${false}; }")
js("{ var a = ${null}; }")
js("{ var a = ${ONE}; }")
js("{ var a = ${UONE}; }")
js("{ var a = ${HALF}; }")
js("{ var a = ${TRUE}; }")
js("{ var a = '${STR}'; }")
js("{ var a = '${CHAR}'; }")
}
fun testArithmeticOperations() {
js("{ var a = ${1 + 2}; }")
js("{ var a = ${1 - 2}; }")
js("{ var a = ${1 * 2}; }")
js("{ var a = ${1 / 2}; }")
js("{ var a = ${1 % 2}; }")
js("{ var a = ${1.1 + 2.1}; }")
js("{ var a = ${1.1 - 2.1}; }")
js("{ var a = ${1.1 * 2.1}; }")
js("{ var a = ${1.1 / 2.1}; }")
js("{ var a = ${ONE + 2}; }")
js("{ var a = ${HALF + 2.1}; }")
js("{ var a = '${"foo" + "bar"}'; }")
js("{ var a = '${"foo" + 'c'}'; }")
js(<!JSCODE_ARGUMENT_SHOULD_BE_CONSTANT!>"{ var a = '${'c' + "foo"}'; }"<!>)
js("{ var a = ${STR + STR}; }")
js("{ var a = ${STR + CHAR}; }")
js(<!JSCODE_ARGUMENT_SHOULD_BE_CONSTANT!>"{ var a = ${CHAR + STR}; }"<!>)
}
fun testLogicOperations() {
js(<!JSCODE_ARGUMENT_SHOULD_BE_CONSTANT!>"{ var a = ${!true}; }"<!>)
js(<!JSCODE_ARGUMENT_SHOULD_BE_CONSTANT!>"{ var a = ${true or false}; }"<!>)
js(<!JSCODE_ARGUMENT_SHOULD_BE_CONSTANT!>"{ var a = ${true || false}; }"<!>)
js(<!JSCODE_ARGUMENT_SHOULD_BE_CONSTANT!>"{ var a = ${true and false}; }"<!>)
js(<!JSCODE_ARGUMENT_SHOULD_BE_CONSTANT!>"{ var a = ${true && false}; }"<!>)
js("{ var a = ${TRUE && false}; }")
js("{ var a = ${TRUE or false}; }")
}
fun testEq() {
js(<!JSCODE_ARGUMENT_SHOULD_BE_CONSTANT!>"{ var a = ${1 == 1}; }"<!>)
js(<!JSCODE_ARGUMENT_SHOULD_BE_CONSTANT!>"{ var a = ${1U == 1U}; }"<!>)
js(<!JSCODE_ARGUMENT_SHOULD_BE_CONSTANT!>"{ var a = ${UONE == 1U}; }"<!>)
js("{ var a = ${"FOO" == STR}; }")
js(<!JSCODE_ARGUMENT_SHOULD_BE_CONSTANT!>"{ var a = ${TRUE == null}; }"<!>)
js(<!JSCODE_ARGUMENT_SHOULD_BE_CONSTANT!>"{ var a = ${STR == null}; }"<!>)
js(<!JSCODE_ARGUMENT_SHOULD_BE_CONSTANT!>"{ var a = ${1 != 1}; }"<!>)
js(<!JSCODE_ARGUMENT_SHOULD_BE_CONSTANT!>"{ var a = ${1U != 1U}; }"<!>)
js(<!JSCODE_ARGUMENT_SHOULD_BE_CONSTANT!>"{ var a = ${UONE != 1U}; }"<!>)
js("{ var a = ${"FOO" != STR}; }")
js(<!JSCODE_ARGUMENT_SHOULD_BE_CONSTANT!>"{ var a = ${TRUE != null}; }"<!>)
js(<!JSCODE_ARGUMENT_SHOULD_BE_CONSTANT!>"{ var a = ${STR != null}; }"<!>)
js(<!JSCODE_ARGUMENT_SHOULD_BE_CONSTANT!>"{ var a = ${1 === 1}; }"<!>)
js(<!JSCODE_ARGUMENT_SHOULD_BE_CONSTANT!>"{ var a = ${TRUE === false}; }"<!>)
js(<!JSCODE_ARGUMENT_SHOULD_BE_CONSTANT!>"{ var a = ${CHAR === 's'}; }"<!>)
js(<!JSCODE_ARGUMENT_SHOULD_BE_CONSTANT!>"{ var a = ${1 !== 1}; }"<!>)
js(<!JSCODE_ARGUMENT_SHOULD_BE_CONSTANT!>"{ var a = ${TRUE !== false}; }"<!>)
js(<!JSCODE_ARGUMENT_SHOULD_BE_CONSTANT!>"{ var a = ${CHAR !== 's'}; }"<!>)
}
fun testCmp() {
js(<!JSCODE_ARGUMENT_SHOULD_BE_CONSTANT!>"{ var a = ${1 < 1}; }"<!>)
js(<!JSCODE_ARGUMENT_SHOULD_BE_CONSTANT!>"{ var a = ${1 <= 1}; }"<!>)
js(<!JSCODE_ARGUMENT_SHOULD_BE_CONSTANT!>"{ var a = ${1 > 1}; }"<!>)
js(<!JSCODE_ARGUMENT_SHOULD_BE_CONSTANT!>"{ var a = ${1 >= 1}; }"<!>)
js(<!JSCODE_ARGUMENT_SHOULD_BE_CONSTANT!>"{ var a = ${"fo=" < "bar"}; }"<!>)
js(<!JSCODE_ARGUMENT_SHOULD_BE_CONSTANT!>"{ var a = ${'a' > 'c'}; }"<!>)
js("{ var a = ${ONE > 1}; }")
js("{ var a = ${STR <= "1"}; }")
}
@@ -0,0 +1,58 @@
// FIR_DIFFERENCE
// The difference is okay: K1 and K2 report a bit differently
// ERROR_POLICY: SEMANTIC
// MODULE: lib1
// FILE: A.kt
val valFromOtherModule = "valFromOtherModule"
// FILE: B.kt
val valFromOtherModule2 = valFromOtherModule + "2"
// MODULE: main(lib1)
// FILE: A.kt
val valFromOtherFile = "valFromOtherFile"
// FILE: B.kt
val valFromOtherFile2 = valFromOtherFile + "2"
// FILE: Main.kt
val valFromThisFile = "valFromThisFile"
val valFromThisFile2 = valFromThisFile + "2"
val valWithGetter: String get() = "valWithGetter"
fun testValFromOtherModule() {
js(<!JSCODE_CAN_NOT_VERIFY_JAVASCRIPT!>"var ${<!JSCODE_ARGUMENT_NON_CONST_EXPRESSION!>valFromOtherModule<!>} = 1;"<!>)
js(<!JSCODE_CAN_NOT_VERIFY_JAVASCRIPT!>"var " + <!JSCODE_ARGUMENT_NON_CONST_EXPRESSION!>valFromOtherModule<!> + " = 1;"<!>)
}
fun testValFromOtherModule2() {
js(<!JSCODE_CAN_NOT_VERIFY_JAVASCRIPT!>"var ${<!JSCODE_ARGUMENT_NON_CONST_EXPRESSION!>valFromOtherModule2<!>} = 1;"<!>)
js(<!JSCODE_CAN_NOT_VERIFY_JAVASCRIPT!>"var " + <!JSCODE_ARGUMENT_NON_CONST_EXPRESSION!>valFromOtherModule2<!> + " = 1;"<!>)
}
fun testValFromOtherFile() {
js(<!JSCODE_CAN_NOT_VERIFY_JAVASCRIPT!>"var ${<!JSCODE_ARGUMENT_NON_CONST_EXPRESSION!>valFromOtherFile<!>} = 1;"<!>)
js(<!JSCODE_CAN_NOT_VERIFY_JAVASCRIPT!>"var " + <!JSCODE_ARGUMENT_NON_CONST_EXPRESSION!>valFromOtherFile<!> + " = 1;"<!>)
}
fun testValFromOtherFile2() {
js(<!JSCODE_CAN_NOT_VERIFY_JAVASCRIPT!>"var ${<!JSCODE_ARGUMENT_NON_CONST_EXPRESSION!>valFromOtherFile2<!>} = 1;"<!>)
js(<!JSCODE_CAN_NOT_VERIFY_JAVASCRIPT!>"var " + <!JSCODE_ARGUMENT_NON_CONST_EXPRESSION!>valFromOtherFile2<!> + " = 1;"<!>)
}
fun testValFromThisFile() {
js(<!JSCODE_CAN_NOT_VERIFY_JAVASCRIPT!>"var ${<!JSCODE_ARGUMENT_NON_CONST_EXPRESSION!>valFromThisFile<!>} = 1;"<!>)
js(<!JSCODE_CAN_NOT_VERIFY_JAVASCRIPT!>"var " + <!JSCODE_ARGUMENT_NON_CONST_EXPRESSION!>valFromThisFile<!> + " = 1;"<!>)
}
fun testValFromThisFile2() {
js(<!JSCODE_CAN_NOT_VERIFY_JAVASCRIPT!>"var ${<!JSCODE_ARGUMENT_NON_CONST_EXPRESSION!>valFromThisFile2<!>} = 1;"<!>)
js(<!JSCODE_CAN_NOT_VERIFY_JAVASCRIPT!>"var " + <!JSCODE_ARGUMENT_NON_CONST_EXPRESSION!>valFromThisFile2<!> + " = 1;"<!>)
}
fun testValWithGetter() {
js(<!JSCODE_CAN_NOT_VERIFY_JAVASCRIPT!>"var ${<!JSCODE_ARGUMENT_NON_CONST_EXPRESSION!>valWithGetter<!>} = 1;"<!>)
js(<!JSCODE_CAN_NOT_VERIFY_JAVASCRIPT!>"var " + <!JSCODE_ARGUMENT_NON_CONST_EXPRESSION!>valWithGetter<!> + " = 1;"<!>)
}
@@ -0,0 +1,58 @@
// FIR_DIFFERENCE
// The difference is okay: K1 and K2 report a bit differently
// ERROR_POLICY: SEMANTIC
// MODULE: lib1
// FILE: A.kt
val valFromOtherModule = "valFromOtherModule"
// FILE: B.kt
val valFromOtherModule2 = valFromOtherModule + "2"
// MODULE: main(lib1)
// FILE: A.kt
val valFromOtherFile = "valFromOtherFile"
// FILE: B.kt
val valFromOtherFile2 = valFromOtherFile + "2"
// FILE: Main.kt
val valFromThisFile = "valFromThisFile"
val valFromThisFile2 = valFromThisFile + "2"
val valWithGetter: String get() = "valWithGetter"
fun testValFromOtherModule() {
js("var ${<!JSCODE_ARGUMENT_NON_CONST_EXPRESSION!>valFromOtherModule<!>} = 1;")
js("var " + <!JSCODE_ARGUMENT_NON_CONST_EXPRESSION!>valFromOtherModule<!> + " = 1;")
}
fun testValFromOtherModule2() {
js("var ${<!JSCODE_ARGUMENT_NON_CONST_EXPRESSION!>valFromOtherModule2<!>} = 1;")
js("var " + <!JSCODE_ARGUMENT_NON_CONST_EXPRESSION!>valFromOtherModule2<!> + " = 1;")
}
fun testValFromOtherFile() {
js("var ${<!JSCODE_ARGUMENT_NON_CONST_EXPRESSION!>valFromOtherFile<!>} = 1;")
js("var " + <!JSCODE_ARGUMENT_NON_CONST_EXPRESSION!>valFromOtherFile<!> + " = 1;")
}
fun testValFromOtherFile2() {
js("var ${<!JSCODE_ARGUMENT_NON_CONST_EXPRESSION!>valFromOtherFile2<!>} = 1;")
js("var " + <!JSCODE_ARGUMENT_NON_CONST_EXPRESSION!>valFromOtherFile2<!> + " = 1;")
}
fun testValFromThisFile() {
js("var ${<!JSCODE_ARGUMENT_NON_CONST_EXPRESSION!>valFromThisFile<!>} = 1;")
js("var " + <!JSCODE_ARGUMENT_NON_CONST_EXPRESSION!>valFromThisFile<!> + " = 1;")
}
fun testValFromThisFile2() {
js("var ${<!JSCODE_ARGUMENT_NON_CONST_EXPRESSION!>valFromThisFile2<!>} = 1;")
js("var " + <!JSCODE_ARGUMENT_NON_CONST_EXPRESSION!>valFromThisFile2<!> + " = 1;")
}
fun testValWithGetter() {
js(<!JSCODE_ARGUMENT_SHOULD_BE_CONSTANT!>"var ${valWithGetter} = 1;"<!>)
js(<!JSCODE_ARGUMENT_SHOULD_BE_CONSTANT!>"var " + valWithGetter + " = 1;"<!>)
}
@@ -0,0 +1,63 @@
// FIR_DIFFERENCE
// The difference is okay: K1 and K2 report a bit differently
// ERROR_POLICY: SEMANTIC
fun testValFromThisFunction() {
val valFromThisFunction = "valFromThisFunction"
val valFromThisFunction2 = valFromThisFunction + "2"
js(<!JSCODE_CAN_NOT_VERIFY_JAVASCRIPT!>"var ${<!JSCODE_ARGUMENT_NON_CONST_EXPRESSION!>valFromThisFunction<!>} = 1;"<!>)
js(<!JSCODE_CAN_NOT_VERIFY_JAVASCRIPT!>"var " + <!JSCODE_ARGUMENT_NON_CONST_EXPRESSION!>valFromThisFunction<!> + " = 1;"<!>)
js(<!JSCODE_CAN_NOT_VERIFY_JAVASCRIPT!>"var ${<!JSCODE_ARGUMENT_NON_CONST_EXPRESSION!>valFromThisFunction2<!>} = 1;"<!>)
js(<!JSCODE_CAN_NOT_VERIFY_JAVASCRIPT!>"var " + <!JSCODE_ARGUMENT_NON_CONST_EXPRESSION!>valFromThisFunction2<!> + " = 1;"<!>)
}
fun testVarFromThisFunction() {
var varFromThisFunction = "varFromThisFunction"
var varFromThisFunction2 = varFromThisFunction + "2"
js(<!JSCODE_CAN_NOT_VERIFY_JAVASCRIPT!>"var ${<!JSCODE_ARGUMENT_NON_CONST_EXPRESSION!>varFromThisFunction<!>} = 1;"<!>)
js(<!JSCODE_CAN_NOT_VERIFY_JAVASCRIPT!>"var " + <!JSCODE_ARGUMENT_NON_CONST_EXPRESSION!>varFromThisFunction<!> + " = 1;"<!>)
js(<!JSCODE_CAN_NOT_VERIFY_JAVASCRIPT!>"var ${<!JSCODE_ARGUMENT_NON_CONST_EXPRESSION!>varFromThisFunction2<!>} = 1;"<!>)
js(<!JSCODE_CAN_NOT_VERIFY_JAVASCRIPT!>"var " + <!JSCODE_ARGUMENT_NON_CONST_EXPRESSION!>varFromThisFunction2<!> + " = 1;"<!>)
}
fun testValFromParam(valFromParam: String) {
js(<!JSCODE_CAN_NOT_VERIFY_JAVASCRIPT!>"var ${<!JSCODE_ARGUMENT_NON_CONST_EXPRESSION!>valFromParam<!>} = 1;"<!>)
js(<!JSCODE_CAN_NOT_VERIFY_JAVASCRIPT!>"var " + <!JSCODE_ARGUMENT_NON_CONST_EXPRESSION!>valFromParam<!> + " = 1;"<!>)
}
class Class {
val valFromClass = "valFromClass"
val valWithGetter: String get() = "valWithGetter"
fun testValFromThis() {
js(<!JSCODE_CAN_NOT_VERIFY_JAVASCRIPT!>"var ${<!JSCODE_ARGUMENT_NON_CONST_EXPRESSION!>valFromClass<!>} = 1;"<!>)
js(<!JSCODE_CAN_NOT_VERIFY_JAVASCRIPT!>"var " + <!JSCODE_ARGUMENT_NON_CONST_EXPRESSION!>valFromClass<!> + " = 1;"<!>)
}
fun testValWithGetterThis() {
js(<!JSCODE_CAN_NOT_VERIFY_JAVASCRIPT!>"var ${<!JSCODE_ARGUMENT_NON_CONST_EXPRESSION!>valWithGetter<!>} = 1;"<!>)
js(<!JSCODE_CAN_NOT_VERIFY_JAVASCRIPT!>"var " + <!JSCODE_ARGUMENT_NON_CONST_EXPRESSION!>valWithGetter<!> + " = 1;"<!>)
}
}
fun testValFromClassObject() {
val c = Class()
js(<!JSCODE_CAN_NOT_VERIFY_JAVASCRIPT!>"var ${<!JSCODE_ARGUMENT_NON_CONST_EXPRESSION!>c<!>.valFromClass} = 1;"<!>)
js(<!JSCODE_CAN_NOT_VERIFY_JAVASCRIPT!>"var " + <!JSCODE_ARGUMENT_NON_CONST_EXPRESSION!>c<!>.valFromClass + " = 1;"<!>)
js(<!JSCODE_CAN_NOT_VERIFY_JAVASCRIPT!>"var ${<!JSCODE_ARGUMENT_NON_CONST_EXPRESSION!>c<!>.valWithGetter} = 1;"<!>)
js(<!JSCODE_CAN_NOT_VERIFY_JAVASCRIPT!>"var " + <!JSCODE_ARGUMENT_NON_CONST_EXPRESSION!>c<!>.valWithGetter + " = 1;"<!>)
}
fun testValFromObject() {
val o = object {
val valFromObject = "valFromClass"
}
js(<!JSCODE_CAN_NOT_VERIFY_JAVASCRIPT!>"var ${<!JSCODE_ARGUMENT_NON_CONST_EXPRESSION!>o<!>.valFromObject} = 1;"<!>)
js(<!JSCODE_CAN_NOT_VERIFY_JAVASCRIPT!>"var " + <!JSCODE_ARGUMENT_NON_CONST_EXPRESSION!>o<!>.valFromObject + " = 1;"<!>)
}
@@ -0,0 +1,63 @@
// FIR_DIFFERENCE
// The difference is okay: K1 and K2 report a bit differently
// ERROR_POLICY: SEMANTIC
fun testValFromThisFunction() {
val valFromThisFunction = "valFromThisFunction"
val valFromThisFunction2 = valFromThisFunction + "2"
js("var ${<!JSCODE_ARGUMENT_NON_CONST_EXPRESSION!>valFromThisFunction<!>} = 1;")
js("var " + <!JSCODE_ARGUMENT_NON_CONST_EXPRESSION!>valFromThisFunction<!> + " = 1;")
js("var ${<!JSCODE_ARGUMENT_NON_CONST_EXPRESSION!>valFromThisFunction2<!>} = 1;")
js("var " + <!JSCODE_ARGUMENT_NON_CONST_EXPRESSION!>valFromThisFunction2<!> + " = 1;")
}
fun testVarFromThisFunction() {
var varFromThisFunction = "varFromThisFunction"
var varFromThisFunction2 = varFromThisFunction + "2"
js(<!JSCODE_ARGUMENT_SHOULD_BE_CONSTANT!>"var ${varFromThisFunction} = 1;"<!>)
js(<!JSCODE_ARGUMENT_SHOULD_BE_CONSTANT!>"var " + varFromThisFunction + " = 1;"<!>)
js(<!JSCODE_ARGUMENT_SHOULD_BE_CONSTANT!>"var ${varFromThisFunction2} = 1;"<!>)
js(<!JSCODE_ARGUMENT_SHOULD_BE_CONSTANT!>"var " + varFromThisFunction2 + " = 1;"<!>)
}
fun testValFromParam(valFromParam: String) {
js(<!JSCODE_ARGUMENT_SHOULD_BE_CONSTANT!>"var ${valFromParam} = 1;"<!>)
js(<!JSCODE_ARGUMENT_SHOULD_BE_CONSTANT!>"var " + valFromParam + " = 1;"<!>)
}
class Class {
val valFromClass = "valFromClass"
val valWithGetter: String get() = "valWithGetter"
fun testValFromThis() {
js("var ${<!JSCODE_ARGUMENT_NON_CONST_EXPRESSION!>valFromClass<!>} = 1;")
js("var " + <!JSCODE_ARGUMENT_NON_CONST_EXPRESSION!>valFromClass<!> + " = 1;")
}
fun testValWithGetterThis() {
js(<!JSCODE_ARGUMENT_SHOULD_BE_CONSTANT!>"var ${valWithGetter} = 1;"<!>)
js(<!JSCODE_ARGUMENT_SHOULD_BE_CONSTANT!>"var " + valWithGetter + " = 1;"<!>)
}
}
fun testValFromClassObject() {
val c = Class()
js("var ${<!JSCODE_ARGUMENT_NON_CONST_EXPRESSION!>c<!>.<!JSCODE_ARGUMENT_NON_CONST_EXPRESSION!>valFromClass<!>} = 1;")
js("var " + <!JSCODE_ARGUMENT_NON_CONST_EXPRESSION!>c<!>.<!JSCODE_ARGUMENT_NON_CONST_EXPRESSION!>valFromClass<!> + " = 1;")
js(<!JSCODE_ARGUMENT_SHOULD_BE_CONSTANT!>"var ${c.valWithGetter} = 1;"<!>)
js(<!JSCODE_ARGUMENT_SHOULD_BE_CONSTANT!>"var " + c.valWithGetter + " = 1;"<!>)
}
fun testValFromObject() {
val o = object {
val valFromObject = "valFromClass"
}
js("var ${<!JSCODE_ARGUMENT_NON_CONST_EXPRESSION!>o<!>.<!JSCODE_ARGUMENT_NON_CONST_EXPRESSION!>valFromObject<!>} = 1;")
js("var " + <!JSCODE_ARGUMENT_NON_CONST_EXPRESSION!>o<!>.<!JSCODE_ARGUMENT_NON_CONST_EXPRESSION!>valFromObject<!> + " = 1;")
}
@@ -0,0 +1,19 @@
// FIR_IDENTICAL
// ERROR_POLICY: SEMANTIC
fun testEmptyString() {
js(<!JSCODE_NO_JAVASCRIPT_PRODUCED!>""<!>)
}
const val SPACE = " "
fun testStringWithSpaces() {
js(<!JSCODE_NO_JAVASCRIPT_PRODUCED!>"\n \n$SPACE \t" + " "<!>)
}
fun testComment() {
js(<!JSCODE_NO_JAVASCRIPT_PRODUCED!>"""
// just a comment
$SPACE
"""<!>)
}
@@ -0,0 +1,8 @@
// FIR_IDENTICAL
// ERROR_POLICY: SEMANTIC
const val VALUE = 123
fun testJavaScriptError() {
js(<!JSCODE_ERROR!>"var = $VALUE;"<!>)
}
@@ -0,0 +1,7 @@
// FIR_IDENTICAL
const val VALUE = 888
fun testJavaScriptWarning() {
js(<!JSCODE_WARNING!>"var a = 0$VALUE;"<!>)
}
@@ -7104,6 +7104,12 @@ public class FirJsBoxTestGenerated extends AbstractFirJsBoxTest {
runTest("js/js.translator/testData/box/jsCode/comments.kt");
}
@Test
@TestMetadata("compileTimeString.kt")
public void testCompileTimeString() throws Exception {
runTest("js/js.translator/testData/box/jsCode/compileTimeString.kt");
}
@Test
@TestMetadata("constantExpression.kt")
public void testConstantExpression() throws Exception {
@@ -7210,6 +7210,12 @@ public class FirJsES6BoxTestGenerated extends AbstractFirJsES6BoxTest {
runTest("js/js.translator/testData/box/jsCode/comments.kt");
}
@Test
@TestMetadata("compileTimeString.kt")
public void testCompileTimeString() throws Exception {
runTest("js/js.translator/testData/box/jsCode/compileTimeString.kt");
}
@Test
@TestMetadata("constantExpression.kt")
public void testConstantExpression() throws Exception {
@@ -144,6 +144,48 @@ public class FirPsiJsOldFrontendDiagnosticsWithBackendTestGenerated extends Abst
runTest("compiler/testData/diagnostics/testsWithJsStdLibAndBackendCompilation/jsCode/badAssignment.kt");
}
@Test
@TestMetadata("compileTimeString.kt")
public void testCompileTimeString() throws Exception {
runTest("compiler/testData/diagnostics/testsWithJsStdLibAndBackendCompilation/jsCode/compileTimeString.kt");
}
@Test
@TestMetadata("compileTimeStringWithCompanionVal.kt")
public void testCompileTimeStringWithCompanionVal() throws Exception {
runTest("compiler/testData/diagnostics/testsWithJsStdLibAndBackendCompilation/jsCode/compileTimeStringWithCompanionVal.kt");
}
@Test
@TestMetadata("compileTimeStringWithConstVal.kt")
public void testCompileTimeStringWithConstVal() throws Exception {
runTest("compiler/testData/diagnostics/testsWithJsStdLibAndBackendCompilation/jsCode/compileTimeStringWithConstVal.kt");
}
@Test
@TestMetadata("compileTimeStringWithFunCall.kt")
public void testCompileTimeStringWithFunCall() throws Exception {
runTest("compiler/testData/diagnostics/testsWithJsStdLibAndBackendCompilation/jsCode/compileTimeStringWithFunCall.kt");
}
@Test
@TestMetadata("compileTimeStringWithIntrinConstCall.kt")
public void testCompileTimeStringWithIntrinConstCall() throws Exception {
runTest("compiler/testData/diagnostics/testsWithJsStdLibAndBackendCompilation/jsCode/compileTimeStringWithIntrinConstCall.kt");
}
@Test
@TestMetadata("compileTimeStringWithTopLevelVal.kt")
public void testCompileTimeStringWithTopLevelVal() throws Exception {
runTest("compiler/testData/diagnostics/testsWithJsStdLibAndBackendCompilation/jsCode/compileTimeStringWithTopLevelVal.kt");
}
@Test
@TestMetadata("compileTimeStringWithVal.kt")
public void testCompileTimeStringWithVal() throws Exception {
runTest("compiler/testData/diagnostics/testsWithJsStdLibAndBackendCompilation/jsCode/compileTimeStringWithVal.kt");
}
@Test
@TestMetadata("deleteOperation.kt")
public void testDeleteOperation() throws Exception {
@@ -156,6 +198,24 @@ public class FirPsiJsOldFrontendDiagnosticsWithBackendTestGenerated extends Abst
runTest("compiler/testData/diagnostics/testsWithJsStdLibAndBackendCompilation/jsCode/error.kt");
}
@Test
@TestMetadata("javaScriptEmpty.kt")
public void testJavaScriptEmpty() throws Exception {
runTest("compiler/testData/diagnostics/testsWithJsStdLibAndBackendCompilation/jsCode/javaScriptEmpty.kt");
}
@Test
@TestMetadata("javaScriptError.kt")
public void testJavaScriptError() throws Exception {
runTest("compiler/testData/diagnostics/testsWithJsStdLibAndBackendCompilation/jsCode/javaScriptError.kt");
}
@Test
@TestMetadata("javaScriptWarning.kt")
public void testJavaScriptWarning() throws Exception {
runTest("compiler/testData/diagnostics/testsWithJsStdLibAndBackendCompilation/jsCode/javaScriptWarning.kt");
}
@Test
@TestMetadata("noJavaScriptProduced.kt")
public void testNoJavaScriptProduced() throws Exception {
@@ -144,6 +144,48 @@ public class DiagnosticsWithJsStdLibAndBackendTestGenerated extends AbstractDiag
runTest("compiler/testData/diagnostics/testsWithJsStdLibAndBackendCompilation/jsCode/badAssignment.kt");
}
@Test
@TestMetadata("compileTimeString.kt")
public void testCompileTimeString() throws Exception {
runTest("compiler/testData/diagnostics/testsWithJsStdLibAndBackendCompilation/jsCode/compileTimeString.kt");
}
@Test
@TestMetadata("compileTimeStringWithCompanionVal.kt")
public void testCompileTimeStringWithCompanionVal() throws Exception {
runTest("compiler/testData/diagnostics/testsWithJsStdLibAndBackendCompilation/jsCode/compileTimeStringWithCompanionVal.kt");
}
@Test
@TestMetadata("compileTimeStringWithConstVal.kt")
public void testCompileTimeStringWithConstVal() throws Exception {
runTest("compiler/testData/diagnostics/testsWithJsStdLibAndBackendCompilation/jsCode/compileTimeStringWithConstVal.kt");
}
@Test
@TestMetadata("compileTimeStringWithFunCall.kt")
public void testCompileTimeStringWithFunCall() throws Exception {
runTest("compiler/testData/diagnostics/testsWithJsStdLibAndBackendCompilation/jsCode/compileTimeStringWithFunCall.kt");
}
@Test
@TestMetadata("compileTimeStringWithIntrinConstCall.kt")
public void testCompileTimeStringWithIntrinConstCall() throws Exception {
runTest("compiler/testData/diagnostics/testsWithJsStdLibAndBackendCompilation/jsCode/compileTimeStringWithIntrinConstCall.kt");
}
@Test
@TestMetadata("compileTimeStringWithTopLevelVal.kt")
public void testCompileTimeStringWithTopLevelVal() throws Exception {
runTest("compiler/testData/diagnostics/testsWithJsStdLibAndBackendCompilation/jsCode/compileTimeStringWithTopLevelVal.kt");
}
@Test
@TestMetadata("compileTimeStringWithVal.kt")
public void testCompileTimeStringWithVal() throws Exception {
runTest("compiler/testData/diagnostics/testsWithJsStdLibAndBackendCompilation/jsCode/compileTimeStringWithVal.kt");
}
@Test
@TestMetadata("deleteOperation.kt")
public void testDeleteOperation() throws Exception {
@@ -156,6 +198,24 @@ public class DiagnosticsWithJsStdLibAndBackendTestGenerated extends AbstractDiag
runTest("compiler/testData/diagnostics/testsWithJsStdLibAndBackendCompilation/jsCode/error.kt");
}
@Test
@TestMetadata("javaScriptEmpty.kt")
public void testJavaScriptEmpty() throws Exception {
runTest("compiler/testData/diagnostics/testsWithJsStdLibAndBackendCompilation/jsCode/javaScriptEmpty.kt");
}
@Test
@TestMetadata("javaScriptError.kt")
public void testJavaScriptError() throws Exception {
runTest("compiler/testData/diagnostics/testsWithJsStdLibAndBackendCompilation/jsCode/javaScriptError.kt");
}
@Test
@TestMetadata("javaScriptWarning.kt")
public void testJavaScriptWarning() throws Exception {
runTest("compiler/testData/diagnostics/testsWithJsStdLibAndBackendCompilation/jsCode/javaScriptWarning.kt");
}
@Test
@TestMetadata("noJavaScriptProduced.kt")
public void testNoJavaScriptProduced() throws Exception {
@@ -7210,6 +7210,12 @@ public class IrBoxJsES6TestGenerated extends AbstractIrBoxJsES6Test {
runTest("js/js.translator/testData/box/jsCode/comments.kt");
}
@Test
@TestMetadata("compileTimeString.kt")
public void testCompileTimeString() throws Exception {
runTest("js/js.translator/testData/box/jsCode/compileTimeString.kt");
}
@Test
@TestMetadata("constantExpression.kt")
public void testConstantExpression() throws Exception {
@@ -7104,6 +7104,12 @@ public class IrBoxJsTestGenerated extends AbstractIrBoxJsTest {
runTest("js/js.translator/testData/box/jsCode/comments.kt");
}
@Test
@TestMetadata("compileTimeString.kt")
public void testCompileTimeString() throws Exception {
runTest("js/js.translator/testData/box/jsCode/compileTimeString.kt");
}
@Test
@TestMetadata("constantExpression.kt")
public void testConstantExpression() throws Exception {
@@ -0,0 +1,200 @@
// WITH_STDLIB
// MODULE: lib1
// FILE: f.kt
const val LIB_INT = 1
const val LIB_STR = "LIB_STR"
const val LIB_CHAR = '1'
const val LIB_UINT = 1U
const val LIB_ULINT = 1UL
const val LIB_DOUBLE = 0.1
const val LIB_FLOAT = 0.1f
open class LIB_Class {
companion object {
const val STR = "LIB_ClassSTR"
}
}
// MODULE: main(lib1)
// FILE: main.kt
const val INT = 2
const val STR = "STR"
const val CHAR = '2'
const val UINT = 2U
const val ULINT = 2UL
const val DOUBLE = 0.2
const val FLOAT = 0.2f
open class Class {
companion object {
const val STR = "ClassSTR"
}
fun testClassCompanion(): String {
js("""
function testClassCompanionInnerBox() {
if ('$STR' != 'ClassSTR') { return "Not OK Class.STR"; }
return "OK";
}
""")
return js("testClassCompanionInnerBox()") as String
}
}
class Child : Class() {
fun testParentCompanion(): String {
js("""
function testParentCompanionInnerBox() {
if ('$STR' != 'ClassSTR') { return "Not OK Class.STR"; }
return "OK";
}
""")
return js("testParentCompanionInnerBox()") as String
}
}
fun testConstantInlining(): String {
js("""
function testConstantInliningInnerBox() {
if ($INT != 2) { return "Not OK INT"; }
if ('$STR' != 'STR') { return "Not OK STR"; }
if ('$CHAR' != '2') { return "Not OK CHAR"; }
if ($UINT != '2') { return "Not OK UINT"; }
if ($ULINT != '2') { return "Not OK ULINT"; }
if ($DOUBLE > 0.21) { return "Not OK DOUBLE"; }
if ($FLOAT > 0.21) { return "Not OK FLOAT"; }
if ('${Class.STR}' != 'ClassSTR') { return "Not OK Class.STR"; }
return "OK";
}
""")
return js("testConstantInliningInnerBox()") as String
}
fun testConstantInliningFromOtherLib(): String {
js("""
function testConstantInliningFromOtherLibInnerBox() {
if ($LIB_INT != 1) { return "Not OK LIB_INT"; }
if ('$LIB_STR' != 'LIB_STR') { return "Not OK LIB_STR"; }
if ('$LIB_CHAR' != '1') { return "Not OK LIB_CHAR"; }
if ($LIB_UINT != '1') { return "Not OK LIB_UINT"; }
if ($LIB_ULINT != '1') { return "Not OK LIB_ULINT"; }
if ($LIB_DOUBLE > 0.11) { return "Not OK LIB_DOUBLE"; }
if ($LIB_FLOAT > 0.11) { return "Not OK LIB_FLOAT"; }
if ('${LIB_Class.STR}' != 'LIB_ClassSTR') { return "Not OK LIB_Class.STR"; }
return "OK";
}
""")
return js("testConstantInliningFromOtherLibInnerBox()") as String
}
fun testConstEvaluation(): String {
js("""
function testConstEvaluationInnerBox() {
if (${INT != 2}) { return "Not OK INT"; }
if (${CHAR != '2'}) { return "Not OK CHAR"; }
if (${STR != "STR"}) { return "Not OK STR"; }
if (${STR.length} != 3) { return "Not OK STR.length"; }
if (${Class.STR != "ClassSTR"}) { return "Not OK Class.STR"; }
if (${Class.STR.length} != 8) { return "Not OK Class.STR.length"; }
if (${LIB_INT != 1}) { return "Not OK LIB_INT"; }
if (${LIB_CHAR != '1'}) { return "Not OK LIB_CHAR"; }
if (${LIB_STR != "LIB_STR"}) { return "Not OK LIB_STR"; }
if (${LIB_STR.length} != 7) { return "Not OK LIB_STR.length"; }
if (${LIB_Class.STR != "LIB_ClassSTR"}) { return "Not OK LIB_Class.STR"; }
if (${LIB_Class.STR.length} != 12) { return "Not OK LIB_Class.STR.length"; }
if (${(INT != 2 || CHAR != '2') && (STR == "STR")}) { return "Not OK Boolean operations"; }
if (${INT + 2 / INT - 3 * INT} != -3) { return "Not OK INT arithmetic operations"; }
if (${LIB_INT + 2 / LIB_INT - 3 * LIB_INT} != 0) { return "Not OK LIB_INT arithmetic operations"; }
if ('${STR + " " + LIB_Class.STR}' != 'STR LIB_ClassSTR') { return "Not OK STR plus"; }
return "OK";
}
""")
return js("testConstEvaluationInnerBox()") as String
}
inline fun jsInInlineFunction() {
js("""
function jsInInlineFunctionInnerBox() {
if ($INT != 2) { return "Not OK INT"; }
if ($LIB_INT != 1) { return "Not OK LIB_INT"; }
if ('${Class.STR}' != 'ClassSTR') { return "Not OK Class.STR"; }
if ('${LIB_Class.STR}' != 'LIB_ClassSTR') { return "Not OK LIB_Class.STR"; }
return "OK";
}
""")
}
fun testJsInInlineFunction(): String {
jsInInlineFunction()
return js("jsInInlineFunctionInnerBox()") as String
}
fun testCaptureVariables(param1: String = "parameter"): String {
val STR1 = "local variable"
js("""
function testCaptureVariablesInnerBox() {
if (param$LIB_INT != 'parameter') { return "Not OK parameter"; }
if ($STR$LIB_INT != 'local variable') { return "Not OK local variable"; }
return "OK";
}
""")
return js("testCaptureVariablesInnerBox()") as String
}
inline fun jsInInlineFunctionCaptureVariables(param1: String = "parameter") {
val STR1 = "local variable"
js("""
function jsInInlineFunctionCaptureVariablesInnerBox() {
if (param$LIB_INT != 'parameter') { return "Not OK parameter"; }
if ($STR$LIB_INT != 'local variable') { return "Not OK local variable"; }
return "OK";
}
""")
}
fun testCaptureVariablesInlineFunction(): String {
jsInInlineFunctionCaptureVariables()
return js("jsInInlineFunctionCaptureVariablesInnerBox()") as String
}
fun box(): String {
var r = Class().testClassCompanion()
if (r != "OK") { return "Fail Class.testClassCompanion: $r" }
r = Child().testParentCompanion()
if (r != "OK") { return "Fail Class.testParentCompanion: $r" }
r = testConstantInlining()
if (r != "OK") { return "Fail testConstantInlining: $r" }
r = testConstantInliningFromOtherLib()
if (r != "OK") { return "Fail testConstantInliningFromOtherLib: $r" }
r = testConstEvaluation()
if (r != "OK") { return "Fail testConstEvaluation: $r" }
r = testJsInInlineFunction()
if (r != "OK") { return "Fail testJsInInlineFunction: $r" }
r = testCaptureVariables()
if (r != "OK") { return "Fail testCaptureVariables: $r" }
r = testCaptureVariablesInlineFunction()
if (r != "OK") { return "Fail testCaptureVariablesInlineFunction: $r" }
return "OK"
}