when_exe 0.3.6 → 0.3.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (117) hide show
  1. checksums.yaml +7 -0
  2. data/README.md +171 -0
  3. data/lib/when_exe.rb +78 -47
  4. data/lib/when_exe/basictypes.rb +752 -747
  5. data/lib/when_exe/calendarnote.rb +805 -801
  6. data/lib/when_exe/calendartypes.rb +1583 -1531
  7. data/lib/when_exe/coordinates.rb +16 -15
  8. data/lib/when_exe/core/duration.rb +114 -110
  9. data/lib/when_exe/core/extension.rb +504 -504
  10. data/lib/when_exe/ephemeris.rb +1917 -1913
  11. data/lib/when_exe/ephemeris/moon.rb +333 -333
  12. data/lib/when_exe/ephemeris/notes.rb +389 -387
  13. data/lib/when_exe/ephemeris/planets.rb +585 -585
  14. data/lib/when_exe/ephemeris/sun.rb +214 -214
  15. data/lib/when_exe/googlecalendar.rb +144 -140
  16. data/lib/when_exe/icalendar.rb +1636 -1636
  17. data/lib/when_exe/inspect.rb +46 -22
  18. data/lib/when_exe/locales/akt.rb +176 -176
  19. data/lib/when_exe/locales/encoding_conversion.rb +134 -126
  20. data/lib/when_exe/locales/iast.rb +90 -90
  21. data/lib/when_exe/locales/locale.rb +750 -746
  22. data/lib/when_exe/locales/transliteration_table.rb +62 -62
  23. data/lib/when_exe/mini_application.rb +307 -305
  24. data/lib/when_exe/parts/enumerator.rb +2 -2
  25. data/lib/when_exe/parts/geometric_complex.rb +397 -397
  26. data/lib/when_exe/parts/method_cash.rb +224 -224
  27. data/lib/when_exe/parts/resource.rb +1069 -1071
  28. data/lib/when_exe/parts/timezone.rb +240 -230
  29. data/lib/when_exe/region/armenian.rb +56 -56
  30. data/lib/when_exe/region/babylonian.rb +405 -0
  31. data/lib/when_exe/region/bahai.rb +146 -146
  32. data/lib/when_exe/region/balinese.rb +622 -622
  33. data/lib/when_exe/region/chinese.rb +95 -25
  34. data/lib/when_exe/region/chinese/calendars.rb +1016 -1016
  35. data/lib/when_exe/region/chinese/epochs.rb +1 -1
  36. data/lib/when_exe/region/chinese/twins.rb +803 -795
  37. data/lib/when_exe/region/christian.rb +824 -824
  38. data/lib/when_exe/region/coptic.rb +106 -87
  39. data/lib/when_exe/region/discordian.rb +225 -225
  40. data/lib/when_exe/region/far_east.rb +188 -188
  41. data/lib/when_exe/region/french.rb +56 -56
  42. data/lib/when_exe/region/geologicalage.rb +639 -639
  43. data/lib/when_exe/region/goddess.rb +58 -58
  44. data/lib/when_exe/region/indian.rb +1254 -1251
  45. data/lib/when_exe/region/iranian.rb +8 -8
  46. data/lib/when_exe/region/islamic.rb +3 -3
  47. data/lib/when_exe/region/japanese.rb +93 -99
  48. data/lib/when_exe/region/japanese/calendars.rb +396 -397
  49. data/lib/when_exe/region/japanese/epochs.rb +26 -26
  50. data/lib/when_exe/region/japanese/nihon_shoki.rb +71 -71
  51. data/lib/when_exe/region/japanese/notes.rb +1383 -1386
  52. data/lib/when_exe/region/japanese/residues.rb +1306 -1306
  53. data/lib/when_exe/region/japanese/twins.rb +225 -225
  54. data/lib/when_exe/region/japanese/weeks.rb +112 -0
  55. data/lib/when_exe/region/javanese.rb +230 -230
  56. data/lib/when_exe/region/jewish.rb +126 -126
  57. data/lib/when_exe/region/korean.rb +378 -378
  58. data/lib/when_exe/region/m17n.rb +114 -113
  59. data/lib/when_exe/region/martian.rb +258 -255
  60. data/lib/when_exe/region/mayan.rb +32 -32
  61. data/lib/when_exe/region/residue.rb +89 -89
  62. data/lib/when_exe/region/roman.rb +36 -24
  63. data/lib/when_exe/region/ryukyu.rb +97 -97
  64. data/lib/when_exe/region/shire.rb +240 -240
  65. data/lib/when_exe/region/soviet.rb +209 -0
  66. data/lib/when_exe/region/symmetry.rb +50 -50
  67. data/lib/when_exe/region/thai.rb +336 -335
  68. data/lib/when_exe/region/tibetan.rb +316 -315
  69. data/lib/when_exe/region/vietnamese.rb +440 -439
  70. data/lib/when_exe/region/weekdate.rb +80 -80
  71. data/lib/when_exe/region/world.rb +175 -175
  72. data/lib/when_exe/region/yerm.rb +14 -14
  73. data/lib/when_exe/region/zoroastrian.rb +203 -203
  74. data/lib/when_exe/timestandard.rb +707 -681
  75. data/lib/when_exe/tmduration.rb +338 -330
  76. data/lib/when_exe/tmobjects.rb +1346 -1325
  77. data/lib/when_exe/tmposition.rb +2115 -2072
  78. data/lib/when_exe/tmreference.rb +1693 -1669
  79. data/lib/when_exe/version.rb +1 -1
  80. data/link_to_online_documents +1 -1
  81. data/test/examples/JapanHolidaysRFC6350.ics +1 -1
  82. data/test/test.rb +67 -61
  83. data/test/test/basictypes.rb +409 -409
  84. data/test/test/calendarnote.rb +86 -69
  85. data/test/test/calendartypes.rb +97 -97
  86. data/test/test/coordinates.rb +396 -396
  87. data/test/test/ephemeris.rb +83 -74
  88. data/test/test/ephemeris/moon.rb +14 -14
  89. data/test/test/ephemeris/planets.rb +14 -14
  90. data/test/test/ephemeris/sun.rb +14 -14
  91. data/test/test/googlecalendar.rb +194 -176
  92. data/test/test/icalendar.rb +867 -858
  93. data/test/test/inspect.rb +117 -117
  94. data/test/test/parts.rb +487 -487
  95. data/test/test/region/balinese.rb +34 -0
  96. data/test/test/region/chinese.rb +218 -206
  97. data/test/test/region/christian.rb +245 -245
  98. data/test/test/region/coptic.rb +27 -27
  99. data/test/test/region/french.rb +33 -33
  100. data/test/test/region/geologicalage.rb +17 -17
  101. data/test/test/region/indian.rb +57 -57
  102. data/test/test/region/iran.rb +54 -54
  103. data/test/test/region/islamic.rb +18 -18
  104. data/test/test/region/japanese.rb +237 -219
  105. data/test/test/region/jewish.rb +61 -61
  106. data/test/test/region/m17n.rb +184 -184
  107. data/test/test/region/mayan.rb +195 -195
  108. data/test/test/region/residue.rb +147 -139
  109. data/test/test/region/thai.rb +116 -116
  110. data/test/test/region/tibetan.rb +30 -30
  111. data/test/test/region/vietnamese.rb +102 -102
  112. data/test/test/region/yerm.rb +146 -146
  113. data/test/test/timestandard.rb +81 -81
  114. data/test/test/tmobjects.rb +328 -328
  115. data/test/test/tmposition.rb +397 -284
  116. data/test/test/tmreference.rb +157 -157
  117. metadata +13 -10
