Using nashorn specific env.js we are down to 21 test failures in KnockoutTCK envjs
authorJaroslav Tulach <jtulach@netbeans.org>
Wed, 04 Jun 2014 10:28:17 +0200
branchenvjs
changeset 6809fa36fee05e5
parent 679 9ca8cf2f2ce2
child 681 85a879c797c9
Using nashorn specific env.js we are down to 21 test failures in KnockoutTCK
boot-script/pom.xml
boot-script/src/main/java/net/java/html/boot/script/ScriptPresenter.java
boot-script/src/test/java/net/java/html/boot/script/ko4j/KnockoutEnvJSTest.java
boot/src/main/java/org/apidesign/html/boot/spi/Fn.java
     1.1 --- a/boot-script/pom.xml	Wed Jun 04 10:27:22 2014 +0200
     1.2 +++ b/boot-script/pom.xml	Wed Jun 04 10:28:17 2014 +0200
     1.3 @@ -24,6 +24,15 @@
     1.4                <groupId>org.netbeans.html</groupId>
     1.5                <artifactId>html4j-maven-plugin</artifactId>
     1.6            </plugin>
     1.7 +         <plugin>
     1.8 +            <groupId>org.apache.maven.plugins</groupId>
     1.9 +            <artifactId>maven-compiler-plugin</artifactId>
    1.10 +            <version>2.3.2</version>
    1.11 +            <configuration>
    1.12 +               <source>1.7</source>
    1.13 +               <target>1.7</target>
    1.14 +            </configuration>
    1.15 +         </plugin>
    1.16        </plugins>
    1.17      </build>
    1.18      <dependencies>
    1.19 @@ -44,12 +53,6 @@
    1.20              <scope>test</scope>
    1.21          </dependency>
    1.22          <dependency>
    1.23 -            <groupId>org.webjars</groupId>
    1.24 -            <artifactId>envjs</artifactId>
    1.25 -            <version>1.2</version>
    1.26 -            <scope>test</scope>
    1.27 -        </dependency>
    1.28 -        <dependency>
    1.29              <groupId>${project.groupId}</groupId>
    1.30              <artifactId>net.java.html.json.tck</artifactId>
    1.31              <version>${project.version}</version>
     2.1 --- a/boot-script/src/main/java/net/java/html/boot/script/ScriptPresenter.java	Wed Jun 04 10:27:22 2014 +0200
     2.2 +++ b/boot-script/src/main/java/net/java/html/boot/script/ScriptPresenter.java	Wed Jun 04 10:28:17 2014 +0200
     2.3 @@ -42,11 +42,14 @@
     2.4   */
     2.5  package net.java.html.boot.script;
     2.6  
     2.7 +import java.io.Closeable;
     2.8 +import java.io.IOException;
     2.9  import java.io.Reader;
    2.10  import java.net.URL;
    2.11  import java.util.ArrayList;
    2.12  import java.util.Arrays;
    2.13  import java.util.List;
    2.14 +import java.util.concurrent.Executor;
    2.15  import java.util.logging.Level;
    2.16  import java.util.logging.Logger;
    2.17  import javax.script.Invocable;
    2.18 @@ -68,7 +71,8 @@
    2.19   *
    2.20   * @author Jaroslav Tulach
    2.21   */
    2.22 -public final class ScriptPresenter implements Presenter, Fn.FromJavaScript, Fn.ToJavaScript {
    2.23 +public final class ScriptPresenter 
    2.24 +implements Presenter, Fn.FromJavaScript, Fn.ToJavaScript, Executor {
    2.25      private final ScriptEngine eng;
    2.26  
    2.27      public ScriptPresenter() {
    2.28 @@ -200,6 +204,15 @@
    2.29          }
    2.30      }
    2.31  
    2.32 +    @Override
    2.33 +    public void execute(Runnable command) {
    2.34 +        try (Closeable c = Fn.activate(this)) {
    2.35 +            command.run();
    2.36 +        } catch (IOException ex) {
    2.37 +            throw new IllegalStateException(ex);
    2.38 +        }
    2.39 +    }
    2.40 +
    2.41      private class FnImpl extends Fn {
    2.42  
    2.43          private final Object fn;
     3.1 --- a/boot-script/src/test/java/net/java/html/boot/script/ko4j/KnockoutEnvJSTest.java	Wed Jun 04 10:27:22 2014 +0200
     3.2 +++ b/boot-script/src/test/java/net/java/html/boot/script/ko4j/KnockoutEnvJSTest.java	Wed Jun 04 10:28:17 2014 +0200
     3.3 @@ -44,6 +44,7 @@
     3.4  
     3.5  import java.io.BufferedReader;
     3.6  import java.io.IOException;
     3.7 +import java.io.InputStream;
     3.8  import java.io.InputStreamReader;
     3.9  import java.lang.annotation.Annotation;
    3.10  import java.lang.reflect.Method;
    3.11 @@ -54,21 +55,17 @@
    3.12  import java.util.ArrayList;
    3.13  import java.util.List;
    3.14  import java.util.Map;
    3.15 -import java.util.concurrent.Executor;
    3.16  import java.util.concurrent.Executors;
    3.17  import net.java.html.BrwsrCtx;
    3.18  import net.java.html.boot.BrowserBuilder;
    3.19  import net.java.html.boot.script.ScriptPresenter;
    3.20  import net.java.html.js.JavaScriptBody;
    3.21 -import net.java.html.js.JavaScriptResource;
    3.22  import org.apidesign.html.boot.spi.Fn;
    3.23  import org.apidesign.html.context.spi.Contexts;
    3.24  import org.apidesign.html.json.spi.Technology;
    3.25  import org.apidesign.html.json.spi.Transfer;
    3.26 -import org.apidesign.html.json.spi.WSTransfer;
    3.27  import org.apidesign.html.json.tck.KOTest;
    3.28  import org.apidesign.html.json.tck.KnockoutTCK;
    3.29 -import org.netbeans.html.boot.impl.FnContext;
    3.30  import org.netbeans.html.ko4j.KO4J;
    3.31  import org.openide.util.lookup.ServiceProvider;
    3.32  import org.testng.Assert;
    3.33 @@ -79,11 +76,11 @@
    3.34   *
    3.35   * @author Jaroslav Tulach <jtulach@netbeans.org>
    3.36   */
    3.37 -@JavaScriptResource("/META-INF/resources/webjars/envjs/1.2/env.rhino.js")
    3.38  @ServiceProvider(service = KnockoutTCK.class)
    3.39  public final class KnockoutEnvJSTest extends KnockoutTCK {
    3.40      private static Class<?> browserClass;
    3.41      private static Fn.Presenter browserContext;
    3.42 +    private static URI baseUri;
    3.43      
    3.44      public KnockoutEnvJSTest() {
    3.45      }
    3.46 @@ -98,11 +95,16 @@
    3.47              );
    3.48          }
    3.49          
    3.50 -        URI uri = DynamicHTTP.initServer();
    3.51 -    
    3.52 -        final BrowserBuilder bb = BrowserBuilder.newBrowser(new ScriptPresenter()).
    3.53 +        baseUri = DynamicHTTP.initServer();
    3.54 +        
    3.55 +        final ScriptPresenter p = new ScriptPresenter();
    3.56 +        InputStream is = KnockoutEnvJSTest.class.getResourceAsStream("env.nashorn.1.2-debug.js");
    3.57 +        p.loadScript(new InputStreamReader(is));
    3.58 +        is.close();
    3.59 +
    3.60 +        final BrowserBuilder bb = BrowserBuilder.newBrowser(p).
    3.61              loadClass(KnockoutEnvJSTest.class).
    3.62 -            loadPage(uri.toString()).
    3.63 +            loadPage(baseUri.toString()).
    3.64              invoke("initialized");
    3.65          
    3.66          Executors.newSingleThreadExecutor().submit(new Runnable() {
    3.67 @@ -163,7 +165,6 @@
    3.68          Contexts.Builder cb = Contexts.newBuilder().
    3.69              register(Technology.class, fx.knockout(), 10).
    3.70              register(Transfer.class, fx.transfer(), 10);
    3.71 -        cb.register(Executor.class, (Executor)browserContext, 10);
    3.72          cb.register(Fn.Presenter.class, browserContext, 10);
    3.73          BrwsrCtx ctx = cb.build();
    3.74          return ctx;
    3.75 @@ -184,21 +185,15 @@
    3.76      private static native void setProperty(Object json, String key, Object value);
    3.77  
    3.78      @Override
    3.79 -    @JavaScriptBody(args = { "s", "args" }, body = ""
    3.80 -        + "var f = new Function(s); "
    3.81 -        + "return f.apply(null, args);"
    3.82 +    @JavaScriptBody(args = { "s", "args" }, body = "\n"
    3.83 +        + "var f = new Function(s);\n"
    3.84 +        + "return f.apply(null, args);\n"
    3.85      )
    3.86      public native Object executeScript(String script, Object[] arguments);
    3.87  
    3.88 -    @JavaScriptBody(args = {  }, body = 
    3.89 -          "var h;"
    3.90 -        + "if (!!window && !!window.location && !!window.location.href)\n"
    3.91 -        + "  h = window.location.href;\n"
    3.92 -        + "else "
    3.93 -        + "  h = null;"
    3.94 -        + "return h;\n"
    3.95 -    )
    3.96 -    private static native String findBaseURL();
    3.97 +    private static String findBaseURL() {
    3.98 +        return baseUri.toString();
    3.99 +    }
   3.100      
   3.101      @Override
   3.102      public URI prepareURL(String content, String mimeType, String[] parameters) {
     4.1 --- a/boot/src/main/java/org/apidesign/html/boot/spi/Fn.java	Wed Jun 04 10:27:22 2014 +0200
     4.2 +++ b/boot/src/main/java/org/apidesign/html/boot/spi/Fn.java	Wed Jun 04 10:28:17 2014 +0200
     4.3 @@ -43,6 +43,7 @@
     4.4  package org.apidesign.html.boot.spi;
     4.5  
     4.6  import java.io.Closeable;
     4.7 +import java.io.IOException;
     4.8  import java.io.InputStream;
     4.9  import java.io.InputStreamReader;
    4.10  import java.io.Reader;
    4.11 @@ -162,7 +163,14 @@
    4.12                          LOADED.put(resource, there);
    4.13                      }
    4.14                      if (there.add(p)) {
    4.15 -                        InputStream is = caller.getClassLoader().getResourceAsStream(resource);
    4.16 +                        final ClassLoader l = caller.getClassLoader();
    4.17 +                        InputStream is = l.getResourceAsStream(resource);
    4.18 +                        if (is == null && resource.startsWith("/")) {
    4.19 +                            is = l.getResourceAsStream(resource.substring(1));
    4.20 +                        }
    4.21 +                        if (is == null) {
    4.22 +                            throw new IOException("Cannot find " + resource + " in " + l);
    4.23 +                        }
    4.24                          try {
    4.25                              InputStreamReader r = new InputStreamReader(is, "UTF-8");
    4.26                              p.loadScript(r);