Using HTTP protocol rather than reflection tricks as HTTP will work on all known implementations classloader fxlauncher
authorJaroslav Tulach <jaroslav.tulach@apidesign.org>
Mon, 24 Jun 2013 14:19:09 +0200
branchclassloader
changeset 1445c5fc5ee2d63
parent 143 b3b56bed079e
child 145 5f6bda7d957d
Using HTTP protocol rather than reflection tricks as HTTP will work on all known implementations
ko-bck2brwsr/src/test/java/org/apidesign/html/ko2brwsr/Bck2BrwsrKnockoutTest.java
ko-fx/src/test/java/org/apidesign/html/kofx/KnockoutFXTest.java
     1.1 --- a/ko-bck2brwsr/src/test/java/org/apidesign/html/ko2brwsr/Bck2BrwsrKnockoutTest.java	Mon Jun 24 10:11:12 2013 +0200
     1.2 +++ b/ko-bck2brwsr/src/test/java/org/apidesign/html/ko2brwsr/Bck2BrwsrKnockoutTest.java	Mon Jun 24 14:19:09 2013 +0200
     1.3 @@ -20,6 +20,13 @@
     1.4   */
     1.5  package org.apidesign.html.ko2brwsr;
     1.6  
     1.7 +import java.io.BufferedReader;
     1.8 +import java.io.IOException;
     1.9 +import java.io.InputStreamReader;
    1.10 +import java.net.URI;
    1.11 +import java.net.URISyntaxException;
    1.12 +import java.net.URL;
    1.13 +import java.net.URLConnection;
    1.14  import java.util.Map;
    1.15  import net.java.html.BrwsrCtx;
    1.16  import org.apidesign.bck2brwsr.core.JavaScriptBody;
    1.17 @@ -27,6 +34,7 @@
    1.18  import org.apidesign.html.context.spi.Contexts;
    1.19  import org.apidesign.html.json.spi.Technology;
    1.20  import org.apidesign.html.json.spi.Transfer;
    1.21 +import org.apidesign.html.json.tck.KOTest;
    1.22  import org.apidesign.html.json.tck.KnockoutTCK;
    1.23  import org.openide.util.lookup.ServiceProvider;
    1.24  import org.testng.annotations.Factory;
    1.25 @@ -41,6 +49,7 @@
    1.26          return VMTest.newTests().
    1.27              withClasses(testClasses()).
    1.28              withLaunchers("bck2brwsr").
    1.29 +            withTestAnnotation(KOTest.class).
    1.30              build();
    1.31      }
    1.32      
    1.33 @@ -78,4 +87,38 @@
    1.34          "var f = new Function(s); return f.apply(null, args);"
    1.35      )
    1.36      private static native Object execScript(String s, Object[] arguments);
    1.37 +    
    1.38 +    @JavaScriptBody(args = {  }, body = 
    1.39 +          "var h;"
    1.40 +        + "if (!!window && !!window.location && !!window.location.href)\n"
    1.41 +        + "  h = window.location.href;\n"
    1.42 +        + "else "
    1.43 +        + "  h = null;"
    1.44 +        + "return h;\n"
    1.45 +    )
    1.46 +    private static native String findBaseURL();
    1.47 +    
    1.48 +    @Override
    1.49 +    public URI prepareURL(String content, String mimeType, String[] parameters) {
    1.50 +        try {
    1.51 +            final URL baseURL = new URL(findBaseURL());
    1.52 +            StringBuilder sb = new StringBuilder();
    1.53 +            sb.append("/dynamic?mimeType=").append(mimeType);
    1.54 +            for (int i = 0; i < parameters.length; i++) {
    1.55 +                sb.append("&param" + i).append("=").append(parameters[i]);
    1.56 +            }
    1.57 +            String mangle = content.replace("\n", "%0a")
    1.58 +                .replace("\"", "\\\"").replace(" ", "%20");
    1.59 +            sb.append("&content=").append(mangle);
    1.60 +
    1.61 +            URL query = new URL(baseURL, sb.toString());
    1.62 +            String uri = (String) query.getContent(new Class[] { String.class });
    1.63 +            URI connectTo = new URI(uri.trim());
    1.64 +            return connectTo;
    1.65 +        } catch (IOException ex) {
    1.66 +            throw new IllegalStateException(ex);
    1.67 +        } catch (URISyntaxException ex) {
    1.68 +            throw new IllegalStateException(ex);
    1.69 +        }
    1.70 +    }    
    1.71  }
     2.1 --- a/ko-fx/src/test/java/org/apidesign/html/kofx/KnockoutFXTest.java	Mon Jun 24 10:11:12 2013 +0200
     2.2 +++ b/ko-fx/src/test/java/org/apidesign/html/kofx/KnockoutFXTest.java	Mon Jun 24 14:19:09 2013 +0200
     2.3 @@ -20,14 +20,18 @@
     2.4   */
     2.5  package org.apidesign.html.kofx;
     2.6  
     2.7 -import java.io.ByteArrayInputStream;
     2.8 -import java.io.InputStream;
     2.9 -import java.lang.reflect.Method;
    2.10 +import java.io.BufferedReader;
    2.11 +import java.io.IOException;
    2.12 +import java.io.InputStreamReader;
    2.13 +import java.io.PrintWriter;
    2.14 +import java.net.HttpURLConnection;
    2.15  import java.net.URI;
    2.16 +import java.net.URISyntaxException;
    2.17 +import java.net.URL;
    2.18 +import java.net.URLConnection;
    2.19  import java.util.Map;
    2.20  import net.java.html.BrwsrCtx;
    2.21  import net.java.html.js.JavaScriptBody;
    2.22 -import org.apidesign.bck2brwsr.launcher.InvocationContext;
    2.23  import org.apidesign.bck2brwsr.vmtest.VMTest;
    2.24  import org.apidesign.html.context.spi.Contexts;
    2.25  import org.apidesign.html.json.spi.Technology;
    2.26 @@ -84,17 +88,37 @@
    2.27      )
    2.28      public native Object executeScript(String script, Object[] arguments);
    2.29  
    2.30 +    @JavaScriptBody(args = {  }, body = 
    2.31 +          "var h;"
    2.32 +        + "if (!!window && !!window.location && !!window.location.href)\n"
    2.33 +        + "  h = window.location.href;\n"
    2.34 +        + "else "
    2.35 +        + "  h = null;"
    2.36 +        + "return h;\n"
    2.37 +    )
    2.38 +    private static native String findBaseURL();
    2.39 +    
    2.40      @Override
    2.41      public URI prepareURL(String content, String mimeType, String[] parameters) {
    2.42 -        ByteArrayInputStream is = new ByteArrayInputStream(content.getBytes());
    2.43          try {
    2.44 -            Class<?> real = ClassLoader.getSystemClassLoader().loadClass(InvocationContext.class.getName());
    2.45 -            Method m = real.getMethod("register", InputStream.class, String.class, String.class, String[].class);
    2.46 -            return (URI) m.invoke(null, is, 
    2.47 -                mimeType, "/dynamic/res" + content.hashCode(), 
    2.48 -                parameters
    2.49 -            );
    2.50 -        } catch (Exception ex) {
    2.51 +            final URL baseURL = new URL(findBaseURL());
    2.52 +            StringBuilder sb = new StringBuilder();
    2.53 +            sb.append("/dynamic?mimeType=").append(mimeType);
    2.54 +            for (int i = 0; i < parameters.length; i++) {
    2.55 +                sb.append("&param" + i).append("=").append(parameters[i]);
    2.56 +            }
    2.57 +            String mangle = content.replace("\n", "%0a")
    2.58 +                .replace("\"", "\\\"").replace(" ", "%20");
    2.59 +            sb.append("&content=").append(mangle);
    2.60 +
    2.61 +            URL query = new URL(baseURL, sb.toString());
    2.62 +            URLConnection c = query.openConnection();
    2.63 +            BufferedReader br = new BufferedReader(new InputStreamReader(c.getInputStream()));
    2.64 +            URI connectTo = new URI(br.readLine());
    2.65 +            return connectTo;
    2.66 +        } catch (IOException ex) {
    2.67 +            throw new IllegalStateException(ex);
    2.68 +        } catch (URISyntaxException ex) {
    2.69              throw new IllegalStateException(ex);
    2.70          }
    2.71      }