Include the unit test initialization script in generated bck2brwsr.js rather than embedding it in the harness.html page
1.1 --- a/launcher/fx/src/main/java/org/apidesign/bck2brwsr/launcher/BaseHTTPLauncher.java Mon Apr 18 05:12:29 2016 +0200
1.2 +++ b/launcher/fx/src/main/java/org/apidesign/bck2brwsr/launcher/BaseHTTPLauncher.java Mon Apr 18 05:15:11 2016 +0200
1.3 @@ -122,7 +122,7 @@
1.4 if (!startpage.startsWith("/")) {
1.5 startpage = "/" + startpage;
1.6 }
1.7 - HttpServer s = initServer(".", true, "");
1.8 + HttpServer s = initServer(".", true, "", false);
1.9 int last = startpage.lastIndexOf('/');
1.10 String prefix = startpage.substring(0, last);
1.11 String simpleName = startpage.substring(last);
1.12 @@ -146,7 +146,7 @@
1.13 prefix = startpage.substring(0, last);
1.14 }
1.15 }
1.16 - HttpServer s = initServer(dir.getPath(), addClasses, prefix);
1.17 + HttpServer s = initServer(dir.getPath(), addClasses, prefix, false);
1.18 try {
1.19 launchServerAndBrwsr(s, startpage);
1.20 } catch (Exception ex) {
1.21 @@ -173,7 +173,7 @@
1.22 }
1.23 }
1.24
1.25 - private HttpServer initServer(String path, boolean addClasses, String vmPrefix) throws IOException {
1.26 + private HttpServer initServer(String path, boolean addClasses, String vmPrefix, boolean unitTests) throws IOException {
1.27 HttpServer s = HttpServer.createSimpleServer(null, new PortRange(8080, 65535));
1.28 /*
1.29 ThreadPoolConfig fewThreads = ThreadPoolConfig.defaultConfig().copy().
1.30 @@ -190,7 +190,7 @@
1.31 }
1.32 */
1.33 final ServerConfiguration conf = s.getServerConfiguration();
1.34 - VMAndPages vm = new VMAndPages();
1.35 + VMAndPages vm = new VMAndPages(unitTests);
1.36 conf.addHttpHandler(vm, "/");
1.37 if (vmPrefix != null) {
1.38 vm.registerVM(vmPrefix + "/bck2brwsr.js");
1.39 @@ -217,7 +217,7 @@
1.40 private static int resourcesCount;
1.41 private void executeInBrowser() throws InterruptedException, URISyntaxException, IOException {
1.42 wait = new CountDownLatch(1);
1.43 - server = initServer(".", true, "");
1.44 + server = initServer(".", true, "", true);
1.45 final ServerConfiguration conf = server.getServerConfiguration();
1.46
1.47 class DynamicResourceHandler extends HttpHandler {
1.48 @@ -626,7 +626,7 @@
1.49 }
1.50 }
1.51
1.52 - abstract void generateBck2BrwsrJS(StringBuilder sb, Res loader) throws IOException;
1.53 + abstract void generateBck2BrwsrJS(StringBuilder sb, Res loader, String url, boolean unitTestMode) throws IOException;
1.54 abstract String harnessResource();
1.55 Object compileJar(URL jar, URL precompiled) throws IOException {
1.56 return null;
1.57 @@ -840,10 +840,12 @@
1.58 }
1.59
1.60 private class VMAndPages extends StaticHttpHandler {
1.61 + private final boolean unitTestMode;
1.62 private String vmResource;
1.63
1.64 - public VMAndPages() {
1.65 + public VMAndPages(boolean unitTestMode) {
1.66 super((String[]) null);
1.67 + this.unitTestMode = unitTestMode;
1.68 }
1.69
1.70 @Override
1.71 @@ -856,7 +858,7 @@
1.72 response.setCharacterEncoding("UTF-8");
1.73 response.setContentType("text/javascript");
1.74 StringBuilder sb = new StringBuilder();
1.75 - generateBck2BrwsrJS(sb, BaseHTTPLauncher.this.resources);
1.76 + generateBck2BrwsrJS(sb, BaseHTTPLauncher.this.resources, request.getRequestURL().toString(), unitTestMode);
1.77 response.getWriter().write(sb.toString());
1.78 } else {
1.79 super.service(request, response);
2.1 --- a/launcher/fx/src/main/java/org/apidesign/bck2brwsr/launcher/FXBrwsrLauncher.java Mon Apr 18 05:12:29 2016 +0200
2.2 +++ b/launcher/fx/src/main/java/org/apidesign/bck2brwsr/launcher/FXBrwsrLauncher.java Mon Apr 18 05:15:11 2016 +0200
2.3 @@ -97,12 +97,27 @@
2.4 }
2.5
2.6 @Override
2.7 - void generateBck2BrwsrJS(StringBuilder sb, Res loader) throws IOException {
2.8 + void generateBck2BrwsrJS(StringBuilder sb, Res loader, String url, boolean unitTestMode) throws IOException {
2.9 sb.append("(function() {\n"
2.10 + " var impl = this.bck2brwsr;\n"
2.11 + " this.bck2brwsr = function() { return impl; };\n");
2.12 sb.append("})(window);\n");
2.13 JVMBridge.onBck2BrwsrLoad();
2.14 + if (unitTestMode) {
2.15 + sb.append("var vm = bck2brwsr();\n");
2.16 + sb.append("try {\n");
2.17 + sb.append(" (function() {\n");
2.18 + sb.append(" var cls = vm.loadClass('org.apidesign.bck2brwsr.launcher.fximpl.Console');\n");
2.19 + sb.append(" // fxbrwsr mangling\n");
2.20 + sb.append(" var inst = cls.newInstance();\n");
2.21 + int last = url.lastIndexOf('/');
2.22 + url = url.substring(0, last + 1);
2.23 + sb.append(" inst.harness('").append(url).append("/data');\n");
2.24 + sb.append(" })();\n");
2.25 + sb.append("} catch (err) {\n");
2.26 + sb.append(" alert('Error executing harness: ' + err);\n");
2.27 + sb.append("}\n");
2.28 + }
2.29 }
2.30
2.31 @Override
2.32 @@ -112,7 +127,7 @@
2.33 }
2.34
2.35 String harnessResource() {
2.36 - return "org/apidesign/bck2brwsr/launcher/fximpl/harness.xhtml";
2.37 + return "org/apidesign/bck2brwsr/launcher/fximpl/harness.html";
2.38 }
2.39
2.40 public static void main(String... args) throws IOException {
3.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
3.2 +++ b/launcher/fx/src/main/resources/org/apidesign/bck2brwsr/launcher/fximpl/harness.html Mon Apr 18 05:15:11 2016 +0200
3.3 @@ -0,0 +1,35 @@
3.4 +<?xml version="1.0" encoding="UTF-8"?>
3.5 +<!--
3.6 +
3.7 + Back 2 Browser Bytecode Translator
3.8 + Copyright (C) 2012-2015 Jaroslav Tulach <jaroslav.tulach@apidesign.org>
3.9 +
3.10 + This program is free software: you can redistribute it and/or modify
3.11 + it under the terms of the GNU General Public License as published by
3.12 + the Free Software Foundation, version 2 of the License.
3.13 +
3.14 + This program is distributed in the hope that it will be useful,
3.15 + but WITHOUT ANY WARRANTY; without even the implied warranty of
3.16 + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
3.17 + GNU General Public License for more details.
3.18 +
3.19 + You should have received a copy of the GNU General Public License
3.20 + along with this program. Look for COPYING file in the top folder.
3.21 + If not, see http://opensource.org/licenses/GPL-2.0.
3.22 +
3.23 +-->
3.24 +<html>
3.25 + <head>
3.26 + <title>Bck2Brwsr Harness</title>
3.27 + </head>
3.28 + <body>
3.29 +
3.30 + <h1>Bck2Brwsr Execution Harness</h1>
3.31 +
3.32 + <ul id="bck2brwsr.result" style="width: 100%;" >
3.33 + </ul>
3.34 +
3.35 + <div id="bck2brwsr.fragment"></div>
3.36 + <script src="/bck2brwsr.js"></script>
3.37 + </body>
3.38 +</html>
4.1 --- a/launcher/fx/src/main/resources/org/apidesign/bck2brwsr/launcher/fximpl/harness.xhtml Mon Apr 18 05:12:29 2016 +0200
4.2 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000
4.3 @@ -1,52 +0,0 @@
4.4 -<?xml version="1.0" encoding="UTF-8"?>
4.5 -<!--
4.6 -
4.7 - Back 2 Browser Bytecode Translator
4.8 - Copyright (C) 2012-2015 Jaroslav Tulach <jaroslav.tulach@apidesign.org>
4.9 -
4.10 - This program is free software: you can redistribute it and/or modify
4.11 - it under the terms of the GNU General Public License as published by
4.12 - the Free Software Foundation, version 2 of the License.
4.13 -
4.14 - This program is distributed in the hope that it will be useful,
4.15 - but WITHOUT ANY WARRANTY; without even the implied warranty of
4.16 - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
4.17 - GNU General Public License for more details.
4.18 -
4.19 - You should have received a copy of the GNU General Public License
4.20 - along with this program. Look for COPYING file in the top folder.
4.21 - If not, see http://opensource.org/licenses/GPL-2.0.
4.22 -
4.23 --->
4.24 -<!DOCTYPE html>
4.25 -<html xmlns="http://www.w3.org/1999/xhtml">
4.26 - <head>
4.27 - <title>Bck2Brwsr Harness</title>
4.28 - </head>
4.29 - <body>
4.30 - <script src="/bck2brwsr.js"></script>
4.31 - <script>
4.32 - var vm = bck2brwsr();
4.33 - </script>
4.34 -
4.35 - <h1>Bck2Brwsr Execution Harness</h1>
4.36 -
4.37 - <ul id="bck2brwsr.result" style="width: 100%;" >
4.38 - </ul>
4.39 -
4.40 - <div id="bck2brwsr.fragment"/>
4.41 -
4.42 - <script type="text/javascript">
4.43 - try {
4.44 - (function() {
4.45 - var cls = vm.loadClass('org.apidesign.bck2brwsr.launcher.fximpl.Console');
4.46 - // fxbrwsr mangling
4.47 - var inst = cls.newInstance();
4.48 - inst.harness('$U/../data');
4.49 - })();
4.50 - } catch (err) {
4.51 - alert('Error executing harness: ' + err);
4.52 - }
4.53 - </script>
4.54 - </body>
4.55 -</html>
5.1 --- a/launcher/http/src/main/java/org/apidesign/bck2brwsr/launcher/Bck2BrwsrLauncher.java Mon Apr 18 05:12:29 2016 +0200
5.2 +++ b/launcher/http/src/main/java/org/apidesign/bck2brwsr/launcher/Bck2BrwsrLauncher.java Mon Apr 18 05:15:11 2016 +0200
5.3 @@ -77,7 +77,7 @@
5.4 }
5.5
5.6 @Override
5.7 - void generateBck2BrwsrJS(StringBuilder sb, final Res loader) throws IOException {
5.8 + void generateBck2BrwsrJS(StringBuilder sb, final Res loader, String url, boolean unitTestMode) throws IOException {
5.9 String b2b = System.getProperty("bck2brwsr.js");
5.10 if (b2b != null) {
5.11 LOG.log(Level.INFO, "Serving bck2brwsr.js from {0}", b2b);
5.12 @@ -139,6 +139,15 @@
5.13 + " global.bck2brwsr.register = prevvm.register;\n"
5.14 + "})(this);\n"
5.15 );
5.16 +
5.17 + if (unitTestMode) {
5.18 + sb.append("var vm = bck2brwsr();\n");
5.19 + sb.append("var cnsl = vm.loadClass('org.apidesign.bck2brwsr.launcher.impl.Console');\n");
5.20 + int last = url.lastIndexOf('/');
5.21 + url = url.substring(0, last + 1);
5.22 + sb.append("var res = cnsl.invoke('harness', '").append(url).append("/data');");
5.23 + }
5.24 +
5.25 LOG.log(Level.INFO, "Serving bck2brwsr.js", b2b);
5.26 }
5.27
6.1 --- a/launcher/http/src/main/resources/org/apidesign/bck2brwsr/launcher/harness.html Mon Apr 18 05:12:29 2016 +0200
6.2 +++ b/launcher/http/src/main/resources/org/apidesign/bck2brwsr/launcher/harness.html Mon Apr 18 05:15:11 2016 +0200
6.3 @@ -23,21 +23,12 @@
6.4 <title>Bck2Brwsr Harness</title>
6.5 </head>
6.6 <body>
6.7 - <script src="/bck2brwsr.js"></script>
6.8 - <script>
6.9 - var vm = bck2brwsr();
6.10 - </script>
6.11 -
6.12 <h1>Bck2Brwsr Execution Harness</h1>
6.13 -
6.14 +
6.15 <ul id="bck2brwsr.result" style="width: 100%;" >
6.16 </ul>
6.17
6.18 - <div id="bck2brwsr.fragment"/>
6.19 -
6.20 - <script type="text/javascript">
6.21 - var cnsl = vm.loadClass('org.apidesign.bck2brwsr.launcher.impl.Console');
6.22 - var res = cnsl.invoke('harness', '$U/../data');
6.23 - </script>
6.24 + <div id="bck2brwsr.fragment"></div>
6.25 + <script src="/bck2brwsr.js"></script>
6.26 </body>
6.27 </html>