You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@netbeans.apache.org by jt...@apache.org on 2020/12/16 15:30:18 UTC

[netbeans-html4j] branch master updated: Real life JSON downloading TCK test

This is an automated email from the ASF dual-hosted git repository.

jtulach pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/netbeans-html4j.git


The following commit(s) were added to refs/heads/master by this push:
     new 1f8b842  Real life JSON downloading TCK test
1f8b842 is described below

commit 1f8b842647560ca8725119415c03101803500657
Author: Jaroslav Tulach <ja...@apidesign.org>
AuthorDate: Wed Dec 16 16:29:53 2020 +0100

    Real life JSON downloading TCK test
---
 .../net/java/html/boot/script/DynamicHTTP.java     |   2 +-
 .../html/presenters/browser/DynamicHTTP.java       |   2 +-
 .../java/net/java/html/json/tests/MinesTest.java   |  16 +--
 .../java/html/json/tests/ObtainAndComputeTest.java | 136 +++++++++++++++++++++
 .../main/java/net/java/html/json/tests/Utils.java  |  13 ++
 .../org/netbeans/html/json/tck/KnockoutTCK.java    |   2 +
 .../netbeans/html/json/impl/ModelProcessor.java    |   2 +-
 .../netbeans/html/ko/felix/test/DynamicHTTP.java   |   2 +-
 .../netbeans/html/ko/osgi/test/DynamicHTTP.java    |   2 +-
 .../netbeans/html/wstyrus/TyrusDynamicHTTP.java    |   2 +-
 .../java/org/netbeans/html/ko4j/DynamicHTTP.java   |   2 +-
 .../html/presenters/webkit/DynamicHTTP.java        |   2 +-
 .../org/netbeans/html/xhr4j/JsonDynamicHTTP.java   |   2 +-
 13 files changed, 161 insertions(+), 24 deletions(-)

diff --git a/boot-script/src/test/java/net/java/html/boot/script/DynamicHTTP.java b/boot-script/src/test/java/net/java/html/boot/script/DynamicHTTP.java
index eb0f401..5e39cad 100644
--- a/boot-script/src/test/java/net/java/html/boot/script/DynamicHTTP.java
+++ b/boot-script/src/test/java/net/java/html/boot/script/DynamicHTTP.java
@@ -98,7 +98,7 @@ final class DynamicHTTP extends HttpHandler {
                 params.add(p);
             }
             final String cnt = request.getParameter("content");
-            String mangle = cnt.replace("%20", " ").replace("%0A", "\n");
+            String mangle = cnt.replace("%20", " ").replace("%0A", "\n").replace("\\\"", "\"");
             ByteArrayInputStream is = new ByteArrayInputStream(mangle.getBytes("UTF-8"));
             URI url;
             final Resource res = new Resource(is, mimeType, "/dynamic/res" + ++resourcesCount, params.toArray(new String[params.size()]));
diff --git a/browser/src/test/java/org/netbeans/html/presenters/browser/DynamicHTTP.java b/browser/src/test/java/org/netbeans/html/presenters/browser/DynamicHTTP.java
index 9ad1f18..cf7cb41 100644
--- a/browser/src/test/java/org/netbeans/html/presenters/browser/DynamicHTTP.java
+++ b/browser/src/test/java/org/netbeans/html/presenters/browser/DynamicHTTP.java
@@ -60,7 +60,7 @@ final class DynamicHTTP extends Handler {
                 params.add(p);
             }
             final String cnt = s.getParameter(request, "content");
-            String mangle = cnt.replace("%20", " ").replace("%0A", "\n");
+            String mangle = cnt.replace("%20", " ").replace("%0A", "\n").replace("\\\"", "\"");
             ByteArrayInputStream is = new ByteArrayInputStream(mangle.getBytes("UTF-8"));
             URI url;
             final Resource res = new Resource(is, mimeType, "/dynamic/res" + ++resourcesCount, params.toArray(new String[params.size()]));
