when_exe 0.3.6 → 0.3.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (117) hide show
  1. checksums.yaml +7 -0
  2. data/README.md +171 -0
  3. data/lib/when_exe.rb +78 -47
  4. data/lib/when_exe/basictypes.rb +752 -747
  5. data/lib/when_exe/calendarnote.rb +805 -801
  6. data/lib/when_exe/calendartypes.rb +1583 -1531
  7. data/lib/when_exe/coordinates.rb +16 -15
  8. data/lib/when_exe/core/duration.rb +114 -110
  9. data/lib/when_exe/core/extension.rb +504 -504
  10. data/lib/when_exe/ephemeris.rb +1917 -1913
  11. data/lib/when_exe/ephemeris/moon.rb +333 -333
  12. data/lib/when_exe/ephemeris/notes.rb +389 -387
  13. data/lib/when_exe/ephemeris/planets.rb +585 -585
  14. data/lib/when_exe/ephemeris/sun.rb +214 -214
  15. data/lib/when_exe/googlecalendar.rb +144 -140
  16. data/lib/when_exe/icalendar.rb +1636 -1636
  17. data/lib/when_exe/inspect.rb +46 -22
  18. data/lib/when_exe/locales/akt.rb +176 -176
  19. data/lib/when_exe/locales/encoding_conversion.rb +134 -126
  20. data/lib/when_exe/locales/iast.rb +90 -90
  21. data/lib/when_exe/locales/locale.rb +750 -746
  22. data/lib/when_exe/locales/transliteration_table.rb +62 -62
  23. data/lib/when_exe/mini_application.rb +307 -305
  24. data/lib/when_exe/parts/enumerator.rb +2 -2
  25. data/lib/when_exe/parts/geometric_complex.rb +397 -397
  26. data/lib/when_exe/parts/method_cash.rb +224 -224
  27. data/lib/when_exe/parts/resource.rb +1069 -1071
  28. data/lib/when_exe/parts/timezone.rb +240 -230
  29. data/lib/when_exe/region/armenian.rb +56 -56
  30. data/lib/when_exe/region/babylonian.rb +405 -0
  31. data/lib/when_exe/region/bahai.rb +146 -146
  32. data/lib/when_exe/region/balinese.rb +622 -622
  33. data/lib/when_exe/region/chinese.rb +95 -25
  34. data/lib/when_exe/region/chinese/calendars.rb +1016 -1016
  35. data/lib/when_exe/region/chinese/epochs.rb +1 -1
  36. data/lib/when_exe/region/chinese/twins.rb +803 -795
  37. data/lib/when_exe/region/christian.rb +824 -824
  38. data/lib/when_exe/region/coptic.rb +106 -87
  39. data/lib/when_exe/region/discordian.rb +225 -225
  40. data/lib/when_exe/region/far_east.rb +188 -188
  41. data/lib/when_exe/region/french.rb +56 -56
  42. data/lib/when_exe/region/geologicalage.rb +639 -639
  43. data/lib/when_exe/region/goddess.rb +58 -58
  44. data/lib/when_exe/region/indian.rb +1254 -1251
  45. data/lib/when_exe/region/iranian.rb +8 -8
  46. data/lib/when_exe/region/islamic.rb +3 -3
  47. data/lib/when_exe/region/japanese.rb +93 -99
  48. data/lib/when_exe/region/japanese/calendars.rb +396 -397
  49. data/lib/when_exe/region/japanese/epochs.rb +26 -26
  50. data/lib/when_exe/region/japanese/nihon_shoki.rb +71 -71
  51. data/lib/when_exe/region/japanese/notes.rb +1383 -1386
  52. data/lib/when_exe/region/japanese/residues.rb +1306 -1306
  53. data/lib/when_exe/region/japanese/twins.rb +225 -225
  54. data/lib/when_exe/region/japanese/weeks.rb +112 -0
  55. data/lib/when_exe/region/javanese.rb +230 -230
  56. data/lib/when_exe/region/jewish.rb +126 -126
  57. data/lib/when_exe/region/korean.rb +378 -378
  58. data/lib/when_exe/region/m17n.rb +114 -113
  59. data/lib/when_exe/region/martian.rb +258 -255
  60. data/lib/when_exe/region/mayan.rb +32 -32
  61. data/lib/when_exe/region/residue.rb +89 -89
  62. data/lib/when_exe/region/roman.rb +36 -24
  63. data/lib/when_exe/region/ryukyu.rb +97 -97
  64. data/lib/when_exe/region/shire.rb +240 -240
  65. data/lib/when_exe/region/soviet.rb +209 -0
  66. data/lib/when_exe/region/symmetry.rb +50 -50
  67. data/lib/when_exe/region/thai.rb +336 -335
  68. data/lib/when_exe/region/tibetan.rb +316 -315
  69. data/lib/when_exe/region/vietnamese.rb +440 -439
  70. data/lib/when_exe/region/weekdate.rb +80 -80
  71. data/lib/when_exe/region/world.rb +175 -175
  72. data/lib/when_exe/region/yerm.rb +14 -14
  73. data/lib/when_exe/region/zoroastrian.rb +203 -203
  74. data/lib/when_exe/timestandard.rb +707 -681
  75. data/lib/when_exe/tmduration.rb +338 -330
  76. data/lib/when_exe/tmobjects.rb +1346 -1325
  77. data/lib/when_exe/tmposition.rb +2115 -2072
  78. data/lib/when_exe/tmreference.rb +1693 -1669
  79. data/lib/when_exe/version.rb +1 -1
  80. data/link_to_online_documents +1 -1
  81. data/test/examples/JapanHolidaysRFC6350.ics +1 -1
  82. data/test/test.rb +67 -61
  83. data/test/test/basictypes.rb +409 -409
  84. data/test/test/calendarnote.rb +86 -69
  85. data/test/test/calendartypes.rb +97 -97
  86. data/test/test/coordinates.rb +396 -396
  87. data/test/test/ephemeris.rb +83 -74
  88. data/test/test/ephemeris/moon.rb +14 -14
  89. data/test/test/ephemeris/planets.rb +14 -14
  90. data/test/test/ephemeris/sun.rb +14 -14
  91. data/test/test/googlecalendar.rb +194 -176
  92. data/test/test/icalendar.rb +867 -858
  93. data/test/test/inspect.rb +117 -117
  94. data/test/test/parts.rb +487 -487
  95. data/test/test/region/balinese.rb +34 -0
  96. data/test/test/region/chinese.rb +218 -206
  97. data/test/test/region/christian.rb +245 -245
  98. data/test/test/region/coptic.rb +27 -27
  99. data/test/test/region/french.rb +33 -33
  100. data/test/test/region/geologicalage.rb +17 -17
  101. data/test/test/region/indian.rb +57 -57
  102. data/test/test/region/iran.rb +54 -54
  103. data/test/test/region/islamic.rb +18 -18
  104. data/test/test/region/japanese.rb +237 -219
  105. data/test/test/region/jewish.rb +61 -61
  106. data/test/test/region/m17n.rb +184 -184
  107. data/test/test/region/mayan.rb +195 -195
  108. data/test/test/region/residue.rb +147 -139
  109. data/test/test/region/thai.rb +116 -116
  110. data/test/test/region/tibetan.rb +30 -30
  111. data/test/test/region/vietnamese.rb +102 -102
  112. data/test/test/region/yerm.rb +146 -146
  113. data/test/test/timestandard.rb +81 -81
  114. data/test/test/tmobjects.rb +328 -328
  115. data/test/test/tmposition.rb +397 -284
  116. data/test/test/tmreference.rb +157 -157
  117. metadata +13 -10
@@ -6,5 +6,5 @@
6
6
  =end
7
7
 
8
8
  module When
9
- VERSION = "0.3.6"
9
+ VERSION = "0.3.7"
10
10
  end
@@ -1,4 +1,4 @@
1
1
  See online documents.
2
2
  wiki: http://www2u.biglobe.ne.jp/~suchowan/when_exe_wiki.html
3
- yard: http://rubydoc.info/gems/when_exe/0.3.5/frames
3
+ yard: http://rubydoc.info/gems/when_exe/frames
4
4
  demo: http://hosi.org
@@ -1,5 +1,5 @@
1
1
  BEGIN:VCALENDAR
2
- # Copyright (C) 2011 Takashi SUGA
2
+ # Copyright (C) 2011-2014 Takashi SUGA
3
3
  #
4
4
  # You may use and/or modify this file according to the license
5
5
  # described in the LICENSE.txt file included in this archive.
