# HG changeset patch # User Jaroslav Tulach # Date 1355832656 -3600 # Node ID 3fe5a86bd1231a74896a68f2e808c9488c1bb0c9 # Parent 4e9d576780cad27137c9e3fef7e62d2d0059f0d8 Can execute tests in real browser diff -r 4e9d576780ca -r 3fe5a86bd123 launcher/src/main/java/org/apidesign/bck2brwsr/launcher/Bck2BrwsrLauncher.java --- a/launcher/src/main/java/org/apidesign/bck2brwsr/launcher/Bck2BrwsrLauncher.java Tue Dec 18 12:43:18 2012 +0100 +++ b/launcher/src/main/java/org/apidesign/bck2brwsr/launcher/Bck2BrwsrLauncher.java Tue Dec 18 13:10:56 2012 +0100 @@ -31,6 +31,7 @@ import java.util.List; import java.util.Set; import java.util.concurrent.CountDownLatch; +import java.util.concurrent.TimeUnit; import static org.apidesign.bck2brwsr.launcher.Bck2BrwsrLauncher.copyStream; import org.apidesign.vm4brwsr.Bck2Brwsr; import org.glassfish.grizzly.PortRange; @@ -47,6 +48,7 @@ public class Bck2BrwsrLauncher { private Set loaders = new LinkedHashSet<>(); private List methods = new ArrayList<>(); + private long timeOut; public MethodInvocation addMethod(Class clazz, String method) { @@ -56,7 +58,9 @@ return c; } - + public void setTimeout(long ms) { + timeOut = ms; + } public static void main( String[] args ) throws Exception { Bck2BrwsrLauncher l = new Bck2BrwsrLauncher(); @@ -131,7 +135,8 @@ Runtime.getRuntime().exec(cmd).waitFor(); } - wait.await(); + wait.await(timeOut, TimeUnit.MILLISECONDS); + server.stop(); } static void copyStream(InputStream is, OutputStream os, String baseURL, String... params) throws IOException { diff -r 4e9d576780ca -r 3fe5a86bd123 launcher/src/main/java/org/apidesign/bck2brwsr/launcher/Console.java --- a/launcher/src/main/java/org/apidesign/bck2brwsr/launcher/Console.java Tue Dec 18 12:43:18 2012 +0100 +++ b/launcher/src/main/java/org/apidesign/bck2brwsr/launcher/Console.java Tue Dec 18 13:10:56 2012 +0100 @@ -56,6 +56,11 @@ setAttr("result", "value", res); } + @JavaScriptBody(args = "o", body = "return '' + o;") + private static String tS(Object o) { + return o.toString(); + } + public static void harness(String url) { log("Connecting to " + url); try { @@ -75,12 +80,7 @@ log("Result: " + result); - String toSend; - if (result == null) { - toSend = "null"; - } else { - toSend = result.toString(); - } + String toSend = tS(result); log("Sending back: " + url + "?request=" + c.getRequestId() + "&result=" + toSend); u = new URL(url + "?request=" + c.getRequestId() + "&result=" + toSend); diff -r 4e9d576780ca -r 3fe5a86bd123 vmtest/pom.xml --- a/vmtest/pom.xml Tue Dec 18 12:43:18 2012 +0100 +++ b/vmtest/pom.xml Tue Dec 18 13:10:56 2012 +0100 @@ -52,5 +52,10 @@ emul 0.3-SNAPSHOT + + ${project.groupId} + launcher + ${project.version} + diff -r 4e9d576780ca -r 3fe5a86bd123 vmtest/src/main/java/org/apidesign/bck2brwsr/vmtest/VMTest.java --- a/vmtest/src/main/java/org/apidesign/bck2brwsr/vmtest/VMTest.java Tue Dec 18 12:43:18 2012 +0100 +++ b/vmtest/src/main/java/org/apidesign/bck2brwsr/vmtest/VMTest.java Tue Dec 18 13:10:56 2012 +0100 @@ -29,6 +29,7 @@ import javax.script.Invocable; import javax.script.ScriptEngine; import javax.script.ScriptEngineManager; +import org.apidesign.bck2brwsr.launcher.Bck2BrwsrLauncher; import org.apidesign.vm4brwsr.Bck2Brwsr; import org.testng.Assert; import org.testng.ITest; @@ -63,18 +64,21 @@ */ public static Object[] create(Class clazz) { Method[] arr = clazz.getMethods(); - Object[] ret = new Object[3 * arr.length]; + Object[] ret = new Object[5 * arr.length]; int cnt = 0; for (Method m : arr) { Compare c = m.getAnnotation(Compare.class); if (c == null) { continue; } - final Run real = new Run(m, false); - final Run js = new Run(m, true); + final Run real = new Run(m, 0); + final Run js = new Run(m, 1); + final Run brwsr = new Run(m, 2); ret[cnt++] = real; ret[cnt++] = js; + ret[cnt++] = brwsr; ret[cnt++] = new VMTest(m, real, js); + ret[cnt++] = new VMTest(m, real, brwsr); } Object[] r = new Object[cnt]; for (int i = 0; i < cnt; i++) { @@ -100,7 +104,7 @@ */ @Override public String getTestName() { - return m.getName() + "[Compare]"; + return m.getName() + "[Compare " + second.typeName() + "]"; } /** Helper method that inspects the classpath and loads given resource @@ -136,15 +140,15 @@ public static final class Run implements ITest { private final Method m; - private final boolean js; + private final int type; Object value; private Invocable code; private CharSequence codeSeq; private static final Map compiled = new WeakHashMap<>(); - private Run(Method m, boolean js) { + private Run(Method m, int type) { this.m = m; - this.js = js; + this.type = type; } private void compileTheCode(Class clazz) throws Exception { @@ -173,7 +177,7 @@ } @Test(groups = "run") public void executeCode() throws Throwable { - if (js) { + if (type == 1) { try { compileTheCode(m.getDeclaringClass()); Object vm = code.invokeFunction("initVM"); @@ -182,13 +186,28 @@ } catch (Exception ex) { throw new AssertionError(dumpJS(codeSeq)).initCause(ex); } + } else if (type == 2) { + Bck2BrwsrLauncher l = new Bck2BrwsrLauncher(); + l.setTimeout(5000); + Bck2BrwsrLauncher.MethodInvocation c = l.addMethod(m.getDeclaringClass(), m.getName()); + l.execute(); + value = c.toString(); } else { value = m.invoke(m.getDeclaringClass().newInstance()); } } @Override public String getTestName() { - return m.getName() + (js ? "[JavaScript]" : "[Java]"); + return m.getName() + "[" + typeName() + "]"; + } + + final String typeName() { + switch (type) { + case 0: return "Java"; + case 1: return "JavaScript"; + case 2: return "Browser"; + default: return "Unknown type " + type; + } } private static String computeSignature(Method m) {