when_exe 0.4.2 → 0.5.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (144) hide show
  1. checksums.yaml +5 -5
  2. data/LICENSE.ja.txt +8 -21
  3. data/LICENSE.txt +5 -27
  4. data/README.md +25 -79
  5. data/bin/.pryrc +9 -0
  6. data/bin/make_ttl.rb +3 -2
  7. data/bin/make_ttl.rb.config +3 -3
  8. data/lib/when_exe.rb +101 -5
  9. data/lib/when_exe/basictypes.rb +47 -16
  10. data/lib/when_exe/calendarnote.rb +27 -18
  11. data/lib/when_exe/calendartypes.rb +12 -50
  12. data/lib/when_exe/coordinates.rb +37 -391
  13. data/lib/when_exe/ephemeris.rb +53 -14
  14. data/lib/when_exe/ephemeris/eclipse.rb +8 -8
  15. data/lib/when_exe/ephemeris/moon.rb +333 -333
  16. data/lib/when_exe/ephemeris/notes.rb +29 -17
  17. data/lib/when_exe/ephemeris/phase_table.rb +825 -0
  18. data/lib/when_exe/ephemeris/term_table.rb +603 -0
  19. data/lib/when_exe/events.rb +1888 -0
  20. data/lib/when_exe/google_api.rb +26 -31
  21. data/lib/when_exe/icalendar.rb +129 -12
  22. data/lib/when_exe/inspect.rb +5 -5
  23. data/lib/when_exe/linkeddata.rb +43 -23
  24. data/lib/when_exe/locales/akt.rb +63 -0
  25. data/lib/when_exe/locales/encoding_conversion.rb +134 -134
  26. data/lib/when_exe/locales/iast.rb +90 -90
  27. data/lib/when_exe/locales/locale.rb +88 -18
  28. data/lib/when_exe/locales/transliteration_table.rb +62 -62
  29. data/lib/when_exe/mini_application.rb +14 -8
  30. data/lib/when_exe/namespace.rb +42 -0
  31. data/lib/when_exe/parts/enumerator.rb +16 -5
  32. data/lib/when_exe/parts/geometric_complex.rb +52 -2
  33. data/lib/when_exe/parts/method_cash.rb +229 -224
  34. data/lib/when_exe/parts/resource.rb +65 -35
  35. data/lib/when_exe/parts/timezone.rb +25 -34
  36. data/lib/when_exe/region/balinese.rb +5 -3
  37. data/lib/when_exe/region/chinese.rb +39 -11
  38. data/lib/when_exe/region/chinese/calendars.rb +1016 -1016
  39. data/lib/when_exe/region/chinese/epochs.rb +7 -7
  40. data/lib/when_exe/region/chinese/notes.rb +3 -3
  41. data/lib/when_exe/region/chinese/twins.rb +134 -11
  42. data/lib/when_exe/region/dee.rb +4 -4
  43. data/lib/when_exe/region/discordian.rb +1 -1
  44. data/lib/when_exe/region/geologicalage.rb +139 -128
  45. data/lib/when_exe/region/hanke_henry.rb +4 -4
  46. data/lib/when_exe/region/indian.rb +77 -8
  47. data/lib/when_exe/region/international_fixed.rb +3 -3
  48. data/lib/when_exe/region/islamic.rb +1 -1
  49. data/lib/when_exe/region/japanese.rb +12 -8
  50. data/lib/when_exe/region/japanese/calendars.rb +397 -397
  51. data/lib/when_exe/region/japanese/eclipses.rb +1194 -1194
  52. data/lib/when_exe/region/japanese/epochs.rb +8 -4
  53. data/lib/when_exe/region/japanese/location.rb +93 -0
  54. data/lib/when_exe/region/japanese/nihon_shoki.rb +70 -70
  55. data/lib/when_exe/region/japanese/notes.rb +57 -18
  56. data/lib/when_exe/region/japanese/residues.rb +33 -11
  57. data/lib/when_exe/region/japanese/twins.rb +27 -14
  58. data/lib/when_exe/region/japanese/weeks.rb +7 -7
  59. data/lib/when_exe/region/korean.rb +384 -384
  60. data/lib/when_exe/region/location.rb +40 -0
  61. data/lib/when_exe/region/martian.rb +1 -1
  62. data/lib/when_exe/region/mayan.rb +2 -2
  63. data/lib/when_exe/region/roman.rb +2 -2
  64. data/lib/when_exe/region/ryukyu.rb +101 -101
  65. data/lib/when_exe/region/saudi_arabian.rb +57 -0
  66. data/lib/when_exe/region/shire.rb +1 -1
  67. data/lib/when_exe/region/world.rb +3 -3
  68. data/lib/when_exe/region/zoroastrian.rb +1 -1
  69. data/lib/when_exe/spatial.rb +611 -0
  70. data/lib/when_exe/timestandard.rb +9 -7
  71. data/lib/when_exe/tmobjects.rb +34 -2
  72. data/lib/when_exe/tmposition.rb +225 -1322
  73. data/lib/when_exe/tmptypes.rb +1279 -0
  74. data/lib/when_exe/tmreference.rb +42 -7
  75. data/lib/when_exe/version.rb +3 -3
  76. data/test/events/example-datasets +6 -0
  77. data/test/events/history-dataset.csv +22 -0
  78. data/test/events/japanese-holiday-index.csv +28 -0
  79. data/test/events/japanese-holiday.csv +94 -0
  80. data/test/events/japanese-holiday.ttl +948 -0
  81. data/test/events/make_events_ttl.rb +18 -0
  82. data/test/events/mori_wikichoshi.csv +14 -0
  83. data/test/events/ndl_koyomi.csv +220 -0
  84. data/test/events/ndl_koyomi_index.csv +44 -0
  85. data/test/events/primeminister-dataset.csv +19 -0
  86. data/test/events/shogun-dataset.csv +22 -0
  87. data/test/events/test-history-dataset-edge-sparql.csv +26 -0
  88. data/test/events/test-history-dataset-edge.csv +27 -0
  89. data/test/events/test-history-dataset-sparql.csv +22 -0
  90. data/test/events/test-history-dataset.csv +23 -0
  91. data/test/events/test-history-events-edge.ttl +89 -0
  92. data/test/events/test-history-events.csv +6 -0
  93. data/test/examples/JapanHolidays.ics +2 -2
  94. data/test/examples/JapanHolidaysRFC6350.ics +3 -3
  95. data/test/examples/Residue.m17n +2 -2
  96. data/test/examples/Spatial.m17n +3 -3
  97. data/test/examples/Terms.m17n +3 -3
  98. data/test/scripts/8.ext.rb +6 -6
  99. data/test/scripts/8.rb +6 -6
  100. data/test/scripts/geometric_complex.rb +41 -41
  101. data/test/scripts/korea.rb +59 -59
  102. data/test/scripts/thai.rb +36 -36
  103. data/test/test.rb +6 -0
  104. data/test/test/basictypes.rb +431 -431
  105. data/test/test/calendarnote.rb +86 -86
  106. data/test/test/calendartypes.rb +97 -97
  107. data/test/test/coordinates.rb +399 -397
  108. data/test/test/ephemeris.rb +115 -115
  109. data/test/test/ephemeris/moon.rb +14 -14
  110. data/test/test/ephemeris/planets.rb +14 -14
  111. data/test/test/ephemeris/sun.rb +14 -14
  112. data/test/test/events.rb +32 -0
  113. data/test/test/google_api.rb +45 -32
  114. data/test/test/inspect.rb +153 -153
  115. data/test/test/parts.rb +488 -488
  116. data/test/test/region/armenian.rb +20 -20
  117. data/test/test/region/bahai.rb +58 -58
  118. data/test/test/region/balinese.rb +34 -34
  119. data/test/test/region/chinese.rb +229 -229
  120. data/test/test/region/christian.rb +226 -226
  121. data/test/test/region/coptic.rb +27 -27
  122. data/test/test/region/discordian.rb +20 -20
  123. data/test/test/region/french.rb +33 -33
  124. data/test/test/region/geologicalage.rb +17 -17
  125. data/test/test/region/indian.rb +14 -1
  126. data/test/test/region/iran.rb +54 -54
  127. data/test/test/region/islamic.rb +64 -54
  128. data/test/test/region/japanese.rb +281 -261
  129. data/test/test/region/jewish.rb +63 -63
  130. data/test/test/region/m17n.rb +21 -21
  131. data/test/test/region/mayan.rb +17 -16
  132. data/test/test/region/reforms.rb +2 -2
  133. data/test/test/region/residue.rb +7 -7
  134. data/test/test/region/shire.rb +58 -58
  135. data/test/test/region/swedish.rb +45 -45
  136. data/test/test/region/thai.rb +116 -116
  137. data/test/test/region/tibetan.rb +30 -30
  138. data/test/test/region/vietnamese.rb +102 -102
  139. data/test/test/region/zoroastrian.rb +58 -58
  140. data/test/test/timestandard.rb +81 -81
  141. data/test/test/tmobjects.rb +402 -402
  142. data/test/test/tmposition.rb +66 -4
  143. data/test/test/tmreference.rb +157 -157
  144. metadata +36 -93
data/test/test.rb CHANGED
@@ -31,6 +31,11 @@ class MiniTest::TestCase
31
31
  end
32
32
  end
33
33
 
34
+ if self.class.const_defined?(:Encoding)
35
+ Encoding.default_external = 'UTF-8'
36
+ Encoding.default_internal = 'UTF-8'
37
+ end
38
+
34
39
  require 'when_exe'
35
40
  require 'when_exe/mini_application'
36
41
  #include When
@@ -49,6 +54,7 @@ require './test/calendarnote'
49
54
  require './test/inspect'
50
55
  require './test/linkeddata'
51
56
  require './test/google_api'
57
+ require './test/events'
52
58
  require './test/region/m17n'
53
59
  require './test/region/residue'
54
60
  require './test/region/christian'
@@ -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-2020 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=https://ja.wikipedia.org/wiki/, ewiki=https://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_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