@@ -1,61 +1,67 @@
1
- #!/usr/bin/env ruby
2
- # -*- coding: utf-8 -*-
3
- =begin
4
- Copyright (C) 2011-2014 Takashi SUGA
5
-
6
- You may use and/or modify this file according to the license
7
- described in the LICENSE.txt file included in this archive.
8
- =end
9
-
10
- require 'pp'
11
- require 'date'
12
- begin
13
- require 'minitest/unit'
14
- require 'minitest/autorun'
15
- Test = MiniTest
16
- class Test::Unit::TestCase
17
- alias :assert_raise :assert_raises
18
- end
19
- rescue LoadError
20
- require 'test/unit'
21
- end
22
-
23
- class Test::Unit::TestCase
24
- def setup
25
- When._setup_({:multi_thread=>true})
26
- end
27
- end
28
-
29
- require 'when_exe'
30
- require 'when_exe/mini_application'
31
- #include When
32
-
33
- require './test/parts'
34
- require './test/basictypes'
35
- require './test/ephemeris'
36
- require './test/timestandard'
37
- require './test/coordinates'
38
- require './test/icalendar'
39
- require './test/tmobjects'
40
- require './test/tmreference'
41
- require './test/tmposition'
42
- require './test/calendartypes'
43
- require './test/calendarnote'
44
- require './test/inspect'
45
- require './test/googlecalendar'
46
- require './test/region/m17n'
47
- require './test/region/residue'
48
- require './test/region/christian'
49
- require './test/region/japanese'
50
- require './test/region/chinese'
51
- require './test/region/vietnamese'
52
- require './test/region/tibetan'
53
- require './test/region/thai'
54
- require './test/region/indian'
55
- require './test/region/iran'
56
- require './test/region/mayan'
57
- require './test/region/jewish'
58
- require './test/region/french'
59
- require './test/region/coptic'
60
- require './test/region/yerm'
61
- require './test/region/geologicalage'
1
+ #!/usr/bin/env ruby
2
+ # -*- coding: utf-8 -*-
3
+ =begin
4
+ Copyright (C) 2011-2014 Takashi SUGA
5
+
6
+ You may use and/or modify this file according to the license
7
+ described in the LICENSE.txt file included in this archive.
8
+ =end
9
+
10
+ require 'pp'
11
+ require 'date'
12
+ begin
13
+ require 'minitest/autorun'
14
+ module MiniTest
15
+ TestCase = MiniTest.const_defined?(:Test) ? Test : Unit::TestCase
16
+ end
17
+ rescue LoadError
18
+ require 'test/unit'
19
+ MiniTest = Test
20
+ module Test
21
+ TestCase = Unit::TestCase
22
+ class Unit::TestCase
23
+ alias :assert_raises :assert_raise
24
+ end
25
+ end
26
+ end
27
+
28
+ class MiniTest::TestCase
29
+ def setup
30
+ When._setup_({:multi_thread=>true})
31
+ end
32
+ end
33
+
34
+ require 'when_exe'
35
+ require 'when_exe/mini_application'
36
+ #include When
37
+
38
+ require './test/parts'
39
+ require './test/basictypes'
40
+ require './test/ephemeris'
41
+ require './test/timestandard'
42
+ require './test/coordinates'
43
+ require './test/icalendar'
44
+ require './test/tmobjects'
45
+ require './test/tmreference'
46
+ require './test/tmposition'
47
+ require './test/calendartypes'
48
+ require './test/calendarnote'
49
+ require './test/inspect'
50
+ require './test/googlecalendar'
51
+ require './test/region/m17n'
52
+ require './test/region/residue'
53
+ require './test/region/christian'
54
+ require './test/region/japanese'
55
+ require './test/region/chinese'
56
+ require './test/region/vietnamese'
57
+ require './test/region/tibetan'
58
+ require './test/region/balinese'
59
+ require './test/region/thai'
60
+ require './test/region/indian'
61
+ require './test/region/iran'
62
+ require './test/region/mayan'
63
+ require './test/region/jewish'
64
+ require './test/region/french'
65
+ require './test/region/coptic'
66
+ require './test/region/yerm'
67
+ require './test/region/geologicalage'
@@ -1,409 +1,409 @@
1
- # -*- coding: utf-8 -*-
2
- =begin
3
- Copyright (C) 2011-2014 Takashi SUGA
4
-
5
- You may use and/or modify this file according to the license
6
- described in the LICENSE.txt file included in this archive.
7
- =end
8
-
9
- module Test
10
-
11
- module BasicTypes
12
-
13
- #
14
- # ISO 8601 Date and Time Representation
15
- #
16
- class DateTime < Unit::TestCase
17
-
18
- def test__to_array_assert
19
- assert_raises(TypeError) { When::BasicTypes::DateTime._to_array(1) }
20
- assert_raises(ArgumentError) { When::BasicTypes::DateTime._to_array("") }
21
- end
22
-
23
- def test__x0301_5_2_1
24
- [ # 5.2.1 暦日付
25
- ["19850412", [ 0, "1985-04-12"]], # 1 完全表記 基本形式
26
- ["1985-04-12", [ 0, "1985-04-12"]], # 1 完全表記 拡張形式
27
- ["1985-04", [-1, "1985-04" ]], # 2 a) 下位省略表記 特定の月 基本形式
28
- ["1985", [-2, "1985" ]], # 2 b) 下位省略表記 特定の年 基本形式
29
- ["19", [-4, "1900" ]], # 2 c) 下位省略表記 特定の百年台 基本形式
30
- ["850412", [ 0, "1985-04-12"]], # 3 a) 上位省略表記 ある百年代の特定の日 基本形式
31
- ["85-04-12", [ 0, "1985-04-12"]], # 3 a) 上位省略表記 ある百年代の特定の日 拡張形式
32
- ["-8504", [-1, "1985-04" ]], # 3 b) 上位省略表記 ある百年代の特定の月 基本形式
33
- ["-85-04", [-1, "1985-04" ]], # 3 b) 上位省略表記 ある百年代の特定の月 拡張形式
34
- ["-85", [-2, "1985" ]], # 3 c) 上位省略表記 ある百年代の特定の年 基本形式
35
- ["--0412", [ 0, "1985-04-12"]], # 3 d) 上位省略表記 ある年の特定の月日 基本形式
36
- ["--04-12", [ 0, "1985-04-12"]], # 3 d) 上位省略表記 ある年の特定の月日 拡張形式
37
- ["--04", [-1, "1985-04" ]], # 3 e) 上位省略表記 ある年の特定の月 基本形式
38
- ["---12", [ 0, "1985-04-12"]], # 3 f) 上位省略表記 ある月の特定の日 基本形式
39
- ["+019850412", [ 0, "1985-04-12"]], # 4 a) 拡大表記 特定の日 基本形式
40
- ["+01985-04-12", [ 0, "1985-04-12"]], # 4 a) 拡大表記 特定の日 拡張形式
41
- ["+01985-04", [-1, "1985-04" ]], # 4 b) 拡大表記 特定の月 基本形式
42
- ["+01985", [-2, "1985" ]], # 4 c) 拡大表記 特定の年 基本形式
43
- ["+019", [-4, "1900" ]], # 4 d) 拡大表記 特定の百年代 基本形式
44
- ].each do |sample|
45
- date = When.when?(sample[0], {:abbr=>[1985,4,12]})
46
- assert_equal(sample[1], [date.precision, date.to_s])
47
- end
48
- end
49
-
50
- def test__x0301_5_2_1_4
51
- [ # 5.2.1.4 暦日付 拡大表記(Abbr 指定なし)
52
- ["-019850412", [ 0, "-01985-04-12"]], # 4 a) 拡大表記 特定の日 基本形式
53
- ["+019850412", [ 0, "1985-04-12"]], # 4 a) 拡大表記 特定の日 基本形式
54
- ["-01985-04-12", [ 0, "-01985-04-12"]], # 4 a) 拡大表記 特定の日 拡張形式
55
- ["+01985-04-12", [ 0, "1985-04-12"]], # 4 a) 拡大表記 特定の日 拡張形式
56
- ["-01985-04", [-1, "-01985-04" ]], # 4 b) 拡大表記 特定の月 基本形式
57
- ["+01985-04", [-1, "1985-04" ]], # 4 b) 拡大表記 特定の月 基本形式
58
- ["-01985", [-2, "-01985" ]], # 4 c) 拡大表記 特定の年 基本形式
59
- ["+01985", [-2, "1985" ]], # 4 c) 拡大表記 特定の年 基本形式
60
- ["-0190", [-2, "-00190" ]], # 4 d) 拡大表記 特定の年 基本形式
61
- ["+0190", [-2, "0190" ]], # 4 d) 拡大表記 特定の年 基本形式
62
- ["-019", [-4, "-01900" ]], # 4 d) 拡大表記 特定の百年代 基本形式
63
- ["+019", [-4, "1900" ]], # 4 d) 拡大表記 特定の百年代 基本形式
64
- ["-119", [-4, "-11900" ]], # 4 d) 拡大表記 特定の百年代 基本形式
65
- ["+119", [-4, "+11900" ]], # 4 d) 拡大表記 特定の百年代 基本形式
66
- ].each do |sample|
67
- date = When.when?(sample[0])
68
- assert_equal(sample[1], [date.precision, date.to_s])
69
- end
70
- end
71
-
72
- def test__x0301_5_2_2
73
- [ # 5.2.2 年間通算日
74
- ["1985102", [ 0, "1985-04-12"]], # 1 完全表記 基本形式
75
- ["1985-102", [ 0, "1985-04-12"]], # 1 完全表記 拡張形式
76
- ["85102", [ 0, "1985-04-12"]], # 2 a) 上位省略表記 ある百年代の特定の年日 基本形式
77
- ["85-102", [ 0, "1985-04-12"]], # 2 a) 上位省略表記 ある百年代の特定の年日 拡張形式
78
- ["-102", [ 0, "1985-04-12"]], # 2 b) 上位省略表記 ある年の特定の日 基本形式
79
- ["+01985102", [ 0, "1985-04-12"]], # 3 a) 拡大表記 特定の日 基本形式
80
- ["+01985-102", [ 0, "1985-04-12"]], # 3 a) 拡大表記 特定の日 拡張形式
81
- ].each do |sample|
82
- date = When.when?(sample[0], {:abbr=>[1985,4,12]})
83
- assert_equal(sample[1], [date.precision, date.to_s])
84
- end
85
- end
86
-
87
- def test__x0301_5_2_3
88
- [ # 5.2.3 暦週日付
89
- ["1985W155", [ 0, "1985-04-12"]], # 1 完全表記 基本形式
90
- ["1985-W15-5", [ 0, "1985-04-12"]], # 1 完全表記 拡張形式
91
- ["1985W15", [ 0, "1985-04-08...1985-04-15"]], # 2 a) 下位省略表記 基本形式
92
- ["1985-W15", [ 0, "1985-04-08...1985-04-15"]], # 2 a) 下位省略表記 拡張形式
93
- ["85W155", [ 0, "1985-04-12"]], # 3 a) 上位省略表記 ある百年代における年週日 基本形式
94
- ["85-W15-5", [ 0, "1985-04-12"]], # 3 a) 上位省略表記 ある百年代における年週日 拡張形式
95
- ["85W15", [ 0, "1985-04-08...1985-04-15"]], # 3 b) 上位省略表記 ある百年代における年週 基本形式
96
- ["85-W15", [ 0, "1985-04-08...1985-04-15"]], # 3 b) 上位省略表記 ある百年代における年週 拡張形式
97
- ["-5W155", [ 0, "1985-04-12"]], # 3 c) 上位省略表記 ある十年代における年週日 基本形式
98
- ["-5-W15-5", [ 0, "1985-04-12"]], # 3 c) 上位省略表記 ある十年代における年週日 拡張形式
99
- ["-5W15", [ 0, "1985-04-08...1985-04-15"]], # 3 d) 上位省略表記 ある十年代における年週 基本形式
100
- ["-5-W15", [ 0, "1985-04-08...1985-04-15"]], # 3 d) 上位省略表記 ある十年代における年週 拡張形式
101
- ["-W155", [ 0, "1985-04-12"]], # 3 e) 上位省略表記 ある年の週日 基本形式
102
- ["-W15-5", [ 0, "1985-04-12"]], # 3 e) 上位省略表記 ある年の週日 拡張形式
103
- ["-W15", [ 0, "1985-04-08...1985-04-15"]], # 3 f) 上位省略表記 ある年の週 基本形式
104
- ["-W-5", [ 0, "1985-04-12"]], # 3 g) 上位省略表記 ある週の日 基本形式
105
- ["+01985W155", [ 0, "1985-04-12"]], # 4 a) 拡大表記 特定の日 基本形式
106
- ["+01985-W15-5", [ 0, "1985-04-12"]], # 4 a) 拡大表記 特定の日 拡張形式
107
- ["+01985W15", [ 0, "1985-04-08...1985-04-15"]], # 4 b) 拡大表記 特定の週 基本形式
108
- ["+01985-W15", [ 0, "1985-04-08...1985-04-15"]], # 4 c) 拡大表記 特定の週 拡張形式
109
- ].each do |sample|
110
- date = When.when?(sample[0], {:abbr=>[1985,15,5]})
111
- assert_equal(sample[1], [date.precision, date.to_s])
112
- end
113
-
114
- result = []
115
- (1900...1928).each do |year|
116
- date = ::Date.new(year, 1, 1) - 7
117
- 14.times do
118
- gdate = When.TemporalPosition(date.year, date.month, date.day)
119
- strdate = date.strftime('%G-W%V-%u')
120
- strgdate = gdate.strftime('%G-W%V-%u')
121
- w1date = When::WeekDate ^ date
122
- w2date = When.when?(strdate, {:frame=>When::WeekDate})
123
- strw1date = w1date.strftime
124
- strw2date = w2date.strftime
125
- result << [[strdate, strgdate, strw1date, strw2date].uniq.size, date.jd == w1date.to_i, date.jd == w2date.to_i]
126
- end
127
- end
128
- assert_equal([[1, true, true]], result.uniq)
129
- end
130
-
131
- def test__x0301_5_2_4
132
- [ # 5.2.4 元号による日付
133
- ["60.04.12", [ 0, "S60(1985).04.12"]], # 1 完全表記 基本形式
134
- ["S60.04.12", [ 0, "S60(1985).04.12"]], # 1 完全表記 拡張形式
135
- ].each do |sample|
136
- date = When.when?(sample[0], {:era_name=>'S'})
137
- assert_equal(sample[1], [date.precision, date.to_s])
138
- end
139
- end
140
-
141
- def test__x0301_5_3_1
142
- When::TM::Clock.local_time = When::UTC
143
-
144
- [ # 5.3.1 地方時の時刻
145
- ["T232050", [ 3, "T23:20:50" ]], # 1 完全表記 基本形式
146
- ["T23:20:50", [ 3, "T23:20:50" ]], # 1 完全表記 拡張形式
147
- ["T2320", [ 2, "T23:20" ]], # 2 a) 下位省略表記 特定の時分 基本形式
148
- ["T23:20", [ 2, "T23:20" ]], # 2 a) 下位省略表記 特定の時分 拡張形式
149
- ["T23", [ 1, "T23" ]], # 2 b) 下位省略表記 特定の時 基本形式
150
- ].each do |sample|
151
- date = When.when?(sample[0])
152
- assert_equal(sample[1], [date.precision, date.to_s])
153
- end
154
-
155
- [ # 3 小数点を用いる表記
156
- ["T232050.5", 4, [ 4, "T23:20:50.5" ]], # a) 特定の時分秒及び秒の小数部分 基本形式
157
- ["T152735,5", 4, [ 4, "T15:27:35.5" ]], # a) 特定の時分秒及び秒の小数部分 基本形式
158
- ["T23:20:50.5", 4, [ 4, "T23:20:50.5" ]], # a) 特定の時分秒及び秒の小数部分 拡張形式
159
- ["T2320.8", 3, [ 3, "T23:20:48" ]], # b) 特定の時分及び分の小数部分 基本形式
160
- ["T23:20.8", 3, [ 3, "T23:20:48" ]], # b) 特定の時分及び分の小数部分 拡張形式
161
- ["T23.3", 2, [ 2, "T23:18" ]], # c) 特定の時及び時の小数部分 基本形式
162
- ].each do |sample|
163
- date = When.when?(sample[0], {:precision=>sample[1]})
164
- assert_equal(sample[2], [date.precision, date.to_s])
165
- end
166
-
167
- [ # 4 上位省略表記
168
- ["T-2050", [ 3, "T23:20:50" ]], # a) ある時“hour”における特定の分秒 基本形式
169
- ["T-:20:50", [ 3, "T23:20:50" ]], # a) ある時“hour”における特定の分秒 拡張形式
170
- ["T-20", [ 2, "T23:20" ]], # b) ある時“hour”における特定の分 基本形式
171
- ["T--50", [ 3, "T23:20:50" ]], # c) ある分の特定の秒 基本形式
172
- ].each do |sample|
173
- date = When.when?(sample[0], {:abbr=>[1985,4,12,23,20,50]})
174
- assert_equal(sample[1], [date.precision, date.to_s])
175
- end
176
-
177
- [ # 4 小数点を用いる上位省略表記
178
- ["T-2050.5", 4, [ 4, "T23:20:50.5" ]], # a) ある時“hour”における特定の分秒 基本形式
179
- ["T-2735,5", 4, [ 4, "T23:27:35.5" ]], # a) ある時“hour”における特定の分秒 基本形式
180
- ["T-:20:50.5", 4, [ 4, "T23:20:50.5" ]], # a) ある時“hour”における特定の分秒 拡張形式
181
- ["T-20.8", 3, [ 3, "T23:20:48" ]], # b) ある時“hour”における特定の分 基本形式
182
- ["T--50.5", 4, [ 4, "T23:20:50.5" ]], # c) ある分の特定の秒 基本形式
183
- ].each do |sample|
184
- date = When.when?(sample[0], {:abbr=>[1985,4,12,23,20,50], :precision=>sample[1]})
185
- assert_equal(sample[2], [date.precision, date.to_s])
186
- end
187
- end
188
-
189
- def test__x0301_5_3_2
190
- When::TM::Clock.local_time = When.Clock("+0900")
191
- [ # 5.3.2 夜の12時
192
- ["19850412T240000", [ 3, "1985-04-13T00:00:00"]], # 完全表記 基本形式
193
- ["1985-04-12T24:00:00", [ 3, "1985-04-13T00:00:00"]], # 完全表記 拡張形式
194
- ["19850412T2400", [ 2, "1985-04-13T00:00" ]], # 下位省略表記 基本形式
195
- ["1985-04-12T24:00", [ 2, "1985-04-13T00:00" ]], # 下位省略表記 拡張形式
196
- ].each do |sample|
197
- date = When.when?(sample[0])
198
- assert_equal(sample[1], [date.precision, date.to_s])
199
- end
200
- end
201
-
202
- def test__x0301_5_3_3
203
- [ # 5.3.3 協定世界時(UTC)の時刻
204
- ["T232050Z", [ 3, "T23:20:50Z" ]], # 1 完全表記 基本形式
205
- ["T23:20:50Z", [ 3, "T23:20:50Z" ]], # 1 完全表記 拡張形式
206
- ["T2320Z", [ 2, "T23:20Z" ]], # 2 a) 下位省略表記 特定の時分 基本形式
207
- ["T23:20Z", [ 2, "T23:20Z" ]], # 2 a) 下位省略表記 特定の時分 拡張形式
208
- ["T23Z", [ 1, "T23Z" ]], # 2 b) 下位省略表記 特定の時 基本形式
209
- ].each do |sample|
210
- date = When.when?(sample[0])
211
- assert_equal(sample[1], [date.precision, date.to_s])
212
- end
213
-
214
- [ # 3 小数点を用いる表記
215
- ["T232050.5Z", 4, [ 4, "T23:20:50.5Z" ]], # a) 特定の時分秒及び秒の小数部分 基本形式
216
- ["T23:20:50.5Z",4, [ 4, "T23:20:50.5Z" ]], # a) 特定の時分秒及び秒の小数部分 拡張形式
217
- ["T2320.8Z", 3, [ 3, "T23:20:48Z" ]], # b) 特定の時分及び分の小数部分 基本形式
218
- ["T23:20.8Z", 3, [ 3, "T23:20:48Z" ]], # b) 特定の時分及び分の小数部分 拡張形式
219
- ["T23.3Z", 2, [ 2, "T23:18Z" ]], # c) 特定の時及び時の小数部分 基本形式
220
- ].each do |sample|
221
- date = When.when?(sample[0], {:precision=>sample[1]})
222
- assert_equal(sample[2], [date.precision, date.to_s])
223
- end
224
-
225
- [ # 4 上位省略表記
226
- ["T-2050Z", [ 3, "T23:20:50Z" ]], # a) ある時“hour”における特定の分秒 基本形式
227
- ["T-:20:50Z", [ 3, "T23:20:50Z" ]], # a) ある時“hour”における特定の分秒 拡張形式
228
- ["T-20Z", [ 2, "T23:20Z" ]], # b) ある時“hour”における特定の分 基本形式
229
- ["T--50Z", [ 3, "T23:20:50Z" ]], # c) ある分の特定の秒 基本形式
230
- ].each do |sample|
231
- date = When.when?(sample[0], {:abbr=>[1985,4,12,23,20,50]})
232
- assert_equal(sample[1], [date.precision, date.to_s])
233
- end
234
-
235
- [ # 4 小数点を用いる上位省略表記
236
- ["T-2050.5Z", 4, [ 4, "T23:20:50.5Z" ]], # a) ある時“hour”における特定の分秒 基本形式
237
- ["T-:20:50.5Z", 4, [ 4, "T23:20:50.5Z" ]], # a) ある時“hour”における特定の分秒 拡張形式
238
- ["T-20.8Z", 3, [ 3, "T23:20:48Z" ]], # b) ある時“hour”における特定の分 基本形式
239
- ["T--50.5Z", 4, [ 4, "T23:20:50.5Z" ]], # c) ある分の特定の秒 基本形式
240
- ].each do |sample|
241
- date = When.when?(sample[0], {:abbr=>[1985,4,12,23,20,50], :precision=>sample[1]})
242
- assert_equal(sample[2], [date.precision, date.to_s])
243
- end
244
- end
245
-
246
- def test__x0301_5_3_4
247
- [ # 5.3.4 地方時及び協定世界時
248
- ["T+0100", [ 0, "T+01:00" ]], # 1 地方時と協定世界時との差(時差の表記) 基本形式
249
- ["T+01", [ 0, "T+01:00" ]], # 1 地方時と協定世界時との差(時差の表記) 基本形式
250
- ["T+01:00", [ 0, "T+01:00" ]], # 1 地方時と協定世界時との差(時差の表記) 拡張形式
251
- ["T152746+0100", [ 3, "T15:27:46+01:00" ]], # 2 地方時と協定世界時との差(地方時の表記) 基本形式
252
- ["T152746-0500", [ 3, "T15:27:46-05:00" ]], # 2 地方時と協定世界時との差(地方時の表記) 基本形式
253
- ["T152746+01", [ 3, "T15:27:46+01:00" ]], # 2 地方時と協定世界時との差(地方時の表記) 基本形式
254
- ["T152746-05", [ 3, "T15:27:46-05:00" ]], # 2 地方時と協定世界時との差(地方時の表記) 基本形式
255
- ["T15:27:46+01:00", [ 3, "T15:27:46+01:00" ]], # 2 地方時と協定世界時との差(地方時の表記) 拡張形式
256
- ["T15:27:46-05:00", [ 3, "T15:27:46-05:00" ]], # 2 地方時と協定世界時との差(地方時の表記) 拡張形式
257
- ["T15:27:46+01", [ 3, "T15:27:46+01:00" ]], # 2 地方時と協定世界時との差(地方時の表記) 拡張形式
258
- ["T15:27:46-05", [ 3, "T15:27:46-05:00" ]], # 2 地方時と協定世界時との差(地方時の表記) 拡張形式
259
- ].each do |sample|
260
- date = When.when?(sample[0])
261
- assert_equal(sample[1], [date.precision, date.to_s])
262
- end
263
- end
264
-
265
- def test__x0301_5_4_2
266
- When::TM::Clock.local_time = When.Clock("+0900")
267
- [ # 5.4.2 完全表記以外の表記
268
- ["19850412T1015", [ 2, "1985-04-12T10:15" ]], # a) 暦日付及び地方時 基本形式
269
- ["1985-04-12T10:15", [ 2, "1985-04-12T10:15" ]], # a) 暦日付及び地方時 拡張形式
270
- ["1985102T1015Z", [ 2, "1985-04-12T10:15Z" ]], # b) 年間通算日及び協定世界時 基本形式
271
- ["1985-102T10:15Z", [ 2, "1985-04-12T10:15Z" ]], # b) 年間通算日及び協定世界時 拡張形式
272
- ["1985W155T1015+0400", [ 2, "1985-04-12T10:15+04:00" ]], # c) 暦週日付,地方時,及びUTCとの差 基本形式
273
- ["1985-W15-5T10:15+04:00",[ 2, "1985-04-12T10:15+04:00" ]], # c) 暦週日付,地方時,及びUTCとの差 拡張形式
274
- ].each do |sample|
275
- date = When.when?(sample[0])
276
- assert_equal(sample[1], [date.precision, date.to_s])
277
- end
278
- end
279
-
280
- def test__x0301_5_5_4
281
- When::TM::Clock.local_time = When.Clock("+0900") # 時間間隔の表記
282
- [ # 5.5.4 完全表記
283
- ["19850412T232050/19850625T103000", "1985-04-12T23:20:50..1985-06-25T10:30:00" ], # 1 始点及び終点 基本形式
284
- ["1985-04-12T23:20:50/1985-06-25T10:30:00", "1985-04-12T23:20:50..1985-06-25T10:30:00" ], # 1 始点及び終点 拡張形式
285
- ["P2Y10M15DT10H30M20S", "P2Y10M15DT10H30M20S" ], # 2.1 時間の単位の指示記号付
286
- ["P6W", "P6W" ], # 2.1 時間の単位の指示記号付
287
- ["P1Y6M", "P1Y6M" ], # 2.1 時間の単位の指示記号付
288
- ["PT72H", "PT72H" ], # 2.1 時間の単位の指示記号付
289
- ["P00021015T103020", "P2Y10M15DT10H30M20S" ], # 2.2 代用形式 基本形式
290
- ["P0001-06", "P1Y6M" ], # 2.2 代用形式 基本形式
291
- ["P010600", "P1Y6M" ], # 2.2 代用形式 基本形式
292
- ["P0002-10-15T10:30:20", "P2Y10M15DT10H30M20S" ], # 2.2 代用形式 拡張形式
293
- ["19850412T232050/P1Y2M15DT12H30M0S", "1985-04-12T23:20:50...1986-06-28T11:50:50"], # 3 始点及び時間長 基本形式
294
- ["19850412T232050/P00010215T123000", "1985-04-12T23:20:50...1986-06-28T11:50:50"], # 3 始点及び時間長 基本形式
295
- ["1985-04-12T23:20:50/P1Y2M15DT12H30M0S", "1985-04-12T23:20:50...1986-06-28T11:50:50"], # 3 始点及び時間長 拡張形式
296
- ["1985-04-12T23:20:50/P0001-02-15T12:30:00","1985-04-12T23:20:50...1986-06-28T11:50:50"], # 3 始点及び時間長 拡張形式
297
- ["P1Y2M15DT12H30M0S/19850412T232050", "1984-01-28T10:50:50..1985-04-12T23:20:50" ], # 4 時間長及び終点 基本形式
298
- ["P00010215T123000/19850412T232050", "1984-01-28T10:50:50..1985-04-12T23:20:50" ], # 4 時間長及び終点 基本形式
299
- ["P1Y2M15DT12H30M0S/1985-04-12T23:20:50", "1984-01-28T10:50:50..1985-04-12T23:20:50" ], # 4 時間長及び終点 拡張形式
300
- ["P0001-02-15T12:30:00/1985-04-12T23:20:50","1984-01-28T10:50:50..1985-04-12T23:20:50" ], # 4 時間長及び終点 拡張形式
301
- ].each do |sample|
302
- assert_equal(sample[1], When.when?(sample[0]).to_s)
303
- end
304
- end
305
-
306
- def test__x0301_5_6_3
307
- When::TM::Clock.local_time = When.Clock("+0900") # 反復時間間隔の表記
308
- [ # 5.6.3 完全表記
309
- ["R2/19850412T232050/19850625T103000", ["1985-04-12T23:20:50","1985-06-25T10:30:00"]], # 始点及び終点
310
- ["R2/P2Y10M15DT10H30M20S", ["P2Y10M15DT10H30M20S","P2Y10M15DT10H30M20S"]], # 時間間隔
311
- ["R2/19850412T232050/P1Y2M15DT12H30M0S", ["1985-04-12T23:20:50","1986-06-28T11:50:50"]], # 始点及び時間間隔
312
- ["R2/P1Y2M15DT12H30M0S/19850412T232050", ["1984-01-28T10:50:50","1985-04-12T23:20:50"]], # 時間間隔及び終点
313
- ].each do |sample|
314
- event = When.when?(sample[0])
315
- sample[1].each do |date|
316
- assert_equal(date, event.shift.to_s)
317
- end
318
- end
319
- [ # 5.6.3 完全表記
320
- ["R/19850412T232050/19850625T103000", ["1985-04-12T23:20:50","1985-06-25T10:30:00"]], # 始点及び終点
321
- ["R/19850412T232050/P1Y2M15DT12H30M0S", ["1985-04-12T23:20:50","1986-06-28T11:50:50"]], # 始点及び時間間隔
322
- ].each do |sample|
323
- event = When.when?(sample[0]).each
324
- sample[1].each do |date|
325
- assert_equal(date, event.succ.to_s)
326
- end
327
- end
328
- end
329
- end
330
-
331
- #
332
- # ISO 8601 Date Representation
333
- #
334
- class Date < Unit::TestCase
335
- def test__to_array_basic_ISO8601
336
- assert_equal([nil, [1985,4,12]], When::BasicTypes::Date._to_array_basic_ISO8601('19850412'))
337
- assert_equal([nil, [1985]], When::BasicTypes::Date._to_array_basic_ISO8601('1985'))
338
- assert_equal([:century, [1900]], When::BasicTypes::Date._to_array_basic_ISO8601('19'))
339
- end
340
-
341
- def test__to_array_extended_ISO8601
342
- assert_equal([nil, [1985,4,12]], When::BasicTypes::Date._to_array_extended_ISO8601('1985-04-12'))
343
- assert_equal([nil, [1985,4]], When::BasicTypes::Date._to_array_extended_ISO8601('1985-04'))
344
- # assert_equal([19,nil,nil], When::BasicTypes::Date._to_array_extended_ISO8601('19'))
345
- end
346
- end
347
-
348
- #
349
- # ISO 8601 Time Representation
350
- #
351
- class Time < Unit::TestCase
352
- def test_nothing
353
- end
354
- end
355
-
356
- #
357
- # M17n String
358
- #
359
- class M17n < Unit::TestCase
360
- Term1 = When::BasicTypes::M17n.new('Tokyo', 'zip')
361
- Term2 = When::BasicTypes::M17n.new(<<LABEL, <<NS, <<LOCALE)
362
- [
363
- Getsuyou
364
- Monday
365
- ]
366
- LABEL
367
- ISO, jwiki=http://ja.wikipedia.org/wiki/, ewiki=http://en.wikipedia.org/wiki/
368
- NS
369
- =jwiki:, en=ewiki:
370
- LOCALE
371
- Term3 = When.Resource('_co:Common::Week::Monday::Monday')
372
-
373
- def test__code_space
374
- assert_equal('zip', Term1.codeSpace)
375
- assert_equal("ISO", Term2.codeSpace)
376
- assert_equal(nil, Term3.codeSpace)
377
- end
378
-
379
- def test__label
380
- assert_equal("Getsuyou", Term2.label.to_s)
381
- assert_equal(String, Term2.label.class)
382
- assert_equal("Monday", Term3.label.to_s)
383
- end
384
- end
385
-
386
- class Object < Unit::TestCase
387
- def test_nothing
388
- end
389
- end
390
-
391
- end
392
-
393
- module RS
394
- class Identifier < Unit::TestCase
395
- def test__forward
396
- name = When.Residue('Monday').label
397
- monday = When::RS::Identifier.new(name)
398
- assert_equal("月曜日", monday / 'ja')
399
- end
400
- end
401
- end
402
-
403
- module EX
404
- class Extent < Unit::TestCase
405
- def test_nothing
406
- end
407
- end
408
- end
409
- end
1
+ # -*- coding: utf-8 -*-
2
+ =begin
3
+ Copyright (C) 2011-2014 Takashi SUGA
4
+
5
+ You may use and/or modify this file according to the license
6
+ described in the LICENSE.txt file included in this archive.
7
+ =end
8
+
9
+ module MiniTest
10
+
11
+ module BasicTypes
12
+
13
+ #
14
+ # ISO 8601 Date and Time Representation
15
+ #
16
+ class DateTime < TestCase
17
+
18
+ def test__to_array_assert
19
+ assert_raises(TypeError) { When::BasicTypes::DateTime._to_array(1) }
20
+ assert_raises(ArgumentError) { When::BasicTypes::DateTime._to_array("") }
21
+ end
22
+
23
+ def test__x0301_5_2_1
24
+ [ # 5.2.1 暦日付
25
+ ["19850412", [ 0, "1985-04-12"]], # 1 完全表記 基本形式
26
+ ["1985-04-12", [ 0, "1985-04-12"]], # 1 完全表記 拡張形式
27
+ ["1985-04", [-1, "1985-04" ]], # 2 a) 下位省略表記 特定の月 基本形式
28
+ ["1985", [-2, "1985" ]], # 2 b) 下位省略表記 特定の年 基本形式
29
+ ["19", [-4, "1900" ]], # 2 c) 下位省略表記 特定の百年台 基本形式
30
+ ["850412", [ 0, "1985-04-12"]], # 3 a) 上位省略表記 ある百年代の特定の日 基本形式
31
+ ["85-04-12", [ 0, "1985-04-12"]], # 3 a) 上位省略表記 ある百年代の特定の日 拡張形式
32
+ ["-8504", [-1, "1985-04" ]], # 3 b) 上位省略表記 ある百年代の特定の月 基本形式
33
+ ["-85-04", [-1, "1985-04" ]], # 3 b) 上位省略表記 ある百年代の特定の月 拡張形式
34
+ ["-85", [-2, "1985" ]], # 3 c) 上位省略表記 ある百年代の特定の年 基本形式
35
+ ["--0412", [ 0, "1985-04-12"]], # 3 d) 上位省略表記 ある年の特定の月日 基本形式
36
+ ["--04-12", [ 0, "1985-04-12"]], # 3 d) 上位省略表記 ある年の特定の月日 拡張形式
37
+ ["--04", [-1, "1985-04" ]], # 3 e) 上位省略表記 ある年の特定の月 基本形式
38
+ ["---12", [ 0, "1985-04-12"]], # 3 f) 上位省略表記 ある月の特定の日 基本形式
39
+ ["+019850412", [ 0, "1985-04-12"]], # 4 a) 拡大表記 特定の日 基本形式
40
+ ["+01985-04-12", [ 0, "1985-04-12"]], # 4 a) 拡大表記 特定の日 拡張形式
41
+ ["+01985-04", [-1, "1985-04" ]], # 4 b) 拡大表記 特定の月 基本形式
42
+ ["+01985", [-2, "1985" ]], # 4 c) 拡大表記 特定の年 基本形式
43
+ ["+019", [-4, "1900" ]], # 4 d) 拡大表記 特定の百年代 基本形式
44
+ ].each do |sample|
45
+ date = When.when?(sample[0], {:abbr=>[1985,4,12]})
46
+ assert_equal(sample[1], [date.precision, date.to_s])
47
+ end
48
+ end
49
+
50
+ def test__x0301_5_2_1_4
51
+ [ # 5.2.1.4 暦日付 拡大表記(Abbr 指定なし)
52
+ ["-019850412", [ 0, "-01985-04-12"]], # 4 a) 拡大表記 特定の日 基本形式
53
+ ["+019850412", [ 0, "1985-04-12"]], # 4 a) 拡大表記 特定の日 基本形式
54
+ ["-01985-04-12", [ 0, "-01985-04-12"]], # 4 a) 拡大表記 特定の日 拡張形式
55
+ ["+01985-04-12", [ 0, "1985-04-12"]], # 4 a) 拡大表記 特定の日 拡張形式
56
+ ["-01985-04", [-1, "-01985-04" ]], # 4 b) 拡大表記 特定の月 基本形式
57
+ ["+01985-04", [-1, "1985-04" ]], # 4 b) 拡大表記 特定の月 基本形式
58
+ ["-01985", [-2, "-01985" ]], # 4 c) 拡大表記 特定の年 基本形式
59
+ ["+01985", [-2, "1985" ]], # 4 c) 拡大表記 特定の年 基本形式
60
+ ["-0190", [-2, "-00190" ]], # 4 d) 拡大表記 特定の年 基本形式
61
+ ["+0190", [-2, "0190" ]], # 4 d) 拡大表記 特定の年 基本形式
62
+ ["-019", [-4, "-01900" ]], # 4 d) 拡大表記 特定の百年代 基本形式
63
+ ["+019", [-4, "1900" ]], # 4 d) 拡大表記 特定の百年代 基本形式
64
+ ["-119", [-4, "-11900" ]], # 4 d) 拡大表記 特定の百年代 基本形式
65
+ ["+119", [-4, "+11900" ]], # 4 d) 拡大表記 特定の百年代 基本形式
66
+ ].each do |sample|
67
+ date = When.when?(sample[0])
68
+ assert_equal(sample[1], [date.precision, date.to_s])
69
+ end
70
+ end
71
+
72
+ def test__x0301_5_2_2
73
+ [ # 5.2.2 年間通算日
74
+ ["1985102", [ 0, "1985-04-12"]], # 1 完全表記 基本形式
75
+ ["1985-102", [ 0, "1985-04-12"]], # 1 完全表記 拡張形式
76
+ ["85102", [ 0, "1985-04-12"]], # 2 a) 上位省略表記 ある百年代の特定の年日 基本形式
77
+ ["85-102", [ 0, "1985-04-12"]], # 2 a) 上位省略表記 ある百年代の特定の年日 拡張形式
78
+ ["-102", [ 0, "1985-04-12"]], # 2 b) 上位省略表記 ある年の特定の日 基本形式
79
+ ["+01985102", [ 0, "1985-04-12"]], # 3 a) 拡大表記 特定の日 基本形式
80
+ ["+01985-102", [ 0, "1985-04-12"]], # 3 a) 拡大表記 特定の日 拡張形式
81
+ ].each do |sample|
82
+ date = When.when?(sample[0], {:abbr=>[1985,4,12]})
83
+ assert_equal(sample[1], [date.precision, date.to_s])
84
+ end
85
+ end
86
+
87
+ def test__x0301_5_2_3
88
+ [ # 5.2.3 暦週日付
89
+ ["1985W155", [ 0, "1985-04-12"]], # 1 完全表記 基本形式
90
+ ["1985-W15-5", [ 0, "1985-04-12"]], # 1 完全表記 拡張形式
91
+ ["1985W15", [ 0, "1985-04-08...1985-04-15"]], # 2 a) 下位省略表記 基本形式
92
+ ["1985-W15", [ 0, "1985-04-08...1985-04-15"]], # 2 a) 下位省略表記 拡張形式
93
+ ["85W155", [ 0, "1985-04-12"]], # 3 a) 上位省略表記 ある百年代における年週日 基本形式
94
+ ["85-W15-5", [ 0, "1985-04-12"]], # 3 a) 上位省略表記 ある百年代における年週日 拡張形式
95
+ ["85W15", [ 0, "1985-04-08...1985-04-15"]], # 3 b) 上位省略表記 ある百年代における年週 基本形式
96
+ ["85-W15", [ 0, "1985-04-08...1985-04-15"]], # 3 b) 上位省略表記 ある百年代における年週 拡張形式
97
+ ["-5W155", [ 0, "1985-04-12"]], # 3 c) 上位省略表記 ある十年代における年週日 基本形式
98
+ ["-5-W15-5", [ 0, "1985-04-12"]], # 3 c) 上位省略表記 ある十年代における年週日 拡張形式
99
+ ["-5W15", [ 0, "1985-04-08...1985-04-15"]], # 3 d) 上位省略表記 ある十年代における年週 基本形式
100
+ ["-5-W15", [ 0, "1985-04-08...1985-04-15"]], # 3 d) 上位省略表記 ある十年代における年週 拡張形式
101
+ ["-W155", [ 0, "1985-04-12"]], # 3 e) 上位省略表記 ある年の週日 基本形式
102
+ ["-W15-5", [ 0, "1985-04-12"]], # 3 e) 上位省略表記 ある年の週日 拡張形式
103
+ ["-W15", [ 0, "1985-04-08...1985-04-15"]], # 3 f) 上位省略表記 ある年の週 基本形式
104
+ ["-W-5", [ 0, "1985-04-12"]], # 3 g) 上位省略表記 ある週の日 基本形式
105
+ ["+01985W155", [ 0, "1985-04-12"]], # 4 a) 拡大表記 特定の日 基本形式
106
+ ["+01985-W15-5", [ 0, "1985-04-12"]], # 4 a) 拡大表記 特定の日 拡張形式
107
+ ["+01985W15", [ 0, "1985-04-08...1985-04-15"]], # 4 b) 拡大表記 特定の週 基本形式
108
+ ["+01985-W15", [ 0, "1985-04-08...1985-04-15"]], # 4 c) 拡大表記 特定の週 拡張形式
109
+ ].each do |sample|
110
+ date = When.when?(sample[0], {:abbr=>[1985,15,5]})
111
+ assert_equal(sample[1], [date.precision, date.to_s])
112
+ end
113
+
114
+ result = []
115
+ (1900...1928).each do |year|
116
+ date = ::Date.new(year, 1, 1) - 7
117
+ 14.times do
118
+ gdate = When.TemporalPosition(date.year, date.month, date.day)
119
+ strdate = date.strftime('%G-W%V-%u')
120
+ strgdate = gdate.strftime('%G-W%V-%u')
121
+ w1date = When::WeekDate ^ date
122
+ w2date = When.when?(strdate, {:frame=>When::WeekDate})
123
+ strw1date = w1date.strftime
124
+ strw2date = w2date.strftime
125
+ result << [[strdate, strgdate, strw1date, strw2date].uniq.size, date.jd == w1date.to_i, date.jd == w2date.to_i]
126
+ end
127
+ end
128
+ assert_equal([[1, true, true]], result.uniq)
129
+ end
130
+
131
+ def test__x0301_5_2_4
132
+ [ # 5.2.4 元号による日付
133
+ ["60.04.12", [ 0, "S60(1985).04.12"]], # 1 完全表記 基本形式
134
+ ["S60.04.12", [ 0, "S60(1985).04.12"]], # 1 完全表記 拡張形式
135
+ ].each do |sample|
136
+ date = When.when?(sample[0], {:era_name=>'S'})
137
+ assert_equal(sample[1], [date.precision, date.to_s])
138
+ end
139
+ end
140
+
141
+ def test__x0301_5_3_1
142
+ When::TM::Clock.local_time = When::UTC
143
+
144
+ [ # 5.3.1 地方時の時刻
145
+ ["T232050", [ 3, "T23:20:50" ]], # 1 完全表記 基本形式
146
+ ["T23:20:50", [ 3, "T23:20:50" ]], # 1 完全表記 拡張形式
147
+ ["T2320", [ 2, "T23:20" ]], # 2 a) 下位省略表記 特定の時分 基本形式
148
+ ["T23:20", [ 2, "T23:20" ]], # 2 a) 下位省略表記 特定の時分 拡張形式
149
+ ["T23", [ 1, "T23" ]], # 2 b) 下位省略表記 特定の時 基本形式
150
+ ].each do |sample|
151
+ date = When.when?(sample[0])
152
+ assert_equal(sample[1], [date.precision, date.to_s])
153
+ end
154
+
155
+ [ # 3 小数点を用いる表記
156
+ ["T232050.5", 4, [ 4, "T23:20:50.5" ]], # a) 特定の時分秒及び秒の小数部分 基本形式
157
+ ["T152735,5", 4, [ 4, "T15:27:35.5" ]], # a) 特定の時分秒及び秒の小数部分 基本形式
158
+ ["T23:20:50.5", 4, [ 4, "T23:20:50.5" ]], # a) 特定の時分秒及び秒の小数部分 拡張形式
159
+ ["T2320.8", 3, [ 3, "T23:20:48" ]], # b) 特定の時分及び分の小数部分 基本形式
160
+ ["T23:20.8", 3, [ 3, "T23:20:48" ]], # b) 特定の時分及び分の小数部分 拡張形式
161
+ ["T23.3", 2, [ 2, "T23:18" ]], # c) 特定の時及び時の小数部分 基本形式
162
+ ].each do |sample|
163
+ date = When.when?(sample[0], {:precision=>sample[1]})
164
+ assert_equal(sample[2], [date.precision, date.to_s])
165
+ end
166
+
167
+ [ # 4 上位省略表記
168
+ ["T-2050", [ 3, "T23:20:50" ]], # a) ある時“hour”における特定の分秒 基本形式
169
+ ["T-:20:50", [ 3, "T23:20:50" ]], # a) ある時“hour”における特定の分秒 拡張形式
170
+ ["T-20", [ 2, "T23:20" ]], # b) ある時“hour”における特定の分 基本形式
171
+ ["T--50", [ 3, "T23:20:50" ]], # c) ある分の特定の秒 基本形式
172
+ ].each do |sample|
173
+ date = When.when?(sample[0], {:abbr=>[1985,4,12,23,20,50]})
174
+ assert_equal(sample[1], [date.precision, date.to_s])
175
+ end
176
+
177
+ [ # 4 小数点を用いる上位省略表記
178
+ ["T-2050.5", 4, [ 4, "T23:20:50.5" ]], # a) ある時“hour”における特定の分秒 基本形式
179
+ ["T-2735,5", 4, [ 4, "T23:27:35.5" ]], # a) ある時“hour”における特定の分秒 基本形式
180
+ ["T-:20:50.5", 4, [ 4, "T23:20:50.5" ]], # a) ある時“hour”における特定の分秒 拡張形式
181
+ ["T-20.8", 3, [ 3, "T23:20:48" ]], # b) ある時“hour”における特定の分 基本形式
182
+ ["T--50.5", 4, [ 4, "T23:20:50.5" ]], # c) ある分の特定の秒 基本形式
183
+ ].each do |sample|
184
+ date = When.when?(sample[0], {:abbr=>[1985,4,12,23,20,50], :precision=>sample[1]})
185
+ assert_equal(sample[2], [date.precision, date.to_s])
186
+ end
187
+ end
188
+
189
+ def test__x0301_5_3_2
190
+ When::TM::Clock.local_time = When.Clock("+0900")
191
+ [ # 5.3.2 夜の12時
192
+ ["19850412T240000", [ 3, "1985-04-13T00:00:00"]], # 完全表記 基本形式
193
+ ["1985-04-12T24:00:00", [ 3, "1985-04-13T00:00:00"]], # 完全表記 拡張形式
194
+ ["19850412T2400", [ 2, "1985-04-13T00:00" ]], # 下位省略表記 基本形式
195
+ ["1985-04-12T24:00", [ 2, "1985-04-13T00:00" ]], # 下位省略表記 拡張形式
196
+ ].each do |sample|
197
+ date = When.when?(sample[0])
198
+ assert_equal(sample[1], [date.precision, date.to_s])
199
+ end
200
+ end
201
+
202
+ def test__x0301_5_3_3
203
+ [ # 5.3.3 協定世界時(UTC)の時刻
204
+ ["T232050Z", [ 3, "T23:20:50Z" ]], # 1 完全表記 基本形式
205
+ ["T23:20:50Z", [ 3, "T23:20:50Z" ]], # 1 完全表記 拡張形式
206
+ ["T2320Z", [ 2, "T23:20Z" ]], # 2 a) 下位省略表記 特定の時分 基本形式
207
+ ["T23:20Z", [ 2, "T23:20Z" ]], # 2 a) 下位省略表記 特定の時分 拡張形式
208
+ ["T23Z", [ 1, "T23Z" ]], # 2 b) 下位省略表記 特定の時 基本形式
209
+ ].each do |sample|
210
+ date = When.when?(sample[0])
211
+ assert_equal(sample[1], [date.precision, date.to_s])
212
+ end
213
+
214
+ [ # 3 小数点を用いる表記
215
+ ["T232050.5Z", 4, [ 4, "T23:20:50.5Z" ]], # a) 特定の時分秒及び秒の小数部分 基本形式
216
+ ["T23:20:50.5Z",4, [ 4, "T23:20:50.5Z" ]], # a) 特定の時分秒及び秒の小数部分 拡張形式
217
+ ["T2320.8Z", 3, [ 3, "T23:20:48Z" ]], # b) 特定の時分及び分の小数部分 基本形式
218
+ ["T23:20.8Z", 3, [ 3, "T23:20:48Z" ]], # b) 特定の時分及び分の小数部分 拡張形式
219
+ ["T23.3Z", 2, [ 2, "T23:18Z" ]], # c) 特定の時及び時の小数部分 基本形式
220
+ ].each do |sample|
221
+ date = When.when?(sample[0], {:precision=>sample[1]})
222
+ assert_equal(sample[2], [date.precision, date.to_s])
223
+ end
224
+
225
+ [ # 4 上位省略表記
226
+ ["T-2050Z", [ 3, "T23:20:50Z" ]], # a) ある時“hour”における特定の分秒 基本形式
227
+ ["T-:20:50Z", [ 3, "T23:20:50Z" ]], # a) ある時“hour”における特定の分秒 拡張形式
228
+ ["T-20Z", [ 2, "T23:20Z" ]], # b) ある時“hour”における特定の分 基本形式
229
+ ["T--50Z", [ 3, "T23:20:50Z" ]], # c) ある分の特定の秒 基本形式
230
+ ].each do |sample|
231
+ date = When.when?(sample[0], {:abbr=>[1985,4,12,23,20,50]})
232
+ assert_equal(sample[1], [date.precision, date.to_s])
233
+ end
234
+
235
+ [ # 4 小数点を用いる上位省略表記
236
+ ["T-2050.5Z", 4, [ 4, "T23:20:50.5Z" ]], # a) ある時“hour”における特定の分秒 基本形式
237
+ ["T-:20:50.5Z", 4, [ 4, "T23:20:50.5Z" ]], # a) ある時“hour”における特定の分秒 拡張形式
238
+ ["T-20.8Z", 3, [ 3, "T23:20:48Z" ]], # b) ある時“hour”における特定の分 基本形式
239
+ ["T--50.5Z", 4, [ 4, "T23:20:50.5Z" ]], # c) ある分の特定の秒 基本形式
240
+ ].each do |sample|
241
+ date = When.when?(sample[0], {:abbr=>[1985,4,12,23,20,50], :precision=>sample[1]})
242
+ assert_equal(sample[2], [date.precision, date.to_s])
243
+ end
244
+ end
245
+
246
+ def test__x0301_5_3_4
247
+ [ # 5.3.4 地方時及び協定世界時
248
+ ["T+0100", [ 0, "T+01:00" ]], # 1 地方時と協定世界時との差(時差の表記) 基本形式
249
+ ["T+01", [ 0, "T+01:00" ]], # 1 地方時と協定世界時との差(時差の表記) 基本形式
250
+ ["T+01:00", [ 0, "T+01:00" ]], # 1 地方時と協定世界時との差(時差の表記) 拡張形式
251
+ ["T152746+0100", [ 3, "T15:27:46+01:00" ]], # 2 地方時と協定世界時との差(地方時の表記) 基本形式
252
+ ["T152746-0500", [ 3, "T15:27:46-05:00" ]], # 2 地方時と協定世界時との差(地方時の表記) 基本形式
253
+ ["T152746+01", [ 3, "T15:27:46+01:00" ]], # 2 地方時と協定世界時との差(地方時の表記) 基本形式
254
+ ["T152746-05", [ 3, "T15:27:46-05:00" ]], # 2 地方時と協定世界時との差(地方時の表記) 基本形式
255
+ ["T15:27:46+01:00", [ 3, "T15:27:46+01:00" ]], # 2 地方時と協定世界時との差(地方時の表記) 拡張形式
256
+ ["T15:27:46-05:00", [ 3, "T15:27:46-05:00" ]], # 2 地方時と協定世界時との差(地方時の表記) 拡張形式
257
+ ["T15:27:46+01", [ 3, "T15:27:46+01:00" ]], # 2 地方時と協定世界時との差(地方時の表記) 拡張形式
258
+ ["T15:27:46-05", [ 3, "T15:27:46-05:00" ]], # 2 地方時と協定世界時との差(地方時の表記) 拡張形式
259
+ ].each do |sample|
260
+ date = When.when?(sample[0])
261
+ assert_equal(sample[1], [date.precision, date.to_s])
262
+ end
263
+ end
264
+
265
+ def test__x0301_5_4_2
266
+ When::TM::Clock.local_time = When.Clock("+0900")
267
+ [ # 5.4.2 完全表記以外の表記
268
+ ["19850412T1015", [ 2, "1985-04-12T10:15" ]], # a) 暦日付及び地方時 基本形式
269
+ ["1985-04-12T10:15", [ 2, "1985-04-12T10:15" ]], # a) 暦日付及び地方時 拡張形式
270
+ ["1985102T1015Z", [ 2, "1985-04-12T10:15Z" ]], # b) 年間通算日及び協定世界時 基本形式
271
+ ["1985-102T10:15Z", [ 2, "1985-04-12T10:15Z" ]], # b) 年間通算日及び協定世界時 拡張形式
272
+ ["1985W155T1015+0400", [ 2, "1985-04-12T10:15+04:00" ]], # c) 暦週日付,地方時,及びUTCとの差 基本形式
273
+ ["1985-W15-5T10:15+04:00",[ 2, "1985-04-12T10:15+04:00" ]], # c) 暦週日付,地方時,及びUTCとの差 拡張形式
274
+ ].each do |sample|
275
+ date = When.when?(sample[0])
276
+ assert_equal(sample[1], [date.precision, date.to_s])
277
+ end
278
+ end
279
+
280
+ def test__x0301_5_5_4
281
+ When::TM::Clock.local_time = When.Clock("+0900") # 時間間隔の表記
282
+ [ # 5.5.4 完全表記
283
+ ["19850412T232050/19850625T103000", "1985-04-12T23:20:50..1985-06-25T10:30:00" ], # 1 始点及び終点 基本形式
284
+ ["1985-04-12T23:20:50/1985-06-25T10:30:00", "1985-04-12T23:20:50..1985-06-25T10:30:00" ], # 1 始点及び終点 拡張形式
285
+ ["P2Y10M15DT10H30M20S", "P2Y10M15DT10H30M20S" ], # 2.1 時間の単位の指示記号付
286
+ ["P6W", "P6W" ], # 2.1 時間の単位の指示記号付
287
+ ["P1Y6M", "P1Y6M" ], # 2.1 時間の単位の指示記号付
288
+ ["PT72H", "PT72H" ], # 2.1 時間の単位の指示記号付
289
+ ["P00021015T103020", "P2Y10M15DT10H30M20S" ], # 2.2 代用形式 基本形式
290
+ ["P0001-06", "P1Y6M" ], # 2.2 代用形式 基本形式
291
+ ["P010600", "P1Y6M" ], # 2.2 代用形式 基本形式
292
+ ["P0002-10-15T10:30:20", "P2Y10M15DT10H30M20S" ], # 2.2 代用形式 拡張形式
293
+ ["19850412T232050/P1Y2M15DT12H30M0S", "1985-04-12T23:20:50...1986-06-28T11:50:50"], # 3 始点及び時間長 基本形式
294
+ ["19850412T232050/P00010215T123000", "1985-04-12T23:20:50...1986-06-28T11:50:50"], # 3 始点及び時間長 基本形式
295
+ ["1985-04-12T23:20:50/P1Y2M15DT12H30M0S", "1985-04-12T23:20:50...1986-06-28T11:50:50"], # 3 始点及び時間長 拡張形式
296
+ ["1985-04-12T23:20:50/P0001-02-15T12:30:00","1985-04-12T23:20:50...1986-06-28T11:50:50"], # 3 始点及び時間長 拡張形式
297
+ ["P1Y2M15DT12H30M0S/19850412T232050", "1984-01-28T10:50:50..1985-04-12T23:20:50" ], # 4 時間長及び終点 基本形式
298
+ ["P00010215T123000/19850412T232050", "1984-01-28T10:50:50..1985-04-12T23:20:50" ], # 4 時間長及び終点 基本形式
299
+ ["P1Y2M15DT12H30M0S/1985-04-12T23:20:50", "1984-01-28T10:50:50..1985-04-12T23:20:50" ], # 4 時間長及び終点 拡張形式
300
+ ["P0001-02-15T12:30:00/1985-04-12T23:20:50","1984-01-28T10:50:50..1985-04-12T23:20:50" ], # 4 時間長及び終点 拡張形式
301
+ ].each do |sample|
302
+ assert_equal(sample[1], When.when?(sample[0]).to_s)
303
+ end
304
+ end
305
+
306
+ def test__x0301_5_6_3
307
+ When::TM::Clock.local_time = When.Clock("+0900") # 反復時間間隔の表記
308
+ [ # 5.6.3 完全表記
309
+ ["R2/19850412T232050/19850625T103000", ["1985-04-12T23:20:50","1985-06-25T10:30:00"]], # 始点及び終点
310
+ ["R2/P2Y10M15DT10H30M20S", ["P2Y10M15DT10H30M20S","P2Y10M15DT10H30M20S"]], # 時間間隔
311
+ ["R2/19850412T232050/P1Y2M15DT12H30M0S", ["1985-04-12T23:20:50","1986-06-28T11:50:50"]], # 始点及び時間間隔
312
+ ["R2/P1Y2M15DT12H30M0S/19850412T232050", ["1984-01-28T10:50:50","1985-04-12T23:20:50"]], # 時間間隔及び終点
313
+ ].each do |sample|
314
+ event = When.when?(sample[0])
315
+ sample[1].each do |date|
316
+ assert_equal(date, event.shift.to_s)
317
+ end
318
+ end
319
+ [ # 5.6.3 完全表記
320
+ ["R/19850412T232050/19850625T103000", ["1985-04-12T23:20:50","1985-06-25T10:30:00"]], # 始点及び終点
321
+ ["R/19850412T232050/P1Y2M15DT12H30M0S", ["1985-04-12T23:20:50","1986-06-28T11:50:50"]], # 始点及び時間間隔
322
+ ].each do |sample|
323
+ event = When.when?(sample[0]).each
324
+ sample[1].each do |date|
325
+ assert_equal(date, event.succ.to_s)
326
+ end
327
+ end
328
+ end
329
+ end
330
+
331
+ #
332
+ # ISO 8601 Date Representation
333
+ #
334
+ class Date < TestCase
335
+ def test__to_array_basic_ISO8601
336
+ assert_equal([nil, [1985,4,12]], When::BasicTypes::Date._to_array_basic_ISO8601('19850412'))
337
+ assert_equal([nil, [1985]], When::BasicTypes::Date._to_array_basic_ISO8601('1985'))
338
+ assert_equal([:century, [1900]], When::BasicTypes::Date._to_array_basic_ISO8601('19'))
339
+ end
340
+
341
+ def test__to_array_extended_ISO8601
342
+ assert_equal([nil, [1985,4,12]], When::BasicTypes::Date._to_array_extended_ISO8601('1985-04-12'))
343
+ assert_equal([nil, [1985,4]], When::BasicTypes::Date._to_array_extended_ISO8601('1985-04'))
344
+ # assert_equal([19,nil,nil], When::BasicTypes::Date._to_array_extended_ISO8601('19'))
345
+ end
346
+ end
347
+
348
+ #
349
+ # ISO 8601 Time Representation
350
+ #
351
+ class Time < TestCase
352
+ def test_nothing
353
+ end
354
+ end
355
+
356
+ #
357
+ # M17n String
358
+ #
359
+ class M17n < TestCase
360
+ Term1 = When::BasicTypes::M17n.new('Tokyo', 'zip')
361
+ Term2 = When::BasicTypes::M17n.new(<<LABEL, <<NS, <<LOCALE)
362
+ [
363
+ Getsuyou
364
+ Monday
365
+ ]
366
+ LABEL
367
+ ISO, jwiki=http://ja.wikipedia.org/wiki/, ewiki=http://en.wikipedia.org/wiki/
368
+ NS
369
+ =jwiki:, en=ewiki:
370
+ LOCALE
371
+ Term3 = When.Resource('_co:Common::Week::Monday::Monday')
372
+
373
+ def test__code_space
374
+ assert_equal('zip', Term1.codeSpace)
375
+ assert_equal("ISO", Term2.codeSpace)
376
+ assert_equal(nil, Term3.codeSpace)
377
+ end
378
+
379
+ def test__label
380
+ assert_equal("Getsuyou", Term2.label.to_s)
381
+ assert_equal(String, Term2.label.class)
382
+ assert_equal("Monday", Term3.label.to_s)
383
+ end
384
+ end
385
+
386
+ class Object < TestCase
387
+ def test_nothing
388
+ end
389
+ end
390
+
391
+ end
392
+
393
+ module RS
394
+ class Identifier < TestCase
395
+ def test__forward
396
+ name = When.Residue('Monday').label
397
+ monday = When::RS::Identifier.new(name)
398
+ assert_equal("月曜日", monday / 'ja')
399
+ end
400
+ end
401
+ end
402
+
403
+ module EX
404
+ class Extent < TestCase
405
+ def test_nothing
406
+ end
407
+ end
408
+ end
409
+ end