Make sure callback with parameters works. Plus get ready to usage of $ sign in $JsCallbacks$ naming scheme.
authorJaroslav Tulach <jaroslav.tulach@apidesign.org>
Fri, 12 Jul 2013 11:07:58 +0200
changeset 12444b43ab1f72e8
parent 1243 c3e68a67d46d
child 1245 5f8cc8ad490e
Make sure callback with parameters works. Plus get ready to usage of $ sign in $JsCallbacks$ naming scheme.
rt/vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java
rt/vm/src/test/java/org/apidesign/vm4brwsr/HtmlAnnotations.java
rt/vm/src/test/java/org/apidesign/vm4brwsr/HtmlAnnotationsTest.java
     1.1 --- a/rt/vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java	Thu Jul 11 22:36:01 2013 +0200
     1.2 +++ b/rt/vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java	Fri Jul 12 11:07:58 2013 +0200
     1.3 @@ -1742,7 +1742,8 @@
     1.4          }
     1.5          StringBuilder sb = new StringBuilder();
     1.6          final String rfqn = replace(fqn);
     1.7 -        sb.append(rfqn).append("__").append(method).append("____Ljava_lang_Object_2");
     1.8 +        sb.append(rfqn).append("$").append(method).
     1.9 +            append('$').append(params).append("__Ljava_lang_Object_2");
    1.10          if (!isStatic) {
    1.11              sb.append('L').append(rfqn).append("_2");
    1.12          }
     2.1 --- a/rt/vm/src/test/java/org/apidesign/vm4brwsr/HtmlAnnotations.java	Thu Jul 11 22:36:01 2013 +0200
     2.2 +++ b/rt/vm/src/test/java/org/apidesign/vm4brwsr/HtmlAnnotations.java	Fri Jul 12 11:07:58 2013 +0200
     2.3 @@ -49,5 +49,21 @@
     2.4      private static native void callback(Runnable r);
     2.5  
     2.6      @JavaScriptBody(args = {  }, javacall = true, body = "return @org.apidesign.vm4brwsr.HtmlAnnotations::callback()();")
     2.7 -    private static native int staticCallback();
     2.8 +    public static native int staticCallback();
     2.9 +    
    2.10 +    
    2.11 +    protected long chooseLong(boolean takeFirst, boolean takeSecond, long first, long second) {
    2.12 +        long l = 0;
    2.13 +        if (takeFirst) l += first;
    2.14 +        if (takeSecond) l += second;
    2.15 +        return l;
    2.16 +    }
    2.17 +    
    2.18 +    public static Object create() {
    2.19 +        return new HtmlAnnotations();
    2.20 +    }
    2.21 +    @JavaScriptBody(args = { "impl", "a", "b" }, javacall = true, body = 
    2.22 +        "return impl.@org.apidesign.vm4brwsr.HtmlAnnotations::chooseLong(ZZJJ)(true, false, a, b);"
    2.23 +    )
    2.24 +    public static native long first(Object impl, long a, long b);
    2.25  }
     3.1 --- a/rt/vm/src/test/java/org/apidesign/vm4brwsr/HtmlAnnotationsTest.java	Thu Jul 11 22:36:01 2013 +0200
     3.2 +++ b/rt/vm/src/test/java/org/apidesign/vm4brwsr/HtmlAnnotationsTest.java	Fri Jul 12 11:07:58 2013 +0200
     3.3 @@ -17,6 +17,7 @@
     3.4   */
     3.5  package org.apidesign.vm4brwsr;
     3.6  
     3.7 +import static org.testng.Assert.assertNotNull;
     3.8  import org.testng.annotations.AfterClass;
     3.9  import org.testng.annotations.BeforeClass;
    3.10  import org.testng.annotations.Test;
    3.11 @@ -54,6 +55,15 @@
    3.12              Double.valueOf(1)
    3.13          );
    3.14      }
    3.15 +
    3.16 +    @Test public void callbackWithFourParamsAndReturnType() throws Exception {
    3.17 +        Object instance = code.execCode("Get an HtmlAnnotations instance", HtmlAnnotations.class, "create__Ljava_lang_Object_2", null);
    3.18 +        assertNotNull(instance, "Instance created");
    3.19 +        assertExec("runnable called", HtmlAnnotations.class, 
    3.20 +            "first__JLjava_lang_Object_2JJ",
    3.21 +            Double.valueOf(42), instance, 42, 31
    3.22 +        );
    3.23 +    }
    3.24      
    3.25      private static TestVM code;
    3.26