Can execute tests in real browser launcher
authorJaroslav Tulach <jaroslav.tulach@apidesign.org>
Tue, 18 Dec 2012 13:10:56 +0100
branchlauncher
changeset 3493fe5a86bd123
parent 348 4e9d576780ca
child 350 12debda84e3c
Can execute tests in real browser
launcher/src/main/java/org/apidesign/bck2brwsr/launcher/Bck2BrwsrLauncher.java
launcher/src/main/java/org/apidesign/bck2brwsr/launcher/Console.java
vmtest/pom.xml
vmtest/src/main/java/org/apidesign/bck2brwsr/vmtest/VMTest.java
     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) {