when_exe 0.3.6 → 0.3.7

Sign up to get free protection for your applications and to get access to all the features.
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