< prev index next >

test/jdk/java/text/Format/ChoiceFormat/Bug4185732Test.java

Print this page
*** 1,7 ***
  /*
!  * Copyright (c) 1999, 2022, 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.
--- 1,7 ---
  /*
!  * Copyright (c) 1999, 2023, 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.

*** 19,18 ***
   * 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 4185732
-  * @library /java/text/testlib
-  * @build Bug4185732Test IntlTest HexDumpReader
-  * @run main Bug4185732Test
-  * @summary test that ChoiceFormat invariants are preserved across serialization
-  */
  /*
   * This file is available under and governed by the GNU General Public
   * License version 2 only, as published by the Free Software Foundation.
   * However, the following notice accompanied the original version of this
   * file and, per its terms, should not be removed:
--- 19,10 ---

*** 61,60 ***
   * PARTICULAR PURPOSE, OR NON-INFRINGEMENT. SUN SHALL NOT BE LIABLE FOR
   * ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR
   * DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES.
   */
  
! import java.util.*;
! import java.io.*;
  import java.text.ChoiceFormat;
  
! /**
-  *  A Locale can never contains language codes of he, yi or id.
-  */
- public class Bug4185732Test extends IntlTest {
-     public static void main(String[] args) throws Exception {
-         if (args.length == 1 && args[0].equals("prepTest")) {
-             prepTest();
-         } else {
-             new Bug4185732Test().run(args);
-         }
-     }
  
!     public void testIt() throws Exception {
          try {
              final ObjectInputStream in
                  = new ObjectInputStream(HexDumpReader.getStreamFromHexDump("Bug4185732.ser.txt"));
              final ChoiceFormat loc = (ChoiceFormat)in.readObject();
              if (loc.getFormats().length != loc.getLimits().length) {
!                 errln("ChoiceFormat did not properly check stream");
              } else {
!                 //for some reason, the data file was VALID.  This test
!                 //requires a corrupt data file the format and limit
!                 //arrays are of different length.
!                 errln("Test data file was not properly created");
              }
!         } catch (InvalidObjectException e) {
!             //this is what we want to have happen
!         } catch (Exception e) {
!             errln(e.toString());
-         }
-     }
- 
-     /**
-      * Create a data file for this test.  The data file must be corrupted by hand.
-      */
-     private static void prepTest() {
-         try {
-             ObjectOutputStream out = new ObjectOutputStream(
-                     new FileOutputStream("Bug4185732.ser"));
-             final double[] limits = {1,2,3,4,5,6,7};
-             final String[] formats = {"Sun","Mon","Tue","Wed","Thur","Fri","Sat"};
-             final ChoiceFormat fmt = new ChoiceFormat(limits, formats);
-             out.writeObject(fmt);
-             out.close();
-             System.out.println("You must invalidate the output file before running the test");
-             System.out.println("by modifying the length of one of the array");
-         } catch (Exception e) {
-             System.out.println(e);
          }
      }
  }
--- 53,52 ---
   * PARTICULAR PURPOSE, OR NON-INFRINGEMENT. SUN SHALL NOT BE LIABLE FOR
   * ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR
   * DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES.
   */
  
! /*
!  * @test
+  * @bug 4185732
+  * @library /java/text/testlib
+  * @build HexDumpReader
+  * @summary Test that ChoiceFormat invariants are preserved across serialization.
+  *          This test depends on Bug4185732.ser.txt and will fail otherwise.
+  * @run junit Bug4185732Test
+  */
+ 
+ import java.io.InvalidObjectException;
+ import java.io.ObjectInputStream;
  import java.text.ChoiceFormat;
  
! import org.junit.jupiter.api.Test;
  
! import static org.junit.jupiter.api.Assertions.fail;
+ 
+ public class Bug4185732Test {
+ 
+     /*
+      * The ChoiceFormat class requires that its choiceFormats and choiceLimits
+      * arrays have the same length. This test ensures that the invariant is enforced
+      * during the readObject() call.
+      */
+     @Test
+     public void choiceFormatSerializationInvariantsTest() {
          try {
+             // A serialized ChoiceFormat with unequal formats and limits
              final ObjectInputStream in
                  = new ObjectInputStream(HexDumpReader.getStreamFromHexDump("Bug4185732.ser.txt"));
              final ChoiceFormat loc = (ChoiceFormat)in.readObject();
              if (loc.getFormats().length != loc.getLimits().length) {
!                 fail("ChoiceFormat did not properly check stream");
              } else {
!                 // for some reason, the data file was VALID.  This test
!                 // requires a corrupt data file the format and limit
!                 // arrays are of different length.
!                 fail("Test data file was not properly created");
              }
!         } catch (InvalidObjectException expectedException) {
!             // Expecting an IOE
!         } catch (Exception wrongException) {
!             fail("Expected an InvalidObjectException, instead got: " + wrongException);
          }
      }
  }
< prev index next >