when_exe 0.4.2 → 0.4.3

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 (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