1.1 --- a/javaquery/api/pom.xml Fri Apr 19 09:49:26 2013 +0200
1.2 +++ b/javaquery/api/pom.xml Wed Apr 24 20:22:19 2013 +0200
1.3 @@ -73,5 +73,16 @@
1.4 <version>${project.version}</version>
1.5 <scope>test</scope>
1.6 </dependency>
1.7 + <dependency>
1.8 + <groupId>org.apidesign.html</groupId>
1.9 + <artifactId>net.java.html.json</artifactId>
1.10 + <version>0.1-SNAPSHOT</version>
1.11 + </dependency>
1.12 + <dependency>
1.13 + <groupId>org.apidesign.html</groupId>
1.14 + <artifactId>net.java.html.json.tck</artifactId>
1.15 + <version>0.1-SNAPSHOT</version>
1.16 + <scope>test</scope>
1.17 + </dependency>
1.18 </dependencies>
1.19 </project>
2.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
2.2 +++ b/javaquery/api/src/main/java/org/apidesign/bck2brwsr/htmlpage/BrwsrCntxt.java Wed Apr 24 20:22:19 2013 +0200
2.3 @@ -0,0 +1,99 @@
2.4 +/**
2.5 + * Back 2 Browser Bytecode Translator
2.6 + * Copyright (C) 2012 Jaroslav Tulach <jaroslav.tulach@apidesign.org>
2.7 + *
2.8 + * This program is free software: you can redistribute it and/or modify
2.9 + * it under the terms of the GNU General Public License as published by
2.10 + * the Free Software Foundation, version 2 of the License.
2.11 + *
2.12 + * This program is distributed in the hope that it will be useful,
2.13 + * but WITHOUT ANY WARRANTY; without even the implied warranty of
2.14 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
2.15 + * GNU General Public License for more details.
2.16 + *
2.17 + * You should have received a copy of the GNU General Public License
2.18 + * along with this program. Look for COPYING file in the top folder.
2.19 + * If not, see http://opensource.org/licenses/GPL-2.0.
2.20 + */
2.21 +
2.22 +package org.apidesign.bck2brwsr.htmlpage;
2.23 +
2.24 +import net.java.html.json.Context;
2.25 +import org.apidesign.html.json.spi.ContextBuilder;
2.26 +import org.apidesign.html.json.spi.FunctionBinding;
2.27 +import org.apidesign.html.json.spi.JSONCall;
2.28 +import org.apidesign.html.json.spi.PropertyBinding;
2.29 +import org.apidesign.html.json.spi.Technology;
2.30 +import org.apidesign.html.json.spi.Transfer;
2.31 +
2.32 +/**
2.33 + *
2.34 + * @author Jaroslav Tulach <jtulach@netbeans.org>
2.35 + */
2.36 +public final class BrwsrCntxt implements Technology<Object>, Transfer {
2.37 + private BrwsrCntxt() {}
2.38 +
2.39 + public static final Context DEFAULT;
2.40 + static {
2.41 + BrwsrCntxt c = new BrwsrCntxt();
2.42 + DEFAULT = ContextBuilder.create().withTechnology(c).withTransfer(c).build();
2.43 + }
2.44 +
2.45 + @Override
2.46 + public void extract(Object obj, String[] props, Object[] values) {
2.47 + ConvertTypes.extractJSON(obj, props, values);
2.48 + }
2.49 +
2.50 + @Override
2.51 + public void loadJSON(final JSONCall call) {
2.52 + class R implements Runnable {
2.53 + Object[] arr = { null };
2.54 + @Override
2.55 + public void run() {
2.56 + call.notifySuccess(arr[0]);
2.57 + }
2.58 + }
2.59 + R r = new R();
2.60 + if (call.isJSONP()) {
2.61 + String me = ConvertTypes.createJSONP(r.arr, r);
2.62 + ConvertTypes.loadJSON(call.composeURL(me), r.arr, r, me);
2.63 + } else {
2.64 + ConvertTypes.loadJSON(call.composeURL(null), r.arr, r, null);
2.65 + }
2.66 + }
2.67 +
2.68 + @Override
2.69 + public Object wrapModel(Object model) {
2.70 + return model;
2.71 + }
2.72 +
2.73 + @Override
2.74 + public void bind(PropertyBinding b, Object model, Object data) {
2.75 + Knockout.bind(data, b, b.getPropertyName(),
2.76 + "getValue__Ljava_lang_Object_2",
2.77 + b.isReadOnly() ? null : "setValue__VLjava_lang_Object_2",
2.78 + false, false
2.79 + );
2.80 + }
2.81 +
2.82 + @Override
2.83 + public void valueHasMutated(Object data, String propertyName) {
2.84 + Knockout.valueHasMutated(data, propertyName);
2.85 + }
2.86 +
2.87 + @Override
2.88 + public void expose(FunctionBinding fb, Object model, Object d) {
2.89 + Knockout.expose(d, fb, fb.getFunctionName(), "call__VLjava_lang_Object_2Ljava_lang_Object_2");
2.90 + }
2.91 +
2.92 + @Override
2.93 + public void applyBindings(Object data) {
2.94 + Knockout.applyBindings(data);
2.95 + }
2.96 +
2.97 + @Override
2.98 + public Object wrapArray(Object[] arr) {
2.99 + return arr;
2.100 + }
2.101 +
2.102 +}
3.1 --- a/javaquery/api/src/main/java/org/apidesign/bck2brwsr/htmlpage/Knockout.java Fri Apr 19 09:49:26 2013 +0200
3.2 +++ b/javaquery/api/src/main/java/org/apidesign/bck2brwsr/htmlpage/Knockout.java Wed Apr 24 20:22:19 2013 +0200
3.3 @@ -61,9 +61,9 @@
3.4 valueHasMutated(model, prop);
3.5 }
3.6 @JavaScriptBody(args = { "self", "prop" }, body =
3.7 - "self[prop].valueHasMutated();"
3.8 + "var p = self[prop]; if (p) p.valueHasMutated();"
3.9 )
3.10 - public void valueHasMutated(Object self, String prop) {
3.11 + public static void valueHasMutated(Object self, String prop) {
3.12 }
3.13
3.14
3.15 @@ -87,7 +87,7 @@
3.16 + "}\n"
3.17 + "bindings[prop] = ko['computed'](bnd);"
3.18 )
3.19 - private static void bind(
3.20 + static void bind(
3.21 Object bindings, Object model, String prop, String getter, String setter, boolean primitive, boolean array
3.22 ) {
3.23 }
3.24 @@ -95,13 +95,13 @@
3.25 @JavaScriptBody(args = { "bindings", "model", "prop", "sig" }, body =
3.26 "bindings[prop] = function(data, ev) { model[sig](data, ev); };"
3.27 )
3.28 - private static void expose(
3.29 + static void expose(
3.30 Object bindings, Object model, String prop, String sig
3.31 ) {
3.32 }
3.33
3.34 @JavaScriptBody(args = { "bindings" }, body = "ko.applyBindings(bindings);")
3.35 - private static void applyBindings(Object bindings) {}
3.36 + static void applyBindings(Object bindings) {}
3.37
3.38 private static void applyImpl(
3.39 String[] propsGettersAndSetters,
4.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
4.2 +++ b/javaquery/api/src/test/java/org/apidesign/bck2brwsr/htmlpage/Bck2BrwsrKnockoutTest.java Wed Apr 24 20:22:19 2013 +0200
4.3 @@ -0,0 +1,60 @@
4.4 +/**
4.5 + * Back 2 Browser Bytecode Translator
4.6 + * Copyright (C) 2012 Jaroslav Tulach <jaroslav.tulach@apidesign.org>
4.7 + *
4.8 + * This program is free software: you can redistribute it and/or modify
4.9 + * it under the terms of the GNU General Public License as published by
4.10 + * the Free Software Foundation, version 2 of the License.
4.11 + *
4.12 + * This program is distributed in the hope that it will be useful,
4.13 + * but WITHOUT ANY WARRANTY; without even the implied warranty of
4.14 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
4.15 + * GNU General Public License for more details.
4.16 + *
4.17 + * You should have received a copy of the GNU General Public License
4.18 + * along with this program. Look for COPYING file in the top folder.
4.19 + * If not, see http://opensource.org/licenses/GPL-2.0.
4.20 + */
4.21 +package org.apidesign.bck2brwsr.htmlpage;
4.22 +
4.23 +import java.util.Map;
4.24 +import net.java.html.json.Context;
4.25 +import org.apidesign.bck2brwsr.core.JavaScriptBody;
4.26 +import org.apidesign.bck2brwsr.vmtest.VMTest;
4.27 +import org.apidesign.html.json.tck.KnockoutTCK;
4.28 +import org.openide.util.lookup.ServiceProvider;
4.29 +import org.testng.annotations.Factory;
4.30 +
4.31 +/**
4.32 + *
4.33 + * @author Jaroslav Tulach <jtulach@netbeans.org>
4.34 + */
4.35 +@ServiceProvider(service = KnockoutTCK.class)
4.36 +public final class Bck2BrwsrKnockoutTest extends KnockoutTCK {
4.37 + @Factory public static Object[] create() {
4.38 + return VMTest.create(testClasses());
4.39 + }
4.40 +
4.41 + @Override
4.42 + public Context createContext() {
4.43 + return BrwsrCntxt.DEFAULT;
4.44 + }
4.45 +
4.46 +
4.47 +
4.48 + @Override
4.49 + public Object createJSON(Map<String, Object> values) {
4.50 + Object json = createJSON();
4.51 +
4.52 + for (Map.Entry<String, Object> entry : values.entrySet()) {
4.53 + putValue(json, entry.getKey(), entry.getValue());
4.54 + }
4.55 + return json;
4.56 + }
4.57 +
4.58 + @JavaScriptBody(args = {}, body = "return new Object();")
4.59 + private static native Object createJSON();
4.60 +
4.61 + @JavaScriptBody(args = { "json", "key", "value" }, body = "json[key] = value;")
4.62 + private static native void putValue(Object json, String key, Object value);
4.63 +}
5.1 --- a/rt/vmtest/src/main/java/org/apidesign/bck2brwsr/vmtest/VMTest.java Fri Apr 19 09:49:26 2013 +0200
5.2 +++ b/rt/vmtest/src/main/java/org/apidesign/bck2brwsr/vmtest/VMTest.java Wed Apr 24 20:22:19 2013 +0200
5.3 @@ -47,10 +47,10 @@
5.4 * Each {@link BrwsrTest} annotated method is executed once in {@link Launcher started
5.5 * browser}.
5.6 *
5.7 - * @param clazz the class to inspect
5.8 + * @param clazz the class (or classes) to inspect
5.9 * @return the set of created tests
5.10 */
5.11 - public static Object[] create(Class<?> clazz) {
5.12 + public static Object[] create(Class... clazz) {
5.13 return CompareCase.create(clazz);
5.14 }
5.15 }
6.1 --- a/rt/vmtest/src/main/java/org/apidesign/bck2brwsr/vmtest/impl/CompareCase.java Fri Apr 19 09:49:26 2013 +0200
6.2 +++ b/rt/vmtest/src/main/java/org/apidesign/bck2brwsr/vmtest/impl/CompareCase.java Wed Apr 24 20:22:19 2013 +0200
6.3 @@ -53,8 +53,7 @@
6.4 * @param clazz the class to inspect
6.5 * @return the set of created tests
6.6 */
6.7 - public static Object[] create(Class<?> clazz) {
6.8 - Method[] arr = clazz.getMethods();
6.9 + public static Object[] create(Class... classes) {
6.10 List<Object> ret = new ArrayList<>();
6.11
6.12 final LaunchSetup l = LaunchSetup.INSTANCE;
6.13 @@ -70,9 +69,12 @@
6.14 }
6.15 }
6.16
6.17 - for (Method m : arr) {
6.18 - registerCompareCases(m, l, ret, brwsr);
6.19 - registerBrwsrCases(m, l, ret, brwsr);
6.20 + for (Class clazz : classes) {
6.21 + Method[] arr = clazz.getMethods();
6.22 + for (Method m : arr) {
6.23 + registerCompareCases(m, l, ret, brwsr);
6.24 + registerBrwsrCases(m, l, ret, brwsr);
6.25 + }
6.26 }
6.27 return ret.toArray();
6.28 }