# HG changeset patch # User Jaroslav Tulach # Date 1366827739 -7200 # Node ID 49eb825c87b7d861b4d91a43f70afa3e0e29aa9b # Parent be21afc3d48a8fab1fb54c9e4391f29b75b7864e javaquery.api is now implementation of net.java.html.json API diff -r be21afc3d48a -r 49eb825c87b7 javaquery/api/pom.xml --- a/javaquery/api/pom.xml Fri Apr 19 09:49:26 2013 +0200 +++ b/javaquery/api/pom.xml Wed Apr 24 20:22:19 2013 +0200 @@ -73,5 +73,16 @@ ${project.version} test + + org.apidesign.html + net.java.html.json + 0.1-SNAPSHOT + + + org.apidesign.html + net.java.html.json.tck + 0.1-SNAPSHOT + test + diff -r be21afc3d48a -r 49eb825c87b7 javaquery/api/src/main/java/org/apidesign/bck2brwsr/htmlpage/BrwsrCntxt.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/javaquery/api/src/main/java/org/apidesign/bck2brwsr/htmlpage/BrwsrCntxt.java Wed Apr 24 20:22:19 2013 +0200 @@ -0,0 +1,99 @@ +/** + * Back 2 Browser Bytecode Translator + * Copyright (C) 2012 Jaroslav Tulach + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. Look for COPYING file in the top folder. + * If not, see http://opensource.org/licenses/GPL-2.0. + */ + +package org.apidesign.bck2brwsr.htmlpage; + +import net.java.html.json.Context; +import org.apidesign.html.json.spi.ContextBuilder; +import org.apidesign.html.json.spi.FunctionBinding; +import org.apidesign.html.json.spi.JSONCall; +import org.apidesign.html.json.spi.PropertyBinding; +import org.apidesign.html.json.spi.Technology; +import org.apidesign.html.json.spi.Transfer; + +/** + * + * @author Jaroslav Tulach + */ +public final class BrwsrCntxt implements Technology, Transfer { + private BrwsrCntxt() {} + + public static final Context DEFAULT; + static { + BrwsrCntxt c = new BrwsrCntxt(); + DEFAULT = ContextBuilder.create().withTechnology(c).withTransfer(c).build(); + } + + @Override + public void extract(Object obj, String[] props, Object[] values) { + ConvertTypes.extractJSON(obj, props, values); + } + + @Override + public void loadJSON(final JSONCall call) { + class R implements Runnable { + Object[] arr = { null }; + @Override + public void run() { + call.notifySuccess(arr[0]); + } + } + R r = new R(); + if (call.isJSONP()) { + String me = ConvertTypes.createJSONP(r.arr, r); + ConvertTypes.loadJSON(call.composeURL(me), r.arr, r, me); + } else { + ConvertTypes.loadJSON(call.composeURL(null), r.arr, r, null); + } + } + + @Override + public Object wrapModel(Object model) { + return model; + } + + @Override + public void bind(PropertyBinding b, Object model, Object data) { + Knockout.bind(data, b, b.getPropertyName(), + "getValue__Ljava_lang_Object_2", + b.isReadOnly() ? null : "setValue__VLjava_lang_Object_2", + false, false + ); + } + + @Override + public void valueHasMutated(Object data, String propertyName) { + Knockout.valueHasMutated(data, propertyName); + } + + @Override + public void expose(FunctionBinding fb, Object model, Object d) { + Knockout.expose(d, fb, fb.getFunctionName(), "call__VLjava_lang_Object_2Ljava_lang_Object_2"); + } + + @Override + public void applyBindings(Object data) { + Knockout.applyBindings(data); + } + + @Override + public Object wrapArray(Object[] arr) { + return arr; + } + +} diff -r be21afc3d48a -r 49eb825c87b7 javaquery/api/src/main/java/org/apidesign/bck2brwsr/htmlpage/Knockout.java --- a/javaquery/api/src/main/java/org/apidesign/bck2brwsr/htmlpage/Knockout.java Fri Apr 19 09:49:26 2013 +0200 +++ b/javaquery/api/src/main/java/org/apidesign/bck2brwsr/htmlpage/Knockout.java Wed Apr 24 20:22:19 2013 +0200 @@ -61,9 +61,9 @@ valueHasMutated(model, prop); } @JavaScriptBody(args = { "self", "prop" }, body = - "self[prop].valueHasMutated();" + "var p = self[prop]; if (p) p.valueHasMutated();" ) - public void valueHasMutated(Object self, String prop) { + public static void valueHasMutated(Object self, String prop) { } @@ -87,7 +87,7 @@ + "}\n" + "bindings[prop] = ko['computed'](bnd);" ) - private static void bind( + static void bind( Object bindings, Object model, String prop, String getter, String setter, boolean primitive, boolean array ) { } @@ -95,13 +95,13 @@ @JavaScriptBody(args = { "bindings", "model", "prop", "sig" }, body = "bindings[prop] = function(data, ev) { model[sig](data, ev); };" ) - private static void expose( + static void expose( Object bindings, Object model, String prop, String sig ) { } @JavaScriptBody(args = { "bindings" }, body = "ko.applyBindings(bindings);") - private static void applyBindings(Object bindings) {} + static void applyBindings(Object bindings) {} private static void applyImpl( String[] propsGettersAndSetters, diff -r be21afc3d48a -r 49eb825c87b7 javaquery/api/src/test/java/org/apidesign/bck2brwsr/htmlpage/Bck2BrwsrKnockoutTest.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/javaquery/api/src/test/java/org/apidesign/bck2brwsr/htmlpage/Bck2BrwsrKnockoutTest.java Wed Apr 24 20:22:19 2013 +0200 @@ -0,0 +1,60 @@ +/** + * Back 2 Browser Bytecode Translator + * Copyright (C) 2012 Jaroslav Tulach + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. Look for COPYING file in the top folder. + * If not, see http://opensource.org/licenses/GPL-2.0. + */ +package org.apidesign.bck2brwsr.htmlpage; + +import java.util.Map; +import net.java.html.json.Context; +import org.apidesign.bck2brwsr.core.JavaScriptBody; +import org.apidesign.bck2brwsr.vmtest.VMTest; +import org.apidesign.html.json.tck.KnockoutTCK; +import org.openide.util.lookup.ServiceProvider; +import org.testng.annotations.Factory; + +/** + * + * @author Jaroslav Tulach + */ +@ServiceProvider(service = KnockoutTCK.class) +public final class Bck2BrwsrKnockoutTest extends KnockoutTCK { + @Factory public static Object[] create() { + return VMTest.create(testClasses()); + } + + @Override + public Context createContext() { + return BrwsrCntxt.DEFAULT; + } + + + + @Override + public Object createJSON(Map values) { + Object json = createJSON(); + + for (Map.Entry entry : values.entrySet()) { + putValue(json, entry.getKey(), entry.getValue()); + } + return json; + } + + @JavaScriptBody(args = {}, body = "return new Object();") + private static native Object createJSON(); + + @JavaScriptBody(args = { "json", "key", "value" }, body = "json[key] = value;") + private static native void putValue(Object json, String key, Object value); +} diff -r be21afc3d48a -r 49eb825c87b7 rt/vmtest/src/main/java/org/apidesign/bck2brwsr/vmtest/VMTest.java --- a/rt/vmtest/src/main/java/org/apidesign/bck2brwsr/vmtest/VMTest.java Fri Apr 19 09:49:26 2013 +0200 +++ b/rt/vmtest/src/main/java/org/apidesign/bck2brwsr/vmtest/VMTest.java Wed Apr 24 20:22:19 2013 +0200 @@ -47,10 +47,10 @@ * Each {@link BrwsrTest} annotated method is executed once in {@link Launcher started * browser}. * - * @param clazz the class to inspect + * @param clazz the class (or classes) to inspect * @return the set of created tests */ - public static Object[] create(Class clazz) { + public static Object[] create(Class... clazz) { return CompareCase.create(clazz); } } diff -r be21afc3d48a -r 49eb825c87b7 rt/vmtest/src/main/java/org/apidesign/bck2brwsr/vmtest/impl/CompareCase.java --- a/rt/vmtest/src/main/java/org/apidesign/bck2brwsr/vmtest/impl/CompareCase.java Fri Apr 19 09:49:26 2013 +0200 +++ b/rt/vmtest/src/main/java/org/apidesign/bck2brwsr/vmtest/impl/CompareCase.java Wed Apr 24 20:22:19 2013 +0200 @@ -53,8 +53,7 @@ * @param clazz the class to inspect * @return the set of created tests */ - public static Object[] create(Class clazz) { - Method[] arr = clazz.getMethods(); + public static Object[] create(Class... classes) { List ret = new ArrayList<>(); final LaunchSetup l = LaunchSetup.INSTANCE; @@ -70,9 +69,12 @@ } } - for (Method m : arr) { - registerCompareCases(m, l, ret, brwsr); - registerBrwsrCases(m, l, ret, brwsr); + for (Class clazz : classes) { + Method[] arr = clazz.getMethods(); + for (Method m : arr) { + registerCompareCases(m, l, ret, brwsr); + registerBrwsrCases(m, l, ret, brwsr); + } } return ret.toArray(); }