JS backend: added tests for KT-4159.
This commit is contained in:
committed by
Zalim Bashorov
parent
569f139d8a
commit
21f87350b9
@@ -66,7 +66,6 @@ public final class MiscTest extends AbstractExpressionTest {
|
|||||||
checkOutput("KT-1052.kt", "true\n");
|
checkOutput("KT-1052.kt", "true\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public void testKt740_1() throws Exception {
|
public void testKt740_1() throws Exception {
|
||||||
checkFooBoxIsTrue("KT-740.kt");
|
checkFooBoxIsTrue("KT-740.kt");
|
||||||
}
|
}
|
||||||
@@ -123,6 +122,18 @@ public final class MiscTest extends AbstractExpressionTest {
|
|||||||
fooBoxTest();
|
fooBoxTest();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void testElvisReturnSimple() throws Exception {
|
||||||
|
checkFooBoxIsOk();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void testElvisReturnNested() throws Exception {
|
||||||
|
checkFooBoxIsOk();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void testElvisWithThrow() throws Exception {
|
||||||
|
checkFooBoxIsOk();
|
||||||
|
}
|
||||||
|
|
||||||
public void testExtensionLiteralCalledInsideExtensionFunction() throws Exception {
|
public void testExtensionLiteralCalledInsideExtensionFunction() throws Exception {
|
||||||
fooBoxTest();
|
fooBoxTest();
|
||||||
}
|
}
|
||||||
@@ -135,12 +146,10 @@ public final class MiscTest extends AbstractExpressionTest {
|
|||||||
checkOutput("mainFunInNestedPackage.kt", "ayee");
|
checkOutput("mainFunInNestedPackage.kt", "ayee");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public void testPropertiesWithExplicitlyDefinedAccessorsWithoutBodies() throws Exception {
|
public void testPropertiesWithExplicitlyDefinedAccessorsWithoutBodies() throws Exception {
|
||||||
fooBoxTest();
|
fooBoxTest();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public void testExclExcl() throws Exception {
|
public void testExclExcl() throws Exception {
|
||||||
fooBoxTest();
|
fooBoxTest();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,27 @@
|
|||||||
|
/*
|
||||||
|
* Issue: KT-4159 Kotlin to JS compiler crashes on code with ?: return
|
||||||
|
*
|
||||||
|
* Expression like "val s1 : String = s ?: return null" causes compiler to crash
|
||||||
|
*/
|
||||||
|
|
||||||
|
package foo
|
||||||
|
|
||||||
|
fun assertEquals<T>(expected: T, actual: T) {
|
||||||
|
if (expected != actual) throw Exception("expected: $expected, actual: $actual")
|
||||||
|
}
|
||||||
|
|
||||||
|
fun firstNotNullLen(s1 : String?, s2 : String?, s3 : String?) : Int {
|
||||||
|
val len = (s1?.length() ?: s2?.length()) ?:
|
||||||
|
(s2?.length() ?: s3?.length()) ?:
|
||||||
|
return 0
|
||||||
|
return len
|
||||||
|
}
|
||||||
|
|
||||||
|
fun box(): String {
|
||||||
|
assertEquals(1, firstNotNullLen("a", null, null))
|
||||||
|
assertEquals(2, firstNotNullLen(null, "ab", null))
|
||||||
|
assertEquals(3, firstNotNullLen(null, null, "abc"))
|
||||||
|
assertEquals(0, firstNotNullLen(null, null, null))
|
||||||
|
|
||||||
|
return "OK"
|
||||||
|
}
|
||||||
@@ -0,0 +1,32 @@
|
|||||||
|
/*
|
||||||
|
* Issue: KT-4159 Kotlin to JS compiler crashes on code with ?: return
|
||||||
|
*
|
||||||
|
* Expression like "val s1 : String = s ?: return null" causes compiler to crash
|
||||||
|
*/
|
||||||
|
|
||||||
|
package foo
|
||||||
|
|
||||||
|
fun assertEquals<T>(expected: T, actual: T) {
|
||||||
|
if (expected != actual) throw Exception("expected: $expected, actual: $actual")
|
||||||
|
}
|
||||||
|
|
||||||
|
fun stringLen(s : String?) : Int {
|
||||||
|
val s1 : String = s ?: return 0
|
||||||
|
return s1.length
|
||||||
|
}
|
||||||
|
|
||||||
|
fun stringReturnInLeftLen(s : String?) : Int {
|
||||||
|
val s1 : String = (if (s != null) { return s.length() } else { null }) ?: return 0
|
||||||
|
}
|
||||||
|
|
||||||
|
fun box(): String {
|
||||||
|
assertEquals(3, stringLen("box"))
|
||||||
|
assertEquals(0, stringLen(""))
|
||||||
|
assertEquals(0, stringLen(null))
|
||||||
|
|
||||||
|
assertEquals(3, stringReturnInLeftLen("box"))
|
||||||
|
assertEquals(0, stringReturnInLeftLen(""))
|
||||||
|
assertEquals(0, stringReturnInLeftLen(null))
|
||||||
|
|
||||||
|
return "OK"
|
||||||
|
}
|
||||||
@@ -0,0 +1,35 @@
|
|||||||
|
package foo
|
||||||
|
|
||||||
|
fun assertEquals<T>(expected: T, actual: T) {
|
||||||
|
if (expected != actual) throw Exception("expected: $expected, actual: $actual")
|
||||||
|
}
|
||||||
|
|
||||||
|
var i = 0
|
||||||
|
fun bar(): Any? {
|
||||||
|
i++
|
||||||
|
return null
|
||||||
|
}
|
||||||
|
|
||||||
|
native
|
||||||
|
val Exception.message: String = noImpl
|
||||||
|
|
||||||
|
fun box(): String {
|
||||||
|
val a: String? = null
|
||||||
|
try {
|
||||||
|
a ?: throw Exception("a")
|
||||||
|
}
|
||||||
|
catch (e: Exception) {
|
||||||
|
assertEquals("a", e.message)
|
||||||
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
bar() ?: throw Exception("bar()")
|
||||||
|
}
|
||||||
|
catch (e: Exception) {
|
||||||
|
assertEquals("bar()", e.message)
|
||||||
|
}
|
||||||
|
|
||||||
|
assertEquals(1, i)
|
||||||
|
|
||||||
|
return "OK"
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user