diff --git a/js/js.tests/test/org/jetbrains/k2js/test/semantics/TryCatchTest.java b/js/js.tests/test/org/jetbrains/k2js/test/semantics/TryCatchTest.java index aaca6fc7b19..6f0ba411bbb 100644 --- a/js/js.tests/test/org/jetbrains/k2js/test/semantics/TryCatchTest.java +++ b/js/js.tests/test/org/jetbrains/k2js/test/semantics/TryCatchTest.java @@ -25,4 +25,24 @@ public class TryCatchTest extends AbstractExpressionTest { public void testTryCatchExpr() throws Exception { checkFooBoxIsOk(); } + + public void testTryCatchThrowable() throws Exception { + checkFooBoxIsOk(); + } + + public void testTryCatchCorrectForSubclasses() throws Exception { + checkFooBoxIsOk(); + } + + public void testMultipleCatchBlocks() throws Exception { + checkFooBoxIsOk(); + } + + public void testTryCatchWithDifferentParameterNames() throws Exception { + checkFooBoxIsOk(); + } + + public void testRethrowExceptionIfNotCaught() throws Exception { + checkFooBoxIsOk(); + } } diff --git a/js/js.translator/testData/expression/try/cases/multipleCatchBlocks.kt b/js/js.translator/testData/expression/try/cases/multipleCatchBlocks.kt new file mode 100644 index 00000000000..40b6a811c13 --- /dev/null +++ b/js/js.translator/testData/expression/try/cases/multipleCatchBlocks.kt @@ -0,0 +1,41 @@ +package foo + +class UserException() : RuntimeException() + +fun bar(e: Exception): String { + var s: String = "" + var exceptionObject: Exception? = null + + try { + throw e + } + catch (e: UserException) { + s = "UserException" + exceptionObject = e + } + catch (e: IllegalArgumentException) { + s = "IllegalArgumentException" + exceptionObject = e + } + catch (e: IllegalStateException) { + s = "IllegalStateException" + exceptionObject = e + } + catch (e: Exception) { + s = "Exception" + exceptionObject = e + } + + assertEquals(e, exceptionObject, "e == exceptionObject") + return s +} + +fun box(): String { + + assertEquals("UserException", bar(UserException())) + assertEquals("IllegalArgumentException", bar(IllegalArgumentException())) + assertEquals("IllegalStateException", bar(IllegalStateException())) + assertEquals("Exception", bar(Exception())) + + return "OK" +} diff --git a/js/js.translator/testData/expression/try/cases/rethrowExceptionIfNotCaught.kt b/js/js.translator/testData/expression/try/cases/rethrowExceptionIfNotCaught.kt new file mode 100644 index 00000000000..2f60f987900 --- /dev/null +++ b/js/js.translator/testData/expression/try/cases/rethrowExceptionIfNotCaught.kt @@ -0,0 +1,23 @@ +package foo + +fun catchSomeExceptions(e: Exception) { + + try { + throw e + } + catch (e: NullPointerException) { } + catch(e: IllegalArgumentException) { } + + fail("should not reach this point") +} + +fun box(): String { + + try { + catchSomeExceptions(RuntimeException()) + } catch(e: RuntimeException) { + return "OK" + } + + return "Not OK" +} \ No newline at end of file diff --git a/js/js.translator/testData/expression/try/cases/tryCatchCorrectForSubclasses.kt b/js/js.translator/testData/expression/try/cases/tryCatchCorrectForSubclasses.kt new file mode 100644 index 00000000000..cbc5d2308f9 --- /dev/null +++ b/js/js.translator/testData/expression/try/cases/tryCatchCorrectForSubclasses.kt @@ -0,0 +1,24 @@ +package foo + +open class Ex: Exception() + +class Ex1: Ex() + +fun box(): String { + + var s: String = "" + + try { + throw Ex1() + } + catch (e: Ex) { + s = "Ex" + } + catch (e: Ex1) { + throw Exception("Control flow cannot get here") + } + + assertEquals("Ex", s) + + return "OK" +} \ No newline at end of file diff --git a/js/js.translator/testData/expression/try/cases/tryCatchThrowable.kt b/js/js.translator/testData/expression/try/cases/tryCatchThrowable.kt new file mode 100644 index 00000000000..3ff280a0c02 --- /dev/null +++ b/js/js.translator/testData/expression/try/cases/tryCatchThrowable.kt @@ -0,0 +1,15 @@ +package foo + +fun box(): String { + + var s: String = "" + + try { + throw Exception() + } catch (e: Throwable) { + s = "Throwable" + } + assertEquals("Throwable", s) + + return "OK" +} \ No newline at end of file diff --git a/js/js.translator/testData/expression/try/cases/tryCatchWithDifferentParameterNames.kt b/js/js.translator/testData/expression/try/cases/tryCatchWithDifferentParameterNames.kt new file mode 100644 index 00000000000..721c41802b5 --- /dev/null +++ b/js/js.translator/testData/expression/try/cases/tryCatchWithDifferentParameterNames.kt @@ -0,0 +1,45 @@ +/* + * Copyright 2010-2014 JetBrains s.r.o. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package foo + +fun bar(e: Exception): String { + var s: String = "" + var exceptionObject: Exception? = null + + try { + throw e + } + catch (e1: IllegalArgumentException) { + s = "IllegalArgumentException" + exceptionObject = e1 + } + catch (e2: Exception) { + s = "Exception" + exceptionObject = e + } + + assertEquals(e, exceptionObject, "e == exceptionObject") + return s +} + +fun box(): String { + + assertEquals("IllegalArgumentException", bar(IllegalArgumentException())) + assertEquals("Exception", bar(Exception())) + + return "OK" +}