diff --git a/json-tck/src/main/java/net/java/html/json/tests/MinesTest.java b/json-tck/src/main/java/net/java/html/json/tests/MinesTest.java
index 55c5ce3..e436bd8 100644
--- a/json-tck/src/main/java/net/java/html/json/tests/MinesTest.java
+++ b/json-tck/src/main/java/net/java/html/json/tests/MinesTest.java
@@ -61,7 +61,7 @@ public final class MinesTest {
             m.applyBindings();
             int cnt = Utils.countChildren(MinesTest.class, "table");
             assertEquals(cnt, 0, "Table is empty: " + cnt);
-            scheduleClick("init", 100);
+            Utils.scheduleClick(MinesTest.class, "init", 100);
         }
 
 
@@ -85,20 +85,6 @@ public final class MinesTest {
         assertEquals(cnt, 3, "There are three mines around. Was: " + cnt);
     }
 
-    private static void scheduleClick(String id, int delay) throws Exception {
-        String s = "var id = arguments[0]; var delay = arguments[1];"
-            + "var e = window.document.getElementById(id);\n "
-            + "var f = function() {;\n "
-            + "  var ev = window.document.createEvent('MouseEvents');\n "
-            + "  ev.initMouseEvent('click', true, false, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null);\n "
-            + "  e.dispatchEvent(ev);\n"
-            + "};\n"
-            + "window.setTimeout(f, delay);";
-        Utils.executeScript(
-            MinesTest.class,
-            s, id, delay);
-    }
-
     enum GameState {
         IN_PROGRESS, WON, LOST;
     }
diff --git a/json-tck/src/main/java/net/java/html/json/tests/ObtainAndComputeTest.java b/json-tck/src/main/java/net/java/html/json/tests/ObtainAndComputeTest.java
new file mode 100644
index 0000000..a1b99c4
--- /dev/null
+++ b/json-tck/src/main/java/net/java/html/json/tests/ObtainAndComputeTest.java
@@ -0,0 +1,136 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package net.java.html.json.tests;
+
+import java.util.ArrayList;
+import java.util.List;
+import net.java.html.BrwsrCtx;
+import net.java.html.json.ComputedProperty;
+import net.java.html.json.Function;
+import net.java.html.json.Model;
+import net.java.html.json.Models;
+import net.java.html.json.OnReceive;
+import net.java.html.json.Property;
+import static net.java.html.json.tests.Utils.assertEquals;
+import org.netbeans.html.json.tck.KOTest;
+
+public class ObtainAndComputeTest {
+    ObtainData m;
+
+    @KOTest
+    public void obtainAndComputeTest() throws Throwable {
+        if (m == null) {
+            BrwsrCtx ctx = Utils.newContext(ObtainAndComputeTest.class);
+            Utils.exposeHTML(ObtainAndComputeTest.class,
+                "<input type=\"text\" data-bind=\"textInput: filter\">\n" +
+                "<ul id='list' data-bind=\"foreach: filteredUsers\">\n" +
+                "   <li><div data-bind=\"text: email\"></div></li>\n" +
+                "</ul>\n" +
+                "<button id='button' data-bind=\"click: nextUsers\">more...</button>"
+            );
+            String d = "{\n" +
+"    \"data\": [{\n" +
+"            \"id\": 1,\n" +
+"            \"email\": \"george.bluth@gmail.com\"\n" +
+"        }, {\n" +
+"            \"id\": 2,\n" +
+"            \"email\": \"janet.weaver@gmail.com\"\n" +
+"        }, {\n" +
+"            \"id\": 3,\n" +
+"            \"email\": \"emma.wong@gmail.com\"\n" +
+"        }, {\n" +
+"            \"email\": \"eve.holt@gmail.com\"\n" +
+"        }, {\n" +
+"            \"email\": \"charles.morris@rgmail.com\"\n" +
+"        }, {\n" +
+"            \"id\": 6,\n" +
+"            \"email\": \"tracey.ramos@gmail.com\"\n" +
+"        }]\n" +
+"}\n" +
+"";
+            String url = Utils.prepareURL(ObtainAndComputeTest.class, d, "application/json");
+
+            m = Models.bind(new ObtainData("holt", url, false), ctx);
+            m.applyBindings();
+            int cnt = Utils.countChildren(ObtainAndComputeTest.class, "list");
+            assertEquals(cnt, 0, "No filtered users so far: " + cnt);
+            Utils.scheduleClick(ObtainAndComputeTest.class, "button", 100);
+        }
+
+        if (!m.isGotReply()) {
+            throw new InterruptedException();
+        }
+        
+        try {
+            assertEquals(6, m.getUsers().size(), "Expecting some users: " + m);
+            assertEquals(1, m.getFilteredUsers().size(), "Only one holt matching filter: " + m);
+            int cnt = Utils.countChildren(ObtainAndComputeTest.class, "list");
+            assertEquals(cnt, 1, "Also one user: " + cnt);
+        } finally {
+            Utils.exposeHTML(ObtainAndComputeTest.class, "");
+        }
+    }
+
+    //
+    // application logic
+    //
+
+    @Model(className = "ObtainData", targetId = "", instance = true, properties = {
+        @Property(name = "users", type = ObtainUser.class, array = true),
+        @Property(name = "filter", type = String.class),
+        @Property(name = "url", type = String.class),
+        @Property(name = "gotReply", type = boolean.class)
+    })
+    static final class ObtainModel {
+        @ComputedProperty
+        public static List<ObtainUser> filteredUsers(List<ObtainUser> users, String filter) {
+            List<ObtainUser> res = new ArrayList<>();
+            for (ObtainUser user : users) {
+                if (user.getEmail().contains(filter)) {
+                    res.add(user);
+                }
+            }
+            return res;
+        }
+
+        @Function
+        public static void nextUsers(ObtainData model) {
+            model.loadUsers(model.getUrl());
+        }
+
+        @OnReceive(method = "GET", url = "{url}")
+        public static void loadUsers(ObtainData model, ObtainMessage reply) {
+            model.getUsers().addAll(reply.getData());
+            model.setGotReply(true);
+        }
+
+        @Model(className = "ObtainMessage", properties = {
+            @Property(name = "data", type = ObtainUser.class, array = true)})
+        public static class MessageVMD {
+        }
+
+        @Model(className = "ObtainUser", properties = {
+            @Property(name = "email", type = java.lang.String.class),}
+        )
+        public static class UserVMD {
+        }
+
+    }
+
+}
diff --git a/json-tck/src/main/java/net/java/html/json/tests/Utils.java b/json-tck/src/main/java/net/java/html/json/tests/Utils.java
index faa346c..94a2e3a 100644
--- a/json-tck/src/main/java/net/java/html/json/tests/Utils.java
+++ b/json-tck/src/main/java/net/java/html/json/tests/Utils.java
@@ -160,6 +160,19 @@ public final class Utils {
         );
     }
     
