vm/src/test/java/org/apidesign/vm4brwsr/VMLazyTest.java
branchlazyvm
changeset 277 e4b9eee9be83
parent 248 0bfcb6585290
child 298 885acca2fa0b
     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);