1.1 --- a/vm/src/test/java/org/apidesign/vm4brwsr/VMLazyTest.java Tue Dec 04 09:16:53 2012 +0100
1.2 +++ b/vm/src/test/java/org/apidesign/vm4brwsr/VMLazyTest.java Fri Dec 07 06:29:54 2012 +0100
1.3 @@ -19,6 +19,8 @@
1.4
1.5 import java.io.IOException;
1.6 import java.io.InputStream;
1.7 +import java.util.Set;
1.8 +import java.util.TreeSet;
1.9 import javax.script.Invocable;
1.10 import javax.script.ScriptContext;
1.11 import javax.script.ScriptEngine;
1.12 @@ -40,36 +42,18 @@
1.13 @BeforeClass
1.14 public void compileTheCode() throws Exception {
1.15 StringBuilder sb = new StringBuilder();
1.16 -
1.17 - sb.append("\nfunction test(clazz, as, method) {");
1.18 - sb.append("\n var l = new lazyVM(this);");
1.19 - sb.append("\n var c = l.loadClass(clazz, as);");
1.20 + sb.append("\nvar data = {};");
1.21 + sb.append("\nfunction test(clazz, method) {");
1.22 + sb.append("\n if (!data.bck2brwsr) data.bck2brwsr = bck2brwsr(function(name) { return loader.get(name); });");
1.23 + sb.append("\n var c = data.bck2brwsr.loadClass(clazz);");
1.24 sb.append("\n return c[method]();");
1.25 sb.append("\n}");
1.26
1.27
1.28 - sb.append("\nfunction lazyVM(global) {");
1.29 - sb.append("\n var self = this;");
1.30 - sb.append("\n var glb = global;");
1.31 - sb.append("\n lazyVM.prototype.loadClass = function(res, name) {");
1.32 - sb.append("\n var script = org_apidesign_vm4brwsr_VMLazy(true)."
1.33 - + "toJavaScript__Ljava_lang_String_2Ljava_lang_Object_2Ljava_lang_Object_2_3B("
1.34 - + " glb, self,"
1.35 - + " loader.get(res + '.class')"
1.36 - + ");");
1.37 - sb.append("\n try {");
1.38 - sb.append("\n new Function(script)(glb, name);");
1.39 - sb.append("\n } catch (ex) {");
1.40 - sb.append("\n throw 'Cannot compile ' + res + ' error: ' + ex + ' script:\\n' + script;");
1.41 - sb.append("\n };");
1.42 - sb.append("\n return glb[name](true);");
1.43 - sb.append("\n };");
1.44 - sb.append("\n");
1.45 - sb.append("\n}\n");
1.46 -
1.47 +
1.48 ScriptEngine[] arr = { null };
1.49 code = StaticMethodTest.compileClass(sb, arr,
1.50 - "org/apidesign/vm4brwsr/VMLazy"
1.51 + "org/apidesign/vm4brwsr/GenJS"
1.52 );
1.53 arr[0].getContext().setAttribute("loader", new FindBytes(), ScriptContext.ENGINE_SCOPE);
1.54 codeSeq = sb;
1.55 @@ -77,13 +61,13 @@
1.56
1.57 @Test public void invokeStaticMethod() throws Exception {
1.58 assertExec("Trying to get -1", "test", Double.valueOf(-1),
1.59 - "org/apidesign/vm4brwsr/StaticMethod", "org_apidesign_vm4brwsr_StaticMethod", "minusOne__I"
1.60 + StaticMethod.class.getName(), "minusOne__I"
1.61 );
1.62 }
1.63
1.64 @Test public void loadDependantClass() throws Exception {
1.65 - assertExec("Trying to get zero", "test", Double.valueOf(0),
1.66 - "org/apidesign/vm4brwsr/InstanceSub", "org_apidesign_vm4brwsr_InstanceSub", "recallDbl__D"
1.67 + assertExec("Expecting zero", "test", Double.valueOf(0),
1.68 + InstanceSub.class.getName(), "recallDbl__D"
1.69 );
1.70 }
1.71
1.72 @@ -106,7 +90,13 @@
1.73 }
1.74
1.75 public static final class FindBytes {
1.76 + private static Set<String> requested = new TreeSet<String>();
1.77 +
1.78 public byte[] get(String name) throws IOException {
1.79 + if (!requested.add(name)) {
1.80 + throw new IllegalStateException("Requested for second time: " + name);
1.81 + }
1.82 +
1.83 InputStream is = VMLazyTest.class.getClassLoader().getResourceAsStream(name);
1.84 if (is == null) {
1.85 throw new IOException("Can't find " + name);