# HG changeset patch # User Jaroslav Tulach # Date 1398699089 -7200 # Node ID d3df935aff70677d065edcdaffcc838d1fe6724f # Parent d5dd07b45f797be9e511c08a1aa6139241ee5aa1 Handles resources with non 7-bit ASCII characters diff -r d5dd07b45f79 -r d3df935aff70 rt/vm/src/main/java/org/apidesign/vm4brwsr/VM.java --- a/rt/vm/src/main/java/org/apidesign/vm4brwsr/VM.java Mon Apr 28 10:59:12 2014 +0200 +++ b/rt/vm/src/main/java/org/apidesign/vm4brwsr/VM.java Mon Apr 28 17:31:29 2014 +0200 @@ -459,7 +459,11 @@ + " function registerResource(n, a64) {\n" + " var str = atob(a64);\n" + " var arr = [];\n" - + " for (var i = 0; i < str.length; i++) arr.push(str.charCodeAt(i) & 0xff);\n" + + " for (var i = 0; i < str.length; i++) {\n" + + " var ch = str.charCodeAt(i) & 0xff;\n" + + " if (ch > 127) ch -= 256;\n" + + " arr.push(ch);\n" + + " }\n" + " if (!resources[n]) resources[n] = [arr];\n" + " else resources[n].push(arr);\n" + " }\n" diff -r d5dd07b45f79 -r d3df935aff70 rt/vm/src/test/java/org/apidesign/vm4brwsr/Resources.java --- a/rt/vm/src/test/java/org/apidesign/vm4brwsr/Resources.java Mon Apr 28 10:59:12 2014 +0200 +++ b/rt/vm/src/test/java/org/apidesign/vm4brwsr/Resources.java Mon Apr 28 17:31:29 2014 +0200 @@ -38,4 +38,23 @@ final Object str = new String(arr, 0, len, "UTF-8"); return str.toString(); } + static String loadClazz() throws IOException { + InputStream is = Resources.class.getResourceAsStream("Bck2BrwsrToolkit.class"); + if (is == null) { + return "No resource found!"; + } + byte[] arr = new byte[4092]; + int len = is.read(arr); + if (len < 10) { + return "No data read! Len: " + len; + } + + StringBuilder sb = new StringBuilder(); + sb.append("["); + for (int i = 0; i < len; i++) { + sb.append(arr[i]).append(", "); + } + + return sb.toString().toString(); + } } diff -r d5dd07b45f79 -r d3df935aff70 rt/vm/src/test/java/org/apidesign/vm4brwsr/ResourcesTest.java --- a/rt/vm/src/test/java/org/apidesign/vm4brwsr/ResourcesTest.java Mon Apr 28 10:59:12 2014 +0200 +++ b/rt/vm/src/test/java/org/apidesign/vm4brwsr/ResourcesTest.java Mon Apr 28 17:31:29 2014 +0200 @@ -35,13 +35,26 @@ exp ); } + + @Test public void loadBinaryPrecompiledResource() throws Exception { + String exp = Resources.loadClazz(); + + assertExec("Loading a precompiled resource:", + Resources.class, "loadClazz__Ljava_lang_String_2", + exp + ); + } private static TestVM code; @BeforeClass public static void compileTheCode() throws Exception { StringBuilder sb = new StringBuilder(); - code = TestVM.compileClassAndResources(sb, null, "org/apidesign/vm4brwsr/Resources", "org/apidesign/vm4brwsr/ko.js"); + code = TestVM.compileClassAndResources(sb, null, + "org/apidesign/vm4brwsr/Resources", + "org/apidesign/vm4brwsr/ko.js", + "org/apidesign/vm4brwsr/Bck2BrwsrToolkit.class" + ); } @AfterClass public static void releaseTheCode() { @@ -56,6 +69,12 @@ } public static String parseBase64Binary(String s) throws UnsupportedEncodingException { - return new String(javax.xml.bind.DatatypeConverter.parseBase64Binary(s), "UTF-8"); + final byte[] arr = javax.xml.bind.DatatypeConverter.parseBase64Binary(s); + StringBuilder sb = new StringBuilder(); + for (int i = 0; i < arr.length; i++) { + int ch = arr[i]; + sb.append((char)ch); + } + return sb.toString(); } }