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 Fri Jan 18 14:23:18 2013 +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);