when_exe 0.4.2 → 0.4.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (54) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +24 -23
  3. data/lib/when_exe/ephemeris/moon.rb +333 -333
  4. data/lib/when_exe/linkeddata.rb +0 -1
  5. data/lib/when_exe/locales/encoding_conversion.rb +134 -134
  6. data/lib/when_exe/locales/iast.rb +90 -90
  7. data/lib/when_exe/locales/transliteration_table.rb +62 -62
  8. data/lib/when_exe/parts/method_cash.rb +224 -224
  9. data/lib/when_exe/region/chinese/calendars.rb +1016 -1016
  10. data/lib/when_exe/region/geologicalage.rb +1 -1
  11. data/lib/when_exe/region/japanese/calendars.rb +397 -397
  12. data/lib/when_exe/region/japanese/eclipses.rb +1194 -1194
  13. data/lib/when_exe/region/japanese/nihon_shoki.rb +70 -70
  14. data/lib/when_exe/region/korean.rb +384 -384
  15. data/lib/when_exe/region/ryukyu.rb +101 -101
  16. data/lib/when_exe/tmposition.rb +2 -2
  17. data/lib/when_exe/tmreference.rb +3 -3
  18. data/lib/when_exe/version.rb +1 -1
  19. data/test/scripts/geometric_complex.rb +41 -41
  20. data/test/scripts/korea.rb +59 -59
  21. data/test/scripts/thai.rb +36 -36
  22. data/test/test/basictypes.rb +431 -431
  23. data/test/test/calendarnote.rb +86 -86
  24. data/test/test/calendartypes.rb +97 -97
  25. data/test/test/coordinates.rb +397 -397
  26. data/test/test/ephemeris.rb +115 -115
  27. data/test/test/ephemeris/moon.rb +14 -14
  28. data/test/test/ephemeris/planets.rb +14 -14
  29. data/test/test/ephemeris/sun.rb +14 -14
  30. data/test/test/inspect.rb +153 -153
  31. data/test/test/parts.rb +488 -488
  32. data/test/test/region/armenian.rb +20 -20
  33. data/test/test/region/bahai.rb +58 -58
  34. data/test/test/region/balinese.rb +34 -34
  35. data/test/test/region/chinese.rb +229 -229
  36. data/test/test/region/christian.rb +226 -226
  37. data/test/test/region/coptic.rb +27 -27
  38. data/test/test/region/discordian.rb +20 -20
  39. data/test/test/region/french.rb +33 -33
  40. data/test/test/region/geologicalage.rb +17 -17
  41. data/test/test/region/iran.rb +54 -54
  42. data/test/test/region/islamic.rb +54 -54
  43. data/test/test/region/japanese.rb +261 -261
  44. data/test/test/region/jewish.rb +63 -63
  45. data/test/test/region/shire.rb +58 -58
  46. data/test/test/region/swedish.rb +45 -45
  47. data/test/test/region/thai.rb +116 -116
  48. data/test/test/region/tibetan.rb +30 -30
  49. data/test/test/region/vietnamese.rb +102 -102
  50. data/test/test/region/zoroastrian.rb +58 -58
  51. data/test/test/timestandard.rb +81 -81
  52. data/test/test/tmobjects.rb +402 -402
  53. data/test/test/tmreference.rb +157 -157
  54. metadata +4 -88
