Merge
authorvinnie
Thu, 04 Oct 2012 11:54:16 +0100 (2012-10-04)
changeset 14023 58aabbd73a9b
parent 14022 43384f14d41b (current diff)
parent 14021 6bfcacd030fe (diff)
child 14024 694c379c2958
Merge
--- a/jdk/src/share/classes/java/text/DecimalFormat.java	Tue Feb 14 11:18:32 2012 +0000
+++ b/jdk/src/share/classes/java/text/DecimalFormat.java	Thu Oct 04 11:54:16 2012 +0100
@@ -3694,7 +3694,10 @@
 
         if (serialVersionOnStream < 4) {
             setRoundingMode(RoundingMode.HALF_EVEN);
+        } else {
+            setRoundingMode(getRoundingMode());
         }
+
         // We only need to check the maximum counts because NumberFormat
         // .readObject has already ensured that the maximum is greater than the
         // minimum count.
--- a/jdk/src/windows/native/sun/windows/awt_InputMethod.cpp	Tue Feb 14 11:18:32 2012 +0000
+++ b/jdk/src/windows/native/sun/windows/awt_InputMethod.cpp	Thu Oct 04 11:54:16 2012 +0100
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997, 2010, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -517,10 +517,10 @@
     jstring infojStr = NULL;
 
     if ((buffSize = ::ImmGetDescription(hkl, szImmDescription, 0)) > 0) {
-        szImmDescription = (LPTSTR) safe_Malloc(buffSize * sizeof(TCHAR));
+        szImmDescription = (LPTSTR) safe_Malloc((buffSize+1) * sizeof(TCHAR));
 
         if (szImmDescription != NULL) {
-            ImmGetDescription(hkl, szImmDescription, buffSize);
+            ImmGetDescription(hkl, szImmDescription, (buffSize+1));
 
             infojStr = JNU_NewStringPlatform(env, szImmDescription);
 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/java/text/Format/DecimalFormat/Bug7196316.java	Thu Oct 04 11:54:16 2012 +0100
@@ -0,0 +1,73 @@
+/*
+ * Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+/*
+ * @test
+ * @bug 7196316
+ * @summary Confirm that a non-default rounding mode is used even after deserialization.
+ */
+
+
+import java.io.*;
+import java.math.*;
+import java.text.*;
+
+public class Bug7196316 {
+
+    private static final String filename = "bug7196316.ser";
+
+    public static void main(String[] args) throws Exception {
+        DecimalFormat df;
+        RoundingMode mode = RoundingMode.DOWN;
+        double given = 6.6;
+        String expected;
+        String actual;
+
+        try (ObjectOutputStream os
+                 = new ObjectOutputStream(new FileOutputStream(filename))) {
+            df = new DecimalFormat("#");
+            df.setRoundingMode(mode);
+            expected = df.format(given);
+            os.writeObject(df);
+        }
+
+        try (ObjectInputStream is
+                 = new ObjectInputStream(new FileInputStream(filename))) {
+            df = (DecimalFormat)is.readObject();
+        }
+
+        RoundingMode newMode = df.getRoundingMode();
+        if (mode != newMode) {
+            throw new RuntimeException("Unexpected roundig mode: " + newMode);
+        } else {
+            actual = df.format(given);
+            if (!expected.equals(actual)) {
+                throw new RuntimeException("Unexpected formatted result: \""
+                              + actual + "\"");
+            } else {
+                System.out.println("Passed: Expected rounding mode (" + newMode
+                    + ") & formatted result: \"" + actual + "\"");
+            }
+        }
+    }
+
+}