+    static void scheduleClick(Class<?> clazz, String id, int delay) throws Exception {
+        String s = "var id = arguments[0]; var delay = arguments[1];"
+            + "var e = window.document.getElementById(id);\n "
+            + "var f = function() {;\n "
+            + "  var ev = window.document.createEvent('MouseEvents');\n "
+            + "  ev.initMouseEvent('click', true, false, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null);\n "
+            + "  e.dispatchEvent(ev);\n"
+            + "};\n"
+            + "window.setTimeout(f, delay);";
+        Utils.executeScript(clazz, s, id, delay);
+    }
+    
+    
     static String prepareURL(
         Class<?> clazz, String content, String mimeType, String... parameters) {
         for (KnockoutTCK tck : tcks(clazz)) {
diff --git a/json-tck/src/main/java/org/netbeans/html/json/tck/KnockoutTCK.java b/json-tck/src/main/java/org/netbeans/html/json/tck/KnockoutTCK.java
index 59b1774..c6430c5 100644
--- a/json-tck/src/main/java/org/netbeans/html/json/tck/KnockoutTCK.java
+++ b/json-tck/src/main/java/org/netbeans/html/json/tck/KnockoutTCK.java
@@ -27,6 +27,7 @@ import net.java.html.json.tests.GCKnockoutTest;
 import net.java.html.json.tests.JSONTest;
 import net.java.html.json.tests.KnockoutTest;
 import net.java.html.json.tests.MinesTest;
+import net.java.html.json.tests.ObtainAndComputeTest;
 import net.java.html.json.tests.OperationsTest;
 import net.java.html.json.tests.Utils;
 import net.java.html.json.tests.WebSocketTest;
@@ -140,6 +141,7 @@ public abstract class KnockoutTCK {
             JSONTest.class,
             KnockoutTest.class,
             MinesTest.class,
+            ObtainAndComputeTest.class,
             OperationsTest.class,
             WebSocketTest.class,
             GCKnockoutTest.class
diff --git a/json/src/main/java/org/netbeans/html/json/impl/ModelProcessor.java b/json/src/main/java/org/netbeans/html/json/impl/ModelProcessor.java
index 7e342d3..99d13a7 100644
--- a/json/src/main/java/org/netbeans/html/json/impl/ModelProcessor.java
+++ b/json/src/main/java/org/netbeans/html/json/impl/ModelProcessor.java
@@ -1472,7 +1472,7 @@ public final class ModelProcessor extends AbstractProcessor {
             "        TYPE.copyJSON(model.proto.getContext(), ev, " + modelClass + ".class, arr);\n"
         );
         {
-            body.append("        ").append(clazz.getSimpleName()).append(".").append(n).append("(");
+            body.append("        ").append(inPckName(clazz, false)).append(".").append(n).append("(");
             String sep = "";
             for (String arg : args) {
                 body.append(sep);
diff --git a/ko-felix-test/src/test/java/org/netbeans/html/ko/felix/test/DynamicHTTP.java b/ko-felix-test/src/test/java/org/netbeans/html/ko/felix/test/DynamicHTTP.java
index 932a69e..4a3a019 100644
--- a/ko-felix-test/src/test/java/org/netbeans/html/ko/felix/test/DynamicHTTP.java
+++ b/ko-felix-test/src/test/java/org/netbeans/html/ko/felix/test/DynamicHTTP.java
@@ -98,7 +98,7 @@ final class DynamicHTTP extends HttpHandler {
                 params.add(p);
             }
             final String cnt = request.getParameter("content");
-            String mangle = cnt.replace("%20", " ").replace("%0A", "\n");
+            String mangle = cnt.replace("%20", " ").replace("%0A", "\n").replace("\\\"", "\"");
             ByteArrayInputStream is = new ByteArrayInputStream(mangle.getBytes("UTF-8"));
             URI url;
             final Resource res = new Resource(is, mimeType, "/dynamic/res" + ++resourcesCount, params.toArray(new String[params.size()]));
diff --git a/ko-osgi-test/src/test/java/org/netbeans/html/ko/osgi/test/DynamicHTTP.java b/ko-osgi-test/src/test/java/org/netbeans/html/ko/osgi/test/DynamicHTTP.java
index b8c6d1d..4e56199 100644
--- a/ko-osgi-test/src/test/java/org/netbeans/html/ko/osgi/test/DynamicHTTP.java
+++ b/ko-osgi-test/src/test/java/org/netbeans/html/ko/osgi/test/DynamicHTTP.java
@@ -98,7 +98,7 @@ final class DynamicHTTP extends HttpHandler {
                 params.add(p);
             }
             final String cnt = request.getParameter("content");
-            String mangle = cnt.replace("%20", " ").replace("%0A", "\n");
+            String mangle = cnt.replace("%20", " ").replace("%0A", "\n").replace("\\\"", "\"");
             ByteArrayInputStream is = new ByteArrayInputStream(mangle.getBytes("UTF-8"));
             URI url;
             final Resource res = new Resource(is, mimeType, "/dynamic/res" + ++resourcesCount, params.toArray(new String[params.size()]));
diff --git a/ko-ws-tyrus/src/test/java/org/netbeans/html/wstyrus/TyrusDynamicHTTP.java b/ko-ws-tyrus/src/test/java/org/netbeans/html/wstyrus/TyrusDynamicHTTP.java
index 1ed0205..01a096b 100644
--- a/ko-ws-tyrus/src/test/java/org/netbeans/html/wstyrus/TyrusDynamicHTTP.java
+++ b/ko-ws-tyrus/src/test/java/org/netbeans/html/wstyrus/TyrusDynamicHTTP.java
@@ -97,7 +97,7 @@ final class TyrusDynamicHTTP extends HttpHandler {
                 params.add(p);
             }
             final String cnt = request.getParameter("content");
-            String mangle = cnt.replace("%20", " ").replace("%0A", "\n");
+            String mangle = cnt.replace("%20", " ").replace("%0A", "\n").replace("\\\"", "\"");
             ByteArrayInputStream is = new ByteArrayInputStream(mangle.getBytes("UTF-8"));
             URI url;
             final Resource res = new Resource(is, mimeType, "/dynamic/res" + ++resourcesCount, params.toArray(new String[params.size()]));
diff --git a/ko4j/src/test/java/org/netbeans/html/ko4j/DynamicHTTP.java b/ko4j/src/test/java/org/netbeans/html/ko4j/DynamicHTTP.java
index b120848..1c9b3fe 100644
--- a/ko4j/src/test/java/org/netbeans/html/ko4j/DynamicHTTP.java
+++ b/ko4j/src/test/java/org/netbeans/html/ko4j/DynamicHTTP.java
@@ -98,7 +98,7 @@ final class DynamicHTTP extends HttpHandler {
                 params.add(p);
             }
             final String cnt = request.getParameter("content");
-            String mangle = cnt.replace("%20", " ").replace("%0A", "\n");
+            String mangle = cnt.replace("%20", " ").replace("%0A", "\n").replace("\\\"", "\"");
             ByteArrayInputStream is = new ByteArrayInputStream(mangle.getBytes("UTF-8"));
             URI url;
             final Resource res = new Resource(is, mimeType, "/dynamic/res" + ++resourcesCount, params.toArray(new String[params.size()]));
diff --git a/webkit/src/test/java/org/netbeans/html/presenters/webkit/DynamicHTTP.java b/webkit/src/test/java/org/netbeans/html/presenters/webkit/DynamicHTTP.java
index e69c321..c376c98 100644
--- a/webkit/src/test/java/org/netbeans/html/presenters/webkit/DynamicHTTP.java
+++ b/webkit/src/test/java/org/netbeans/html/presenters/webkit/DynamicHTTP.java
@@ -99,7 +99,7 @@ final class DynamicHTTP extends HttpHandler {
                 params.add(p);
             }
             final String cnt = request.getParameter("content");
-            String mangle = cnt.replace("%20", " ").replace("%0A", "\n");
+            String mangle = cnt.replace("%20", " ").replace("%0A", "\n").replace("\\\"", "\"");
             ByteArrayInputStream is = new ByteArrayInputStream(mangle.getBytes("UTF-8"));
             URI url;
             final Resource res = new Resource(is, mimeType, "/dynamic/res" + ++resourcesCount, params.toArray(new String[params.size()]));
diff --git a/xhr4j/src/test/java/org/netbeans/html/xhr4j/JsonDynamicHTTP.java b/xhr4j/src/test/java/org/netbeans/html/xhr4j/JsonDynamicHTTP.java
index 8af3132..a8ce6c4 100644
--- a/xhr4j/src/test/java/org/netbeans/html/xhr4j/JsonDynamicHTTP.java
+++ b/xhr4j/src/test/java/org/netbeans/html/xhr4j/JsonDynamicHTTP.java
@@ -97,7 +97,7 @@ final class JsonDynamicHTTP extends HttpHandler {
                 params.add(p);
             }
             final String cnt = request.getParameter("content");
-            String mangle = cnt.replace("%20", " ").replace("%0A", "\n");
+            String mangle = cnt.replace("%20", " ").replace("%0A", "\n").replace("\\\"", "\"");
             ByteArrayInputStream is = new ByteArrayInputStream(mangle.getBytes("UTF-8"));
             URI url;
             final Resource res = new Resource(is, mimeType, "/dynamic/res" + ++resourcesCount, params.toArray(new String[params.size()]));


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@netbeans.apache.org
For additional commands, e-mail: commits-help@netbeans.apache.org

For further information about the NetBeans mailing lists, visit:
https://cwiki.apache.org/confluence/display/NETBEANS/Mailing+lists