data/test/scripts/thai.rb CHANGED
@@ -1,36 +1,36 @@
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
- require 'pp'
10
- require 'when_exe'
11
- include When
12
-
13
- Type = {
14
- 354 => 'A',
15
- 355 => 'B',
16
- 384 => 'C'
17
- }
18
-
19
- Pattern = {}
20
-
21
- open('scripts/thai-reviewed.txt', 'r') do |source|
22
- this_year = nil
23
- while (line=source.gets)
24
- year, month, day = line.split(/ +/)[2..4].map {|c| c.to_i}
25
- next_year = TemporalPosition(year, month, day, :frame=>Gregorian)
26
- thai_year = TemporalPosition(year-638, 6, 1, :frame=>'ThaiT')
27
- raise ArgumentError, "#{next_year} != #{Gregorian ^ thai_year}" unless next_year.to_i == thai_year.to_i
28
- year -= 1
29
- if this_year
30
- type = Type[next_year.to_i-this_year.to_i]
31
- Pattern[year] = type
32
- puts "%04d,%04d,%s" % [year, year-638, type || '!']
33
- end
34
- this_year = next_year
35
- end
36
- 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
+ require 'pp'
10
+ require 'when_exe'
11
+ include When
12
+
13
+ Type = {
14
+ 354 => 'A',
15
+ 355 => 'B',
16
+ 384 => 'C'
17
+ }
18
+
19
+ Pattern = {}
20
+
21
+ open('scripts/thai-reviewed.txt', 'r') do |source|
22
+ this_year = nil
23
+ while (line=source.gets)
24
+ year, month, day = line.split(/ +/)[2..4].map {|c| c.to_i}
25
+ next_year = TemporalPosition(year, month, day, :frame=>Gregorian)
26
+ thai_year = TemporalPosition(year-638, 6, 1, :frame=>'ThaiT')
27
+ raise ArgumentError, "#{next_year} != #{Gregorian ^ thai_year}" unless next_year.to_i == thai_year.to_i
28
+ year -= 1
29
+ if this_year
30
+ type = Type[next_year.to_i-this_year.to_i]
31
+ Pattern[year] = type
32
+ puts "%04d,%04d,%s" % [year, year-638, type || '!']
33
+ end
34
+ this_year = next_year
35
+ end
36
+ end
@@ -1,431 +1,431 @@
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
-
330
- def test__abbr_and_extra_year_digits
331
-
332
- assert_equal('-00500', When.when?('-005').to_s)
333
- assert_equal('2013-01-05', When.when?('-005', {:abbr=>2013}).to_s)
334
- assert_equal('-000005', When.when?('-005', {:extra_year_digits=>2}).to_s)
335
-
336
- assert_equal('1900', When.when?('19').to_s)
337
- assert_equal('1900', When.when?('19', {:extra_year_digits=>0 }).to_s)
338
- assert_equal('0019', When.when?('19', {:extra_year_digits=>-1}).to_s)
339
-
340
- [['019', ["0019", -2, "0019-01-01" ]],
341
- ['0019', ["0019", -2, "0019-01-01" ]],
342
- ['+019', ["1900", -4, "1900-01-01" ]],
343
- ['-119', ["-11900", -4, "-11900-01-01"]],
344
- ['-0119', ["-00119", -2, "-00119-01-01"]],
345
- ['+01985-04', ["1985-04", -1, "1985-04-01" ]],
346
- ['+001985-04', ["1985-04", -1, "1985-04-01" ]]].each do |sample|
347
- date = When.when?(sample[0])
348
- assert_equal(sample[1], [date.to_s, date.precision, date.floor.to_s])
349
- end
350
- end
351
- end
352
-
353
- #
354
- # ISO 8601 Date Representation
355
- #
356
- class Date < TestCase
357
- def test__to_array_basic_ISO8601
358
- assert_equal([nil, [1985,4,12]], When::BasicTypes::Date._to_array_basic_ISO8601('19850412'))
359
- assert_equal([nil, [1985]], When::BasicTypes::Date._to_array_basic_ISO8601('1985'))
360
- assert_equal([:century, [1900]], When::BasicTypes::Date._to_array_basic_ISO8601('19'))
361
- end
362
-
363
- def test__to_array_extended_ISO8601
364
- assert_equal([nil, [1985,4,12]], When::BasicTypes::Date._to_array_extended_ISO8601('1985-04-12'))
365
- assert_equal([nil, [1985,4]], When::BasicTypes::Date._to_array_extended_ISO8601('1985-04'))
366
- # assert_equal([19,nil,nil], When::BasicTypes::Date._to_array_extended_ISO8601('19'))
367
- end
368
- end
369
-
370
- #
371
- # ISO 8601 Time Representation
372
- #
373
- class Time < TestCase
374
- def test_nothing
375
- end
376
- end
377
-
378
- #
379
- # M17n String
380
- #
381
- class M17n < TestCase
382
- Term1 = When::BasicTypes::M17n.new('Tokyo', 'zip')
383
- Term2 = When::BasicTypes::M17n.new(<<LABEL, <<NS, <<LOCALE)
384
- [
385
- Getsuyou
386
- Monday
387
- ]
388
- LABEL
389
- ISO, jwiki=http://ja.wikipedia.org/wiki/, ewiki=http://en.wikipedia.org/wiki/
390
- NS
391
- =jwiki:, en=ewiki:
392
- LOCALE
393
- Term3 = When.Resource('_co:Common::Week::Monday::Monday')
394
-
395
- def test__code_space
396
- assert_equal('zip', Term1.codeSpace)
397
- assert_equal("ISO", Term2.codeSpace)
398
- assert_equal(nil, Term3.codeSpace)
399
- end
400
-
401
- def test__label
402
- assert_equal("Getsuyou", Term2.label.to_s)
403
- assert_equal(String, Term2.label.class)
404
- assert_equal("Monday", Term3.label.to_s)
405
- end
406
- end
407
-
408
- class Object < TestCase
409
- def test_nothing
410
- end
411
- end
412
-
413
- end
414
-
415
- module RS
416
- class Identifier < TestCase
417
- def test__forward
418
- name = When.Residue('Monday').label
419
- monday = When::RS::Identifier.new(name)
420
- assert_equal("月曜日", monday / 'ja')
421
- end
422
- end
423
- end
424
-
425
- module EX
426
- class Extent < TestCase
427
- def test_nothing
428
- end
429
- end
430
- end
431
- 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
+
330
+ def test__abbr_and_extra_year_digits
331
+
332
+ assert_equal('-00500', When.when?('-005').to_s)
333
+ assert_equal('2013-01-05', When.when?('-005', {:abbr=>2013}).to_s)
334
+ assert_equal('-000005', When.when?('-005', {:extra_year_digits=>2}).to_s)
335
+
336
+ assert_equal('1900', When.when?('19').to_s)
337
+ assert_equal('1900', When.when?('19', {:extra_year_digits=>0 }).to_s)
338
+ assert_equal('0019', When.when?('19', {:extra_year_digits=>-1}).to_s)
339
+
340
+ [['019', ["0019", -2, "0019-01-01" ]],
341
+ ['0019', ["0019", -2, "0019-01-01" ]],
342
+ ['+019', ["1900", -4, "1900-01-01" ]],
343
+ ['-119', ["-11900", -4, "-11900-01-01"]],
344
+ ['-0119', ["-00119", -2, "-00119-01-01"]],
345
+ ['+01985-04', ["1985-04", -1, "1985-04-01" ]],
346
+ ['+001985-04', ["1985-04", -1, "1985-04-01" ]]].each do |sample|
347
+ date = When.when?(sample[0])
348
+ assert_equal(sample[1], [date.to_s, date.precision, date.floor.to_s])
349
+ end
350
+ end
351
+ end
352
+
353
+ #
354
+ # ISO 8601 Date Representation
355
+ #
356
+ class Date < TestCase
357
+ def test__to_array_basic_ISO8601
358
+ assert_equal([nil, [1985,4,12]], When::BasicTypes::Date._to_array_basic_ISO8601('19850412'))
359
+ assert_equal([nil, [1985]], When::BasicTypes::Date._to_array_basic_ISO8601('1985'))
360
+ assert_equal([:century, [1900]], When::BasicTypes::Date._to_array_basic_ISO8601('19'))
361
+ end
362
+
363
+ def test__to_array_extended_ISO8601
364
+ assert_equal([nil, [1985,4,12]], When::BasicTypes::Date._to_array_extended_ISO8601('1985-04-12'))
365
+ assert_equal([nil, [1985,4]], When::BasicTypes::Date._to_array_extended_ISO8601('1985-04'))
366
+ # assert_equal([19,nil,nil], When::BasicTypes::Date._to_array_extended_ISO8601('19'))
367
+ end
368
+ end
369
+
370
+ #
371
+ # ISO 8601 Time Representation
372
+ #
373
+ class Time < TestCase
374
+ def test_nothing
375
+ end
376
+ end
377
+
378
+ #
379
+ # M17n String
380
+ #
381
+ class M17n < TestCase
382
+ Term1 = When::BasicTypes::M17n.new('Tokyo', 'zip')
383
+ Term2 = When::BasicTypes::M17n.new(<<LABEL, <<NS, <<LOCALE)
384
+ [
385
+ Getsuyou
386
+ Monday
387
+ ]
388
+ LABEL
389
+ ISO, jwiki=http://ja.wikipedia.org/wiki/, ewiki=http://en.wikipedia.org/wiki/
390
+ NS
391
+ =jwiki:, en=ewiki:
392
+ LOCALE
393
+ Term3 = When.Resource('_co:Common::Week::Monday::Monday')
394
+
395
+ def test__code_space
396
+ assert_equal('zip', Term1.codeSpace)
397
+ assert_equal("ISO", Term2.codeSpace)
398
+ assert_equal(nil, Term3.codeSpace)
399
+ end
400
+
401
+ def test__label
402
+ assert_equal("Getsuyou", Term2.label.to_s)
403
+ assert_equal(String, Term2.label.class)
404
+ assert_equal("Monday", Term3.label.to_s)
405
+ end
406
+ end
407
+
408
+ class Object < TestCase
409
+ def test_nothing
410
+ end
411
+ end
412
+
413
+ end
414
+
415
+ module RS
416
+ class Identifier < TestCase
417
+ def test__forward
418
+ name = When.Residue('Monday').label
419
+ monday = When::RS::Identifier.new(name)
420
+ assert_equal("月曜日", monday / 'ja')
421
+ end
422
+ end
423
+ end
424
+
425
+ module EX
426
+ class Extent < TestCase
427
+ def test_nothing
428
+ end
429
+ end
430
+ end
431
+ end