< prev index next >

test/jdk/java/util/Calendar/FieldStateTest.java

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

*** 22,130 ***
   */
  
  /*
   * @test
   * @bug 4860664 4916815 4867075
!  * @library /java/text/testlib
-  * @build Koyomi
-  * @run main FieldStateTest
   * @summary Unit tests for internal fields states.
   */
  
  import java.util.Date;
  import java.util.Locale;
  import java.util.TimeZone;
  
  import static java.util.Calendar.*;
  
! public class FieldStateTest extends IntlTest {
  
!     public static void main(String[] args) throws Exception {
-         Locale reservedLocale = Locale.getDefault();
-         TimeZone reservedTimeZone = TimeZone.getDefault();
-         try {
-             TimeZone.setDefault(TimeZone.getTimeZone("GMT"));
-             Locale.setDefault(Locale.US);
  
!             new FieldStateTest().run(args);
!         } finally {
!             // restore the reserved locale and time zone
!             Locale.setDefault(reservedLocale);
!             TimeZone.setDefault(reservedTimeZone);
!         }
      }
  
      public void TestFieldState() {
          Koyomi cal = new Koyomi();
!         logln("Right after instantialtion:");
          if (!cal.checkAllSet()) {
!             errln(cal.getMessage());
          }
  
!         logln("Set date to 2003/10/31 after the instantiation:");
          cal.set(2003, OCTOBER, 31);
          // let cal calculate the time
          cal.getTime();
          // At this point, all fields have to be recalculated and
          // happen to have the set-state from the instantiation. The
          // three fields should have "externally set" and the rest of
          // the fields have "computed". But we can't distinguish them
          // outside the package.
          if (!cal.checkAllSet()) {
!             errln(cal.getMessage());
          }
          // Make sure that the correct date was produced.
          if (!cal.checkInternalDate(2003, OCTOBER, 31, FRIDAY)) {
!             errln(cal.getMessage());
          }
  
!         logln("Change to Monday of the week, which is 2003/10/27:");
          cal.set(DAY_OF_WEEK, MONDAY);
          cal.getTime();
          if (!cal.checkDate(2003, OCTOBER, 27)) {
!             errln(cal.getMessage());
          }
  
          // The same operation didn't work after calling clear() before
          // 1.5 because the set-state was just depends on its previous
          // operations. After the instantiation, all the fields are set
          // to "computed". But after calling clear(), the state becomes
          // "unset".
!         logln("Set to 2003/10/31 after clear():");
          cal.clear();
          cal.set(2003, OCTOBER, 31);
          cal.getTime();
          cal.set(DAY_OF_WEEK, MONDAY);
          if (!cal.checkDate(2003, OCTOBER, 27, MONDAY)) {
!             errln(cal.getMessage());
          }
  
!         logln("Set to 2003/10/31 after clear(), then to the 51st week of year (12/19):");
          cal.clear();
          cal.set(2003, OCTOBER, 31);
          cal.getTime();
          cal.set(WEEK_OF_YEAR, 51);
          if (!cal.checkFieldValue(WEEK_OF_YEAR, 51)) {
!             errln(cal.getMessage());
          }
          if (!cal.checkDate(2003, DECEMBER, 19, FRIDAY)) {
!             errln(cal.getMessage());
          }
  
!         logln("Set to 2003/10 Mon of 4th week (10/20: 43rd week of year, 293rd day):");
          cal.clear();
          cal.set(YEAR, 2003);
          cal.set(MONTH, OCTOBER);
          cal.set(DAY_OF_WEEK, MONDAY);
          cal.set(WEEK_OF_MONTH, 4);
          cal.getTime();
          if (!cal.checkFieldValue(DAY_OF_MONTH, 20)) {
!             errln(cal.getMessage());
          }
          if (!cal.checkFieldValue(DAY_OF_YEAR, 293)) {
!             errln(cal.getMessage());
          }
          if (!cal.checkFieldValue(WEEK_OF_YEAR, 43)) {
!             errln(cal.getMessage());
          }
  
!         logln("Set to 2003/10 Mon of 43rd week of year (10/20: 4th week of month, 293rd day):");
          cal.clear();
          cal.set(YEAR, 2003);
          cal.set(DAY_OF_WEEK, MONDAY);
          cal.set(WEEK_OF_YEAR, 43);
          cal.getTime();
          if (!cal.checkDate(2003, OCTOBER, 20, MONDAY)) {
!             errln(cal.getMessage());
          }
          if (!cal.checkFieldValue(WEEK_OF_MONTH, 4)) {
!             errln(cal.getMessage());
          }
          if (!cal.checkFieldValue(DAY_OF_YEAR, 293)) {
!             errln(cal.getMessage());
          }
  
!         logln("Set day of week to SUNDAY and date to 2003/10/31. "
                  + "Then, getTime and set week of year to 43.");
  
          @SuppressWarnings("deprecation")
          Date d = new Date(2003 - 1900, OCTOBER, 31);
          cal.setTime(d);
--- 22,127 ---
   */
  
  /*
   * @test
   * @bug 4860664 4916815 4867075
!  * @run junit/othervm FieldStateTest
   * @summary Unit tests for internal fields states.
   */
  
  import java.util.Date;
  import java.util.Locale;
  import java.util.TimeZone;
  
  import static java.util.Calendar.*;
  
! import org.junit.jupiter.api.Test;
+ import org.junit.jupiter.api.BeforeAll;
  
! import static org.junit.jupiter.api.Assertions.fail;
  
! public class FieldStateTest {
! 
!     // Change JVM default Locale and TimeZone
!     @BeforeAll
!     static void initAll() {
!         Locale.setDefault(Locale.US);
+         TimeZone.setDefault(TimeZone.getTimeZone("GMT"));
      }
  
+ 
+     @Test
      public void TestFieldState() {
          Koyomi cal = new Koyomi();
!         System.out.println("Right after instantialtion:");
          if (!cal.checkAllSet()) {
!             fail(cal.getMessage());
          }
  
!         System.out.println("Set date to 2003/10/31 after the instantiation:");
          cal.set(2003, OCTOBER, 31);
          // let cal calculate the time
          cal.getTime();
          // At this point, all fields have to be recalculated and
          // happen to have the set-state from the instantiation. The
          // three fields should have "externally set" and the rest of
          // the fields have "computed". But we can't distinguish them
          // outside the package.
          if (!cal.checkAllSet()) {
!             fail(cal.getMessage());
          }
          // Make sure that the correct date was produced.
          if (!cal.checkInternalDate(2003, OCTOBER, 31, FRIDAY)) {
!             fail(cal.getMessage());
          }
  
!         System.out.println("Change to Monday of the week, which is 2003/10/27:");
          cal.set(DAY_OF_WEEK, MONDAY);
          cal.getTime();
          if (!cal.checkDate(2003, OCTOBER, 27)) {
!             fail(cal.getMessage());
          }
  
          // The same operation didn't work after calling clear() before
          // 1.5 because the set-state was just depends on its previous
          // operations. After the instantiation, all the fields are set
          // to "computed". But after calling clear(), the state becomes
          // "unset".
!         System.out.println("Set to 2003/10/31 after clear():");
          cal.clear();
          cal.set(2003, OCTOBER, 31);
          cal.getTime();
          cal.set(DAY_OF_WEEK, MONDAY);
          if (!cal.checkDate(2003, OCTOBER, 27, MONDAY)) {
!             fail(cal.getMessage());
          }
  
!         System.out.println("Set to 2003/10/31 after clear(), then to the 51st week of year (12/19):");
          cal.clear();
          cal.set(2003, OCTOBER, 31);
          cal.getTime();
          cal.set(WEEK_OF_YEAR, 51);
          if (!cal.checkFieldValue(WEEK_OF_YEAR, 51)) {
!             fail(cal.getMessage());
          }
          if (!cal.checkDate(2003, DECEMBER, 19, FRIDAY)) {
!             fail(cal.getMessage());
          }
  
!         System.out.println("Set to 2003/10 Mon of 4th week (10/20: 43rd week of year, 293rd day):");
          cal.clear();
          cal.set(YEAR, 2003);
          cal.set(MONTH, OCTOBER);
          cal.set(DAY_OF_WEEK, MONDAY);
          cal.set(WEEK_OF_MONTH, 4);
          cal.getTime();
          if (!cal.checkFieldValue(DAY_OF_MONTH, 20)) {
!             fail(cal.getMessage());
          }
          if (!cal.checkFieldValue(DAY_OF_YEAR, 293)) {
!             fail(cal.getMessage());
          }
          if (!cal.checkFieldValue(WEEK_OF_YEAR, 43)) {
!             fail(cal.getMessage());
          }
  
!         System.out.println("Set to 2003/10 Mon of 43rd week of year (10/20: 4th week of month, 293rd day):");
          cal.clear();
          cal.set(YEAR, 2003);
          cal.set(DAY_OF_WEEK, MONDAY);
          cal.set(WEEK_OF_YEAR, 43);
          cal.getTime();
          if (!cal.checkDate(2003, OCTOBER, 20, MONDAY)) {
!             fail(cal.getMessage());
          }
          if (!cal.checkFieldValue(WEEK_OF_MONTH, 4)) {
!             fail(cal.getMessage());
          }
          if (!cal.checkFieldValue(DAY_OF_YEAR, 293)) {
!             fail(cal.getMessage());
          }
  
!         System.out.println("Set day of week to SUNDAY and date to 2003/10/31. "
                  + "Then, getTime and set week of year to 43.");
  
          @SuppressWarnings("deprecation")
          Date d = new Date(2003 - 1900, OCTOBER, 31);
          cal.setTime(d);

*** 159,19 ***
          // DAY_OF_MONTH. The other calendar fields must be normalized
          // with the selected date.
          cal.getTime();
          cal.set(WEEK_OF_YEAR, 43);
          if (!cal.checkDate(2003, OCTOBER, 24, FRIDAY)) {
!             errln(cal.getMessage());
          }
      }
  
      /*
       * 4916815: REGRESSION: Problem with java.util.Calendar VM 1.4.2-b28
       */
      public void Test4916815() {
!         logln("Set date to 2003/9/26 (Fri). Roll to Aug and back to Sep. "
                  + "Set dayofweek to Sunday which should be 2003/9/21.");
          Koyomi cal = new Koyomi();
          cal.clear();
          // 2003/9/26 (Fri)
          cal.set(2003, SEPTEMBER, 26);
--- 156,20 ---
          // DAY_OF_MONTH. The other calendar fields must be normalized
          // with the selected date.
          cal.getTime();
          cal.set(WEEK_OF_YEAR, 43);
          if (!cal.checkDate(2003, OCTOBER, 24, FRIDAY)) {
!             fail(cal.getMessage());
          }
      }
  
      /*
       * 4916815: REGRESSION: Problem with java.util.Calendar VM 1.4.2-b28
       */
+     @Test
      public void Test4916815() {
!         System.out.println("Set date to 2003/9/26 (Fri). Roll to Aug and back to Sep. "
                  + "Set dayofweek to Sunday which should be 2003/9/21.");
          Koyomi cal = new Koyomi();
          cal.clear();
          // 2003/9/26 (Fri)
          cal.set(2003, SEPTEMBER, 26);

*** 181,17 ***
          Koyomi cal2 = (Koyomi) cal.clone();
          cal2.getTime();
          // Sunday of the week should be 2003/9/21.
          cal2.set(DAY_OF_WEEK, SUNDAY);
          if (!cal2.checkDate(2003, SEPTEMBER, 21, SUNDAY)) {
!             errln(cal2.getMessage());
          }
      }
  
      /*
       * 4867075: GregorianCalendar get() calls complete() internally, should getTime() too?
       */
      public void Test4867075() {
          Koyomi cal = new Koyomi(Locale.US);
          cal.clear();
          cal.set(YEAR, 2004);
          cal.set(WEEK_OF_YEAR, 1);
--- 179,18 ---
          Koyomi cal2 = (Koyomi) cal.clone();
          cal2.getTime();
          // Sunday of the week should be 2003/9/21.
          cal2.set(DAY_OF_WEEK, SUNDAY);
          if (!cal2.checkDate(2003, SEPTEMBER, 21, SUNDAY)) {
!             fail(cal2.getMessage());
          }
      }
  
      /*
       * 4867075: GregorianCalendar get() calls complete() internally, should getTime() too?
       */
+     @Test
      public void Test4867075() {
          Koyomi cal = new Koyomi(Locale.US);
          cal.clear();
          cal.set(YEAR, 2004);
          cal.set(WEEK_OF_YEAR, 1);

*** 207,11 ***
      private void checkDate(Koyomi cal, int dayOfWeek,
              int expectedYear, int expectedMonth, int expectedDayOfMonth) {
          cal.set(DAY_OF_WEEK, dayOfWeek);
          cal.getTime();
          if (!cal.checkInternalDate(expectedYear, expectedMonth, expectedDayOfMonth, dayOfWeek)) {
!             errln(cal.getMessage());
          }
      }
  
      static String toHexString(int x) {
          return Integer.toHexString(x);
--- 206,11 ---
      private void checkDate(Koyomi cal, int dayOfWeek,
              int expectedYear, int expectedMonth, int expectedDayOfMonth) {
          cal.set(DAY_OF_WEEK, dayOfWeek);
          cal.getTime();
          if (!cal.checkInternalDate(expectedYear, expectedMonth, expectedDayOfMonth, dayOfWeek)) {
!             fail(cal.getMessage());
          }
      }
  
      static String toHexString(int x) {
          return Integer.toHexString(x);
< prev index next >