1 #
   2 # %i%
   3 #
   4 
   5 # The test cases in this file assume the first day of week is Sunday
   6 # and the minimal days in the first week is 1.
   7 
   8 locale ja JP JP
   9 new instance jcal
  10 
  11 timezone Asia/Tokyo
  12 new instance tokyocal
  13 
  14 set non-lenient
  15 
  16 test add ERA
  17     use jcal
  18         clear all
  19         set date NewEra 17 Mar 8
  20         add era 10
  21         # as of NewEra 17 March 8
  22         check era NewEra
  23         add era -100
  24         check era BeforeMeiji
  25 
  26 test add HOUR_OF_DAY
  27     use jcal
  28         clear all
  29         set era Heisei
  30         set datetime 1 Jan 8 23 59 59
  31         add hour_of_day 1
  32         check datetime 1 Jan 9 0 59 59
  33         check ampm AM
  34         check hour 0
  35         add hour_of_day -1
  36         check datetime 1 Jan 8 23 59 59
  37         add hour_of_day 24
  38         check datetime 1 Jan 9 23 59 59
  39         add hour_of_day -24
  40         check datetime 1 Jan 8 23 59 59
  41 
  42 test add HOUR
  43     use jcal
  44         clear all
  45         set era Showa
  46         set datetime 64 Jan 7 11 59 59
  47         check era Showa
  48         check hour 11
  49         check ampm AM
  50         add hour 1
  51         check hour 0
  52         check ampm PM
  53         check datetime 64 Jan 7  12 59 59
  54         add hour -1
  55         check datetime 64 Jan 7 11 59 59
  56         add hour 240
  57         check era Heisei
  58         check datetime 1 Jan 17 11 59 59
  59         add hour -240
  60         check era Showa
  61         check datetime 64 Jan 7 11 59 59
  62 
  63         clear all
  64         set era Showa
  65         set datetime 64 Jan 7 23 59 59
  66         check era Showa
  67         check hour 11
  68         check ampm PM
  69         add hour 1
  70         check hour 0
  71         check ampm AM
  72         check era Heisei
  73         check datetime 1 Jan 8 0 59 59
  74         add hour -1
  75         check datetime 64 Jan 7 23 59 59
  76         add hour 240
  77         check era Heisei
  78         check datetime 1 Jan 17 23 59 59
  79         add hour -240
  80         check era Showa
  81         check datetime 64 Jan 7 23 59 59
  82 
  83         clear all
  84         set era Heisei
  85         set datetime 1 Jan 8 23 59 59
  86         check date Heisei 1 Jan 8
  87         check hour 11
  88         check ampm PM
  89         add hour 1
  90         check hour 0
  91         check ampm AM
  92         check era Heisei
  93         check datetime 1 Jan 9  0 59 59
  94         add hour -1
  95         check datetime 1 Jan 8 23 59 59
  96         add hour 240
  97         check datetime 1 Jan 18 23 59 59
  98         add hour -240
  99         check datetime 1 Jan 8 23 59 59
 100 
 101 test add YEAR
 102     use jcal
 103         clear all
 104         # check if pinDayOfMonth works correctly.
 105         # Heisei 12 (Y2K) is a leap year.
 106         set date Heisei 12 Feb 29
 107         add year 5
 108         check date Heisei 17 Feb 28
 109         add year -5
 110         check date Heisei 12 Feb 28 # not 29!
 111 
 112         clear all
 113         set date BeforeMeiji 1867 Jan 1
 114         add year 1
 115         check date Meiji 1 Jan 1
 116         add year -1
 117         check date BeforeMeiji 1867 Jan 1
 118 
 119         clear all
 120         set date Meiji 45 Jul 29
 121         add year 1
 122         check date Taisho 2 Jul 29
 123         add year -1
 124         check date Meiji 45 Jul 29
 125 
 126         clear all
 127         set date Meiji 44 Jul 30
 128         add year 1
 129         check date Taisho 1 Jul 30
 130         add year -1
 131         check date Meiji 44 Jul 30
 132 
 133         clear all
 134         set date Taisho 15 Aug 1
 135         add year 1
 136         check date Showa 2 Aug 1
 137         add year -1
 138         check date Taisho 15 Aug 1
 139 
 140         clear all
 141         set date Taisho 14 Dec 31
 142         add year 1
 143         check date Showa 1 Dec 31
 144         add year -1
 145         check date Taisho 14 Dec 31
 146 
 147         clear all
 148         set date Showa 63 Feb 1
 149         add year 1
 150         check date Heisei 1 Feb 1
 151         add year -1
 152         check date Showa 63 Feb 1
 153 
 154         set date Showa 63 Dec 30
 155         add year 1
 156         check date Heisei 1 Dec 30
 157         add year -1
 158         check date Showa 63 Dec 30
 159 
 160         set date Showa 64 Jan 7
 161         add year 1
 162         check date Heisei 2 Jan 7
 163         add year -1
 164         check date Showa 64 Jan 7
 165 
 166         set date Heisei 2 Jan 7
 167         add year -1
 168         check date Showa 64 Jan 7
 169         add year 1
 170         check date Heisei 2 Jan 7
 171 
 172 test add MONTH
 173         clear all
 174         # Check pinDayOfMonth works correctly.
 175         # Heisei 12 is a leap year.
 176         set date Heisei 12 Jan 31
 177         add month 1
 178         check date Heisei 12 Feb 29
 179         add month -1
 180         check date Heisei 12 Jan 29
 181 
 182         # Another leap year
 183         set date Showa 63 Jan 31
 184         add month 1
 185         check date Showa 63 Feb 29
 186         add month -1
 187         check date Showa 63 Jan 29
 188 
 189         # Non leap year
 190         set date Heisei 15 Jan 31
 191         add month 1
 192         check date Heisei 15 Feb 28
 193         add month -1
 194         check date Heisei 15 Jan 28
 195 
 196         set date Heisei 15 Mar 31
 197         add month 1
 198         check date Heisei 15 Apr 30
 199         add month -1
 200         check date Heisei 15 Mar 30
 201 
 202         set date Heisei 15 May 31
 203         add month 1
 204         check date Heisei 15 Jun 30
 205         add month -1
 206         check date Heisei 15 May 30
 207 
 208         set date Heisei 15 Aug 31
 209         add month 1
 210         check date Heisei 15 Sep 30
 211         add month -1
 212         check date Heisei 15 Aug 30
 213 
 214         set date Heisei 15 Oct 31
 215         add month 1
 216         check date Heisei 15 Nov 30
 217         add month -1
 218         check date Heisei 15 Oct 30
 219 
 220         set date Heisei 15 Dec 31
 221         add month -1
 222         check date Heisei 15 Nov 30
 223         add month 1
 224         check date Heisei 15 Dec 30
 225 
 226         set date Heisei 15 Dec 31
 227         add month 2
 228         check date Heisei 16 Feb 29
 229         add month -1
 230         check date Heisei 16 Jan 29
 231 
 232         # end of pinDayOfMonth tests
 233 
 234         set date BeforeMeiji 1867 Dec 1
 235         add month 1
 236         check date Meiji 1 Jan 1
 237         add month -1
 238         check date BeforeMeiji 1867 Dec 1
 239         add month 14
 240         check date Meiji 2 Feb 1
 241         add month -14
 242         check date BeforeMeiji 1867 Dec 1
 243 
 244         set date Meiji 1 Dec 1
 245         add month 1
 246         check date Meiji 2 Jan 1
 247         add month -1
 248         check date Meiji 1 Dec 1
 249         add month 13
 250         check date Meiji 3 Jan 1
 251         add month -13
 252         check date Meiji 1 Dec 1
 253 
 254         set date Meiji 45 Jun 30
 255         add month 1
 256         check date Taisho 1 Jul 30
 257         add month -1
 258         check date Meiji 45 Jun 30
 259 
 260         set date Meiji 45 Jun 30
 261         add month 14
 262         check date Taisho 2 Aug 30
 263         add month -14
 264         check date Meiji 45 Jun 30
 265 
 266         # Taisho Gan-nen (year 1) has only 6 months.
 267         set date Taisho 1 Jul 30
 268         add month -1
 269         check date Meiji 45 Jun 30
 270         add month 1
 271         check date Taisho 1 Jul 30
 272         add month -18
 273         check date Meiji 44 Jan 30
 274         add month 18
 275         check date Taisho 1 Jul 30
 276 
 277         set date Taisho 15 Jan 20
 278         add month 11
 279         check date Taisho 15 Dec 20
 280 
 281         set date Taisho 15 Jan 25
 282         add month 11
 283         check date Showa 1 Dec 25
 284 
 285         set date Showa 1 Dec 25
 286         add month 1
 287         check date Showa 2 Jan 25
 288         add month -1
 289         check date Showa 1 Dec 25
 290         add month 17
 291         check date Showa 3 May 25
 292         add month -17
 293         check date Showa 1 Dec 25
 294 
 295         set date Showa 64 Jan 7
 296         add month 1
 297         check date Heisei 1 Feb 7
 298 
 299         set date Heisei 1 Feb 1
 300         add month -1
 301         # Heisei starts from Jan 8.
 302         check date Showa 64 Jan 1
 303         add month 1
 304         check date Heisei 1 Feb 1
 305 
 306         set date Heisei 1 Feb 8
 307         add month -1
 308         check date Heisei 1 Jan 8
 309 
 310         set date Heisei 1 Dec 1
 311         add month 1
 312         check date Heisei 2 Jan 1
 313         add month -1
 314         check date Heisei 1 Dec 1
 315 
 316         set date Heisei 1 Dec 8
 317         add month 1
 318         check date Heisei 2 Jan 8
 319         add month -1
 320         check date Heisei 1 Dec 8
 321 
 322     # time zone dependent tests
 323     use tokyocal
 324         clear all
 325 
 326         set date BeforeMeiji 1 Jan 1
 327         get min year
 328         assign $result $minyear
 329         # actual min date: -292275055.05.17T01:47:04.192+0900
 330 
 331         set date BeforeMeiji $minyear Dec 17
 332         set timeofday 1 47 4 192
 333         add month -7
 334         check date BeforeMeiji $minyear May 17
 335         check timeofday 1 47 4 192
 336         add month 7
 337         check date BeforeMeiji $minyear Dec 17
 338         check timeofday 1 47 4 192
 339         set date BeforeMeiji $minyear Dec 17
 340         set timeofday 1 47 4 191
 341         add month -7
 342         check date BeforeMeiji $minyear May 18
 343         check timeofday 1 47 4 191
 344 
 345         set date NewEra 17 Jan 1
 346         get max year
 347         assign $result $max
 348         set date NewEra $max Jul 17
 349         add month 1
 350         check date NewEra $max Aug 17
 351 #       set date Heisei $max Jul 28
 352 #       set timeofday 23 59 59 999
 353 #       add month 1
 354 #       check date Heisei $max Aug 16
 355 #       check timeofday 23 59 59 999
 356 
 357 test add WEEK_OF_YEAR
 358     use jcal
 359         clear all
 360         # 1867 Dec 23 is Monday.
 361         set date BeforeMeiji 1867 Dec 23
 362         add week_of_year 2
 363         check day_of_week Mon
 364         check date Meiji 1 Jan 6
 365         add week_of_year -2
 366         check day_of_week Mon
 367         check date BeforeMeiji 1867 Dec 23
 368 
 369         # 1867 Dec 23 is Wednesday.
 370         set date Meiji 1 Dec 23
 371         add week_of_year 2
 372         check day_of_week Wed
 373         check date Meiji 2 Jan 6
 374         add week_of_year -2
 375         check day_of_week Wed
 376         check date Meiji 1 Dec 23
 377 
 378         # Meiji 45 July 23 is Tuesday.
 379         set date Meiji 45 Jul 23
 380         add week_of_year 1
 381         check day_of_week Tue
 382         check date Taisho 1 Jul 30
 383         add week_of_year -1
 384         check day_of_week Tue
 385         check date Meiji 45 Jul 23
 386 
 387         # Taisho 15 December 23 is Thursday.
 388         set date Taisho 15 Dec 23
 389         add week_of_year 1
 390         check day_of_week Thu
 391         check date Showa 1 Dec 30
 392         add week_of_year -1
 393         check day_of_week Thu
 394         check date Taisho 15 Dec 23
 395 
 396         # Showa Gan-nen December 30 is Thursday.  Showa Gan-nen has
 397         # only one week. Rolling any number of weeks brings to the
 398         # same date.
 399         set date Showa 1 Dec 30
 400         add week_of_year 1
 401         check day_of_week Thu
 402         check date Showa 2 Jan 6
 403         add week_of_year -1
 404         check day_of_week Thu
 405         check date Showa 1 Dec 30
 406 
 407         # Showa 64 January 7 is Saturday. The year has only one week.
 408         set date Showa 64 Jan 7
 409         add week_of_year 1
 410         check day_of_week Sat
 411         check date Heisei 1 Jan 14
 412         add week_of_year -1
 413         check day_of_week Sat
 414         check date Showa 64 Jan 7
 415 
 416     use tokyocal
 417         clear all
 418 
 419         set date BeforeMeiji $minyear Dec 25
 420         check day_of_week Sat
 421         eval $minyear + 1
 422         assign $result $minyear_plus_1
 423         add week_of_year 1
 424         check day_of_week Sat
 425         check date BeforeMeiji $minyear_plus_1 Jan 1
 426         add week_of_year -1
 427         check day_of_week Sat
 428         check date BeforeMeiji $minyear Dec 25
 429 
 430 test WEEK_OF_MONTH
 431     use jcal
 432         clear all
 433 
 434 test DAY_OF_MONTH
 435     use jcal
 436         clear all
 437 
 438 test DAY_OF_YEAR
 439     use jcal
 440         clear all
 441 
 442         # 1867 is a regular Gregorian year.
 443         set date BeforeMeiji 1867 Dec 31
 444         add day_of_year 1
 445         check date Meiji 1 Jan 1
 446         add day_of_year -1
 447         check date BeforeMeiji 1867 Dec 31
 448         add day_of_year 26
 449         check date Meiji 1 Jan 26
 450         add day_of_year -26
 451         check date BeforeMeiji 1867 Dec 31
 452 
 453         # Meiji 1 starts from Jan 1. It's a regular year as well.
 454         set date Meiji 1 Dec 31
 455         add day_of_year 1
 456         check date Meiji 2 Jan 1
 457         add day_of_year -1
 458         check date Meiji 1 Dec 31
 459         add day_of_year 26
 460         check date Meiji 2 Jan 26
 461         add day_of_year -26
 462         check date Meiji 1 Dec 31
 463 
 464         # The last year of Meiji (45) has an irregularity. Meiji 45
 465         # July 30 is actually Taisho 1 July 30.
 466         set date Meiji 45 Jul 29
 467         add day_of_year 1
 468         check date Taisho 1 Jul 30
 469         add day_of_year -1
 470         check date Meiji 45 Jul 29
 471 
 472         # The first day of Taisho, July 30.
 473         set date Taisho 1 Jul 30
 474         add day_of_year -1
 475         check date Meiji 45 Jul 29
 476         add day_of_year 1
 477         check date Taisho 1 Jul 30
 478 
 479         set date Taisho 15 Dec 24
 480         add day_of_year 1
 481         check date Showa 1 Dec 25
 482         add day_of_year -1
 483         check date Taisho 15 Dec 24
 484 
 485         set date Showa 1 Dec 31
 486         add day_of_year 1
 487         check date Showa 2 Jan 1
 488         add day_of_year -1
 489         check date Showa 1 Dec 31
 490         add day_of_year 25
 491         check date Showa 2 Jan 25
 492         add day_of_year -25
 493         check date Showa 1 Dec 31
 494 
 495         set date Showa 64 Jan 7
 496         add day_of_year 1
 497         check date Heisei 1 Jan 8
 498         add day_of_year -1
 499         check date Showa 64 Jan 7
 500 
 501         set date Heisei 1 Dec 31
 502         add day_of_year 5
 503         check date Heisei 2 Jan 5
 504         add day_of_year -5
 505         check date Heisei 1 Dec 31
 506 
 507     use tokyocal
 508         clear all
 509 
 510         set date BeforeMeiji $minyear Dec 31
 511         set timeofday 1 47 4 192
 512         add day_of_year 1
 513         check date BeforeMeiji $minyear_plus_1 Jan 1
 514         check timeofday 1 47 4 192
 515         add day_of_year -1
 516         check date BeforeMeiji $minyear Dec 31
 517         check timeofday 1 47 4 192
 518 
 519 test DAY_OF_WEEK_IN_MONTH
 520     use jcal
 521         clear all