Only add the trailing '.0' if the number is known to be integer. Otherwise accept the string as provided by JavaScript
1.1 --- a/rt/emul/mini/src/main/java/java/lang/Double.java Fri Mar 08 00:42:02 2013 +0100
1.2 +++ b/rt/emul/mini/src/main/java/java/lang/Double.java Fri Mar 08 23:43:01 2013 +0100
1.3 @@ -190,12 +190,11 @@
1.4 * @param d the {@code double} to be converted.
1.5 * @return a string representation of the argument.
1.6 */
1.7 - @JavaScriptBody(args="d", body="var r = d.toString();"
1.8 - + "if (isFinite(d) && (r.indexOf('.') === -1)) r = r + '.0';"
1.9 - + "return r;")
1.10 - public static String toString(double d) {
1.11 - throw new UnsupportedOperationException();
1.12 - }
1.13 + @JavaScriptBody(args="d", body="var f = Math.floor(d);\n" +
1.14 + "if (f === d && isFinite(d)) return d.toString() + '.0';\n" +
1.15 + "else return d.toString();"
1.16 + )
1.17 + public static native String toString(double d);
1.18
1.19 /**
1.20 * Returns a hexadecimal string representation of the
2.1 --- a/rt/vmtest/src/main/java/org/apidesign/bck2brwsr/vmtest/impl/CompareCase.java Fri Mar 08 00:42:02 2013 +0100
2.2 +++ b/rt/vmtest/src/main/java/org/apidesign/bck2brwsr/vmtest/impl/CompareCase.java Fri Mar 08 23:43:01 2013 +0100
2.3 @@ -83,10 +83,23 @@
2.4 @Test(dependsOnGroups = "run") public void compareResults() throws Throwable {
2.5 Object v1 = first.value;
2.6 Object v2 = second.value;
2.7 - if (v1 != null) {
2.8 - v1 = v1.toString();
2.9 + if (v1 instanceof Number) {
2.10 + try {
2.11 + v1 = Double.parseDouble(v1.toString());
2.12 + } catch (NumberFormatException nfe) {
2.13 + v1 = "Can't parse " + v1.toString();
2.14 + }
2.15 + try {
2.16 + v2 = Double.parseDouble(v2.toString());
2.17 + } catch (NumberFormatException nfe) {
2.18 + v2 = "Can't parse " + v2.toString();
2.19 + }
2.20 } else {
2.21 - v1 = "null";
2.22 + if (v1 != null) {
2.23 + v1 = v1.toString();
2.24 + } else {
2.25 + v1 = "null";
2.26 + }
2.27 }
2.28 try {
2.29 Assert.assertEquals(v2, v1, "Comparing results");
3.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
3.2 +++ b/rt/vmtest/src/test/java/org/apidesign/bck2brwsr/tck/DoubleTest.java Fri Mar 08 23:43:01 2013 +0100
3.3 @@ -0,0 +1,61 @@
3.4 +/**
3.5 + * Back 2 Browser Bytecode Translator
3.6 + * Copyright (C) 2012 Jaroslav Tulach <jaroslav.tulach@apidesign.org>
3.7 + *
3.8 + * This program is free software: you can redistribute it and/or modify
3.9 + * it under the terms of the GNU General Public License as published by
3.10 + * the Free Software Foundation, version 2 of the License.
3.11 + *
3.12 + * This program is distributed in the hope that it will be useful,
3.13 + * but WITHOUT ANY WARRANTY; without even the implied warranty of
3.14 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
3.15 + * GNU General Public License for more details.
3.16 + *
3.17 + * You should have received a copy of the GNU General Public License
3.18 + * along with this program. Look for COPYING file in the top folder.
3.19 + * If not, see http://opensource.org/licenses/GPL-2.0.
3.20 + */
3.21 +package org.apidesign.bck2brwsr.tck;
3.22 +
3.23 +import org.apidesign.bck2brwsr.vmtest.Compare;
3.24 +import org.apidesign.bck2brwsr.vmtest.VMTest;
3.25 +import org.testng.annotations.Factory;
3.26 +
3.27 +/**
3.28 + *
3.29 + * @author Jaroslav Tulach <jtulach@netbeans.org>
3.30 + */
3.31 +public class DoubleTest {
3.32 + @Compare public String integerToString() {
3.33 + return toStr(1);
3.34 + }
3.35 +
3.36 + @Compare public String integerAndHalfToString() {
3.37 + return toStr(1.5);
3.38 + }
3.39 +
3.40 + @Compare public double longToAndBack() {
3.41 + return Double.parseDouble(toStr(Long.MAX_VALUE / 10));
3.42 + }
3.43 +
3.44 + @Compare public String negativeIntToString() {
3.45 + return toStr(-10);
3.46 + }
3.47 +
3.48 + @Compare public String negativeIntAndHalfToString() {
3.49 + return toStr(-10.5);
3.50 + }
3.51 +
3.52 + @Compare public double negativeLongAndBack() {
3.53 + return Double.parseDouble(toStr(Long.MIN_VALUE / 10));
3.54 + }
3.55 +
3.56 + private static String toStr(double d) {
3.57 + return Double.toString(d);
3.58 + }
3.59 +
3.60 + @Factory
3.61 + public static Object[] create() {
3.62 + return VMTest.create(DoubleTest.class);
3.63 + }
3.64 +}