Make sure Boolean.prototype contains the Java methods soon enough Libraries
authorJaroslav Tulach <jaroslav.tulach@apidesign.org>
Fri, 10 Jun 2016 05:52:44 +0200
branchLibraries
changeset 1971de609e0cdab5
parent 1970 958a3b7fad36
child 1972 a83ae75ebf89
Make sure Boolean.prototype contains the Java methods soon enough
rt/emul/compacttest/src/test/java/org/apidesign/bck2brwsr/tck/BooleanTest.java
rt/emul/mini/src/main/resources/org/apidesign/vm4brwsr/emul/lang/java_lang_String.js
rt/vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java
rt/vm/src/test/java/org/apidesign/vm4brwsr/LibUse.java
rt/vm/src/test/java/org/apidesign/vm4brwsr/LibUseTest.java
     1.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     1.2 +++ b/rt/emul/compacttest/src/test/java/org/apidesign/bck2brwsr/tck/BooleanTest.java	Fri Jun 10 05:52:44 2016 +0200
     1.3 @@ -0,0 +1,47 @@
     1.4 +/**
     1.5 + * Back 2 Browser Bytecode Translator
     1.6 + * Copyright (C) 2012-2015 Jaroslav Tulach <jaroslav.tulach@apidesign.org>
     1.7 + *
     1.8 + * This program is free software: you can redistribute it and/or modify
     1.9 + * it under the terms of the GNU General Public License as published by
    1.10 + * the Free Software Foundation, version 2 of the License.
    1.11 + *
    1.12 + * This program is distributed in the hope that it will be useful,
    1.13 + * but WITHOUT ANY WARRANTY; without even the implied warranty of
    1.14 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    1.15 + * GNU General Public License for more details.
    1.16 + *
    1.17 + * You should have received a copy of the GNU General Public License
    1.18 + * along with this program. Look for COPYING file in the top folder.
    1.19 + * If not, see http://opensource.org/licenses/GPL-2.0.
    1.20 + */
    1.21 +package org.apidesign.bck2brwsr.tck;
    1.22 +
    1.23 +import net.java.html.js.JavaScriptBody;
    1.24 +import org.apidesign.bck2brwsr.vmtest.BrwsrTest;
    1.25 +import org.apidesign.bck2brwsr.vmtest.VMTest;
    1.26 +import org.testng.annotations.Factory;
    1.27 +
    1.28 +public class BooleanTest {
    1.29 +    @JavaScriptBody(args = {  }, body = "return true;")
    1.30 +    private static native Boolean getTrue();
    1.31 +
    1.32 +    @JavaScriptBody(args = {  }, body = "return false;")
    1.33 +    private static native Boolean getFalse();
    1.34 +
    1.35 +    @BrwsrTest public void primitiveTrue() {
    1.36 +        boolean t = getTrue();
    1.37 +        assert t : "Yes, it is true";
    1.38 +    }
    1.39 +
    1.40 +    @BrwsrTest public void primitiveFalse() {
    1.41 +        boolean t = getFalse();
    1.42 +        assert !t : "Yes, it is false";
    1.43 +    }
    1.44 +
    1.45 +    @Factory
    1.46 +    public static Object[] create() {
    1.47 +        return VMTest.create(BooleanTest.class);
    1.48 +    }
    1.49 +
    1.50 +}
     2.1 --- a/rt/emul/mini/src/main/resources/org/apidesign/vm4brwsr/emul/lang/java_lang_String.js	Wed Jun 08 07:15:54 2016 +0200
     2.2 +++ b/rt/emul/mini/src/main/resources/org/apidesign/vm4brwsr/emul/lang/java_lang_String.js	Fri Jun 10 05:52:44 2016 +0200
     2.3 @@ -1,6 +1,7 @@
     2.4  // initialize methods on arrays and String constants
     2.5  vm.java_lang_reflect_Array(false);
     2.6  vm.java_lang_String(false);
     2.7 +vm.java_lang_Boolean(false);
     2.8  
     2.9  Object.defineProperty(Array, "at", { configurable: true, writable: true, value : function(arr, indx, value) {
    2.10    var prev = arr[indx];
     3.1 --- a/rt/vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java	Wed Jun 08 07:15:54 2016 +0200
     3.2 +++ b/rt/vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java	Fri Jun 10 05:52:44 2016 +0200
     3.3 @@ -1491,12 +1491,16 @@
     3.4                      int indx = readUShortArg(byteCodes, i);
     3.5                      String[] fi = jc.getFieldInfoName(indx);
     3.6                      final int type = VarType.fromFieldType(fi[2].charAt(0));
     3.7 -                    String ac = accessClassFalse(mangleClassName(fi[0]));
     3.8 -                    FieldData field = findField(fi);
     3.9 -                    String af = accessField(ac, field, fi);
    3.10 -                    smapper.assign(this, type, af + "()");
    3.11 +                    if (DirectlLibraries.isScriptLibrary(fi[0]) && fi[0].endsWith("/Exports")) {
    3.12 +                        smapper.assign(this, type, fi[1]);
    3.13 +                    } else {
    3.14 +                        String ac = accessClassFalse(mangleClassName(fi[0]));
    3.15 +                        FieldData field = findField(fi);
    3.16 +                        String af = accessField(ac, field, fi);
    3.17 +                        smapper.assign(this, type, af + "()");
    3.18 +                        addReference(fi[0]);
    3.19 +                    }
    3.20                      i += 2;
    3.21 -                    addReference(fi[0]);
    3.22                      break;
    3.23                  }
    3.24                  case opc_putstatic: {
     4.1 --- a/rt/vm/src/test/java/org/apidesign/vm4brwsr/LibUse.java	Wed Jun 08 07:15:54 2016 +0200
     4.2 +++ b/rt/vm/src/test/java/org/apidesign/vm4brwsr/LibUse.java	Fri Jun 10 05:52:44 2016 +0200
     4.3 @@ -17,7 +17,9 @@
     4.4   */
     4.5  package org.apidesign.vm4brwsr;
     4.6  
     4.7 +import static net.java.html.lib.Exports.NaN;
     4.8  import static net.java.html.lib.Exports.eval;
     4.9 +import static net.java.html.lib.Exports.isNaN;
    4.10  import static net.java.html.lib.Exports.parseInt;
    4.11  import net.java.html.lib.Objs;
    4.12  
    4.13 @@ -50,4 +52,9 @@
    4.14          return parseInt(str, radix);
    4.15      }
    4.16  
    4.17 +    public boolean checkNaN() throws Exception {
    4.18 +        double nan = NaN;
    4.19 +        return isNaN(nan);
    4.20 +    }
    4.21 +
    4.22  }
     5.1 --- a/rt/vm/src/test/java/org/apidesign/vm4brwsr/LibUseTest.java	Wed Jun 08 07:15:54 2016 +0200
     5.2 +++ b/rt/vm/src/test/java/org/apidesign/vm4brwsr/LibUseTest.java	Fri Jun 10 05:52:44 2016 +0200
     5.3 @@ -73,4 +73,13 @@
     5.4              15, "F", 16
     5.5          );
     5.6      }
     5.7 +
     5.8 +    @Test
     5.9 +    public void verifyNaN() throws Exception {
    5.10 +        code.assertExec(
    5.11 +            "Check NaN", LibUse.class,
    5.12 +            "checkNaN__Z",
    5.13 +            true
    5.14 +        );
    5.15 +    }
    5.16  }