vm/src/test/java/org/apidesign/vm4brwsr/CompareVMs.java
branchlauncher
changeset 344 4adbde04e899
parent 297 a20721a10717
parent 303 c12342170235
     1.1 --- a/vm/src/test/java/org/apidesign/vm4brwsr/CompareVMs.java	Mon Dec 10 12:03:22 2012 +0100
     1.2 +++ b/vm/src/test/java/org/apidesign/vm4brwsr/CompareVMs.java	Mon Dec 17 12:21:05 2012 +0100
     1.3 @@ -21,6 +21,7 @@
     1.4  import java.util.Map;
     1.5  import java.util.WeakHashMap;
     1.6  import javax.script.Invocable;
     1.7 +import javax.script.ScriptContext;
     1.8  import javax.script.ScriptEngine;
     1.9  import javax.script.ScriptEngineManager;
    1.10  import org.testng.Assert;
    1.11 @@ -104,26 +105,17 @@
    1.12                  return;
    1.13              }
    1.14              StringBuilder sb = new StringBuilder();
    1.15 -            class SkipMe extends GenJS {
    1.16 -
    1.17 -                public SkipMe(Appendable out) {
    1.18 -                    super(out);
    1.19 -                }
    1.20 -
    1.21 -                @Override
    1.22 -                protected boolean requireReference(String cn) {
    1.23 -                    if (cn.contains("CompareVMs")) {
    1.24 -                        return true;
    1.25 -                    }
    1.26 -                    return super.requireReference(cn);
    1.27 -                }
    1.28 -            }
    1.29 -            SkipMe sm = new SkipMe(sb);
    1.30 -            sm.doCompile(CompareVMs.class.getClassLoader(), StringArray.asList(
    1.31 -                clazz.getName().replace('.', '/')));
    1.32 +            Bck2Brwsr.generate(sb, CompareVMs.class.getClassLoader());
    1.33  
    1.34              ScriptEngineManager sem = new ScriptEngineManager();
    1.35              ScriptEngine js = sem.getEngineByExtension("js");
    1.36 +            js.getContext().setAttribute("loader", new BytesLoader(), ScriptContext.ENGINE_SCOPE);
    1.37 +            
    1.38 +            sb.append("\nfunction initVM() {"
    1.39 +                + "\n  return bck2brwsr("
    1.40 +                + "\n    function(name) { return loader.get(name);}"
    1.41 +                + "\n  );"
    1.42 +                + "\n};");
    1.43  
    1.44              Object res = js.eval(sb.toString());
    1.45              Assert.assertTrue(js instanceof Invocable, "It is invocable object: " + res);
    1.46 @@ -136,7 +128,8 @@
    1.47              if (js) {
    1.48                  try {
    1.49                      compileTheCode(m.getDeclaringClass());
    1.50 -                    Object inst = code.invokeFunction(m.getDeclaringClass().getName().replace('.', '_'), false);
    1.51 +                    Object vm = code.invokeFunction("initVM");
    1.52 +                    Object inst = code.invokeMethod(vm, "loadClass", m.getDeclaringClass().getName());
    1.53                      value = code.invokeMethod(inst, m.getName() + "__" + computeSignature(m));
    1.54                  } catch (Exception ex) {
    1.55                      throw new AssertionError(StaticMethodTest.dumpJS(codeSeq)).initCause(ex);