jaroslav@248: /** jaroslav@248: * Back 2 Browser Bytecode Translator jaroslav@248: * Copyright (C) 2012 Jaroslav Tulach jaroslav@248: * jaroslav@248: * This program is free software: you can redistribute it and/or modify jaroslav@248: * it under the terms of the GNU General Public License as published by jaroslav@248: * the Free Software Foundation, version 2 of the License. jaroslav@248: * jaroslav@248: * This program is distributed in the hope that it will be useful, jaroslav@248: * but WITHOUT ANY WARRANTY; without even the implied warranty of jaroslav@248: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the jaroslav@248: * GNU General Public License for more details. jaroslav@248: * jaroslav@248: * You should have received a copy of the GNU General Public License jaroslav@248: * along with this program. Look for COPYING file in the top folder. jaroslav@248: * If not, see http://opensource.org/licenses/GPL-2.0. jaroslav@248: */ jaroslav@248: package org.apidesign.vm4brwsr; jaroslav@248: jaroslav@248: import static org.testng.Assert.*; jaroslav@248: import org.testng.annotations.Test; jaroslav@248: jaroslav@248: /** jaroslav@248: * jaroslav@248: * @author Jaroslav Tulach jaroslav@248: */ jaroslav@248: public class ByteCodeToJavaScriptTest { jaroslav@248: jaroslav@248: public ByteCodeToJavaScriptTest() { jaroslav@248: } jaroslav@248: jaroslav@248: @Test jaroslav@248: public void findMethodNameManglesObjectsCorrectly() { jaroslav@248: StringBuilder cnt = new StringBuilder(); lubomir@282: char[] returnType = { 'V' }; jaroslav@248: String ret = ByteCodeToJavaScript.findMethodName(new String[] { jaroslav@248: "StringTest", "replace", "(Ljava/lang/String;CC)Ljava/lang/String;" lubomir@282: }, cnt, returnType); jaroslav@248: assertEquals(cnt.toString(), "000", "No doubles or longs"); lubomir@282: assertTrue(returnType[0] != 'V', "Returns string"); jaroslav@248: assertEquals(ret, "replace__Ljava_lang_String_2Ljava_lang_String_2CC"); jaroslav@248: } jaroslav@248: jaroslav@248: @Test jaroslav@248: public void manglingArrays() { jaroslav@248: StringBuilder cnt = new StringBuilder(); lubomir@282: char[] returnType = { 'V' }; jaroslav@248: String ret = ByteCodeToJavaScript.findMethodName(new String[] { jaroslav@248: "VMinVM", "toJavaScript", "([B)Ljava/lang/String;" lubomir@282: }, cnt, returnType); jaroslav@248: assertEquals(cnt.toString(), "0", "No doubles or longs"); lubomir@282: assertTrue(returnType[0] != 'V', "Returns string"); jaroslav@248: assertEquals(ret, "toJavaScript__Ljava_lang_String_2_3B"); jaroslav@248: } jaroslav@1409: jaroslav@1409: @Test public void mangleJsCallbackToAType() throws Exception { jaroslav@1409: String res = ByteCodeToJavaScript.mangleJsCallbacks( jaroslav@1409: "org.apidesign.bck2brwsr.vmtest.impl.HtmlAnnotations", jaroslav@1409: "onError", "Ljava/lang/Object;", false jaroslav@1409: ); jaroslav@1409: assertEquals(res, jaroslav@1754: "org_1apidesign_1bck2brwsr_1vmtest_1impl_1HtmlAnnotations$onError$" jaroslav@1754: + "Ljava_1lang_1Object_12__" jaroslav@1754: + "Ljava_lang_Object_2Lorg_apidesign_bck2brwsr_vmtest_impl_HtmlAnnotations_2Ljava_lang_Object_2", jaroslav@1754: "Pretty long method name" jaroslav@1754: ); jaroslav@1754: } jaroslav@1754: @Test public void mangleJsCallbackToATypeWithString() throws Exception { jaroslav@1754: String res = ByteCodeToJavaScript.mangleJsCallbacks( jaroslav@1754: "org.apidesign.bck2brwsr.vmtest.impl.HtmlAnnotations", jaroslav@1754: "onMessage", "Ljava/lang/String;", false jaroslav@1754: ); jaroslav@1754: assertEquals(res, jaroslav@1754: "org_1apidesign_1bck2brwsr_1vmtest_1impl_1HtmlAnnotations$onMessage$" jaroslav@1754: + "Ljava_1lang_1String_12__" jaroslav@1754: + "Ljava_lang_Object_2Lorg_apidesign_bck2brwsr_vmtest_impl_HtmlAnnotations_2Ljava_lang_String_2", jaroslav@1409: "Pretty long method name" jaroslav@1409: ); jaroslav@1409: } jaroslav@248: }