blob: af5ef02c34976334ef802828d6f09f766e2d6620 [file] [log] [blame]
/*
* 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");
}
}
}