Path: blob/aarch64-shenandoah-jdk8u272-b10/jdk/test/java/util/Calendar/bug4409072.java
47182 views
/*1* Copyright (c) 2001, 2016, Oracle and/or its affiliates. All rights reserved.2* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.3*4* This code is free software; you can redistribute it and/or modify it5* under the terms of the GNU General Public License version 2 only, as6* published by the Free Software Foundation.7*8* This code is distributed in the hope that it will be useful, but WITHOUT9* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or10* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License11* version 2 for more details (a copy is included in the LICENSE file that12* accompanied this code).13*14* You should have received a copy of the GNU General Public License version15* 2 along with this work; if not, write to the Free Software Foundation,16* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.17*18* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA19* or visit www.oracle.com if you need additional information or have any20* questions.21*/2223/*24* @test25* @bug 440907226* @summary tests for set(), add(), and roll() with various week parameters.27* @library /java/text/testlib28*/2930import java.util.*;31import static java.util.Calendar.*;3233public class bug4409072 extends IntlTest {3435public static void main(String[] args) throws Exception {36new bug4409072().run(args);37}3839/* Confirm some public methods' behavior in Calendar.40* (e.g. add(), roll(), set())41*/42public void Test4409072() {43if (Locale.getDefault().equals(new Locale("th", "TH"))) {44return;45}4647Locale savedLocale = Locale.getDefault();48TimeZone savedTZ = TimeZone.getDefault();49try {50TimeZone.setDefault(TimeZone.getTimeZone("GMT"));51testSet();52testAdd();53testRoll();54} finally {55TimeZone.setDefault(savedTZ);56Locale.setDefault(savedLocale);57}58}5960/*61* Golden data for set() test62*/63static final int[][][] resultWOMForSetTest = {64{ /* For year1998 */65/* Min = 1 2 3 4 5 6 7 */66/* Sun */ {11, 4}, {11, 4}, {11, 4}, {11, 4}, {11, 4}, {11,11}, {11,11},67/* Mon */ {11, 4}, {11, 4}, {11, 4}, {11, 4}, {11, 4}, {11, 4}, {11,11},68/* Tue */ {11, 4}, {11, 4}, {11, 4}, {11, 4}, {11, 4}, {11, 4}, {11, 4},69/* Wed */ {10,27}, {11, 4}, {11, 4}, {11, 4}, {11, 4}, {11, 4}, {11, 4},70/* Thu */ {10,27}, {10,27}, {11, 4}, {11, 4}, {11, 4}, {11, 4}, {11, 4},71/* Fri */ {10,27}, {10,27}, {10,27}, {11, 4}, {11, 4}, {11, 4}, {11, 4},72/* Sat */ {11, 4}, {11, 4}, {11, 4}, {11, 4}, {11,11}, {11,11}, {11,11},73},74{ /* For year1999 */75/* Min = 1 2 3 4 5 6 7 */76/* Sun */ {11, 3}, {11, 3}, {11, 3}, {11, 3}, {11,10}, {11,10}, {11,10},77/* Mon */ {11, 3}, {11, 3}, {11, 3}, {11, 3}, {11, 3}, {11,10}, {11,10},78/* Tue */ {11, 3}, {11, 3}, {11, 3}, {11, 3}, {11, 3}, {11, 3}, {11,10},79/* Wed */ {11, 3}, {11, 3}, {11, 3}, {11, 3}, {11, 3}, {11, 3}, {11, 3},80/* Thu */ {10,26}, {11, 3}, {11, 3}, {11, 3}, {11, 3}, {11, 3}, {11, 3},81/* Fri */ {10,26}, {10,26}, {11, 3}, {11, 3}, {11, 3}, {11, 3}, {11, 3},82/* Sat */ {11, 3}, {11, 3}, {11, 3}, {11,10}, {11,10}, {11,10}, {11,10},83},84{ /* For year2000 */85/* Min = 1 2 3 4 5 6 7 */86/* Sun */ {11, 1}, {11, 1}, {11, 8}, {11, 8}, {11, 8}, {11, 8}, {11, 8},87/* Mon */ {11, 1}, {11, 1}, {11, 1}, {11, 8}, {11, 8}, {11, 8}, {11, 8},88/* Tue */ {11, 1}, {11, 1}, {11, 1}, {11, 1}, {11, 8}, {11, 8}, {11, 8},89/* Wed */ {11, 1}, {11, 1}, {11, 1}, {11, 1}, {11, 1}, {11, 8}, {11, 8},90/* Thu */ {11, 1}, {11, 1}, {11, 1}, {11, 1}, {11, 1}, {11, 1}, {11, 8},91/* Fri */ {11, 1}, {11, 1}, {11, 1}, {11, 1}, {11, 1}, {11, 1}, {11, 1},92/* Sat */ {11, 1}, {11, 8}, {11, 8}, {11, 8}, {11, 8}, {11, 8}, {11, 8},93},94{ /* For year2001 */95/* Min = 1 2 3 4 5 6 7 */96/* Sun */ {10,30}, {11, 7}, {11, 7}, {11, 7}, {11, 7}, {11, 7}, {11, 7},97/* Mon */ {10,30}, {10,30}, {11, 7}, {11, 7}, {11, 7}, {11, 7}, {11, 7},98/* Tue */ {10,30}, {10,30}, {10,30}, {11, 7}, {11, 7}, {11, 7}, {11, 7},99/* Wed */ {10,30}, {10,30}, {10,30}, {10,30}, {11, 7}, {11, 7}, {11, 7},100/* Thu */ {10,30}, {10,30}, {10,30}, {10,30}, {10,30}, {11, 7}, {11, 7},101/* Fri */ {10,30}, {10,30}, {10,30}, {10,30}, {10,30}, {10,30}, {11, 7},102/* Sat */ {11, 7}, {11, 7}, {11, 7}, {11, 7}, {11, 7}, {11, 7}, {11, 7},103},104{ /* For year2002 */105/* Min = 1 2 3 4 5 6 7 */106/* Sun */ {11, 6}, {11, 6}, {11, 6}, {11, 6}, {11, 6}, {11, 6}, {11, 6},107/* Mon */ {10,29}, {11, 6}, {11, 6}, {11, 6}, {11, 6}, {11, 6}, {11, 6},108/* Tue */ {10,29}, {10,29}, {11, 6}, {11, 6}, {11, 6}, {11, 6}, {11, 6},109/* Wed */ {10,29}, {10,29}, {10,29}, {11, 6}, {11, 6}, {11, 6}, {11, 6},110/* Thu */ {10,29}, {10,29}, {10,29}, {10,29}, {11, 6}, {11, 6}, {11, 6},111/* Fri */ {10,29}, {10,29}, {10,29}, {10,29}, {10,29}, {11, 6}, {11, 6},112/* Sat */ {11, 6}, {11, 6}, {11, 6}, {11, 6}, {11, 6}, {11, 6}, {11,13},113},114{ /* For year2003 */115/* Min = 1 2 3 4 5 6 7 */116/* Sun */ {11, 5}, {11, 5}, {11, 5}, {11, 5}, {11, 5}, {11, 5}, {11,12},117/* Mon */ {11, 5}, {11, 5}, {11, 5}, {11, 5}, {11, 5}, {11, 5}, {11, 5},118/* Tue */ {10,28}, {11, 5}, {11, 5}, {11, 5}, {11, 5}, {11, 5}, {11, 5},119/* Wed */ {10,28}, {10,28}, {11, 5}, {11, 5}, {11, 5}, {11, 5}, {11, 5},120/* Thu */ {10,28}, {10,28}, {10,28}, {11, 5}, {11, 5}, {11, 5}, {11, 5},121/* Fri */ {10,28}, {10,28}, {10,28}, {10,28}, {11, 5}, {11, 5}, {11, 5},122/* Sat */ {11, 5}, {11, 5}, {11, 5}, {11, 5}, {11, 5}, {11,12}, {11,12},123},124{ /* For year2004 */125/* Min = 1 2 3 4 5 6 7 */126/* Sun */ {11, 3}, {11, 3}, {11, 3}, {11, 3}, {11,10}, {11,10}, {11,10},127/* Mon */ {11, 3}, {11, 3}, {11, 3}, {11, 3}, {11, 3}, {11,10}, {11,10},128/* Tue */ {11, 3}, {11, 3}, {11, 3}, {11, 3}, {11, 3}, {11, 3}, {11,10},129/* Wed */ {11, 3}, {11, 3}, {11, 3}, {11, 3}, {11, 3}, {11, 3}, {11, 3},130/* Thu */ {10,26}, {11, 3}, {11, 3}, {11, 3}, {11, 3}, {11, 3}, {11, 3},131/* Fri */ {10,26}, {10,26}, {11, 3}, {11, 3}, {11, 3}, {11, 3}, {11, 3},132/* Sat */ {11, 3}, {11, 3}, {11, 3}, {11,10}, {11,10}, {11,10}, {11,10},133},134{ /* For year2005 */135/* Min = 1 2 3 4 5 6 7 */136/* Sun */ {11, 2}, {11, 2}, {11, 2}, {11, 9}, {11, 9}, {11, 9}, {11, 9},137/* Mon */ {11, 2}, {11, 2}, {11, 2}, {11, 2}, {11, 9}, {11, 9}, {11, 9},138/* Tue */ {11, 2}, {11, 2}, {11, 2}, {11, 2}, {11, 2}, {11, 9}, {11, 9},139/* Wed */ {11, 2}, {11, 2}, {11, 2}, {11, 2}, {11, 2}, {11, 2}, {11, 9},140/* Thu */ {11, 2}, {11, 2}, {11, 2}, {11, 2}, {11, 2}, {11, 2}, {11, 2},141/* Fri */ {10,25}, {11, 2}, {11, 2}, {11, 2}, {11, 2}, {11, 2}, {11, 2},142/* Sat */ {11, 2}, {11, 2}, {11, 9}, {11, 9}, {11, 9}, {11, 9}, {11, 9},143},144{ /* For year2006 */145/* Min = 1 2 3 4 5 6 7 */146/* Sun */ {11, 1}, {11, 1}, {11, 8}, {11, 8}, {11, 8}, {11, 8}, {11, 8},147/* Mon */ {11, 1}, {11, 1}, {11, 1}, {11, 8}, {11, 8}, {11, 8}, {11, 8},148/* Tue */ {11, 1}, {11, 1}, {11, 1}, {11, 1}, {11, 8}, {11, 8}, {11, 8},149/* Wed */ {11, 1}, {11, 1}, {11, 1}, {11, 1}, {11, 1}, {11, 8}, {11, 8},150/* Thu */ {11, 1}, {11, 1}, {11, 1}, {11, 1}, {11, 1}, {11, 1}, {11, 8},151/* Fri */ {11, 1}, {11, 1}, {11, 1}, {11, 1}, {11, 1}, {11, 1}, {11, 1},152/* Sat */ {11, 1}, {11, 8}, {11, 8}, {11, 8}, {11, 8}, {11, 8}, {11, 8},153},154};155156static final int[][][] resultWOYForSetTest1 = {157{ /* For year1998 */158/* FirstDayOfWeek = Sunday */159{1998, 0, 2}, {1998, 0, 2}, {1998, 0, 2}, {1998, 0, 9},160{1998, 0, 9}, {1998, 0, 9}, {1998, 0, 9},161/* FirstDayOfWeek = Monday */162{1998, 0, 2}, {1998, 0, 2}, {1998, 0, 2}, {1998, 0, 2},163{1998, 0, 9}, {1998, 0, 9}, {1998, 0, 9},164/* FirstDayOfWeek = Tuesday */165{1998, 0, 2}, {1998, 0, 2}, {1998, 0, 2}, {1998, 0, 2},166{1998, 0, 2}, {1998, 0, 9}, {1998, 0, 9},167/* FirstDayOfWeek = Wednesday */168{1998, 0, 2}, {1998, 0, 2}, {1998, 0, 2}, {1998, 0, 2},169{1998, 0, 2}, {1998, 0, 2}, {1998, 0, 9},170/* FirstDayOfWeek = Thursday */171{1998, 0, 2}, {1998, 0, 2}, {1998, 0, 2}, {1998, 0, 2},172{1998, 0, 2}, {1998, 0, 2}, {1998, 0, 2},173/* FirstDayOfWeek = Friday */174{1997,11,26}, {1998, 0, 2}, {1998, 0, 2}, {1998, 0, 2},175{1998, 0, 2}, {1998, 0, 2}, {1998, 0, 2},176/* FirstDayOfWeek = Saturday */177{1998, 0, 2}, {1998, 0, 2}, {1998, 0, 9}, {1998, 0, 9},178{1998, 0, 9}, {1998, 0, 9}, {1998, 0, 9},179},180{ /* For year1999 */181/* FirstDayOfWeek = Sunday */182{1999, 0, 1}, {1999, 0, 1}, {1999, 0, 8}, {1999, 0, 8},183{1999, 0, 8}, {1999, 0, 8}, {1999, 0, 8},184/* FirstDayOfWeek = Monday */185{1999, 0, 1}, {1999, 0, 1}, {1999, 0, 1}, {1999, 0, 8},186{1999, 0, 8}, {1999, 0, 8}, {1999, 0, 8},187/* FirstDayOfWeek = Tuesday */188{1999, 0, 1}, {1999, 0, 1}, {1999, 0, 1}, {1999, 0, 1},189{1999, 0, 8}, {1999, 0, 8}, {1999, 0, 8},190/* FirstDayOfWeek = Wednesday */191{1999, 0, 1}, {1999, 0, 1}, {1999, 0, 1}, {1999, 0, 1},192{1999, 0, 1}, {1999, 0, 8}, {1999, 0, 8},193/* FirstDayOfWeek = Thursday */194{1999, 0, 1}, {1999, 0, 1}, {1999, 0, 1}, {1999, 0, 1},195{1999, 0, 1}, {1999, 0, 1}, {1999, 0, 8},196/* FirstDayOfWeek = Friday */197{1999, 0, 1}, {1999, 0, 1}, {1999, 0, 1}, {1999, 0, 1},198{1999, 0, 1}, {1999, 0, 1}, {1999, 0, 1},199/* FirstDayOfWeek = Saturday */200{1999, 0, 1}, {1999, 0, 8}, {1999, 0, 8}, {1999, 0, 8},201{1999, 0, 8}, {1999, 0, 8}, {1999, 0, 8},202},203{ /* For year2000 */204/* FirstDayOfWeek = Sunday */205{1999,11,31}, {2000, 0, 7}, {2000, 0, 7}, {2000, 0, 7},206{2000, 0, 7}, {2000, 0, 7}, {2000, 0, 7},207/* FirstDayOfWeek = Monday */208{1999,11,31}, {1999,11,31}, {2000, 0, 7}, {2000, 0, 7},209{2000, 0, 7}, {2000, 0, 7}, {2000, 0, 7},210/* FirstDayOfWeek = Tuesday */211{1999,11,31}, {1999,11,31}, {1999,11,31}, {2000, 0, 7},212{2000, 0, 7}, {2000, 0, 7}, {2000, 0, 7},213/* FirstDayOfWeek = Wednesday */214{1999,11,31}, {1999,11,31}, {1999,11,31}, {1999,11,31},215{2000, 0, 7}, {2000, 0, 7}, {2000, 0, 7},216/* FirstDayOfWeek = Thursday */217{1999,11,31}, {1999,11,31}, {1999,11,31}, {1999,11,31},218{1999,11,31}, {2000, 0, 7}, {2000, 0, 7},219/* FirstDayOfWeek = Friday */220{1999,11,31}, {1999,11,31}, {1999,11,31}, {1999,11,31},221{1999,11,31}, {1999,11,31}, {2000, 0, 7},222/* FirstDayOfWeek = Saturday */223{2000, 0, 7}, {2000, 0, 7}, {2000, 0, 7}, {2000, 0, 7},224{2000, 0, 7}, {2000, 0, 7}, {2000, 0, 7},225},226{ /* For year2001 */227/* FirstDayOfWeek = Sunday */228{2001, 0, 5}, {2001, 0, 5}, {2001, 0, 5}, {2001, 0, 5},229{2001, 0, 5}, {2001, 0, 5}, {2001, 0,12},230/* FirstDayOfWeek = Monday */231{2001, 0, 5}, {2001, 0, 5}, {2001, 0, 5}, {2001, 0, 5},232{2001, 0, 5}, {2001, 0, 5}, {2001, 0, 5},233/* FirstDayOfWeek = Tuesday */234{2000,11,29}, {2001, 0, 5}, {2001, 0, 5}, {2001, 0, 5},235{2001, 0, 5}, {2001, 0, 5}, {2001, 0, 5},236/* FirstDayOfWeek = Wednesday */237{2000,11,29}, {2000,11,29}, {2001, 0, 5}, {2001, 0, 5},238{2001, 0, 5}, {2001, 0, 5}, {2001, 0, 5},239/* FirstDayOfWeek = Thursday */240{2000,11,29}, {2000,11,29}, {2000,11,29}, {2001, 0, 5},241{2001, 0, 5}, {2001, 0, 5}, {2001, 0, 5},242/* FirstDayOfWeek = Friday */243{2000,11,29}, {2000,11,29}, {2000,11,29}, {2000,11,29},244{2001, 0, 5}, {2001, 0, 5}, {2001, 0, 5},245/* FirstDayOfWeek = Saturday */246{2001, 0, 5}, {2001, 0, 5}, {2001, 0, 5}, {2001, 0, 5},247{2001, 0, 5}, {2001, 0,12}, {2001, 0,12},248},249{ /* For year2002 */250/* FirstDayOfWeek = Sunday */251{2002, 0, 4}, {2002, 0, 4}, {2002, 0, 4}, {2002, 0, 4},252{2002, 0, 4}, {2002, 0,11}, {2002, 0,11},253/* FirstDayOfWeek = Monday */254{2002, 0, 4}, {2002, 0, 4}, {2002, 0, 4}, {2002, 0, 4},255{2002, 0, 4}, {2002, 0, 4}, {2002, 0,11},256/* FirstDayOfWeek = Tuesday */257{2002, 0, 4}, {2002, 0, 4}, {2002, 0, 4}, {2002, 0, 4},258{2002, 0, 4}, {2002, 0, 4}, {2002, 0, 4},259/* FirstDayOfWeek = Wednesday */260{2001,11,28}, {2002, 0, 4}, {2002, 0, 4}, {2002, 0, 4},261{2002, 0, 4}, {2002, 0, 4}, {2002, 0, 4},262/* FirstDayOfWeek = Thursday */263{2001,11,28}, {2001,11,28}, {2002, 0, 4}, {2002, 0, 4},264{2002, 0, 4}, {2002, 0, 4}, {2002, 0, 4},265/* FirstDayOfWeek = Friday */266{2001,11,28}, {2001,11,28}, {2001,11,28}, {2002, 0, 4},267{2002, 0, 4}, {2002, 0, 4}, {2002, 0, 4},268/* FirstDayOfWeek = Saturday */269{2002, 0, 4}, {2002, 0, 4}, {2002, 0, 4}, {2002, 0, 4},270{2002, 0,11}, {2002, 0,11}, {2002, 0,11},271},272{ /* For year2003 */273/* FirstDayOfWeek = Sunday */274{2003, 0, 3}, {2003, 0, 3}, {2003, 0, 3}, {2003, 0, 3},275{2003, 0,10}, {2003, 0,10}, {2003, 0,10},276/* FirstDayOfWeek = Monday */277{2003, 0, 3}, {2003, 0, 3}, {2003, 0, 3}, {2003, 0, 3},278{2003, 0, 3}, {2003, 0,10}, {2003, 0,10},279/* FirstDayOfWeek = Tuesday */280{2003, 0, 3}, {2003, 0, 3}, {2003, 0, 3}, {2003, 0, 3},281{2003, 0, 3}, {2003, 0, 3}, {2003, 0,10},282/* FirstDayOfWeek = Wednesday */283{2003, 0, 3}, {2003, 0, 3}, {2003, 0, 3}, {2003, 0, 3},284{2003, 0, 3}, {2003, 0, 3}, {2003, 0, 3},285/* FirstDayOfWeek = Thursday */286{2002,11,27}, {2003, 0, 3}, {2003, 0, 3}, {2003, 0, 3},287{2003, 0, 3}, {2003, 0, 3}, {2003, 0, 3},288/* FirstDayOfWeek = Friday */289{2002,11,27}, {2002,11,27}, {2003, 0, 3}, {2003, 0, 3},290{2003, 0, 3}, {2003, 0, 3}, {2003, 0, 3},291/* FirstDayOfWeek = Saturday */292{2003, 0, 3}, {2003, 0, 3}, {2003, 0, 3}, {2003, 0,10},293{2003, 0,10}, {2003, 0,10}, {2003, 0,10},294},295{ /* For year2004 */296/* FirstDayOfWeek = Sunday */297{2004, 0, 2}, {2004, 0, 2}, {2004, 0, 2}, {2004, 0, 9},298{2004, 0, 9}, {2004, 0, 9}, {2004, 0, 9},299/* FirstDayOfWeek = Monday */300{2004, 0, 2}, {2004, 0, 2}, {2004, 0, 2}, {2004, 0, 2},301{2004, 0, 9}, {2004, 0, 9}, {2004, 0, 9},302/* FirstDayOfWeek = Tuesday */303{2004, 0, 2}, {2004, 0, 2}, {2004, 0, 2}, {2004, 0, 2},304{2004, 0, 2}, {2004, 0, 9}, {2004, 0, 9},305/* FirstDayOfWeek = Wednesday */306{2004, 0, 2}, {2004, 0, 2}, {2004, 0, 2}, {2004, 0, 2},307{2004, 0, 2}, {2004, 0, 2}, {2004, 0, 9},308/* FirstDayOfWeek = Thursday */309{2004, 0, 2}, {2004, 0, 2}, {2004, 0, 2}, {2004, 0, 2},310{2004, 0, 2}, {2004, 0, 2}, {2004, 0, 2},311/* FirstDayOfWeek = Friday */312{2003,11,26}, {2004, 0, 2}, {2004, 0, 2}, {2004, 0, 2},313{2004, 0, 2}, {2004, 0, 2}, {2004, 0, 2},314/* FirstDayOfWeek = Saturday */315{2004, 0, 2}, {2004, 0, 2}, {2004, 0, 9}, {2004, 0, 9},316{2004, 0, 9}, {2004, 0, 9}, {2004, 0, 9},317},318{ /* For year2005 */319/* FirstDayOfWeek = Sunday */320{2004,11,31}, {2005, 0, 7}, {2005, 0, 7}, {2005, 0, 7},321{2005, 0, 7}, {2005, 0, 7}, {2005, 0, 7},322/* FirstDayOfWeek = Monday */323{2004,11,31}, {2004,11,31}, {2005, 0, 7}, {2005, 0, 7},324{2005, 0, 7}, {2005, 0, 7}, {2005, 0, 7},325/* FirstDayOfWeek = Tuesday */326{2004,11,31}, {2004,11,31}, {2004,11,31}, {2005, 0, 7},327{2005, 0, 7}, {2005, 0, 7}, {2005, 0, 7},328/* FirstDayOfWeek = Wednesday */329{2004,11,31}, {2004,11,31}, {2004,11,31}, {2004,11,31},330{2005, 0, 7}, {2005, 0, 7}, {2005, 0, 7},331/* FirstDayOfWeek = Thursday */332{2004,11,31}, {2004,11,31}, {2004,11,31}, {2004,11,31},333{2004,11,31}, {2005, 0, 7}, {2005, 0, 7},334/* FirstDayOfWeek = Friday */335{2004,11,31}, {2004,11,31}, {2004,11,31}, {2004,11,31},336{2004,11,31}, {2004,11,31}, {2005, 0, 7},337/* FirstDayOfWeek = Saturday */338{2005, 0, 7}, {2005, 0, 7}, {2005, 0, 7}, {2005, 0, 7},339{2005, 0, 7}, {2005, 0, 7}, {2005, 0, 7},340},341{ /* For year2006 */342/* FirstDayOfWeek = Sunday */343{2006, 0, 6}, {2006, 0, 6}, {2006, 0, 6}, {2006, 0, 6},344{2006, 0, 6}, {2006, 0, 6}, {2006, 0, 6},345/* FirstDayOfWeek = Monday */346{2005,11,30}, {2006, 0, 6}, {2006, 0, 6}, {2006, 0, 6},347{2006, 0, 6}, {2006, 0, 6}, {2006, 0, 6},348/* FirstDayOfWeek = Tuesday */349{2005,11,30}, {2005,11,30}, {2006, 0, 6}, {2006, 0, 6},350{2006, 0, 6}, {2006, 0, 6}, {2006, 0, 6},351/* FirstDayOfWeek = Wednesday */352{2005,11,30}, {2005,11,30}, {2005,11,30}, {2006, 0, 6},353{2006, 0, 6}, {2006, 0, 6}, {2006, 0, 6},354/* FirstDayOfWeek = Thursday */355{2005,11,30}, {2005,11,30}, {2005,11,30}, {2005,11,30},356{2006, 0, 6}, {2006, 0, 6}, {2006, 0, 6},357/* FirstDayOfWeek = Friday */358{2005,11,30}, {2005,11,30}, {2005,11,30}, {2005,11,30},359{2005,11,30}, {2006, 0, 6}, {2006, 0, 6},360/* FirstDayOfWeek = Saturday */361{2006, 0, 6}, {2006, 0, 6}, {2006, 0, 6}, {2006, 0, 6},362{2006, 0, 6}, {2006, 0, 6}, {2006, 0,13},363}364};365366static final int[][] resultWOYForSetTest2 = {367/* Min = 1 2 3 4 5 6 7 */368/* Sun */ {4,25}, {5, 1}, {5, 1}, {5, 1}, {5, 1}, {5, 1}, {5, 1},369/* Mon */ {4,25}, {4,25}, {5, 1}, {5, 1}, {5, 1}, {5, 1}, {5, 1},370/* Tue */ {4,25}, {4,25}, {4,25}, {5, 1}, {5, 1}, {5, 1}, {5, 1},371/* Wed */ {4,25}, {4,25}, {4,25}, {4,25}, {5, 1}, {5, 1}, {5, 1},372/* Thu */ {5, 1}, {5, 1}, {5, 1}, {5, 1}, {5, 1}, {5, 8}, {5, 8},373/* Fri */ {5, 1}, {5, 1}, {5, 1}, {5, 1}, {5, 1}, {5, 1}, {5, 8},374/* Sat */ {5, 1}, {5, 1}, {5, 1}, {5, 1}, {5, 1}, {5, 1}, {5, 1},375};376377/**378* Test for set()379*/380void testSet() {381boolean noerror = true;382Calendar cal = Calendar.getInstance();383int sYear=1998;384int eYear=2006;385386// Loop for FirstDayOfWeek: SUNDAY..SATURDAY387for (int dow = SUNDAY; dow <= SATURDAY; dow++) {388389// Loop for MinimalDaysInFirstWeek: 1..7390for (int minDow = 1; minDow <= 7; minDow++) {391int index = (dow-1)*7 + (minDow-1);392393cal.clear();394cal.setLenient(true);395cal.setMinimalDaysInFirstWeek(minDow);396cal.setFirstDayOfWeek(dow);397cal.set(YEAR, 2005);398cal.set(DAY_OF_WEEK, WEDNESDAY);399cal.set(WEEK_OF_YEAR, 22);400401int y = 2005;402int m = resultWOYForSetTest2[index][0];403int d = resultWOYForSetTest2[index][1];404int year = cal.get(YEAR);405int month = cal.get(MONTH);406int date = cal.get(DATE);407408if (cal.get(WEEK_OF_YEAR) != 22) {409noerror = false;410errln("Failed : set(WEEK_OF_YEAR=22)" +411" *** get(WEEK_OF_YEAR=" +412cal.get(WEEK_OF_YEAR) + ")" +413", got " + (month+1)+"/"+date+"/"+year +414", expected " + (m+1)+"/"+d+"/"+2005 +415", MinFirstDOW=" + minDow +416", FirstDOW=" + dow);417} else if ((year != y) || (month != m) || (date != d)) {418noerror = false;419errln("Failed : set(WEEK_OF_YEAR=22)" +420" got " + (month+1)+"/"+date+"/"+year +421", expected " + (m+1)+"/"+d+"/"+y +422", MinFirstDOW=" + minDow +423", FirstDOW=" + dow);424}425426for (int targetYear = sYear; targetYear<= eYear; targetYear++) {427cal.clear();428cal.setLenient(true);429cal.setMinimalDaysInFirstWeek(minDow);430cal.setFirstDayOfWeek(dow);431cal.set(YEAR, targetYear);432cal.set(DAY_OF_WEEK, FRIDAY);433cal.set(MONTH, DECEMBER);434cal.set(WEEK_OF_MONTH, 1);435436y = targetYear;437m = resultWOMForSetTest[targetYear-sYear][index][0];438d = resultWOMForSetTest[targetYear-sYear][index][1];439year = cal.get(YEAR);440month = cal.get(MONTH);441date = cal.get(DATE);442443if ((year != y) || (month != m) || (date != d)) {444noerror = false;445errln("Failed : set(WEEK_OF_MONTH=1)" +446" got " + (month+1)+"/"+date+"/"+year +447", expected " + (m+1)+"/"+d+"/"+y +448", MinFirstDOW=" + minDow +449", FirstDOW=" + dow);450}451452cal.clear();453cal.setLenient(true);454cal.setMinimalDaysInFirstWeek(minDow);455cal.setFirstDayOfWeek(dow);456cal.set(YEAR, targetYear);457cal.set(DAY_OF_WEEK, FRIDAY);458cal.set(WEEK_OF_YEAR, 1);459460y = resultWOYForSetTest1[targetYear-sYear][index][0];461m = resultWOYForSetTest1[targetYear-sYear][index][1];462d = resultWOYForSetTest1[targetYear-sYear][index][2];463year = cal.get(YEAR);464month = cal.get(MONTH);465date = cal.get(DATE);466467if (cal.get(WEEK_OF_YEAR) != 1) {468noerror = false;469errln("Failed : set(WEEK_OF_YEAR=1)" +470" *** get(WEEK_OF_YEAR=" +471cal.get(WEEK_OF_YEAR) + ")" +472", got " + (month+1)+"/"+date+"/"+year +473", expected " + (m+1)+"/"+d+"/"+y +474", MinFirstDOW=" + minDow +475", FirstDOW=" + dow);476} else if ((year != y) || (month != m) || (date != d)) {477noerror = false;478errln("Failed : set(WEEK_OF_YEAR=1)" +479" got " + (month+1)+"/"+date+"/"+year +480", expected " + (m+1)+"/"+d+"/"+y +481", MinFirstDOW=" + minDow +482", FirstDOW=" + dow);483}484}485}486}487488if (noerror) {489logln("Passed : set() test");490}491}492493/**494* Test for add()495*/496void testAdd() {497boolean noerror = true;498Calendar cal = Calendar.getInstance();499500// Loop for FirstDayOfWeek: SUNDAY..SATURDAY501for (int dow = SUNDAY; dow <= SATURDAY; dow++) {502503// Loop for MinimalDaysInFirstWeek: 1..7504for (int minDow = 1; minDow <= 7; minDow++) {505int oldWOY, newWOY;506507cal.clear();508cal.setLenient(true);509cal.setMinimalDaysInFirstWeek(minDow);510cal.setFirstDayOfWeek(dow);511cal.set(2005, DECEMBER, 7);512oldWOY = cal.get(WEEK_OF_YEAR);513514for (int cnt = 0; cnt < 7; cnt++) {515cal.add(WEEK_OF_YEAR, 1);516}517518int year = cal.get(YEAR);519int month = cal.get(MONTH);520int date = cal.get(DATE);521522if ((year != 2006) || (month != 0) || (date != 25)) {523noerror = false;524errln("Failed : add(WEEK_OF_YEAR+1)" +525" got " + (month+1)+"/"+date+"/"+year +526", expected 1/25/2006" +527", MinFirstDOW=" + minDow +528", FirstDOW=" + dow);529}530531for (int cnt = 0; cnt < 10; cnt++) {532cal.add(WEEK_OF_YEAR, -1);533}534newWOY = cal.get(WEEK_OF_YEAR);535536year = cal.get(YEAR);537month = cal.get(MONTH);538date = cal.get(DATE);539540if ((oldWOY - newWOY) != 3) {541errln("Failed : add(WEEK_OF_YEAR-1)" +542" got " + (month+1)+"/"+date+"/"+year +543", expected 11/16/2005" +544", MinFirstDOW=" + minDow +545", FirstDOW=" + dow +546", WEEK_OF_YEAR=" + newWOY +547" should be " + (oldWOY-3));548} else if ((year != 2005) || (month != 10) || (date != 16)) {549errln("Failed : add(-1)" +550" got " + (month+1)+"/"+date+"/"+year +551", expected 11/16/2005" +552", MinFirstDOW=" + minDow +553", FirstDOW=" + dow);554}555}556}557558if (noerror) {559logln("Passed : add() test");560}561}562563/*564* Golden data for roll() test565*/566static final int[] resultWOMForRollTest = {567/* Min = 1 2 3 4 5 6 7 */568/* Sun */ 1, 1, 1, 26, 26, 26, 26,569/* Mon */ 1, 1, 1, 1, 26, 26, 26,570/* Tue */ 31, 31, 31, 31, 31, 24, 24,571/* Wed */ 31, 31, 31, 31, 31, 31, 24,572/* Thu */ 31, 31, 31, 31, 31, 31, 31,573/* Fri */ 1, 31, 31, 31, 31, 31, 31,574/* Sat */ 1, 1, 31, 31, 31, 31, 31,575};576577static final int[][] resultWOYForRollTest = {578/* Min = 1 2 3 4 5 6 7 */579/* Sun */ {0,26}, {0,26}, {0,26}, {0,26}, {0,26}, {0,26}, {0,26},580/* Mon */ {1, 2}, {0,26}, {0,26}, {0,26}, {0,26}, {0,26}, {0,26},581/* Tue */ {1, 2}, {1, 2}, {0,26}, {0,26}, {0,26}, {0,26}, {0,26},582/* Wed */ {1, 2}, {1, 2}, {1, 2}, {0,26}, {0,26}, {0,26}, {0,26},583/* Thu */ {0,26}, {0,26}, {0,26}, {0,26}, {0,26}, {1, 2}, {1, 2},584/* Fri */ {0,26}, {0,26}, {0,26}, {0,26}, {0,26}, {0,26}, {1, 2},585/* Sat */ {0,26}, {0,26}, {0,26}, {0,26}, {0,26}, {0,26}, {0,26},586};587588/**589* Test for roll()590*/591void testRoll() {592boolean noerror = true;593Calendar cal = Calendar.getInstance();594595// Loop for FirstDayOfWeek: SUNDAY..SATURDAY596for (int dow = SUNDAY; dow <= SATURDAY; dow++) {597598// Loop for MinimalDaysInFirstWeek: 1..7599for (int minDow = 1; minDow <= 7; minDow++) {600int oldWOY, newWOY;601int index = (dow-1)*7 + (minDow-1);602603cal.clear();604cal.setLenient(true);605cal.setMinimalDaysInFirstWeek(minDow);606cal.setFirstDayOfWeek(dow);607cal.set(2005, DECEMBER, 12);608oldWOY = cal.get(WEEK_OF_YEAR);609for (int cnt = 0; cnt < 2; cnt++) {610cal.roll(WEEK_OF_MONTH, -1);611}612int y = 2005;613int m = DECEMBER;614int d = resultWOMForRollTest[index];615int year = cal.get(YEAR);616int month = cal.get(MONTH);617int date = cal.get(DATE);618619if ((year != y) || (month != m) || (date != d)) {620noerror = false;621errln("Failed : roll(WEEK_OF_MONTH-1)" +622" got " + (month+1) + "/" + date + "/" + year +623", expected " + (m+1) + "/" + d + "/" + y +624", MinFirstDOW=" + minDow +625", FirstDOW=" + dow);626}627628cal.clear();629cal.setLenient(true);630cal.setMinimalDaysInFirstWeek(minDow);631cal.setFirstDayOfWeek(dow);632cal.set(2005, DECEMBER, 7);633oldWOY = cal.get(WEEK_OF_YEAR);634635for (int cnt = 0; cnt < 7; cnt++) {636cal.roll(WEEK_OF_YEAR, 1);637}638639y = 2005;640m = resultWOYForRollTest[index][0];641d = resultWOYForRollTest[index][1];642year = cal.get(YEAR);643month = cal.get(MONTH);644date = cal.get(DATE);645646if ((year != y) || (month != m) || (date != d)) {647noerror = false;648errln("Failed : roll(WEEK_OF_YEAR+1)" +649" got " + (month+1) + "/" + date + "/" + year +650", expected " + (m+1) + "/" + d + "/" + y +651", MinFirstDOW=" + minDow +652", FirstDOW=" + dow);653}654655for (int cnt = 0; cnt < 10; cnt++) {656cal.roll(WEEK_OF_YEAR, -1);657}658newWOY = cal.get(WEEK_OF_YEAR);659660y = 2005;661m = NOVEMBER;662d = 16;663year = cal.get(YEAR);664month = cal.get(MONTH);665date = cal.get(DATE);666667if ((year != y) || (month != m) || (date != d)) {668noerror = false;669errln("Failed : roll(WEEK_OF_YEAR-1)" +670" got " + (month+1)+"/"+date+"/"+year +671", expected " + (m+1)+"/"+d+"/"+y +672", MinFirstDOW=" + minDow +673", FirstDOW=" + dow);674}675}676}677678if (noerror) {679logln("Passed : roll() test");680}681}682}683684685