| /* | |
| * Copyright (c) 2001, 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. | |
| * | |
| * 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 4409072 | |
| * @summary tests for set(), add(), and roll() with various week parameters. | |
| * @library /java/text/testlib | |
| * @run junit bug4409072 | |
| */ | |
| import java.util.*; | |
| import static java.util.Calendar.*; | |
| import org.junit.jupiter.api.Test; | |
| import static org.junit.jupiter.api.Assertions.fail; | |
| public class bug4409072 { | |
| /* Confirm some public methods' behavior in Calendar. | |
| * (e.g. add(), roll(), set()) | |
| */ | |
| @Test | |
| public void Test4409072() { | |
| Locale locale = Locale.getDefault(); | |
| if (!TestUtils.usesGregorianCalendar(locale)) { | |
| System.out.println("Skipping this test because locale is " + locale); | |
| return; | |
| } | |
| Locale savedLocale = Locale.getDefault(); | |
| TimeZone savedTZ = TimeZone.getDefault(); | |
| try { | |
| TimeZone.setDefault(TimeZone.getTimeZone("GMT")); | |
| testSet(); | |
| testAdd(); | |
| testRoll(); | |
| } finally { | |
| TimeZone.setDefault(savedTZ); | |
| Locale.setDefault(savedLocale); | |
| } | |
| } | |
| /* | |
| * Golden data for set() test | |
| */ | |
| static final int[][][] resultWOMForSetTest = { | |
| { /* For year1998 */ | |
| /* Min = 1 2 3 4 5 6 7 */ | |
| /* Sun */ {11, 4}, {11, 4}, {11, 4}, {11, 4}, {11, 4}, {11,11}, {11,11}, | |
| /* Mon */ {11, 4}, {11, 4}, {11, 4}, {11, 4}, {11, 4}, {11, 4}, {11,11}, | |
| /* Tue */ {11, 4}, {11, 4}, {11, 4}, {11, 4}, {11, 4}, {11, 4}, {11, 4}, | |
| /* Wed */ {10,27}, {11, 4}, {11, 4}, {11, 4}, {11, 4}, {11, 4}, {11, 4}, | |
| /* Thu */ {10,27}, {10,27}, {11, 4}, {11, 4}, {11, 4}, {11, 4}, {11, 4}, | |
| /* Fri */ {10,27}, {10,27}, {10,27}, {11, 4}, {11, 4}, {11, 4}, {11, 4}, | |
| /* Sat */ {11, 4}, {11, 4}, {11, 4}, {11, 4}, {11,11}, {11,11}, {11,11}, | |
| }, | |
| { /* For year1999 */ | |
| /* Min = 1 2 3 4 5 6 7 */ | |
| /* Sun */ {11, 3}, {11, 3}, {11, 3}, {11, 3}, {11,10}, {11,10}, {11,10}, | |
| /* Mon */ {11, 3}, {11, 3}, {11, 3}, {11, 3}, {11, 3}, {11,10}, {11,10}, | |
| /* Tue */ {11, 3}, {11, 3}, {11, 3}, {11, 3}, {11, 3}, {11, 3}, {11,10}, | |
| /* Wed */ {11, 3}, {11, 3}, {11, 3}, {11, 3}, {11, 3}, {11, 3}, {11, 3}, | |
| /* Thu */ {10,26}, {11, 3}, {11, 3}, {11, 3}, {11, 3}, {11, 3}, {11, 3}, | |
| /* Fri */ {10,26}, {10,26}, {11, 3}, {11, 3}, {11, 3}, {11, 3}, {11, 3}, | |
| /* Sat */ {11, 3}, {11, 3}, {11, 3}, {11,10}, {11,10}, {11,10}, {11,10}, | |
| }, | |
| { /* For year2000 */ | |
| /* Min = 1 2 3 4 5 6 7 */ | |
| /* Sun */ {11, 1}, {11, 1}, {11, 8}, {11, 8}, {11, 8}, {11, 8}, {11, 8}, | |
| /* Mon */ {11, 1}, {11, 1}, {11, 1}, {11, 8}, {11, 8}, {11, 8}, {11, 8}, | |
| /* Tue */ {11, 1}, {11, 1}, {11, 1}, {11, 1}, {11, 8}, {11, 8}, {11, 8}, | |
| /* Wed */ {11, 1}, {11, 1}, {11, 1}, {11, 1}, {11, 1}, {11, 8}, {11, 8}, | |
| /* Thu */ {11, 1}, {11, 1}, {11, 1}, {11, 1}, {11, 1}, {11, 1}, {11, 8}, | |
| /* Fri */ {11, 1}, {11, 1}, {11, 1}, {11, 1}, {11, 1}, {11, 1}, {11, 1}, | |
| /* Sat */ {11, 1}, {11, 8}, {11, 8}, {11, 8}, {11, 8}, {11, 8}, {11, 8}, | |
| }, | |
| { /* For year2001 */ | |
| /* Min = 1 2 3 4 5 6 7 */ | |
| /* Sun */ {10,30}, {11, 7}, {11, 7}, {11, 7}, {11, 7}, {11, 7}, {11, 7}, | |
| /* Mon */ {10,30}, {10,30}, {11, 7}, {11, 7}, {11, 7}, {11, 7}, {11, 7}, | |
| /* Tue */ {10,30}, {10,30}, {10,30}, {11, 7}, {11, 7}, {11, 7}, {11, 7}, | |
| /* Wed */ {10,30}, {10,30}, {10,30}, {10,30}, {11, 7}, {11, 7}, {11, 7}, | |
| /* Thu */ {10,30}, {10,30}, {10,30}, {10,30}, {10,30}, {11, 7}, {11, 7}, | |
| /* Fri */ {10,30}, {10,30}, {10,30}, {10,30}, {10,30}, {10,30}, {11, 7}, | |
| /* Sat */ {11, 7}, {11, 7}, {11, 7}, {11, 7}, {11, 7}, {11, 7}, {11, 7}, | |
| }, | |
| { /* For year2002 */ | |
| /* Min = 1 2 3 4 5 6 7 */ | |
| /* Sun */ {11, 6}, {11, 6}, {11, 6}, {11, 6}, {11, 6}, {11, 6}, {11, 6}, | |
| /* Mon */ {10,29}, {11, 6}, {11, 6}, {11, 6}, {11, 6}, {11, 6}, {11, 6}, | |
| /* Tue */ {10,29}, {10,29}, {11, 6}, {11, 6}, {11, 6}, {11, 6}, {11, 6}, | |
| /* Wed */ {10,29}, {10,29}, {10,29}, {11, 6}, {11, 6}, {11, 6}, {11, 6}, | |
| /* Thu */ {10,29}, {10,29}, {10,29}, {10,29}, {11, 6}, {11, 6}, {11, 6}, | |
| /* Fri */ {10,29}, {10,29}, {10,29}, {10,29}, {10,29}, {11, 6}, {11, 6}, | |
| /* Sat */ {11, 6}, {11, 6}, {11, 6}, {11, 6}, {11, 6}, {11, 6}, {11,13}, | |
| }, | |
| { /* For year2003 */ | |
| /* Min = 1 2 3 4 5 6 7 */ | |
| /* Sun */ {11, 5}, {11, 5}, {11, 5}, {11, 5}, {11, 5}, {11, 5}, {11,12}, | |
| /* Mon */ {11, 5}, {11, 5}, {11, 5}, {11, 5}, {11, 5}, {11, 5}, {11, 5}, | |
| /* Tue */ {10,28}, {11, 5}, {11, 5}, {11, 5}, {11, 5}, {11, 5}, {11, 5}, | |
| /* Wed */ {10,28}, {10,28}, {11, 5}, {11, 5}, {11, 5}, {11, 5}, {11, 5}, | |
| /* Thu */ {10,28}, {10,28}, {10,28}, {11, 5}, {11, 5}, {11, 5}, {11, 5}, | |
| /* Fri */ {10,28}, {10,28}, {10,28}, {10,28}, {11, 5}, {11, 5}, {11, 5}, | |
| /* Sat */ {11, 5}, {11, 5}, {11, 5}, {11, 5}, {11, 5}, {11,12}, {11,12}, | |
| }, | |
| { /* For year2004 */ | |
| /* Min = 1 2 3 4 5 6 7 */ | |
| /* Sun */ {11, 3}, {11, 3}, {11, 3}, {11, 3}, {11,10}, {11,10}, {11,10}, | |
| /* Mon */ {11, 3}, {11, 3}, {11, 3}, {11, 3}, {11, 3}, {11,10}, {11,10}, | |
| /* Tue */ {11, 3}, {11, 3}, {11, 3}, {11, 3}, {11, 3}, {11, 3}, {11,10}, | |
| /* Wed */ {11, 3}, {11, 3}, {11, 3}, {11, 3}, {11, 3}, {11, 3}, {11, 3}, | |
| /* Thu */ {10,26}, {11, 3}, {11, 3}, {11, 3}, {11, 3}, {11, 3}, {11, 3}, | |
| /* Fri */ {10,26}, {10,26}, {11, 3}, {11, 3}, {11, 3}, {11, 3}, {11, 3}, | |
| /* Sat */ {11, 3}, {11, 3}, {11, 3}, {11,10}, {11,10}, {11,10}, {11,10}, | |
| }, | |
| { /* For year2005 */ | |
| /* Min = 1 2 3 4 5 6 7 */ | |
| /* Sun */ {11, 2}, {11, 2}, {11, 2}, {11, 9}, {11, 9}, {11, 9}, {11, 9}, | |
| /* Mon */ {11, 2}, {11, 2}, {11, 2}, {11, 2}, {11, 9}, {11, 9}, {11, 9}, | |
| /* Tue */ {11, 2}, {11, 2}, {11, 2}, {11, 2}, {11, 2}, {11, 9}, {11, 9}, | |
| /* Wed */ {11, 2}, {11, 2}, {11, 2}, {11, 2}, {11, 2}, {11, 2}, {11, 9}, | |
| /* Thu */ {11, 2}, {11, 2}, {11, 2}, {11, 2}, {11, 2}, {11, 2}, {11, 2}, | |
| /* Fri */ {10,25}, {11, 2}, {11, 2}, {11, 2}, {11, 2}, {11, 2}, {11, 2}, | |
| /* Sat */ {11, 2}, {11, 2}, {11, 9}, {11, 9}, {11, 9}, {11, 9}, {11, 9}, | |
| }, | |
| { /* For year2006 */ | |
| /* Min = 1 2 3 4 5 6 7 */ | |
| /* Sun */ {11, 1}, {11, 1}, {11, 8}, {11, 8}, {11, 8}, {11, 8}, {11, 8}, | |
| /* Mon */ {11, 1}, {11, 1}, {11, 1}, {11, 8}, {11, 8}, {11, 8}, {11, 8}, | |
| /* Tue */ {11, 1}, {11, 1}, {11, 1}, {11, 1}, {11, 8}, {11, 8}, {11, 8}, | |
| /* Wed */ {11, 1}, {11, 1}, {11, 1}, {11, 1}, {11, 1}, {11, 8}, {11, 8}, | |
| /* Thu */ {11, 1}, {11, 1}, {11, 1}, {11, 1}, {11, 1}, {11, 1}, {11, 8}, | |
| /* Fri */ {11, 1}, {11, 1}, {11, 1}, {11, 1}, {11, 1}, {11, 1}, {11, 1}, | |
| /* Sat */ {11, 1}, {11, 8}, {11, 8}, {11, 8}, {11, 8}, {11, 8}, {11, 8}, | |
| }, | |
| }; | |
| static final int[][][] resultWOYForSetTest1 = { | |
| { /* For year1998 */ | |
| /* FirstDayOfWeek = Sunday */ | |
| {1998, 0, 2}, {1998, 0, 2}, {1998, 0, 2}, {1998, 0, 9}, | |
| {1998, 0, 9}, {1998, 0, 9}, {1998, 0, 9}, | |
| /* FirstDayOfWeek = Monday */ | |
| {1998, 0, 2}, {1998, 0, 2}, {1998, 0, 2}, {1998, 0, 2}, | |
| {1998, 0, 9}, {1998, 0, 9}, {1998, 0, 9}, | |
| /* FirstDayOfWeek = Tuesday */ | |
| {1998, 0, 2}, {1998, 0, 2}, {1998, 0, 2}, {1998, 0, 2}, | |
| {1998, 0, 2}, {1998, 0, 9}, {1998, 0, 9}, | |
| /* FirstDayOfWeek = Wednesday */ | |
| {1998, 0, 2}, {1998, 0, 2}, {1998, 0, 2}, {1998, 0, 2}, | |
| {1998, 0, 2}, {1998, 0, 2}, {1998, 0, 9}, | |
| /* FirstDayOfWeek = Thursday */ | |
| {1998, 0, 2}, {1998, 0, 2}, {1998, 0, 2}, {1998, 0, 2}, | |
| {1998, 0, 2}, {1998, 0, 2}, {1998, 0, 2}, | |
| /* FirstDayOfWeek = Friday */ | |
| {1997,11,26}, {1998, 0, 2}, {1998, 0, 2}, {1998, 0, 2}, | |
| {1998, 0, 2}, {1998, 0, 2}, {1998, 0, 2}, | |
| /* FirstDayOfWeek = Saturday */ | |
| {1998, 0, 2}, {1998, 0, 2}, {1998, 0, 9}, {1998, 0, 9}, | |
| {1998, 0, 9}, {1998, 0, 9}, {1998, 0, 9}, | |
| }, | |
| { /* For year1999 */ | |
| /* FirstDayOfWeek = Sunday */ | |
| {1999, 0, 1}, {1999, 0, 1}, {1999, 0, 8}, {1999, 0, 8}, | |
| {1999, 0, 8}, {1999, 0, 8}, {1999, 0, 8}, | |
| /* FirstDayOfWeek = Monday */ | |
| {1999, 0, 1}, {1999, 0, 1}, {1999, 0, 1}, {1999, 0, 8}, | |
| {1999, 0, 8}, {1999, 0, 8}, {1999, 0, 8}, | |
| /* FirstDayOfWeek = Tuesday */ | |
| {1999, 0, 1}, {1999, 0, 1}, {1999, 0, 1}, {1999, 0, 1}, | |
| {1999, 0, 8}, {1999, 0, 8}, {1999, 0, 8}, | |
| /* FirstDayOfWeek = Wednesday */ | |
| {1999, 0, 1}, {1999, 0, 1}, {1999, 0, 1}, {1999, 0, 1}, | |
| {1999, 0, 1}, {1999, 0, 8}, {1999, 0, 8}, | |
| /* FirstDayOfWeek = Thursday */ | |
| {1999, 0, 1}, {1999, 0, 1}, {1999, 0, 1}, {1999, 0, 1}, | |
| {1999, 0, 1}, {1999, 0, 1}, {1999, 0, 8}, | |
| /* FirstDayOfWeek = Friday */ | |
| {1999, 0, 1}, {1999, 0, 1}, {1999, 0, 1}, {1999, 0, 1}, | |
| {1999, 0, 1}, {1999, 0, 1}, {1999, 0, 1}, | |
| /* FirstDayOfWeek = Saturday */ | |
| {1999, 0, 1}, {1999, 0, 8}, {1999, 0, 8}, {1999, 0, 8}, | |
| {1999, 0, 8}, {1999, 0, 8}, {1999, 0, 8}, | |
| }, | |
| { /* For year2000 */ | |
| /* FirstDayOfWeek = Sunday */ | |
| {1999,11,31}, {2000, 0, 7}, {2000, 0, 7}, {2000, 0, 7}, | |
| {2000, 0, 7}, {2000, 0, 7}, {2000, 0, 7}, | |
| /* FirstDayOfWeek = Monday */ | |
| {1999,11,31}, {1999,11,31}, {2000, 0, 7}, {2000, 0, 7}, | |
| {2000, 0, 7}, {2000, 0, 7}, {2000, 0, 7}, | |
| /* FirstDayOfWeek = Tuesday */ | |
| {1999,11,31}, {1999,11,31}, {1999,11,31}, {2000, 0, 7}, | |
| {2000, 0, 7}, {2000, 0, 7}, {2000, 0, 7}, | |
| /* FirstDayOfWeek = Wednesday */ | |
| {1999,11,31}, {1999,11,31}, {1999,11,31}, {1999,11,31}, | |
| {2000, 0, 7}, {2000, 0, 7}, {2000, 0, 7}, | |
| /* FirstDayOfWeek = Thursday */ | |
| {1999,11,31}, {1999,11,31}, {1999,11,31}, {1999,11,31}, | |
| {1999,11,31}, {2000, 0, 7}, {2000, 0, 7}, | |
| /* FirstDayOfWeek = Friday */ | |
| {1999,11,31}, {1999,11,31}, {1999,11,31}, {1999,11,31}, | |
| {1999,11,31}, {1999,11,31}, {2000, 0, 7}, | |
| /* FirstDayOfWeek = Saturday */ | |
| {2000, 0, 7}, {2000, 0, 7}, {2000, 0, 7}, {2000, 0, 7}, | |
| {2000, 0, 7}, {2000, 0, 7}, {2000, 0, 7}, | |
| }, | |
| { /* For year2001 */ | |
| /* FirstDayOfWeek = Sunday */ | |
| {2001, 0, 5}, {2001, 0, 5}, {2001, 0, 5}, {2001, 0, 5}, | |
| {2001, 0, 5}, {2001, 0, 5}, {2001, 0,12}, | |
| /* FirstDayOfWeek = Monday */ | |
| {2001, 0, 5}, {2001, 0, 5}, {2001, 0, 5}, {2001, 0, 5}, | |
| {2001, 0, 5}, {2001, 0, 5}, {2001, 0, 5}, | |
| /* FirstDayOfWeek = Tuesday */ | |
| {2000,11,29}, {2001, 0, 5}, {2001, 0, 5}, {2001, 0, 5}, | |
| {2001, 0, 5}, {2001, 0, 5}, {2001, 0, 5}, | |
| /* FirstDayOfWeek = Wednesday */ | |
| {2000,11,29}, {2000,11,29}, {2001, 0, 5}, {2001, 0, 5}, | |
| {2001, 0, 5}, {2001, 0, 5}, {2001, 0, 5}, | |
| /* FirstDayOfWeek = Thursday */ | |
| {2000,11,29}, {2000,11,29}, {2000,11,29}, {2001, 0, 5}, | |
| {2001, 0, 5}, {2001, 0, 5}, {2001, 0, 5}, | |
| /* FirstDayOfWeek = Friday */ | |
| {2000,11,29}, {2000,11,29}, {2000,11,29}, {2000,11,29}, | |
| {2001, 0, 5}, {2001, 0, 5}, {2001, 0, 5}, | |
| /* FirstDayOfWeek = Saturday */ | |
| {2001, 0, 5}, {2001, 0, 5}, {2001, 0, 5}, {2001, 0, 5}, | |
| {2001, 0, 5}, {2001, 0,12}, {2001, 0,12}, | |
| }, | |
| { /* For year2002 */ | |
| /* FirstDayOfWeek = Sunday */ | |
| {2002, 0, 4}, {2002, 0, 4}, {2002, 0, 4}, {2002, 0, 4}, | |
| {2002, 0, 4}, {2002, 0,11}, {2002, 0,11}, | |
| /* FirstDayOfWeek = Monday */ | |
| {2002, 0, 4}, {2002, 0, 4}, {2002, 0, 4}, {2002, 0, 4}, | |
| {2002, 0, 4}, {2002, 0, 4}, {2002, 0,11}, | |
| /* FirstDayOfWeek = Tuesday */ | |
| {2002, 0, 4}, {2002, 0, 4}, {2002, 0, 4}, {2002, 0, 4}, | |
| {2002, 0, 4}, {2002, 0, 4}, {2002, 0, 4}, | |
| /* FirstDayOfWeek = Wednesday */ | |
| {2001,11,28}, {2002, 0, 4}, {2002, 0, 4}, {2002, 0, 4}, | |
| {2002, 0, 4}, {2002, 0, 4}, {2002, 0, 4}, | |
| /* FirstDayOfWeek = Thursday */ | |
| {2001,11,28}, {2001,11,28}, {2002, 0, 4}, {2002, 0, 4}, | |
| {2002, 0, 4}, {2002, 0, 4}, {2002, 0, 4}, | |
| /* FirstDayOfWeek = Friday */ | |
| {2001,11,28}, {2001,11,28}, {2001,11,28}, {2002, 0, 4}, | |
| {2002, 0, 4}, {2002, 0, 4}, {2002, 0, 4}, | |
| /* FirstDayOfWeek = Saturday */ | |
| {2002, 0, 4}, {2002, 0, 4}, {2002, 0, 4}, {2002, 0, 4}, | |
| {2002, 0,11}, {2002, 0,11}, {2002, 0,11}, | |
| }, | |
| { /* For year2003 */ | |
| /* FirstDayOfWeek = Sunday */ | |
| {2003, 0, 3}, {2003, 0, 3}, {2003, 0, 3}, {2003, 0, 3}, | |
| {2003, 0,10}, {2003, 0,10}, {2003, 0,10}, | |
| /* FirstDayOfWeek = Monday */ | |
| {2003, 0, 3}, {2003, 0, 3}, {2003, 0, 3}, {2003, 0, 3}, | |
| {2003, 0, 3}, {2003, 0,10}, {2003, 0,10}, | |
| /* FirstDayOfWeek = Tuesday */ | |
| {2003, 0, 3}, {2003, 0, 3}, {2003, 0, 3}, {2003, 0, 3}, | |
| {2003, 0, 3}, {2003, 0, 3}, {2003, 0,10}, | |
| /* FirstDayOfWeek = Wednesday */ | |
| {2003, 0, 3}, {2003, 0, 3}, {2003, 0, 3}, {2003, 0, 3}, | |
| {2003, 0, 3}, {2003, 0, 3}, {2003, 0, 3}, | |
| /* FirstDayOfWeek = Thursday */ | |
| {2002,11,27}, {2003, 0, 3}, {2003, 0, 3}, {2003, 0, 3}, | |
| {2003, 0, 3}, {2003, 0, 3}, {2003, 0, 3}, | |
| /* FirstDayOfWeek = Friday */ | |
| {2002,11,27}, {2002,11,27}, {2003, 0, 3}, {2003, 0, 3}, | |
| {2003, 0, 3}, {2003, 0, 3}, {2003, 0, 3}, | |
| /* FirstDayOfWeek = Saturday */ | |
| {2003, 0, 3}, {2003, 0, 3}, {2003, 0, 3}, {2003, 0,10}, | |
| {2003, 0,10}, {2003, 0,10}, {2003, 0,10}, | |
| }, | |
| { /* For year2004 */ | |
| /* FirstDayOfWeek = Sunday */ | |
| {2004, 0, 2}, {2004, 0, 2}, {2004, 0, 2}, {2004, 0, 9}, | |
| {2004, 0, 9}, {2004, 0, 9}, {2004, 0, 9}, | |
| /* FirstDayOfWeek = Monday */ | |
| {2004, 0, 2}, {2004, 0, 2}, {2004, 0, 2}, {2004, 0, 2}, | |
| {2004, 0, 9}, {2004, 0, 9}, {2004, 0, 9}, | |
| /* FirstDayOfWeek = Tuesday */ | |
| {2004, 0, 2}, {2004, 0, 2}, {2004, 0, 2}, {2004, 0, 2}, | |
| {2004, 0, 2}, {2004, 0, 9}, {2004, 0, 9}, | |
| /* FirstDayOfWeek = Wednesday */ | |
| {2004, 0, 2}, {2004, 0, 2}, {2004, 0, 2}, {2004, 0, 2}, | |
| {2004, 0, 2}, {2004, 0, 2}, {2004, 0, 9}, | |
| /* FirstDayOfWeek = Thursday */ | |
| {2004, 0, 2}, {2004, 0, 2}, {2004, 0, 2}, {2004, 0, 2}, | |
| {2004, 0, 2}, {2004, 0, 2}, {2004, 0, 2}, | |
| /* FirstDayOfWeek = Friday */ | |
| {2003,11,26}, {2004, 0, 2}, {2004, 0, 2}, {2004, 0, 2}, | |
| {2004, 0, 2}, {2004, 0, 2}, {2004, 0, 2}, | |
| /* FirstDayOfWeek = Saturday */ | |
| {2004, 0, 2}, {2004, 0, 2}, {2004, 0, 9}, {2004, 0, 9}, | |
| {2004, 0, 9}, {2004, 0, 9}, {2004, 0, 9}, | |
| }, | |
| { /* For year2005 */ | |
| /* FirstDayOfWeek = Sunday */ | |
| {2004,11,31}, {2005, 0, 7}, {2005, 0, 7}, {2005, 0, 7}, | |
| {2005, 0, 7}, {2005, 0, 7}, {2005, 0, 7}, | |
| /* FirstDayOfWeek = Monday */ | |
| {2004,11,31}, {2004,11,31}, {2005, 0, 7}, {2005, 0, 7}, | |
| {2005, 0, 7}, {2005, 0, 7}, {2005, 0, 7}, | |
| /* FirstDayOfWeek = Tuesday */ | |
| {2004,11,31}, {2004,11,31}, {2004,11,31}, {2005, 0, 7}, | |
| {2005, 0, 7}, {2005, 0, 7}, {2005, 0, 7}, | |
| /* FirstDayOfWeek = Wednesday */ | |
| {2004,11,31}, {2004,11,31}, {2004,11,31}, {2004,11,31}, | |
| {2005, 0, 7}, {2005, 0, 7}, {2005, 0, 7}, | |
| /* FirstDayOfWeek = Thursday */ | |
| {2004,11,31}, {2004,11,31}, {2004,11,31}, {2004,11,31}, | |
| {2004,11,31}, {2005, 0, 7}, {2005, 0, 7}, | |
| /* FirstDayOfWeek = Friday */ | |
| {2004,11,31}, {2004,11,31}, {2004,11,31}, {2004,11,31}, | |
| {2004,11,31}, {2004,11,31}, {2005, 0, 7}, | |
| /* FirstDayOfWeek = Saturday */ | |
| {2005, 0, 7}, {2005, 0, 7}, {2005, 0, 7}, {2005, 0, 7}, | |
| {2005, 0, 7}, {2005, 0, 7}, {2005, 0, 7}, | |
| }, | |
| { /* For year2006 */ | |
| /* FirstDayOfWeek = Sunday */ | |
| {2006, 0, 6}, {2006, 0, 6}, {2006, 0, 6}, {2006, 0, 6}, | |
| {2006, 0, 6}, {2006, 0, 6}, {2006, 0, 6}, | |
| /* FirstDayOfWeek = Monday */ | |
| {2005,11,30}, {2006, 0, 6}, {2006, 0, 6}, {2006, 0, 6}, | |
| {2006, 0, 6}, {2006, 0, 6}, {2006, 0, 6}, | |
| /* FirstDayOfWeek = Tuesday */ | |
| {2005,11,30}, {2005,11,30}, {2006, 0, 6}, {2006, 0, 6}, | |
| {2006, 0, 6}, {2006, 0, 6}, {2006, 0, 6}, | |
| /* FirstDayOfWeek = Wednesday */ | |
| {2005,11,30}, {2005,11,30}, {2005,11,30}, {2006, 0, 6}, | |
| {2006, 0, 6}, {2006, 0, 6}, {2006, 0, 6}, | |
| /* FirstDayOfWeek = Thursday */ | |
| {2005,11,30}, {2005,11,30}, {2005,11,30}, {2005,11,30}, | |
| {2006, 0, 6}, {2006, 0, 6}, {2006, 0, 6}, | |
| /* FirstDayOfWeek = Friday */ | |
| {2005,11,30}, {2005,11,30}, {2005,11,30}, {2005,11,30}, | |
| {2005,11,30}, {2006, 0, 6}, {2006, 0, 6}, | |
| /* FirstDayOfWeek = Saturday */ | |
| {2006, 0, 6}, {2006, 0, 6}, {2006, 0, 6}, {2006, 0, 6}, | |
| {2006, 0, 6}, {2006, 0, 6}, {2006, 0,13}, | |
| } | |
| }; | |
| static final int[][] resultWOYForSetTest2 = { | |
| /* Min = 1 2 3 4 5 6 7 */ | |
| /* Sun */ {4,25}, {5, 1}, {5, 1}, {5, 1}, {5, 1}, {5, 1}, {5, 1}, | |
| /* Mon */ {4,25}, {4,25}, {5, 1}, {5, 1}, {5, 1}, {5, 1}, {5, 1}, | |
| /* Tue */ {4,25}, {4,25}, {4,25}, {5, 1}, {5, 1}, {5, 1}, {5, 1}, | |
| /* Wed */ {4,25}, {4,25}, {4,25}, {4,25}, {5, 1}, {5, 1}, {5, 1}, | |
| /* Thu */ {5, 1}, {5, 1}, {5, 1}, {5, 1}, {5, 1}, {5, 8}, {5, 8}, | |
| /* Fri */ {5, 1}, {5, 1}, {5, 1}, {5, 1}, {5, 1}, {5, 1}, {5, 8}, | |
| /* Sat */ {5, 1}, {5, 1}, {5, 1}, {5, 1}, {5, 1}, {5, 1}, {5, 1}, | |
| }; | |
| /** | |
| * Test for set() | |
| */ | |
| void testSet() { | |
| boolean noerror = true; | |
| Calendar cal = Calendar.getInstance(); | |
| int sYear=1998; | |
| int eYear=2006; | |
| // Loop for FirstDayOfWeek: SUNDAY..SATURDAY | |
| for (int dow = SUNDAY; dow <= SATURDAY; dow++) { | |
| // Loop for MinimalDaysInFirstWeek: 1..7 | |
| for (int minDow = 1; minDow <= 7; minDow++) { | |
| int index = (dow-1)*7 + (minDow-1); | |
| cal.clear(); | |
| cal.setLenient(true); | |
| cal.setMinimalDaysInFirstWeek(minDow); | |
| cal.setFirstDayOfWeek(dow); | |
| cal.set(YEAR, 2005); | |
| cal.set(DAY_OF_WEEK, WEDNESDAY); | |
| cal.set(WEEK_OF_YEAR, 22); | |
| int y = 2005; | |
| int m = resultWOYForSetTest2[index][0]; | |
| int d = resultWOYForSetTest2[index][1]; | |
| int year = cal.get(YEAR); | |
| int month = cal.get(MONTH); | |
| int date = cal.get(DATE); | |
| if (cal.get(WEEK_OF_YEAR) != 22) { | |
| noerror = false; | |
| fail("Failed : set(WEEK_OF_YEAR=22)" + | |
| " *** get(WEEK_OF_YEAR=" + | |
| cal.get(WEEK_OF_YEAR) + ")" + | |
| ", got " + (month+1)+"/"+date+"/"+year + | |
| ", expected " + (m+1)+"/"+d+"/"+2005 + | |
| ", MinFirstDOW=" + minDow + | |
| ", FirstDOW=" + dow); | |
| } else if ((year != y) || (month != m) || (date != d)) { | |
| noerror = false; | |
| fail("Failed : set(WEEK_OF_YEAR=22)" + | |
| " got " + (month+1)+"/"+date+"/"+year + | |
| ", expected " + (m+1)+"/"+d+"/"+y + | |
| ", MinFirstDOW=" + minDow + | |
| ", FirstDOW=" + dow); | |
| } | |
| for (int targetYear = sYear; targetYear<= eYear; targetYear++) { | |
| cal.clear(); | |
| cal.setLenient(true); | |
| cal.setMinimalDaysInFirstWeek(minDow); | |
| cal.setFirstDayOfWeek(dow); | |
| cal.set(YEAR, targetYear); | |
| cal.set(DAY_OF_WEEK, FRIDAY); | |
| cal.set(MONTH, DECEMBER); | |
| cal.set(WEEK_OF_MONTH, 1); | |
| y = targetYear; | |
| m = resultWOMForSetTest[targetYear-sYear][index][0]; | |
| d = resultWOMForSetTest[targetYear-sYear][index][1]; | |
| year = cal.get(YEAR); | |
| month = cal.get(MONTH); | |
| date = cal.get(DATE); | |
| if ((year != y) || (month != m) || (date != d)) { | |
| noerror = false; | |
| fail("Failed : set(WEEK_OF_MONTH=1)" + | |
| " got " + (month+1)+"/"+date+"/"+year + | |
| ", expected " + (m+1)+"/"+d+"/"+y + | |
| ", MinFirstDOW=" + minDow + | |
| ", FirstDOW=" + dow); | |
| } | |
| cal.clear(); | |
| cal.setLenient(true); | |
| cal.setMinimalDaysInFirstWeek(minDow); | |
| cal.setFirstDayOfWeek(dow); | |
| cal.set(YEAR, targetYear); | |
| cal.set(DAY_OF_WEEK, FRIDAY); | |
| cal.set(WEEK_OF_YEAR, 1); | |
| y = resultWOYForSetTest1[targetYear-sYear][index][0]; | |
| m = resultWOYForSetTest1[targetYear-sYear][index][1]; | |
| d = resultWOYForSetTest1[targetYear-sYear][index][2]; | |
| year = cal.get(YEAR); | |
| month = cal.get(MONTH); | |
| date = cal.get(DATE); | |
| if (cal.get(WEEK_OF_YEAR) != 1) { | |
| noerror = false; | |
| fail("Failed : set(WEEK_OF_YEAR=1)" + | |
| " *** get(WEEK_OF_YEAR=" + | |
| cal.get(WEEK_OF_YEAR) + ")" + | |
| ", got " + (month+1)+"/"+date+"/"+year + | |
| ", expected " + (m+1)+"/"+d+"/"+y + | |
| ", MinFirstDOW=" + minDow + | |
| ", FirstDOW=" + dow); | |
| } else if ((year != y) || (month != m) || (date != d)) { | |
| noerror = false; | |
| fail("Failed : set(WEEK_OF_YEAR=1)" + | |
| " got " + (month+1)+"/"+date+"/"+year + | |
| ", expected " + (m+1)+"/"+d+"/"+y + | |
| ", MinFirstDOW=" + minDow + | |
| ", FirstDOW=" + dow); | |
| } | |
| } | |
| } | |
| } | |
| if (noerror) { | |
| System.out.println("Passed : set() test"); | |
| } | |
| } | |
| /** | |
| * Test for add() | |
| */ | |
| void testAdd() { | |
| boolean noerror = true; | |
| Calendar cal = Calendar.getInstance(); | |
| // Loop for FirstDayOfWeek: SUNDAY..SATURDAY | |
| for (int dow = SUNDAY; dow <= SATURDAY; dow++) { | |
| // Loop for MinimalDaysInFirstWeek: 1..7 | |
| for (int minDow = 1; minDow <= 7; minDow++) { | |
| int oldWOY, newWOY; | |
| cal.clear(); | |
| cal.setLenient(true); | |
| cal.setMinimalDaysInFirstWeek(minDow); | |
| cal.setFirstDayOfWeek(dow); | |
| cal.set(2005, DECEMBER, 7); | |
| oldWOY = cal.get(WEEK_OF_YEAR); | |
| for (int cnt = 0; cnt < 7; cnt++) { | |
| cal.add(WEEK_OF_YEAR, 1); | |
| } | |
| int year = cal.get(YEAR); | |
| int month = cal.get(MONTH); | |
| int date = cal.get(DATE); | |
| if ((year != 2006) || (month != 0) || (date != 25)) { | |
| noerror = false; | |
| fail("Failed : add(WEEK_OF_YEAR+1)" + | |
| " got " + (month+1)+"/"+date+"/"+year + | |
| ", expected 1/25/2006" + | |
| ", MinFirstDOW=" + minDow + | |
| ", FirstDOW=" + dow); | |
| } | |
| for (int cnt = 0; cnt < 10; cnt++) { | |
| cal.add(WEEK_OF_YEAR, -1); | |
| } | |
| newWOY = cal.get(WEEK_OF_YEAR); | |
| year = cal.get(YEAR); | |
| month = cal.get(MONTH); | |
| date = cal.get(DATE); | |
| if ((oldWOY - newWOY) != 3) { | |
| fail("Failed : add(WEEK_OF_YEAR-1)" + | |
| " got " + (month+1)+"/"+date+"/"+year + | |
| ", expected 11/16/2005" + | |
| ", MinFirstDOW=" + minDow + | |
| ", FirstDOW=" + dow + | |
| ", WEEK_OF_YEAR=" + newWOY + | |
| " should be " + (oldWOY-3)); | |
| } else if ((year != 2005) || (month != 10) || (date != 16)) { | |
| fail("Failed : add(-1)" + | |
| " got " + (month+1)+"/"+date+"/"+year + | |
| ", expected 11/16/2005" + | |
| ", MinFirstDOW=" + minDow + | |
| ", FirstDOW=" + dow); | |
| } | |
| } | |
| } | |
| if (noerror) { | |
| System.out.println("Passed : add() test"); | |
| } | |
| } | |
| /* | |
| * Golden data for roll() test | |
| */ | |
| static final int[] resultWOMForRollTest = { | |
| /* Min = 1 2 3 4 5 6 7 */ | |
| /* Sun */ 1, 1, 1, 26, 26, 26, 26, | |
| /* Mon */ 1, 1, 1, 1, 26, 26, 26, | |
| /* Tue */ 31, 31, 31, 31, 31, 24, 24, | |
| /* Wed */ 31, 31, 31, 31, 31, 31, 24, | |
| /* Thu */ 31, 31, 31, 31, 31, 31, 31, | |
| /* Fri */ 1, 31, 31, 31, 31, 31, 31, | |
| /* Sat */ 1, 1, 31, 31, 31, 31, 31, | |
| }; | |
| static final int[][] resultWOYForRollTest = { | |
| /* Min = 1 2 3 4 5 6 7 */ | |
| /* Sun */ {0,26}, {0,26}, {0,26}, {0,26}, {0,26}, {0,26}, {0,26}, | |
| /* Mon */ {1, 2}, {0,26}, {0,26}, {0,26}, {0,26}, {0,26}, {0,26}, | |
| /* Tue */ {1, 2}, {1, 2}, {0,26}, {0,26}, {0,26}, {0,26}, {0,26}, | |
| /* Wed */ {1, 2}, {1, 2}, {1, 2}, {0,26}, {0,26}, {0,26}, {0,26}, | |
| /* Thu */ {0,26}, {0,26}, {0,26}, {0,26}, {0,26}, {1, 2}, {1, 2}, | |
| /* Fri */ {0,26}, {0,26}, {0,26}, {0,26}, {0,26}, {0,26}, {1, 2}, | |
| /* Sat */ {0,26}, {0,26}, {0,26}, {0,26}, {0,26}, {0,26}, {0,26}, | |
| }; | |
| /** | |
| * Test for roll() | |
| */ | |
| void testRoll() { | |
| boolean noerror = true; | |
| Calendar cal = Calendar.getInstance(); | |
| // Loop for FirstDayOfWeek: SUNDAY..SATURDAY | |
| for (int dow = SUNDAY; dow <= SATURDAY; dow++) { | |
| // Loop for MinimalDaysInFirstWeek: 1..7 | |
| for (int minDow = 1; minDow <= 7; minDow++) { | |
| int oldWOY, newWOY; | |
| int index = (dow-1)*7 + (minDow-1); | |
| cal.clear(); | |
| cal.setLenient(true); | |
| cal.setMinimalDaysInFirstWeek(minDow); | |
| cal.setFirstDayOfWeek(dow); | |
| cal.set(2005, DECEMBER, 12); | |
| oldWOY = cal.get(WEEK_OF_YEAR); | |
| for (int cnt = 0; cnt < 2; cnt++) { | |
| cal.roll(WEEK_OF_MONTH, -1); | |
| } | |
| int y = 2005; | |
| int m = DECEMBER; | |
| int d = resultWOMForRollTest[index]; | |
| int year = cal.get(YEAR); | |
| int month = cal.get(MONTH); | |
| int date = cal.get(DATE); | |
| if ((year != y) || (month != m) || (date != d)) { | |
| noerror = false; | |
| fail("Failed : roll(WEEK_OF_MONTH-1)" + | |
| " got " + (month+1) + "/" + date + "/" + year + | |
| ", expected " + (m+1) + "/" + d + "/" + y + | |
| ", MinFirstDOW=" + minDow + | |
| ", FirstDOW=" + dow); | |
| } | |
| cal.clear(); | |
| cal.setLenient(true); | |
| cal.setMinimalDaysInFirstWeek(minDow); | |
| cal.setFirstDayOfWeek(dow); | |
| cal.set(2005, DECEMBER, 7); | |
| oldWOY = cal.get(WEEK_OF_YEAR); | |
| for (int cnt = 0; cnt < 7; cnt++) { | |
| cal.roll(WEEK_OF_YEAR, 1); | |
| } | |
| y = 2005; | |
| m = resultWOYForRollTest[index][0]; | |
| d = resultWOYForRollTest[index][1]; | |
| year = cal.get(YEAR); | |
| month = cal.get(MONTH); | |
| date = cal.get(DATE); | |
| if ((year != y) || (month != m) || (date != d)) { | |
| noerror = false; | |
| fail("Failed : roll(WEEK_OF_YEAR+1)" + | |
| " got " + (month+1) + "/" + date + "/" + year + | |
| ", expected " + (m+1) + "/" + d + "/" + y + | |
| ", MinFirstDOW=" + minDow + | |
| ", FirstDOW=" + dow); | |
| } | |
| for (int cnt = 0; cnt < 10; cnt++) { | |
| cal.roll(WEEK_OF_YEAR, -1); | |
| } | |
| newWOY = cal.get(WEEK_OF_YEAR); | |
| y = 2005; | |
| m = NOVEMBER; | |
| d = 16; | |
| year = cal.get(YEAR); | |
| month = cal.get(MONTH); | |
| date = cal.get(DATE); | |
| if ((year != y) || (month != m) || (date != d)) { | |
| noerror = false; | |
| fail("Failed : roll(WEEK_OF_YEAR-1)" + | |
| " got " + (month+1)+"/"+date+"/"+year + | |
| ", expected " + (m+1)+"/"+d+"/"+y + | |
| ", MinFirstDOW=" + minDow + | |
| ", FirstDOW=" + dow); | |
| } | |
| } | |
| } | |
| if (noerror) { | |
| System.out.println("Passed : roll() test"); | |
| } | |
| } | |
| } |