@@ -1,284 +1,397 @@
1
- # -*- coding: utf-8 -*-
2
- =begin
3
- Copyright (C) 2011-2014 Takashi SUGA
4
-
5
- You may use and/or modify this file according to the license
6
- described in the LICENSE.txt file included in this archive.
7
- =end
8
-
9
- module Test::TM
10
-
11
- #
12
- # (5.4) Temporal Position Package
13
- #
14
- #
15
-
16
- class IndeterminateValue < Test::Unit::TestCase
17
- def test_nothing
18
- end
19
- end
20
-
21
- class Position < Test::Unit::TestCase
22
- def test__forward
23
- pos = When::TM::Position.new('2013-11-12')
24
- assert_equal(2456609, pos.to_i)
25
- end
26
- end
27
-
28
- class TemporalPosition < Test::Unit::TestCase
29
- def test__instance
30
- [["19800203T234512.33+0900", "1980-02-03T23:45:12.33+09:00"],
31
- ["19800203T234512.33Z", "1980-02-03T23:45:12.33Z"],
32
- ["19800203T234512", "1980-02-03T23:45:12Z"],
33
- ["19800203T2345", "1980-02-03T23:45Z"],
34
- ["19800203T23", "1980-02-03T23Z"],
35
- ["19800203T", "1980-02-03TZ"],
36
- ["19800203", "1980-02-03"],
37
- ["1980-02", "1980-02"],
38
- ["S33.07.31", "S33(1958).07.31"],
39
- ["S33.07.31/", "S33(1958).07.31"],
40
- ["1980T-0700", "1980T-07:00"],
41
- ["T234512-0700", "T23:45:12-07:00"],
42
- ["H2(1990)-05-11T23:45:12-07:00", "H02(1990).05.11T23:45:12-07:00"],
43
- ["T3(1914)=05-11T23:45:12-07:00", "T03(1914)=05.11T23:45:12-07:00"], # TODO
44
- ["S64.01.07", "S64(1989).01.07"],
45
- ["2001-08-02/After", "2001-08-02"],
46
- ["Before/2001-09-10", "2001-09-10"]].each do |sample|
47
- assert_equal(sample[1], When.when?(sample[0]).to_s)
48
- end
49
- assert_equal(["1980-02-03","1980-02-05","1980-02-06","1980-02-09"], When.when?(<<LIST).map {|date| date.to_s})
50
- 19800203
51
- 19800205
52
- 19800206
53
- 19800209
54
- LIST
55
- assert_equal("2001-08-02..2001-09-10", When.when?("2001-08-02/09-10").to_s)
56
- assert_equal("1980-02-01", When.when?("800201", {:abbr=>1970}).to_s)
57
- # assert_equal(nil, When.TemporalPosition(2011,2,29))
58
- assert_equal('2011-03-01', When.TemporalPosition(2011,2,29).to_s)
59
- assert_equal(nil, When.TemporalPosition(2011,2,29, {:invalid=>:check}))
60
- assert_raises(ArgumentError) { When.TemporalPosition(2011,2,29, {:invalid=>:raise}) }
61
- end
62
-
63
- def test__to_date
64
- if ::Object.const_defined?(:Date) && Date.respond_to?(:civil)
65
- assert(/^Tue Jun 7 00:00:00 (\+00:00|Z) 2011$/ =~ When.when?("2011-06-07").to_date.strftime('%+'))
66
- end
67
- end
68
-
69
- def test__to_date_time
70
- if ::Object.const_defined?(:Date) && Date.respond_to?(:civil)
71
- assert(/Tue Jun 7 16:17:36 \+09:?00 2011$/ =~ When.when?("2011-06-07T16:17:36+09:00").to_date_time.strftime('%+'))
72
- end
73
- end
74
- end
75
-
76
- class Coordinate < Test::Unit::TestCase
77
- def test_nothing
78
- end
79
- end
80
-
81
- class JulianDate < Test::Unit::TestCase
82
- def test_nothing
83
- end
84
- end
85
-
86
- class OrdinalPosition < Test::Unit::TestCase
87
- def test_nothing
88
- end
89
- end
90
-
91
- class ClockTime < Test::Unit::TestCase
92
- def test_nothing
93
- end
94
- end
95
-
96
- class CalDate < Test::Unit::TestCase
97
- def test__floor
98
- date4 = When.when?("19820606^^Julian")
99
- [[-2, "1982"],
100
- [-1, "1982-06"],
101
- [ 0, "1982-06-06"]].each do |sample|
102
- assert_equal(sample[1], date4.floor(sample[0]).to_s)
103
- end
104
- end
105
-
106
- def test__week
107
- date = When.when?('20110517')
108
- assert_equal("2011-05-16...2011-05-23", date.week_included.to_s)
109
- [
110
- ['MO', "2011-05-16...2011-05-23"],
111
- ['TU', "2011-05-17...2011-05-24"],
112
- ['WE', "2011-05-11...2011-05-18"],
113
- ['TH', "2011-05-12...2011-05-19"],
114
- ['FR', "2011-05-13...2011-05-20"],
115
- ['SA', "2011-05-14...2011-05-21"],
116
- ['SU', "2011-05-15...2011-05-22"]
117
- ].each do |sample|
118
- assert_equal(sample[1], date.week_included(sample[0]).to_s)
119
- end
120
- [
121
- [-1, "2011-05-09...2011-05-16"],
122
- [ 0, "2011-05-16...2011-05-23"],
123
- [+1, "2011-05-23...2011-05-30"],
124
- ].each do |sample|
125
- assert_equal(sample[1], date.week_included(sample[0]).to_s)
126
- end
127
- end
128
- end
129
-
130
- class DateAndTime < Test::Unit::TestCase
131
- def test__caret
132
- week = When.Resource("_co:Residue?divisor=7")
133
- date = When.TemporalPosition(2010,11,30, 6, 30)
134
- assert_equal("2010-11-30T06:30Z", date.to_s)
135
- it = date ^ week
136
- assert_equal("2010-12-06T06:30Z", it.next.to_s)
137
- assert_equal("2010-12-13T06:30Z", it.next.to_s)
138
- assert_equal("2010-12-20T06:30Z", it.next.to_s)
139
- it = date ^ When.Duration(2 * When::TM::Duration::DAY)
140
- assert_equal("2010-11-30T06:30Z", it.next.to_s)
141
- assert_equal("2010-12-02T06:30Z", it.next.to_s)
142
- assert_equal("2010-12-04T06:30Z", it.next.to_s)
143
- end
144
-
145
- def test__modulo
146
- week = When.Resource("_co:Residue?divisor=7")
147
- weekName = ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun']
148
- obj1 = When.when?("20100928T234512.33+0900^^Gregorian")
149
- assert_equal("Tue", weekName[obj1 % week])
150
- obj2 = When.when?("20100928T234512.33-0600^^Gregorian")
151
- assert_equal("Tue", weekName[obj2 % week])
152
- end
153
-
154
- def test__minus
155
- obj1 = When.when?("20100928T234512.33+0900^^Gregorian")
156
- obj2 = When.when?("20100928T234512.33-0600^^Gregorian")
157
- assert_equal("2010-08-28T23:45:12.33+09:00", (obj1 - When::Duration("P1M")).to_s)
158
- assert_equal(0.625 * When::TM::Duration::DAY, (obj2 - obj1).duration)
159
- assert_equal("2010-09-13T23:45:12.33-06:00", (obj2 - 15).to_s)
160
- end
161
-
162
- def test__plus
163
- obj1 = When.when?("20100928T234512.33+0900^^Gregorian")
164
- [["P3D", "2010-10-01T23:45:12.33+09:00"],
165
- ["P1Y", "2011-09-28T23:45:12.33+09:00"],
166
- ["P1M", "2010-10-28T23:45:12.33+09:00"],
167
- ["PT3H", "2010-09-29T02:45:12.33+09:00"],
168
- ["P3W", "2010-10-19T23:45:12.33+09:00"]].each do |sample|
169
- assert_equal(sample[1], (obj1 + When::Duration(sample[0])).to_s)
170
- end
171
-
172
- obj2 = When.when?("19820606T1234^^Julian")
173
- [["PT2H15M", "1982-06-06T14:49Z"],
174
- ["PT3H", "1982-06-06T15:34Z"]].each do |sample|
175
- assert_equal(sample[1], (obj2 + When::Duration(sample[0])).to_s)
176
- end
177
-
178
- ic = When.Resource("examples/NewYork.ics")
179
- tz1 = When::V::Timezone["America/New_York"]
180
-
181
- [tz1].each do |tz|
182
- When::TM::Clock.local_time = tz
183
- obj3 = When.when?("1997-04-06T00:00:00", {:clock=>tz})
184
- [["PT1H", "1997-04-06T01:00:00-05:00"],
185
- ["PT2H", "1997-04-06T02:00:00-04:00"],
186
- ["PT3H", "1997-04-06T03:00:00-04:00"],
187
- [1 * When::TM::Duration::HOUR, "1997-04-06T01:00:00-05:00"],
188
- [2 * When::TM::Duration::HOUR, "1997-04-06T03:00:00-04:00"],
189
- [3 * When::TM::Duration::HOUR, "1997-04-06T04:00:00-04:00"]].each do |sample|
190
- assert_equal(sample[1], (obj3 + When::Duration(sample[0])).to_s)
191
- end
192
-
193
- obj4 = When.when?("1997-10-26T00:00:00", {:clock=>tz})
194
- [["PT1H", "1997-10-26T01:00:00-04:00"],
195
- ["PT2H", "1997-10-26T02:00:00-05:00"], # *
196
- ["PT3H", "1997-10-26T03:00:00-05:00"],
197
- [1 * When::TM::Duration::HOUR, "1997-10-26T01:00:00-04:00"],
198
- [2 * When::TM::Duration::HOUR, "1997-10-26T01:00:00-05:00"], # *
199
- [3 * When::TM::Duration::HOUR, "1997-10-26T02:00:00-05:00"]].each do |sample|
200
- assert_equal(sample[1], (obj4 + When::Duration(sample[0])).to_s)
201
- end
202
- end
203
- end
204
-
205
- def test__trans
206
- ic = When.Resource("examples/NewYork.ics")
207
- tz = When::V::Timezone["America/New_York"]
208
-
209
- sample = %w(1997-04-06T00:00:00-05:00 1997-04-06T01:00:00-05:00
210
- 1997-04-06T03:00:00-04:00 1997-04-06T04:00:00-04:00
211
- 1997-04-05T23:00:00-05:00 1997-04-06T00:00:00-05:00
212
- 1997-04-06T01:00:00-05:00 1997-04-06T03:00:00-04:00
213
- 1997-10-26T00:00:00-04:00 1997-10-26T01:00:00-04:00
214
- 1997-10-26T01:00:00-05:00 1997-10-26T02:00:00-05:00
215
- 1997-10-26T01:00:00-04:00 1997-10-26T01:00:00-05:00
216
- 1997-10-26T02:00:00-05:00 1997-10-26T03:00:00-05:00)
217
-
218
- %w(1997-04-06T00:00:00-05:00 1997-04-06T00:00:00-04:00
219
- 1997-10-26T00:00:00-04:00 1997-10-26T00:00:00-05:00).each do |time|
220
- date = When.when?(time)
221
- 4.times do
222
- assert_equal(sample.shift, (tz ^ date).to_s)
223
- date += When::Duration('PT1H')
224
- end
225
- end
226
- end
227
-
228
- if Object.const_defined?(:TZInfo)
229
- def test__trans_tzinfo
230
- tz = When::Parts::Timezone["America/New_York"]
231
-
232
- sample = %w(1997-04-06T00:00:00-05:00 1997-04-06T01:00:00-05:00
233
- 1997-04-06T03:00:00-04:00 1997-04-06T04:00:00-04:00
234
- 1997-04-05T23:00:00-05:00 1997-04-06T00:00:00-05:00
235
- 1997-04-06T01:00:00-05:00 1997-04-06T03:00:00-04:00
236
- 1997-10-26T00:00:00-04:00 1997-10-26T01:00:00-04:00
237
- 1997-10-26T01:00:00-05:00 1997-10-26T02:00:00-05:00
238
- 1997-10-26T01:00:00-04:00 1997-10-26T01:00:00-05:00
239
- 1997-10-26T02:00:00-05:00 1997-10-26T03:00:00-05:00)
240
-
241
- %w(1997-04-06T00:00:00-05:00 1997-04-06T00:00:00-04:00
242
- 1997-10-26T00:00:00-04:00 1997-10-26T00:00:00-05:00).each do |time|
243
- date = When.when?(time)
244
- 4.times do
245
- assert_equal(sample.shift, (tz ^ date).to_s)
246
- date += When::Duration('PT1H')
247
- end
248
- end
249
- end
250
-
251
- def test__plus_tzinfo
252
- obj4 = When.when?("1997-10-26T00:00:00", {:clock=>When::Parts::Timezone["America/New_York"]})
253
- [["PT59M","1997-10-26T00:59:00-04:00"],
254
- ["PT1H", "1997-10-26T01:00:00-04:00"],
255
- ["PT2H", "1997-10-26T02:00:00-05:00"], # "1997-10-26T02:00:00-04:00" - TODO !!
256
- ["PT3H", "1997-10-26T03:00:00-05:00"],
257
- [1 * When::TM::Duration::HOUR, "1997-10-26T01:00:00-04:00"],
258
- [2 * When::TM::Duration::HOUR, "1997-10-26T01:00:00-05:00"], # *
259
- [3 * When::TM::Duration::HOUR, "1997-10-26T02:00:00-05:00"]].each do |sample|
260
- assert_equal(sample[1], (obj4 + When::Duration(sample[0])).to_s)
261
- end
262
- end
263
- else
264
- puts "Tests for TZInfo have been skipped at line #{__LINE__} of #{__FILE__.split(/\//)[-1]}."
265
- end
266
-
267
- def test__floor_date_and_time
268
- date5 = When.when?("1982-06-06T12:34:56.78^^Julian")
269
- sample = [
270
- "1982TZ",
271
- "1982-06TZ",
272
- "1982-06-06TZ",
273
- "1982-06-06T12Z",
274
- "1982-06-06T12:34Z",
275
- "1982-06-06T12:34:56Z",
276
- "1982-06-06T12:34:56.7Z",
277
- "1982-06-06T12:34:56.78Z"
278
- ]
279
- (-2..5).each do |i|
280
- assert_equal(sample.shift, date5.floor(i).to_s)
281
- end
282
- end
283
- end
284
- 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::TM
10
+
11
+ #
12
+ # (5.4) Temporal Position Package
13
+ #
14
+ #
15
+
16
+ class IndeterminateValue < MiniTest::TestCase
17
+ def test_nothing
18
+ end
19
+ end
20
+
21
+ class Position < MiniTest::TestCase
22
+ def test__forward
23
+ pos = When::TM::Position.new('2013-11-12')
24
+ assert_equal(2456609, pos.to_i)
25
+ end
26
+ end
27
+
28
+ class TemporalPosition < MiniTest::TestCase
29
+ def test__instance
30
+ [["19800203T234512.33+0900", "1980-02-03T23:45:12.33+09:00"],
31
+ ["19800203T234512.33Z", "1980-02-03T23:45:12.33Z"],
32
+ ["19800203T234512", "1980-02-03T23:45:12Z"],
33
+ ["19800203T2345", "1980-02-03T23:45Z"],
34
+ ["19800203T23", "1980-02-03T23Z"],
35
+ ["19800203T", "1980-02-03TZ"],
36
+ ["19800203", "1980-02-03"],
37
+ ["1980-02", "1980-02"],
38
+ ["S33.07.31", "S33(1958).07.31"],
39
+ ["S33.07.31/", "S33(1958).07.31"],
40
+ ["1980T-0700", "1980T-07:00"],
41
+ ["T234512-0700", "T23:45:12-07:00"],
42
+ ["H2(1990)-05-11T23:45:12-07:00", "H02(1990).05.11T23:45:12-07:00"],
43
+ ["T3(1914)=05-11T23:45:12-07:00", "T03(1914)=05.11T23:45:12-07:00"], # TODO
44
+ ["S64.01.07", "S64(1989).01.07"],
45
+ ["2001-08-02/After", "2001-08-02"],
46
+ ["Before/2001-09-10", "2001-09-10"]].each do |sample|
47
+ assert_equal(sample[1], When.when?(sample[0]).to_s)
48
+ end
49
+ assert_equal(["1980-02-03","1980-02-05","1980-02-06","1980-02-09"], When.when?(<<LIST).map {|date| date.to_s})
50
+ 19800203
51
+ 19800205
52
+ 19800206
53
+ 19800209
54
+ LIST
55
+ assert_equal("2001-08-02..2001-09-10", When.when?("2001-08-02/09-10").to_s)
56
+ assert_equal("1980-02-01", When.when?("800201", {:abbr=>1970}).to_s)
57
+ # assert_equal(nil, When.TemporalPosition(2011,2,29))
58
+ assert_equal('2011-03-01', When.TemporalPosition(2011,2,29).to_s)
59
+ assert_equal(nil, When.TemporalPosition(2011,2,29, {:invalid=>:check}))
60
+ assert_raises(ArgumentError) { When.TemporalPosition(2011,2,29, {:invalid=>:raise}) }
61
+ end
62
+
63
+ def test__to_date
64
+ if ::Object.const_defined?(:Date) && Date.respond_to?(:civil)
65
+ assert(/\ATue Jun 7 00:00:00 (\+00:00|Z) 2011\z/ =~ When.when?("2011-06-07").to_date.strftime('%+'))
66
+ end
67
+ end
68
+
69
+ def test__to_date_time
70
+ if ::Object.const_defined?(:Date) && Date.respond_to?(:civil)
71
+ assert(/Tue Jun 7 16:17:36 \+09:?00 2011\z/ =~ When.when?("2011-06-07T16:17:36+09:00").to_date_time.strftime('%+'))
72
+ end
73
+ end
74
+ end
75
+
76
+ class Coordinate < MiniTest::TestCase
77
+ def test_nothing
78
+ end
79
+ end
80
+
81
+ class JulianDate < MiniTest::TestCase
82
+ def test_nothing
83
+ end
84
+ end
85
+
86
+ class OrdinalPosition < MiniTest::TestCase
87
+ def test_nothing
88
+ end
89
+ end
90
+
91
+ class ClockTime < MiniTest::TestCase
92
+ def test_nothing
93
+ end
94
+ end
95
+
96
+ class CalDate < MiniTest::TestCase
97
+ def test__floor
98
+ date4 = When.when?("19820606^^Julian")
99
+ [[-2, "1982"],
100
+ [-1, "1982-06"],
101
+ [ 0, "1982-06-06"]].each do |sample|
102
+ assert_equal(sample[1], date4.floor(sample[0]).to_s)
103
+ end
104
+ end
105
+
106
+ def test__week
107
+ date = When.when?('20110517')
108
+ assert_equal("2011-05-16...2011-05-23", date.week_included.to_s)
109
+ [
110
+ ['MO', "2011-05-16...2011-05-23"],
111
+ ['TU', "2011-05-17...2011-05-24"],
112
+ ['WE', "2011-05-11...2011-05-18"],
113
+ ['TH', "2011-05-12...2011-05-19"],
114
+ ['FR', "2011-05-13...2011-05-20"],
115
+ ['SA', "2011-05-14...2011-05-21"],
116
+ ['SU', "2011-05-15...2011-05-22"]
117
+ ].each do |sample|
118
+ assert_equal(sample[1], date.week_included(sample[0]).to_s)
119
+ end
120
+ [
121
+ [-1, "2011-05-09...2011-05-16"],
122
+ [ 0, "2011-05-16...2011-05-23"],
123
+ [+1, "2011-05-23...2011-05-30"],
124
+ ].each do |sample|
125
+ assert_equal(sample[1], date.week_included(sample[0]).to_s)
126
+ end
127
+ end
128
+ end
129
+
130
+ class DateAndTime < MiniTest::TestCase
131
+ def test__caret
132
+ week = When.Resource("_co:Residue?divisor=7")
133
+ date = When.TemporalPosition(2010,11,30, 6, 30)
134
+ assert_equal("2010-11-30T06:30Z", date.to_s)
135
+ it = date ^ week
136
+ assert_equal("2010-12-06T06:30Z", it.next.to_s)
137
+ assert_equal("2010-12-13T06:30Z", it.next.to_s)
138
+ assert_equal("2010-12-20T06:30Z", it.next.to_s)
139
+ it = date ^ When.Duration(2 * When::TM::Duration::DAY)
140
+ assert_equal("2010-11-30T06:30Z", it.next.to_s)
141
+ assert_equal("2010-12-02T06:30Z", it.next.to_s)
142
+ assert_equal("2010-12-04T06:30Z", it.next.to_s)
143
+ end
144
+
145
+ def test__modulo
146
+ week = When.Resource("_co:Residue?divisor=7")
147
+ weekName = ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun']
148
+ obj1 = When.when?("20100928T234512.33+0900^^Gregorian")
149
+ assert_equal("Tue", weekName[obj1 % week])
150
+ obj2 = When.when?("20100928T234512.33-0600^^Gregorian")
151
+ assert_equal("Tue", weekName[obj2 % week])
152
+ end
153
+
154
+ def test__minus
155
+ obj1 = When.when?("20100928T234512.33+0900^^Gregorian")
156
+ obj2 = When.when?("20100928T234512.33-0600^^Gregorian")
157
+ assert_equal("2010-08-28T23:45:12.33+09:00", (obj1 - When::Duration("P1M")).to_s)
158
+ assert_equal(0.625 * When::TM::Duration::DAY, (obj2 - obj1).duration)
159
+ assert_equal("2010-09-13T23:45:12.33-06:00", (obj2 - 15).to_s)
160
+ end
161
+
162
+ def test__plus
163
+ obj1 = When.when?("20100928T234512.33+0900^^Gregorian")
164
+ [["P3D", "2010-10-01T23:45:12.33+09:00"],
165
+ ["P1Y", "2011-09-28T23:45:12.33+09:00"],
166
+ ["P1M", "2010-10-28T23:45:12.33+09:00"],
167
+ ["PT3H", "2010-09-29T02:45:12.33+09:00"],
168
+ ["P3W", "2010-10-19T23:45:12.33+09:00"]].each do |sample|
169
+ assert_equal(sample[1], (obj1 + When::Duration(sample[0])).to_s)
170
+ end
171
+
172
+ obj2 = When.when?("19820606T1234^^Julian")
173
+ [["PT2H15M", "1982-06-06T14:49Z"],
174
+ ["PT3H", "1982-06-06T15:34Z"]].each do |sample|
175
+ assert_equal(sample[1], (obj2 + When::Duration(sample[0])).to_s)
176
+ end
177
+
178
+ ic = When.Resource("examples/NewYork.ics")
179
+ tz1 = When::V::Timezone["America/New_York"]
180
+
181
+ [tz1].each do |tz|
182
+ When::TM::Clock.local_time = tz
183
+ obj3 = When.when?("1997-04-06T00:00:00", {:clock=>tz})
184
+ [["PT1H", "1997-04-06T01:00:00-05:00"],
185
+ ["PT2H", "1997-04-06T02:00:00-04:00"],
186
+ ["PT3H", "1997-04-06T03:00:00-04:00"],
187
+ [1 * When::TM::Duration::HOUR, "1997-04-06T01:00:00-05:00"],
188
+ [2 * When::TM::Duration::HOUR, "1997-04-06T03:00:00-04:00"],
189
+ [3 * When::TM::Duration::HOUR, "1997-04-06T04:00:00-04:00"]].each do |sample|
190
+ assert_equal(sample[1], (obj3 + When::Duration(sample[0])).to_s)
191
+ end
192
+
193
+ obj4 = When.when?("1997-10-26T00:00:00", {:clock=>tz})
194
+ [["PT1H", "1997-10-26T01:00:00-04:00"],
195
+ ["PT2H", "1997-10-26T02:00:00-05:00"], # *
196
+ ["PT3H", "1997-10-26T03:00:00-05:00"],
197
+ [1 * When::TM::Duration::HOUR, "1997-10-26T01:00:00-04:00"],
198
+ [2 * When::TM::Duration::HOUR, "1997-10-26T01:00:00-05:00"], # *
199
+ [3 * When::TM::Duration::HOUR, "1997-10-26T02:00:00-05:00"]].each do |sample|
200
+ assert_equal(sample[1], (obj4 + When::Duration(sample[0])).to_s)
201
+ end
202
+ end
203
+ end
204
+
205
+ def test__trans
206
+ ic = When.Resource("examples/NewYork.ics")
207
+ tz = When::V::Timezone["America/New_York"]
208
+
209
+ sample = %w(1997-04-06T00:00:00-05:00 1997-04-06T01:00:00-05:00
210
+ 1997-04-06T03:00:00-04:00 1997-04-06T04:00:00-04:00
211
+ 1997-04-05T23:00:00-05:00 1997-04-06T00:00:00-05:00
212
+ 1997-04-06T01:00:00-05:00 1997-04-06T03:00:00-04:00
213
+ 1997-10-26T00:00:00-04:00 1997-10-26T01:00:00-04:00
214
+ 1997-10-26T01:00:00-05:00 1997-10-26T02:00:00-05:00
215
+ 1997-10-26T01:00:00-04:00 1997-10-26T01:00:00-05:00
216
+ 1997-10-26T02:00:00-05:00 1997-10-26T03:00:00-05:00)
217
+
218
+ %w(1997-04-06T00:00:00-05:00 1997-04-06T00:00:00-04:00
219
+ 1997-10-26T00:00:00-04:00 1997-10-26T00:00:00-05:00).each do |time|
220
+ date = When.when?(time)
221
+ 4.times do
222
+ assert_equal(sample.shift, (tz ^ date).to_s)
223
+ date += When::Duration('PT1H')
224
+ end
225
+ end
226
+ end
227
+
228
+ if Object.const_defined?(:TZInfo)
229
+ def test__trans_tzinfo
230
+ tz = When::Parts::Timezone["America/New_York"]
231
+
232
+ sample = %w(1997-04-06T00:00:00-05:00 1997-04-06T01:00:00-05:00
233
+ 1997-04-06T03:00:00-04:00 1997-04-06T04:00:00-04:00
234
+ 1997-04-05T23:00:00-05:00 1997-04-06T00:00:00-05:00
235
+ 1997-04-06T01:00:00-05:00 1997-04-06T03:00:00-04:00
236
+ 1997-10-26T00:00:00-04:00 1997-10-26T01:00:00-04:00
237
+ 1997-10-26T01:00:00-05:00 1997-10-26T02:00:00-05:00
238
+ 1997-10-26T01:00:00-04:00 1997-10-26T01:00:00-05:00
239
+ 1997-10-26T02:00:00-05:00 1997-10-26T03:00:00-05:00)
240
+
241
+ %w(1997-04-06T00:00:00-05:00 1997-04-06T00:00:00-04:00
242
+ 1997-10-26T00:00:00-04:00 1997-10-26T00:00:00-05:00).each do |time|
243
+ date = When.when?(time)
244
+ 4.times do
245
+ assert_equal(sample.shift, (tz ^ date).to_s)
246
+ date += When::Duration('PT1H')
247
+ end
248
+ end
249
+ end
250
+
251
+ def test__plus_tzinfo
252
+ obj4 = When.when?("1997-10-26T00:00:00", {:clock=>When::Parts::Timezone["America/New_York"]})
253
+ [["PT59M","1997-10-26T00:59:00-04:00"],
254
+ ["PT1H", "1997-10-26T01:00:00-04:00"],
255
+ ["PT2H", "1997-10-26T02:00:00-05:00"], # "1997-10-26T02:00:00-04:00" - TODO !!
256
+ ["PT3H", "1997-10-26T03:00:00-05:00"],
257
+ [1 * When::TM::Duration::HOUR, "1997-10-26T01:00:00-04:00"],
258
+ [2 * When::TM::Duration::HOUR, "1997-10-26T01:00:00-05:00"], # *
259
+ [3 * When::TM::Duration::HOUR, "1997-10-26T02:00:00-05:00"]].each do |sample|
260
+ assert_equal(sample[1], (obj4 + When::Duration(sample[0])).to_s)
261
+ end
262
+ end
263
+ else
264
+ puts "Tests for TZInfo have been skipped at line #{__LINE__} of #{__FILE__.split(/\//)[-1]}."
265
+ end
266
+
267
+ def test__floor_date_and_time
268
+ date5 = When.when?("1982-06-06T12:34:56.78^^Julian")
269
+ sample = [
270
+ "1982TZ",
271
+ "1982-06TZ",
272
+ "1982-06-06TZ",
273
+ "1982-06-06T12Z",
274
+ "1982-06-06T12:34Z",
275
+ "1982-06-06T12:34:56Z",
276
+ "1982-06-06T12:34:56.7Z",
277
+ "1982-06-06T12:34:56.78Z"
278
+ ]
279
+ (-2..5).each do |i|
280
+ assert_equal(sample.shift, date5.floor(i).to_s)
281
+ end
282
+ end
283
+
284
+ def test__floor_year_bordered_date
285
+ sample = [
286
+ %w(AM6497(0989)*09.01 AM6497(0989)*09.01),
287
+ %w(AM6497(0989)*10.01 AM6497(0989)*09.01),
288
+ %w(AM6497(0989)*11.01 AM6497(0989)*09.01),
289
+ %w(AM6497(0989)*12.01 AM6497(0989)*09.01),
290
+ %w(AM6497(0989).01.01 AM6497(0989)*09.01),
291
+ %w(AM6497(0989).02.01 AM6497(0989)*09.01),
292
+ %w(AM6497(0989).03.01 AM6497(0989)*09.01),
293
+ %w(AM6497(0989).04.01 AM6497(0989)*09.01),
294
+ %w(AM6497(0989).05.01 AM6497(0989)*09.01),
295
+ %w(AM6497(0989).06.01 AM6497(0989)*09.01),
296
+ %w(AM6497(0989).07.01 AM6497(0989)*09.01),
297
+ %w(AM6497(0989).08.01 AM6497(0989)*09.01),
298
+ %w(AM6498(0990)*09.01 AM6498(0990)*09.01)
299
+ ]
300
+
301
+ date = When.when?(sample[0][0])
302
+ 13.times do
303
+ assert_equal(sample.shift, [date.to_s, date.floor(When::YEAR, When::DAY).to_s])
304
+ date += When::P1M
305
+ end
306
+
307
+ date = When.when?('AM6500(0992).02.29')
308
+ assert_equal(%w(AM6500(0992).02.29 0992-02-29), [date.to_s, (When::Julian ^ date).to_s])
309
+
310
+ date = When.Calendar('Gregorian?border=1959-2-23') ^ When.tm_pos(2014,2,22)
311
+ assert_equal([When.Pair(54,1), 2, 22], date.cal_date)
312
+ assert_equal('0054-02-23', date.floor(When::YEAR, When::DAY).to_s)
313
+
314
+ date = When.Calendar('Gregorian?border=1959-2-23') ^ When.tm_pos(2014,2,23)
315
+ assert_equal([55, 2, 23], date.cal_date)
316
+ assert_equal('0055-02-23', date.floor(When::YEAR, When::DAY).to_s)
317
+
318
+ date = When.Calendar('Gregorian?border=1959-2-23') ^ When.tm_pos(2014,2,24)
319
+ assert_equal([55, 2, 24], date.cal_date)
320
+ assert_equal('0055-02-23', date.floor(When::YEAR, When::DAY).to_s)
321
+
322
+ greg = When.Calendar('Gregorian?border=Easter')
323
+ assert_equal('2012=03-30', (greg ^ When.tm_pos(2013, 3, 30)).to_s)
324
+ assert_equal('2013-03-31', (greg ^ When.tm_pos(2013, 3, 31)).to_s)
325
+ assert_equal('2013=03-31', (greg ^ When.tm_pos(2014, 3, 31)).to_s)
326
+ assert_equal('2014-04-20', (greg ^ When.tm_pos(2014, 4, 20)).to_s)
327
+ end
328
+
329
+ def test__floor_day_bordered_date
330
+ sample1 = %w(
331
+ Nabopolassar21(-604).12.30T=05:54:00+03:00
332
+ Nabopolassar21(-604).12.30T=05:55:00+03:00
333
+ NebuchadnezzarII01(-603).01.01T:05:56:00+03:00
334
+ NebuchadnezzarII01(-603).01.01T:05:57:00+03:00)
335
+
336
+ date = When.when?('Nabopolassar21.12.30T=05:54:00', :clock=>'+03:00?border=0-5-55-10')
337
+ 4.times do
338
+ assert_equal(sample1.shift, date.to_s)
339
+ date += When::PT1M
340
+ end
341
+
342
+ sample2 = %w(
343
+ NebuchadnezzarII01(-603).01.01T:18:13:00+03:00
344
+ NebuchadnezzarII01(-603).01.01T:18:14:00+03:00
345
+ NebuchadnezzarII01(-603).01.02T*18:15:00+03:00
346
+ NebuchadnezzarII01(-603).01.02T*18:16:00+03:00)
347
+
348
+ date = When.when?('NebuchadnezzarII1.1.1T18:13:00', :clock=>'+03:00?border=0*18-14-18')
349
+ 4.times do
350
+ assert_equal(sample2.shift, date.to_s)
351
+ date += When::PT1M
352
+ end
353
+
354
+ sample3 = %w(
355
+ Nabopolassar21(-604).12.30T=05:54:00+03:00
356
+ Nabopolassar21(-604).12.30T=05:55:00+03:00
357
+ NebuchadnezzarII01(-603).01.01T:05:56:00+03:00
358
+ NebuchadnezzarII01(-603).01.01T:05:57:00+03:00)
359
+
360
+ date = When.when?('Nabopolassar21.12.30T=05:54:00', :clock=>'+03:00?long=45&lat=32&border=Sunrise')
361
+ 4.times do
362
+ assert_equal(sample3.shift, date.to_s)
363
+ date += When::PT1M
364
+ end
365
+
366
+ sample4 = %w(
367
+ NebuchadnezzarII01(-603).01.01T:18:13:00+03:00
368
+ NebuchadnezzarII01(-603).01.01T:18:14:00+03:00
369
+ NebuchadnezzarII01(-603).01.02T*18:15:00+03:00
370
+ NebuchadnezzarII01(-603).01.02T*18:16:00+03:00)
371
+
372
+ date = When.when?('NebuchadnezzarII1.1.1T18:13:00', :clock=>'+03:00?long=45&lat=32&border=Sunset')
373
+ 4.times do
374
+ assert_equal(sample4.shift, date.to_s)
375
+ date += When::PT1M
376
+ end
377
+
378
+ date = When.when?('NebuchadnezzarII1.1.1T:05:50:00', :clock=>'+03:00?border=0-06')
379
+ assert_equal([1500903, 'Nabopolassar21(-604).12.30T:06:00+03:00'], [date.to_i, date.floor(When::DAY, When::MINUTE).to_s])
380
+ date = When.when?('NebuchadnezzarII1.1.1T:06:00:00', :clock=>'+03:00?border=0-06')
381
+ assert_equal([1500904, 'NebuchadnezzarII01(-603).01.01T:06:00+03:00'], [date.to_i, date.floor(When::DAY, When::MINUTE).to_s])
382
+ date = When.when?('NebuchadnezzarII1.1.1T:05:50:00', :clock=>'+03:00?long=45&lat=32&border=Sunrise')
383
+ assert_equal([1500903, 'Nabopolassar21(-604).12.30T:05:56+03:00'], [date.to_i, date.floor(When::DAY, When::MINUTE).to_s])
384
+ date = When.when?('NebuchadnezzarII1.1.1T:06:00:00', :clock=>'+03:00?long=45&lat=32&border=Sunrise')
385
+ assert_equal([1500904, 'NebuchadnezzarII01(-603).01.01T:05:55+03:00'], [date.to_i, date.floor(When::DAY, When::MINUTE).to_s])
386
+
387
+ date = When.when?('NebuchadnezzarII1.1.1T:18:10:00', :clock=>'+03:00?border=0*18-15')
388
+ assert_equal([1500904, 'NebuchadnezzarII01(-603).01.01T*18:15+03:00'], [date.to_i, date.floor(When::DAY, When::MINUTE).to_s])
389
+ date = When.when?('NebuchadnezzarII1.1.2T*18:20:00', :clock=>'+03:00?border=0*18-15')
390
+ assert_equal([1500905, 'NebuchadnezzarII01(-603).01.02T*18:15+03:00'], [date.to_i, date.floor(When::DAY, When::MINUTE).to_s])
391
+ date = When.when?('NebuchadnezzarII1.1.1T:18:10:00', :clock=>'+03:00?long=45&lat=32&border=Sunset')
392
+ assert_equal([1500904, 'NebuchadnezzarII01(-603).01.01T*18:13+03:00'], [date.to_i, date.floor(When::DAY, When::MINUTE).to_s])
393
+ date = When.when?('NebuchadnezzarII1.1.2T*18:20:00', :clock=>'+03:00?long=45&lat=32&border=Sunset')
394
+ assert_equal([1500905, 'NebuchadnezzarII01(-603).01.02T*18:14+03:00'], [date.to_i, date.floor(When::DAY, When::MINUTE).to_s])
395
+ end
396
+ end
397
+ end