Clean up script elements after JSONP callback model
authorJaroslav Tulach <jaroslav.tulach@apidesign.org>
Wed, 10 Apr 2013 11:43:46 +0200
branchmodel
changeset 96362d77cc38117
parent 962 787578f33c21
child 964 df60ba2aeb87
Clean up script elements after JSONP callback
javaquery/api/src/main/java/org/apidesign/bck2brwsr/htmlpage/ConvertTypes.java
javaquery/api/src/test/java/org/apidesign/bck2brwsr/htmlpage/JSONTest.java
     1.1 --- a/javaquery/api/src/main/java/org/apidesign/bck2brwsr/htmlpage/ConvertTypes.java	Wed Apr 10 10:08:18 2013 +0200
     1.2 +++ b/javaquery/api/src/main/java/org/apidesign/bck2brwsr/htmlpage/ConvertTypes.java	Wed Apr 10 11:43:46 2013 +0200
     1.3 @@ -89,10 +89,12 @@
     1.4      @JavaScriptBody(args = { "name", "arr", "run" }, body = 
     1.5          "if (window[name]) return false;\n "
     1.6        + "window[name] = function(data) {\n "
     1.7 +      + "  delete window[name];\n"
     1.8 +      + "  var el = window.document.getElementById(name);\n"
     1.9 +      + "  el.parentNode.removeChild(el);\n"
    1.10        + "  arr[0] = data;\n"
    1.11        + "  run.run__V();\n"
    1.12 -      + "  delete window[name];\n"
    1.13 -      + "};"
    1.14 +      + "};\n"
    1.15        + "return true;\n"
    1.16      )
    1.17      private static boolean defineIfUnused(String name, Object[] arr, Runnable run) {
     2.1 --- a/javaquery/api/src/test/java/org/apidesign/bck2brwsr/htmlpage/JSONTest.java	Wed Apr 10 10:08:18 2013 +0200
     2.2 +++ b/javaquery/api/src/test/java/org/apidesign/bck2brwsr/htmlpage/JSONTest.java	Wed Apr 10 11:43:46 2013 +0200
     2.3 @@ -17,7 +17,9 @@
     2.4   */
     2.5  package org.apidesign.bck2brwsr.htmlpage;
     2.6  
     2.7 +import java.util.Arrays;
     2.8  import java.util.Iterator;
     2.9 +import org.apidesign.bck2brwsr.core.JavaScriptBody;
    2.10  import org.apidesign.bck2brwsr.htmlpage.api.OnReceive;
    2.11  import org.apidesign.bck2brwsr.htmlpage.api.Page;
    2.12  import org.apidesign.bck2brwsr.htmlpage.api.Property;
    2.13 @@ -42,6 +44,7 @@
    2.14  })
    2.15  public class JSONTest {
    2.16      private JSONik js;
    2.17 +    private Integer orig;
    2.18      
    2.19      @Test public void personToString() throws JSONException {
    2.20          Person p = new Person();
    2.21 @@ -183,7 +186,11 @@
    2.22          parameters = { "callme" }
    2.23      ))
    2.24      @BrwsrTest public void loadAndParseJSONP() throws InterruptedException {
    2.25 +        
    2.26          if (js == null) {
    2.27 +            orig = scriptElements();
    2.28 +            assert orig > 0 : "There should be some scripts on the page";
    2.29 +            
    2.30              js = new JSONik();
    2.31              js.applyBindings();
    2.32  
    2.33 @@ -197,7 +204,14 @@
    2.34          
    2.35          assert "Mitar".equals(p.getFirstName()) : "Unexpected: " + p.getFirstName();
    2.36          assert Sex.MALE.equals(p.getSex()) : "Expecting MALE: " + p.getSex();
    2.37 +        
    2.38 +        int now = scriptElements();
    2.39 +        
    2.40 +        assert orig == now : "The set of elements is unchanged. Delta: " + (now - orig);
    2.41      }
    2.42 +    
    2.43 +    @JavaScriptBody(args = {  }, body = "return window.document.getElementsByTagName('script').length;")
    2.44 +    private static native int scriptElements();
    2.45  
    2.46      @Http(@Http.Resource(
    2.47          content = "{'firstName': 'Sitar', 'sex': 'MALE'}",