/* * Copyright (c) 2001, 2016, 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 main bug4409072 */ import java.util.*; import static java.util.Calendar.*; public class bug4409072 extends IntlTest { public static void main(String[] args) throws Exception { new bug4409072().run(args); } /* Confirm some public methods' behavior in Calendar. * (e.g. add(), roll(), set()) */ public void Test4409072() { Locale locale = Locale.getDefault(); if (!TestUtils.usesGregorianCalendar(locale)) { logln("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; errln("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; errln("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; errln("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; errln("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; errln("Failed : set(WEEK_OF_YEAR=1)" + " got " + (month+1)+"/"+date+"/"+year + ", expected " + (m+1)+"/"+d+"/"+y + ", MinFirstDOW=" + minDow + ", FirstDOW=" + dow); } } } } if (noerror) { logln("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; errln("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) { errln("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)) { errln("Failed : add(-1)" + " got " + (month+1)+"/"+date+"/"+year + ", expected 11/16/2005" + ", MinFirstDOW=" + minDow + ", FirstDOW=" + dow); } } } if (noerror) { logln("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; errln("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; errln("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; errln("Failed : roll(WEEK_OF_YEAR-1)" + " got " + (month+1)+"/"+date+"/"+year + ", expected " + (m+1)+"/"+d+"/"+y + ", MinFirstDOW=" + minDow + ", FirstDOW=" + dow); } } } if (noerror) { logln("Passed : roll() test"); } } }