jaroslav@106: /** jaroslav@106: * Back 2 Browser Bytecode Translator jaroslav@106: * Copyright (C) 2012 Jaroslav Tulach jaroslav@106: * jaroslav@106: * This program is free software: you can redistribute it and/or modify jaroslav@106: * it under the terms of the GNU General Public License as published by jaroslav@106: * the Free Software Foundation, version 2 of the License. jaroslav@106: * jaroslav@106: * This program is distributed in the hope that it will be useful, jaroslav@106: * but WITHOUT ANY WARRANTY; without even the implied warranty of jaroslav@106: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the jaroslav@106: * GNU General Public License for more details. jaroslav@106: * jaroslav@106: * You should have received a copy of the GNU General Public License jaroslav@106: * along with this program. Look for COPYING file in the top folder. jaroslav@106: * If not, see http://opensource.org/licenses/GPL-2.0. jaroslav@106: */ jaroslav@22: package org.apidesign.vm4brwsr; jaroslav@21: jaroslav@21: import javax.script.ScriptException; jaroslav@21: import static org.testng.Assert.*; jaroslav@103: import org.testng.annotations.BeforeClass; jtulach@128: import org.testng.annotations.Test; jaroslav@21: jaroslav@21: /** jaroslav@21: * tzezula@285: * @author Tomas Zezula jaroslav@21: */ tzezula@285: public class ExceptionsTest { tzezula@285: @Test tzezula@285: public void verifyMethodWithTryCatchNoThrow() throws Exception { tzezula@287: assertExec( tzezula@287: "No throw", tzezula@287: Exceptions.class, tzezula@287: "methodWithTryCatchNoThrow__I", tzezula@287: new Double(1.0)); jaroslav@21: } tzezula@285: tzezula@285: @Test jaroslav@423: public void catchJavaScriptStringAsThrowable() throws Exception { jaroslav@423: assertExec( jaroslav@423: "Throw hello!", jaroslav@423: Exceptions.class, jaroslav@423: "catchThrowableCatchesAll__Ljava_lang_String_2", jaroslav@423: "Hello!" jaroslav@423: ); jaroslav@423: } jaroslav@423: jaroslav@423: @Test tzezula@285: public void verifyMethodWithTryCatchThrow() throws Exception { tzezula@287: assertExec( tzezula@287: "Throw", tzezula@287: Exceptions.class, tzezula@287: "methodWithTryCatchThrow__I", tzezula@287: new Double(2.0)); jaroslav@104: } jaroslav@104: jaroslav@400: @Test public void createObject() throws Exception { jaroslav@400: assertExec("Object created", Exceptions.class, jaroslav@400: "newInstance__Ljava_lang_String_2Ljava_lang_String_2", jaroslav@400: "java.lang.Object", jaroslav@400: "java.lang.Object" jaroslav@400: ); jaroslav@400: } jaroslav@400: jaroslav@400: @Test public void createFloatFails() throws Exception { jaroslav@400: assertExec("Float not created", Exceptions.class, jaroslav@400: "newInstance__Ljava_lang_String_2Ljava_lang_String_2", jaroslav@400: "java.lang.Float", jaroslav@400: "java.lang.Float" jaroslav@400: ); jaroslav@400: } jaroslav@400: jaroslav@400: @Test public void createUnknownFails() throws Exception { jaroslav@400: assertExec("Object created", Exceptions.class, jaroslav@400: "newInstance__Ljava_lang_String_2Ljava_lang_String_2", jaroslav@400: "CNFE:org.apidesign.Unknown", jaroslav@400: "org.apidesign.Unknown" jaroslav@400: ); jaroslav@400: } jaroslav@400: jaroslav@401: @Test public void testThreeCalls() throws Exception { jaroslav@708: Object clazz = code.loadClass("loadClass", Exceptions.class.getName()); jaroslav@401: jaroslav@401: String method = "readCounter__ILjava_lang_String_2"; jaroslav@401: jaroslav@401: try { jaroslav@401: Object ret = code.invokeMethod(clazz, method, "org.apidesign.Unknown"); jaroslav@401: fail("We expect an CNFE!"); jaroslav@401: } catch (ScriptException scriptException) { jaroslav@401: // script exception should be OK jaroslav@401: } jaroslav@401: { jaroslav@401: // 2nd invocation jaroslav@401: Object ret = code.invokeMethod(clazz, method, "java.lang.String"); jaroslav@401: assertEquals(ret, Double.valueOf(2)); jaroslav@401: } jaroslav@401: { jaroslav@401: // 3rd invocation jaroslav@401: Object ret = code.invokeMethod(clazz, method, "java.lang.Integer"); jaroslav@401: assertEquals(ret, Double.valueOf(3)); jaroslav@401: } jaroslav@401: } jaroslav@401: jaroslav@708: private static TestVM code; jaroslav@103: jaroslav@103: @BeforeClass jaroslav@103: public void compileTheCode() throws Exception { jaroslav@708: code = TestVM.compileClass("org/apidesign/vm4brwsr/Exceptions"); jaroslav@103: } jaroslav@203: private static void assertExec(String msg, Class clazz, String method, Object expRes, Object... args) throws Exception { jaroslav@708: code.assertExec(msg, clazz, method, expRes, args); jaroslav@21: } jaroslav@21: }