b859da9c54
Reviewed-by: naoto
688 lines
32 KiB
Java
688 lines
32 KiB
Java
/*
|
|
* 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");
|
|
}
|
|
}
|
|
}
|