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