1.1 --- a/rt/vm/src/main/java/org/apidesign/vm4brwsr/VM.java Mon Apr 28 10:59:12 2014 +0200
1.2 +++ b/rt/vm/src/main/java/org/apidesign/vm4brwsr/VM.java Mon Apr 28 17:31:29 2014 +0200
1.3 @@ -459,7 +459,11 @@
1.4 + " function registerResource(n, a64) {\n"
1.5 + " var str = atob(a64);\n"
1.6 + " var arr = [];\n"
1.7 - + " for (var i = 0; i < str.length; i++) arr.push(str.charCodeAt(i) & 0xff);\n"
1.8 + + " for (var i = 0; i < str.length; i++) {\n"
1.9 + + " var ch = str.charCodeAt(i) & 0xff;\n"
1.10 + + " if (ch > 127) ch -= 256;\n"
1.11 + + " arr.push(ch);\n"
1.12 + + " }\n"
1.13 + " if (!resources[n]) resources[n] = [arr];\n"
1.14 + " else resources[n].push(arr);\n"
1.15 + " }\n"
2.1 --- a/rt/vm/src/test/java/org/apidesign/vm4brwsr/Resources.java Mon Apr 28 10:59:12 2014 +0200
2.2 +++ b/rt/vm/src/test/java/org/apidesign/vm4brwsr/Resources.java Mon Apr 28 17:31:29 2014 +0200
2.3 @@ -38,4 +38,23 @@
2.4 final Object str = new String(arr, 0, len, "UTF-8");
2.5 return str.toString();
2.6 }
2.7 + static String loadClazz() throws IOException {
2.8 + InputStream is = Resources.class.getResourceAsStream("Bck2BrwsrToolkit.class");
2.9 + if (is == null) {
2.10 + return "No resource found!";
2.11 + }
2.12 + byte[] arr = new byte[4092];
2.13 + int len = is.read(arr);
2.14 + if (len < 10) {
2.15 + return "No data read! Len: " + len;
2.16 + }
2.17 +
2.18 + StringBuilder sb = new StringBuilder();
2.19 + sb.append("[");
2.20 + for (int i = 0; i < len; i++) {
2.21 + sb.append(arr[i]).append(", ");
2.22 + }
2.23 +
2.24 + return sb.toString().toString();
2.25 + }
2.26 }
3.1 --- a/rt/vm/src/test/java/org/apidesign/vm4brwsr/ResourcesTest.java Mon Apr 28 10:59:12 2014 +0200
3.2 +++ b/rt/vm/src/test/java/org/apidesign/vm4brwsr/ResourcesTest.java Mon Apr 28 17:31:29 2014 +0200
3.3 @@ -35,13 +35,26 @@
3.4 exp
3.5 );
3.6 }
3.7 +
3.8 + @Test public void loadBinaryPrecompiledResource() throws Exception {
3.9 + String exp = Resources.loadClazz();
3.10 +
3.11 + assertExec("Loading a precompiled resource:",
3.12 + Resources.class, "loadClazz__Ljava_lang_String_2",
3.13 + exp
3.14 + );
3.15 + }
3.16
3.17 private static TestVM code;
3.18
3.19 @BeforeClass
3.20 public static void compileTheCode() throws Exception {
3.21 StringBuilder sb = new StringBuilder();
3.22 - code = TestVM.compileClassAndResources(sb, null, "org/apidesign/vm4brwsr/Resources", "org/apidesign/vm4brwsr/ko.js");
3.23 + code = TestVM.compileClassAndResources(sb, null,
3.24 + "org/apidesign/vm4brwsr/Resources",
3.25 + "org/apidesign/vm4brwsr/ko.js",
3.26 + "org/apidesign/vm4brwsr/Bck2BrwsrToolkit.class"
3.27 + );
3.28 }
3.29 @AfterClass
3.30 public static void releaseTheCode() {
3.31 @@ -56,6 +69,12 @@
3.32 }
3.33
3.34 public static String parseBase64Binary(String s) throws UnsupportedEncodingException {
3.35 - return new String(javax.xml.bind.DatatypeConverter.parseBase64Binary(s), "UTF-8");
3.36 + final byte[] arr = javax.xml.bind.DatatypeConverter.parseBase64Binary(s);
3.37 + StringBuilder sb = new StringBuilder();
3.38 + for (int i = 0; i < arr.length; i++) {
3.39 + int ch = arr[i];
3.40 + sb.append((char)ch);
3.41 + }
3.42 + return sb.toString();
3.43 }
3.44 }