1.1 --- a/launcher/src/main/java/org/apidesign/bck2brwsr/launcher/Bck2BrwsrLauncher.java Tue Dec 18 12:43:18 2012 +0100
1.2 +++ b/launcher/src/main/java/org/apidesign/bck2brwsr/launcher/Bck2BrwsrLauncher.java Tue Dec 18 13:10:56 2012 +0100
1.3 @@ -31,6 +31,7 @@
1.4 import java.util.List;
1.5 import java.util.Set;
1.6 import java.util.concurrent.CountDownLatch;
1.7 +import java.util.concurrent.TimeUnit;
1.8 import static org.apidesign.bck2brwsr.launcher.Bck2BrwsrLauncher.copyStream;
1.9 import org.apidesign.vm4brwsr.Bck2Brwsr;
1.10 import org.glassfish.grizzly.PortRange;
1.11 @@ -47,6 +48,7 @@
1.12 public class Bck2BrwsrLauncher {
1.13 private Set<ClassLoader> loaders = new LinkedHashSet<>();
1.14 private List<MethodInvocation> methods = new ArrayList<>();
1.15 + private long timeOut;
1.16
1.17
1.18 public MethodInvocation addMethod(Class<?> clazz, String method) {
1.19 @@ -56,7 +58,9 @@
1.20 return c;
1.21 }
1.22
1.23 -
1.24 + public void setTimeout(long ms) {
1.25 + timeOut = ms;
1.26 + }
1.27
1.28 public static void main( String[] args ) throws Exception {
1.29 Bck2BrwsrLauncher l = new Bck2BrwsrLauncher();
1.30 @@ -131,7 +135,8 @@
1.31 Runtime.getRuntime().exec(cmd).waitFor();
1.32 }
1.33
1.34 - wait.await();
1.35 + wait.await(timeOut, TimeUnit.MILLISECONDS);
1.36 + server.stop();
1.37 }
1.38
1.39 static void copyStream(InputStream is, OutputStream os, String baseURL, String... params) throws IOException {
2.1 --- a/launcher/src/main/java/org/apidesign/bck2brwsr/launcher/Console.java Tue Dec 18 12:43:18 2012 +0100
2.2 +++ b/launcher/src/main/java/org/apidesign/bck2brwsr/launcher/Console.java Tue Dec 18 13:10:56 2012 +0100
2.3 @@ -56,6 +56,11 @@
2.4 setAttr("result", "value", res);
2.5 }
2.6
2.7 + @JavaScriptBody(args = "o", body = "return '' + o;")
2.8 + private static String tS(Object o) {
2.9 + return o.toString();
2.10 + }
2.11 +
2.12 public static void harness(String url) {
2.13 log("Connecting to " + url);
2.14 try {
2.15 @@ -75,12 +80,7 @@
2.16
2.17 log("Result: " + result);
2.18
2.19 - String toSend;
2.20 - if (result == null) {
2.21 - toSend = "null";
2.22 - } else {
2.23 - toSend = result.toString();
2.24 - }
2.25 + String toSend = tS(result);
2.26
2.27 log("Sending back: " + url + "?request=" + c.getRequestId() + "&result=" + toSend);
2.28 u = new URL(url + "?request=" + c.getRequestId() + "&result=" + toSend);
3.1 --- a/vmtest/pom.xml Tue Dec 18 12:43:18 2012 +0100
3.2 +++ b/vmtest/pom.xml Tue Dec 18 13:10:56 2012 +0100
3.3 @@ -52,5 +52,10 @@
3.4 <artifactId>emul</artifactId>
3.5 <version>0.3-SNAPSHOT</version>
3.6 </dependency>
3.7 + <dependency>
3.8 + <groupId>${project.groupId}</groupId>
3.9 + <artifactId>launcher</artifactId>
3.10 + <version>${project.version}</version>
3.11 + </dependency>
3.12 </dependencies>
3.13 </project>
4.1 --- a/vmtest/src/main/java/org/apidesign/bck2brwsr/vmtest/VMTest.java Tue Dec 18 12:43:18 2012 +0100
4.2 +++ b/vmtest/src/main/java/org/apidesign/bck2brwsr/vmtest/VMTest.java Tue Dec 18 13:10:56 2012 +0100
4.3 @@ -29,6 +29,7 @@
4.4 import javax.script.Invocable;
4.5 import javax.script.ScriptEngine;
4.6 import javax.script.ScriptEngineManager;
4.7 +import org.apidesign.bck2brwsr.launcher.Bck2BrwsrLauncher;
4.8 import org.apidesign.vm4brwsr.Bck2Brwsr;
4.9 import org.testng.Assert;
4.10 import org.testng.ITest;
4.11 @@ -63,18 +64,21 @@
4.12 */
4.13 public static Object[] create(Class<?> clazz) {
4.14 Method[] arr = clazz.getMethods();
4.15 - Object[] ret = new Object[3 * arr.length];
4.16 + Object[] ret = new Object[5 * arr.length];
4.17 int cnt = 0;
4.18 for (Method m : arr) {
4.19 Compare c = m.getAnnotation(Compare.class);
4.20 if (c == null) {
4.21 continue;
4.22 }
4.23 - final Run real = new Run(m, false);
4.24 - final Run js = new Run(m, true);
4.25 + final Run real = new Run(m, 0);
4.26 + final Run js = new Run(m, 1);
4.27 + final Run brwsr = new Run(m, 2);
4.28 ret[cnt++] = real;
4.29 ret[cnt++] = js;
4.30 + ret[cnt++] = brwsr;
4.31 ret[cnt++] = new VMTest(m, real, js);
4.32 + ret[cnt++] = new VMTest(m, real, brwsr);
4.33 }
4.34 Object[] r = new Object[cnt];
4.35 for (int i = 0; i < cnt; i++) {
4.36 @@ -100,7 +104,7 @@
4.37 */
4.38 @Override
4.39 public String getTestName() {
4.40 - return m.getName() + "[Compare]";
4.41 + return m.getName() + "[Compare " + second.typeName() + "]";
4.42 }
4.43
4.44 /** Helper method that inspects the classpath and loads given resource
4.45 @@ -136,15 +140,15 @@
4.46
4.47 public static final class Run implements ITest {
4.48 private final Method m;
4.49 - private final boolean js;
4.50 + private final int type;
4.51 Object value;
4.52 private Invocable code;
4.53 private CharSequence codeSeq;
4.54 private static final Map<Class,Object[]> compiled = new WeakHashMap<>();
4.55
4.56 - private Run(Method m, boolean js) {
4.57 + private Run(Method m, int type) {
4.58 this.m = m;
4.59 - this.js = js;
4.60 + this.type = type;
4.61 }
4.62
4.63 private void compileTheCode(Class<?> clazz) throws Exception {
4.64 @@ -173,7 +177,7 @@
4.65 }
4.66
4.67 @Test(groups = "run") public void executeCode() throws Throwable {
4.68 - if (js) {
4.69 + if (type == 1) {
4.70 try {
4.71 compileTheCode(m.getDeclaringClass());
4.72 Object vm = code.invokeFunction("initVM");
4.73 @@ -182,13 +186,28 @@
4.74 } catch (Exception ex) {
4.75 throw new AssertionError(dumpJS(codeSeq)).initCause(ex);
4.76 }
4.77 + } else if (type == 2) {
4.78 + Bck2BrwsrLauncher l = new Bck2BrwsrLauncher();
4.79 + l.setTimeout(5000);
4.80 + Bck2BrwsrLauncher.MethodInvocation c = l.addMethod(m.getDeclaringClass(), m.getName());
4.81 + l.execute();
4.82 + value = c.toString();
4.83 } else {
4.84 value = m.invoke(m.getDeclaringClass().newInstance());
4.85 }
4.86 }
4.87 @Override
4.88 public String getTestName() {
4.89 - return m.getName() + (js ? "[JavaScript]" : "[Java]");
4.90 + return m.getName() + "[" + typeName() + "]";
4.91 + }
4.92 +
4.93 + final String typeName() {
4.94 + switch (type) {
4.95 + case 0: return "Java";
4.96 + case 1: return "JavaScript";
4.97 + case 2: return "Browser";
4.98 + default: return "Unknown type " + type;
4.99 + }
4.100 }
4.101
4.102 private static String computeSignature(Method m) {