diff -r 9cc253aa9405 -r 6dc2c6c752df rt/launcher/src/main/java/org/apidesign/bck2brwsr/launcher/impl/Console.java --- a/rt/launcher/src/main/java/org/apidesign/bck2brwsr/launcher/impl/Console.java Thu Apr 18 16:58:55 2013 +0200 +++ b/rt/launcher/src/main/java/org/apidesign/bck2brwsr/launcher/impl/Console.java Thu Apr 18 23:09:30 2013 +0200 @@ -36,23 +36,22 @@ public final class Console { public Console() { } - private static final JSObject CObject; @JavaScriptBody(args = {"elem", "attr"}, body = "return elem[attr].toString();") private static Object getAttr(Object elem, String attr) { - return CObject.call("getAttr", elem, attr); + return InvokeJS.CObject.call("getAttr", elem, attr); } @JavaScriptBody(args = {"id", "attr", "value"}, body = "window.document.getElementById(id)[attr] = value;") private static void setAttr(String id, String attr, Object value) { - CObject.call("setAttrId", id, attr, value); + InvokeJS.CObject.call("setAttrId", id, attr, value); } @JavaScriptBody(args = {"elem", "attr", "value"}, body = "elem[attr] = value;") private static void setAttr(Object id, String attr, Object value) { - CObject.call("setAttr", id, attr, value); + InvokeJS.CObject.call("setAttr", id, attr, value); } @JavaScriptBody(args = {}, body = "return; window.close();") @@ -116,7 +115,7 @@ @JavaScriptBody(args = { "test", "c", "arr" }, body = BEGIN_TEST) private static void beginTest(String test, Case c, Object[] arr) { - CObject.call("beginTest", test, c, arr); + InvokeJS.CObject.call("beginTest", test, c, arr); } private static final String LOAD_TEXT = @@ -127,13 +126,17 @@ + " if (this.readyState!==4) return;\n" + " try {" + " arr[0] = this.responseText;\n" - + " callback.run();\n" + + " callback.run__V();\n" + " } catch (e) { alert(e); }" + "};" + "request.send();"; @JavaScriptBody(args = { "url", "callback", "arr" }, body = LOAD_TEXT) private static void loadText(String url, Runnable callback, String[] arr) throws IOException { - CObject.call("loadText", url, new Run(callback), arr); + InvokeJS.CObject.call("loadText", url, new Run(callback), arr); + } + + public static void runHarness(String url) throws IOException { + new Console().harness(url); } public void harness(String url) throws IOException { @@ -261,7 +264,7 @@ @JavaScriptBody(args = {"r", "time"}, body = "return window.setTimeout(function() { r.run__V(); }, time);") private static Object schedule(Runnable r, int time) { - return CObject.call("schedule", new Run(r), time); + return InvokeJS.CObject.call("schedule", new Run(r), time); } private static final class Case { @@ -285,7 +288,11 @@ } public int getRequestId() { - return (int) value("request", data); + Object v = value("request", data); + if (v instanceof Number) { + return ((Number)v).intValue(); + } + return Integer.parseInt(v.toString()); } public String getHtmlFragment() { @@ -357,7 +364,7 @@ @JavaScriptBody(args = "s", body = "return eval('(' + s + ')');") private static Object toJSON(String s) { - return CObject.call("toJSON", s); + return InvokeJS.CObject.call("toJSON", s); } @JavaScriptBody(args = {"p", "d"}, body = @@ -376,26 +383,33 @@ static { turnAssetionStatusOn(); + } + + private static final class InvokeJS { + static final JSObject CObject = initJS(); - WebEngine web = (WebEngine) System.getProperties().get("webEngine"); - CObject = (JSObject) web.executeScript("(function() {" - + "var CObject = {};" + @JavaScriptBody(args = { }, body = "return null;") + private static JSObject initJS() { + WebEngine web = (WebEngine) System.getProperties().get("webEngine"); + return (JSObject) web.executeScript("(function() {" + + "var CObject = {};" - + "CObject.getAttr = function(elem, attr) { return elem[attr].toString(); };" + + "CObject.getAttr = function(elem, attr) { return elem[attr].toString(); };" - + "CObject.setAttrId = function(id, attr, value) { window.document.getElementById(id)[attr] = value; };" - + "CObject.setAttr = function(elem, attr, value) { elem[attr] = value; };" + + "CObject.setAttrId = function(id, attr, value) { window.document.getElementById(id)[attr] = value; };" + + "CObject.setAttr = function(elem, attr, value) { elem[attr] = value; };" - + "CObject.beginTest = function(test, c, arr) {" + safe(BEGIN_TEST) + "};" + + "CObject.beginTest = function(test, c, arr) {" + safe(BEGIN_TEST) + "};" - + "CObject.loadText = function(url, callback, arr) {" + safe(LOAD_TEXT) + "};" - - + "CObject.schedule = function(r, time) { return window.setTimeout(function() { r.run(); }, time); };" - - + "CObject.toJSON = function(s) { return eval('(' + s + ')'); };" + + "CObject.loadText = function(url, callback, arr) {" + safe(LOAD_TEXT.replace("run__V", "run")) + "};" - + "return CObject;" - + "})(this)"); + + "CObject.schedule = function(r, time) { return window.setTimeout(function() { r.run(); }, time); };" + + + "CObject.toJSON = function(s) { return eval('(' + s + ')'); };" + + + "return CObject;" + + "})(this)"); + } } }