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,858 +1,867 @@
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:V
10
-
11
- class Root < Test::Unit::TestCase
12
- def test_nothing
13
- end
14
- end
15
-
16
- class Calendar < Test::Unit::TestCase
17
- def test__each
18
- When::TM::Clock.local_time = When.Clock("+0900")
19
- cal = When.Resource("examples/JapanHolidays.ics")
20
- sample = [
21
- "2010-01-01T+09:00",
22
- "2010-01-11T+09:00",
23
- "2010-02-11T+09:00",
24
- "2010-03-21T+09:00",
25
- "2010-03-22T+09:00",
26
- "2010-04-29T+09:00",
27
- "2010-05-03T+09:00",
28
- "2010-05-04T+09:00",
29
- "2010-05-05T+09:00",
30
- "2010-07-19T+09:00",
31
- "2010-09-20T+09:00",
32
- "2010-09-23T+09:00",
33
- "2010-10-11T+09:00",
34
- "2010-11-03T+09:00",
35
- "2010-11-23T+09:00",
36
- "2010-12-23T+09:00",
37
- ]
38
- cal.each(When.when?('20100101')...When.when?('20110101')) do |date|
39
- assert_equal(sample.shift, date.to_s)
40
- end
41
- assert_equal([], sample)
42
-
43
- cal = cal.intersection({'summary'=>'成人の日'})
44
- sample = [
45
- "2010-01-11T+09:00",
46
- ]
47
- cal.each(When.when?('20100101')...When.when?('20110101')) do |date|
48
- assert_equal(sample.shift, date.to_s)
49
- end
50
- assert_equal([], sample)
51
- end
52
-
53
- def test__byweekno
54
- sample = [
55
- "1997-05-12",
56
- "1998-05-11",
57
- "1999-05-17"
58
- ]
59
- event = When::V::Event.new({
60
- 'rrule' => 'FREQ=YEARLY;BYDAY=MO;BYWEEKNO=20',
61
- 'dtstart' => 'VALUE=DATE:19970512'
62
- })
63
- event.enum_for(When.when?('19970512'), :forward, 3, {'1st'=>"don't care"}).each do |date|
64
- assert_equal(sample.shift, date.to_s)
65
- end
66
- end
67
-
68
- def test__include_event
69
- d0504 = When.when?('20100504')
70
- d0505 = When.when?('20100505')
71
-
72
- cal = When.Resource("examples/JapanHolidays.ics")
73
- it = cal.enum_for(When.when?('20100501'))
74
- date = it.next
75
- assert_equal(["2010-05-03T+09:00", 0], [date.to_s, date.precision])
76
- assert_equal([true,true], [d0504,d0505].map {|v| cal.include?(v)})
77
-
78
- event = When::Parts::Resource["examples/JapanHolidays.ics::Midori_no_hi_2"] # みどりの日
79
- it = event.enum_for(When.when?('20100501'))
80
- date = it.next
81
- assert_equal(["2010-05-04T+09:00", 0], [date.to_s, date.precision])
82
- assert_equal([true,false], [d0504,d0505].map {|v| event.include?(v)})
83
- end
84
-
85
- def test__rfc_update
86
- sample = ["Children's_Day_(Japan)", 'Children"s_Day_(Japan)', "Children's_Day_(Japan)"]
87
- When::TM::Clock.local_time = When.Clock("+0900")
88
- ["JapanHolidays.ics", "JapanHolidays.ics?Escape=^'", "JapanHolidaysRFC6350.ics"].each do |ics|
89
- cal = When.Resource('examples/' + ics)
90
- cal = cal.intersection({'summary'=>/Children['"]s_Day_\(Japan\)/})
91
- cal.each(When.when?('20100101')...When.when?('20110101')) do |date|
92
- assert_equal(sample.shift, date.events[0].summary / 'en')
93
- end
94
- end
95
- end
96
- end
97
-
98
- class Event < Test::Unit::TestCase
99
- def test__event
100
- When::TM::Clock.local_time = When.Clock("+0900")
101
- event = When::V::Event.new({
102
- 'rrule' => {'FREQ'=>'MONTHLY', 'INTERVAL'=>12, 'BYDAY'=>{''=>'2MO'}},
103
- 'dtstart' => 'VALUE=DATE:20070108'
104
- })
105
- sample = [
106
- "2007-01-08",
107
- "2008-01-14",
108
- "2009-01-12",
109
- "2010-01-11",
110
- "2011-01-10",
111
- "2012-01-09",
112
- "2013-01-14",
113
- "2014-01-13",
114
- "2015-01-12",
115
- "2016-01-11"
116
- ]
117
- event.enum_for(When.when?('20070101'), :forward, 10).each do |date|
118
- assert_equal(sample.shift, date.to_s)
119
- end
120
- assert_equal([], sample)
121
-
122
- sample = [
123
- "2007-01-08",
124
- "2007-01-15",
125
- "2007-01-22",
126
- "2007-01-29",
127
- "2007-02-05",
128
- "2007-02-12",
129
- "2007-02-19",
130
- "2007-02-26",
131
- "2007-03-05",
132
- "2007-03-12"
133
- ]
134
- event = When::V::Event.new({
135
- 'rrule' => {'FREQ'=>'P1W'},
136
- 'dtstart' => 'VALUE=DATE:20070108'
137
- })
138
- event.enum_for(When.when?('20070101'), :forward, 10).each do |date|
139
- assert_equal(sample.shift, date.to_s)
140
- end
141
- assert_equal([], sample)
142
- end
143
-
144
- def test__last_work_days # See RFC 5545 [Page 43]
145
- sample = [
146
- "2011-01-28",
147
- "2011-01-31",
148
- "2011-02-25",
149
- "2011-02-28",
150
- "2011-03-30",
151
- "2011-03-31",
152
- ]
153
- event = When::V::Event.new({
154
- 'rrule' => 'FREQ=MONTHLY;BYDAY=MO,TU,WE,TH,FR;BYSETPOS=-1,-2',
155
- 'dtstart' => 'VALUE=DATE:20010101'
156
- })
157
- event.enum_for(When.when?('20110101'), :forward, 6).each do |date|
158
- assert_equal(sample.shift, date.to_s)
159
- end
160
- assert_equal([], sample)
161
- end
162
-
163
- def test__ignored_invalid_date
164
- When.Resource("examples/USA-DST.ics?C=New_York&Z=E&D=04&DZ=06&S=05&SZ=07")
165
- assert_equal("2007-03-30T09:00:00-04:00", When.when?('TZID=America/New_York:2007-03-30T09:00:00').to_s)
166
- sample = [
167
- "2007-01-15T09:00:00-05:00",
168
- "2007-01-30T09:00:00-05:00",
169
- "2007-02-15T09:00:00-05:00",
170
- "2007-03-15T09:00:00-04:00",
171
- "2007-03-30T09:00:00-04:00",
172
- ]
173
- When::V::Event.new({
174
- 'rrule' => 'FREQ=MONTHLY;BYMONTHDAY=15,30;COUNT=5',
175
- 'dtstart' => 'TZID=America/New_York:20070115T090000'
176
- }).each do |date|
177
- assert_equal(sample.shift, date.to_s)
178
- break if sample == []
179
- end
180
- end
181
-
182
- if Object.const_defined?(:TZInfo)
183
- def test__ignored_invalid_date_chicago
184
- assert_equal("2007-03-30T09:00:00-05:00", When.when?('TZID=America/Chicago:2007-03-30T09:00:00').to_s)
185
- sample = [
186
- "2007-01-15T09:00:00-06:00",
187
- "2007-01-30T09:00:00-06:00",
188
- "2007-02-15T09:00:00-06:00",
189
- "2007-03-15T09:00:00-05:00",
190
- "2007-03-30T09:00:00-05:00",
191
- ]
192
- When::V::Event.new({
193
- 'rrule' => 'FREQ=MONTHLY;BYMONTHDAY=15,30;COUNT=5',
194
- 'dtstart' => 'TZID=America/Chicago:20070115T090000'
195
- }).each do |date|
196
- assert_equal(sample.shift, date.to_s)
197
- break if sample == []
198
- end
199
- end
200
- else
201
- puts "Tests for TZInfo have been skipped at line #{__LINE__} of #{__FILE__.split(/\//)[-1]}."
202
- end
203
-
204
- def test__multiple_BYxxx_rule # See RFC 5545 [Page 45]
205
- When.Resource("examples/USA-DST.ics?C=New_York&Z=E&D=04&DZ=06&S=05&SZ=07")
206
-
207
- sample = [
208
- "1997-04-13T01:30:00-04:00",
209
- "1997-04-13T02:30:00-04:00",
210
- "1997-04-13T03:30:00-04:00",
211
- "1998-04-12T01:30:00-04:00",
212
- ]
213
- When::V::Event.new({
214
- 'rrule' => 'FREQ=YEARLY;BYMONTH=4;BYDAY=2SU;BYHOUR=1,2,3;BYMINUTE=30',
215
- 'dtstart' => 'TZID=America/New_York:19970413T013000'
216
- }).each do |date|
217
- assert_equal(sample.shift, date.to_s)
218
- break if sample == []
219
- end
220
-
221
- sample = [
222
- "1997-04-06T01:30:00-05:00",
223
- "1997-04-06T03:30:00-04:00",
224
- "1997-04-06T04:30:00-04:00",
225
- "1998-04-05T01:30:00-05:00",
226
- ]
227
- When::V::Event.new({
228
- 'rrule' => 'FREQ=YEARLY;BYMONTH=4;BYDAY=1SU;BYHOUR=1,2,3,4;BYMINUTE=30',
229
- 'dtstart' => 'TZID=America/New_York:19970406T013000'
230
- }).each do |date|
231
- assert_equal(sample.shift, date.to_s)
232
- break if sample == []
233
- end
234
-
235
- sample = [
236
- "1997-10-26T01:30:00-04:00",
237
- "1997-10-26T01:30:00-05:00", # * 02:30:00-04:00
238
- "1997-10-26T02:30:00-05:00",
239
- "1997-10-26T03:30:00-05:00",
240
- "1998-10-25T01:30:00-04:00",
241
- ]
242
- When::V::Event.new({
243
- 'rrule' => 'FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU;BYHOUR=1,1=,2,3;BYMINUTE=30', # *
244
- 'dtstart' => 'TZID=America/New_York:19971026T013000'
245
- }).each do |date|
246
- assert_equal(sample.shift, date.to_s)
247
- break if sample == []
248
- end
249
-
250
- sample = [
251
- "1997-10-19T01:30:00-04:00",
252
- "1997-10-19T02:30:00-04:00",
253
- "1998-10-18T01:30:00-04:00",
254
- ]
255
- When::V::Event.new({
256
- 'rrule' => 'FREQ=YEARLY;BYMONTH=10;BYDAY=-2SU;BYHOUR=1,1=,2;BYMINUTE=30', # *
257
- 'dtstart' => 'TZID=America/New_York:19971019T013000'
258
- }).each do |date|
259
- assert_equal(sample.shift, date.to_s)
260
- break if sample == []
261
- end
262
- end
263
-
264
- if Object.const_defined?(:TZInfo)
265
- def test__multiple_BYxxx_rule_chicago # See RFC 5545 [Page 45]
266
- sample = [
267
- "1997-04-13T01:30:00-05:00",
268
- "1997-04-13T02:30:00-05:00",
269
- "1997-04-13T03:30:00-05:00",
270
- "1998-04-12T01:30:00-05:00",
271
- ]
272
- When::V::Event.new({
273
- 'rrule' => 'FREQ=YEARLY;BYMONTH=4;BYDAY=2SU;BYHOUR=1,2,3;BYMINUTE=30',
274
- 'dtstart' => 'TZID=America/Chicago:19970413T013000'
275
- }).each do |date|
276
- assert_equal(sample.shift, date.to_s)
277
- break if sample == []
278
- end
279
-
280
- sample = [
281
- "1997-04-06T01:30:00-06:00",
282
- "1997-04-06T03:30:00-05:00", # TODO !!
283
- "1997-04-06T04:30:00-05:00",
284
- "1998-04-05T01:30:00-06:00",
285
- ]
286
- When::V::Event.new({
287
- 'rrule' => 'FREQ=YEARLY;BYMONTH=4;BYDAY=1SU;BYHOUR=1,2,3,4;BYMINUTE=30',
288
- 'dtstart' => 'TZID=America/Chicago:19970406T013000'
289
- }).each do |date|
290
- assert_equal(sample.shift, date.to_s)
291
- break if sample == []
292
- end
293
-
294
- sample = [
295
- "1997-10-26T01:30:00-05:00",
296
- "1997-10-26T01:30:00-06:00", # * - TODO !!
297
- "1997-10-26T02:30:00-06:00",
298
- "1997-10-26T03:30:00-06:00",
299
- "1998-10-25T01:30:00-05:00",
300
- ]
301
- When::V::Event.new({
302
- 'rrule' => 'FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU;BYHOUR=1,1=,2,3;BYMINUTE=30', # *
303
- 'dtstart' => 'TZID=America/Chicago:19971026T013000'
304
- }).each do |date|
305
- assert_equal(sample.shift, date.to_s)
306
- break if sample == []
307
- end
308
- sample = [
309
- "1997-10-19T01:30:00-05:00",
310
- "1997-10-19T02:30:00-05:00",
311
- "1998-10-18T01:30:00-05:00",
312
- ]
313
- When::V::Event.new({
314
- 'rrule' => 'FREQ=YEARLY;BYMONTH=10;BYDAY=-2SU;BYHOUR=1,1=,2;BYMINUTE=30', # *
315
- 'dtstart' => 'TZID=America/Chicago:19971019T013000'
316
- }).each do |date|
317
- assert_equal(sample.shift, date.to_s)
318
- break if sample == []
319
- end
320
- end
321
- else
322
- puts "Tests for TZInfo have been skipped at line #{__LINE__} of #{__FILE__.split(/\//)[-1]}."
323
- end
324
-
325
- def julian_easter(yy)
326
- a = yy % 4
327
- b = yy % 7
328
- c = yy % 19
329
- d = (19 * c + 15) % 30
330
- e = (2 * a + 4 * b - d + 34) % 7
331
- mm = (d + e + 114) / 31
332
- dd = ((d + e + 114) % 31) + 1
333
- [yy, mm, dd]
334
- end
335
-
336
- def gregorian_easter(yy)
337
- a = yy % 19
338
- b = yy / 100
339
- c = yy % 100
340
- d = b / 4
341
- e = b % 4
342
- f = (b + 8) / 25
343
- g = (b - f + 1) / 3
344
- h = (19 * a + b - d - g + 15) % 30
345
- i = c / 4
346
- k = c % 4
347
- l = (32 + 2 * e + 2 * i - h - k) % 7
348
- m = (a + 11 * h + 22 * l) / 451
349
- mm = (h + l - 7 * m + 114) / 31
350
- dd = ((h + l - 7 * m + 114) % 31) + 1
351
- [yy, mm, dd]
352
- end
353
-
354
- def test__easter
355
- jc = When.Resource('_c:Julian')
356
- other = []
357
- myself = []
358
- 532.times do |yy|
359
- y,m,d = julian_easter(yy+325)
360
- other << jc._coordinates_to_number(y,m-1,d-1)
361
- myself << jc.easter(yy+325)
362
- end
363
- assert_equal(other, myself)
364
-
365
- gc = When.Resource('_c:Gregorian')
366
- other = []
367
- myself = []
368
- 5700.times do |yy| # Should be 5_700_000
369
- y,m,d = gregorian_easter(yy+1582)
370
- other << gc._coordinates_to_number(y,m-1,d-1)
371
- myself << gc.easter(yy+1582)
372
- end
373
- assert_equal(other, myself)
374
-
375
- date = When.when?('2011').easter
376
- assert_equal("2011-04-24", date.to_s)
377
-
378
- sample = [
379
- "2009-04-12",
380
- # "2010-04-02",
381
- "2011-04-22",
382
- ]
383
- event = When::V::Event.new({
384
- 'rrule' => 'FREQ=YEARLY;INTERVAL=2;BYDAY/Christian=easter-2',
385
- 'dtstart' => '20090412'
386
- })
387
- event.each do |date|
388
- assert_equal(sample.shift, date.to_s)
389
- break if sample == []
390
- end
391
-
392
- sample = [
393
- "2011-04-22",
394
- ]
395
- event.enum_for(When.when?('20100101')).each do |date|
396
- assert_equal(sample.shift, date.to_s)
397
- break if sample == []
398
- end
399
-
400
- sample = [
401
- "2009-04-12",
402
- "2010-03-30",
403
- "2011-04-17",
404
- "2012-04-07"
405
- ]
406
- event = When::V::Event.new({
407
- 'rrule' => 'FREQ=YEARLY;BYDAY/Christian?w=7=easter',
408
- 'dtstart' => '20090412'
409
- })
410
- event.each do |date|
411
- assert_equal(sample.shift, date.to_s)
412
- break if sample == []
413
- end
414
-
415
- sample = [
416
- "2009-12-25",
417
- "2010-12-25",
418
- "2011-12-25",
419
- ]
420
- When::V::Event.new({
421
- 'rrule' => 'FREQ=YEARLY;BYDAY/Christian=christmas',
422
- 'dtstart' => '20091225'
423
- }).each do |date|
424
- assert_equal(sample.shift, date.to_s)
425
- break if sample == []
426
- end
427
- end
428
-
429
- def test__terms
430
-
431
- event = When::V::Event.new({
432
- 'rrule' => 'FREQ=YEARLY;INTERVAL=2;BYDAY/SolarTerms=term180',
433
- 'dtstart' => '20090922'
434
- })
435
- sample = [
436
- "2011-09-23",
437
- ]
438
- event.enum_for(When.when?('20100101')).each do |date|
439
- assert_equal(sample.shift, date.to_s)
440
- break if sample == []
441
- end
442
-
443
- sample = [
444
- "2009-09-22",
445
- # "2010-09-22",
446
- "2011-09-23",
447
- ]
448
- event.each do |date|
449
- assert_equal(sample.shift, date.to_s)
450
- break if sample == []
451
- end
452
- end
453
- end
454
-
455
- class Alarm < Test::Unit::TestCase
456
- def test_nothing
457
- end
458
- end
459
-
460
- class Todo < Test::Unit::TestCase
461
- def test__todo
462
- When::TM::Clock.local_time = When.Clock("+0900")
463
- event = When::V::Todo.new({
464
- 'rrule' => {'FREQ'=>'YEARLY', 'BYMONTH'=>1, 'BYDAY'=>{''=>'2MO'}},
465
- 'due' => 'VALUE=DATE:20160111'
466
- })
467
- sample = [
468
- "2011-01-10",
469
- "2012-01-09",
470
- "2013-01-14",
471
- "2014-01-13",
472
- "2015-01-12",
473
- "2016-01-11"
474
- ]
475
- this_time = When.now.to_s
476
- sample.shift while (sample[0] && sample[0] < this_time)
477
- event.enum_for(When.when?('20070101'), :forward, 5).each do |date|
478
- assert_equal(sample.shift, date.to_s)
479
- end
480
- assert_equal([], sample)
481
- end
482
- end
483
-
484
- class Journal < Test::Unit::TestCase
485
- def test_nothing
486
- end
487
- end
488
-
489
- class Freebusy < Test::Unit::TestCase
490
- def test__freebusy # RFC 5545 [Page 101]
491
- sample = [
492
- "1997-03-08T16:00:00Z...1997-03-08T19:00:00Z",
493
- "1997-03-08T20:00:00Z...1997-03-08T21:00:00Z"
494
- ]
495
- When::V::Freebusy.new({'freebusy'=>'FBTYPE=FREE:19970308T160000Z/PT3H,19970308T200000Z/PT1H'}).each do |period|
496
- assert_equal([sample.shift, 'FREE'], [period.to_s, period.query['FBTYPE']])
497
- end
498
- assert_equal([], sample)
499
- end
500
- end
501
-
502
- class TimezoneProperty < Test::Unit::TestCase
503
- def test__tz_change
504
- ic = When.Resource("examples/USA-DST.ics?C=New_York&Z=E&D=04&DZ=06&S=05&SZ=07")
505
- tz = When::V::Timezone["America/New_York"]
506
- gc = When.Resource('_c:Gregorian')
507
- [
508
- ["1997-04-06T01:59:59", "1997-04-06T01:59:59-05:00"],
509
- ["1997-04-06T02:00:00", "1997-04-06T02:00:00-04:00"],
510
- ["1997-04-06T03:00:00", "1997-04-06T03:00:00-04:00"],
511
- ["1997-10-26T00:59:00", "1997-10-26T00:59:00-04:00"], # *
512
- ["1997-10-26T01:00:00", "1997-10-26T01:00:00-04:00"], # *
513
- ["1997-10-26T01:59:59", "1997-10-26T01:59:59-04:00"], # *
514
- ["1997-10-26T01=00:00", "1997-10-26T01:00:00-05:00"], # *
515
- ["1997-10-26T01=59:59", "1997-10-26T01:59:59-05:00"], # *
516
- ["1997-10-26T02:00:00", "1997-10-26T02:00:00-05:00"] # *
517
- ].each do |sample|
518
- assert_equal(sample[1], When.when?(sample[0], {:clock=>tz}).to_s)
519
- end
520
-
521
- [
522
- ["19970406T010000-0500", "1997-04-06T01:00:00-05:00"],
523
- ["19970406T015959-0500", "1997-04-06T01:59:59-05:00"],
524
- ["19970406T020000-0500", "1997-04-06T03:00:00-04:00"],
525
- ["19970406T030000-0500", "1997-04-06T04:00:00-04:00"],
526
- ["19971026T005959-0400", "1997-10-26T00:59:59-04:00"], # *
527
- ["19971026T010000-0400", "1997-10-26T01:00:00-04:00"], # *
528
- ["19971026T015959-0400", "1997-10-26T01:59:59-04:00"], # *
529
- ["19971026T020000-0400", "1997-10-26T01:00:00-05:00"], # *
530
- ["19971026T030000-0400", "1997-10-26T02:00:00-05:00"] # *
531
- ].each do |sample|
532
- sdate = When.when?(sample[0])
533
- ddate = gc.jul_trans(sdate, {:clock=>tz})
534
- assert_equal(sample[1], ddate.to_s)
535
- end
536
- end
537
-
538
- if Object.const_defined?(:TZInfo)
539
- def test__tz_change_chicago
540
- tz = When::Parts::Timezone["America/Chicago"]
541
- gc = When.Resource('_c:Gregorian')
542
- [
543
- ["19970406T010000-0600", "1997-04-06T01:00:00-06:00"],
544
- ["19970406T015959-0600", "1997-04-06T01:59:59-06:00"],
545
- ["19970406T020000-0600", "1997-04-06T03:00:00-05:00"],
546
- ["19970406T030000-0600", "1997-04-06T04:00:00-05:00"],
547
- ["19971026T005959-0500", "1997-10-26T00:59:59-05:00"], # *
548
- ["19971026T010000-0500", "1997-10-26T01:00:00-05:00"], # *
549
- ["19971026T015959-0500", "1997-10-26T01:59:59-05:00"], # *
550
- ["19971026T020000-0500", "1997-10-26T01:00:00-06:00"], # *
551
- ["19971026T030000-0500", "1997-10-26T02:00:00-06:00"], # *
552
- ].each do |sample|
553
- sdate = When.when?(sample[0])
554
- ddate = gc.jul_trans(sdate, {:clock=>tz})
555
- assert_equal(sample[1], ddate.to_s)
556
- end
557
-
558
- [
559
- ["1997-04-06T01:59:59", "1997-04-06T01:59:59-06:00"],
560
- ["1997-04-06T02:00:00", "1997-04-06T02:00:00-05:00"],
561
- ["1997-04-06T03:00:00", "1997-04-06T03:00:00-05:00"],
562
- ["1997-10-26T00:59:00", "1997-10-26T00:59:00-05:00"], # *
563
- ["1997-10-26T01:00:00", "1997-10-26T01:00:00-05:00"], # * # "1997-10-26T02:00:00-05:00" - TODO !!
564
- ["1997-10-26T01:59:59", "1997-10-26T01:59:59-05:00"], # * # "1997-10-26T02:59:59-05:00" - TODO !!
565
- ["1997-10-26T01=00:00", "1997-10-26T01:00:00-06:00"], # *
566
- ["1997-10-26T01=59:59", "1997-10-26T01:59:59-06:00"], # *
567
- ["1997-10-26T02:00:00", "1997-10-26T02:00:00-06:00"] # *
568
- ].each do |sample|
569
- assert_equal(sample[1], When.when?(sample[0], {:clock=>tz}).to_s)
570
- end
571
- end
572
- else
573
- puts "Tests for TZInfo have been skipped at line #{__LINE__} of #{__FILE__.split(/\//)[-1]}."
574
- end
575
-
576
- def test__date_change
577
- ic = When.Resource("examples/Millennium.ics")
578
- tz = When::V::Timezone["Oceania/Millennium_Island"]
579
- gc = When.Resource('_c:Gregorian')
580
- [
581
- ["1994-12-30T23:59:59", "1994-12-30T23:59:59-10:00"],
582
- ["1995-01-01T00:00:00", "1995-01-01T00:00:00+14:00"]
583
- ].each do |sample|
584
- assert_equal(sample[1], When.when?(sample[0], {:clock=>tz}).to_s)
585
- end
586
- [
587
- ["19941230T235959-1000", "1994-12-30T23:59:59-10:00"],
588
- ["19941231T000000-1000", "1995-01-01T00:00:00+14:00"],
589
- ].each do |sample|
590
- sdate = When.when?(sample[0])
591
- ddate = gc.jul_trans(sdate, {:clock=>tz})
592
- assert_equal(sample[1], ddate.to_s)
593
- end
594
- end
595
-
596
- def test__tzname
597
- ic = When.Resource("examples/USA-DST.ics?C=New_York&Z=E&D=04&DZ=06&S=05&SZ=07")
598
- date = When.when?('20110126T250000EST')
599
- assert_equal(["2011-01-27T01:00:00-05:00", "Thu Jan 27 01:00:00 -0500 2011", "EST"],
600
- [date.to_s, date.strftime('%+'), date.clk_time.frame.tzname[0]])
601
-
602
- When::TM::Clock.local_time = When::V::Timezone["America/New_York"]
603
-
604
- date = When.when?('20110526T250000')
605
- assert_equal(["2011-05-27T01:00:00-04:00", "Fri May 27 01:00:00 -0400 2011", "EDT"],
606
- [date.to_s, date.strftime('%+'), date.clk_time.frame.tzname[0]])
607
- end
608
- end
609
-
610
- class Standard < Test::Unit::TestCase
611
- def test_nothing
612
- end
613
- end
614
-
615
- class Daylight < Test::Unit::TestCase
616
- def test_nothing
617
- end
618
- end
619
-
620
- class Timezone < Test::Unit::TestCase
621
- def test__neighbor_event_date
622
- When.Resource("examples/USA-DST.ics?C=New_York&Z=E&D=04&DZ=06&S=05&SZ=07")
623
- tz = When::V::Timezone["America/New_York"]
624
- assert_equal("1997-04-06T02:00:00-05:00", tz.send(:_neighbor_event_date, When.when?("19970510").universal_time).to_s)
625
- assert_equal("1997-10-26T02:00:00-04:00", tz.send(:_neighbor_event_date, When.when?("19971010").universal_time).to_s)
626
- end
627
-
628
- def test__current_period
629
- When.Resource("examples/USA-DST.ics?C=New_York&Z=E&D=04&DZ=06&S=05&SZ=07")
630
- tz = When::V::Timezone["America/New_York"]
631
- assert_equal("1997-04-06T02:00:00-05:00...1997-10-26T02:00:00-04:00", tz.current_period(When.when?("19970510")).to_s)
632
- assert_equal("1997-04-06T02:00:00-05:00...1997-10-26T02:00:00-04:00", tz.current_period(When.when?("19971010")).to_s)
633
- end
634
-
635
- if Object.const_defined?(:TZInfo)
636
- def test__tz_info
637
- assert_equal("1997-05-10T06:00-05:00", When.when?("TZID=America/Chicago:19970510T0600").to_s)
638
- end
639
- else
640
- puts "Tests for TZInfo have been skipped at line #{__LINE__} of #{__FILE__.split(/\//)[-1]}."
641
- end
642
- end
643
-
644
- class Event
645
-
646
- def test__each_1
647
- When.Resource("examples/USA-DST.ics?C=New_York&Z=E&D=04&DZ=06&S=05&SZ=07")
648
- cal = When.Resource("examples/Test.ics")
649
-
650
- event1 = When.Resource("examples/Test.ics::event1-ID")
651
- sample = [
652
- "2008-09-15T+09:00",
653
- "2009-09-21T+09:00",
654
- "2010-09-20T+09:00",
655
- "2011-09-19T+09:00",
656
- "2012-09-17T+09:00",
657
- "2013-09-16T+09:00",
658
- "2014-09-15T+09:00",
659
- "2015-09-21T+09:00",
660
- "2016-09-19T+09:00",
661
- ]
662
- event1.enum_for(When.when?('20080101'), :forward, 9).each do |date|
663
- assert_equal(sample.shift, date.to_s)
664
- end
665
- assert_equal([], sample)
666
-
667
- sample = [
668
- "2010-09-20T+09:00",
669
- "2011-09-19T+09:00",
670
- "2012-09-17T+09:00",
671
- "2013-09-16T+09:00",
672
- ]
673
- event1.enum_for(When.when?('20100101'), :forward, 4).each do |date|
674
- assert_equal(sample.shift, date.to_s)
675
- end
676
- assert_equal([], sample)
677
- end
678
-
679
- def test__each_2
680
- When.Resource("examples/USA-DST.ics?C=New_York&Z=E&D=04&DZ=06&S=05&SZ=07")
681
- cal = When.Resource("examples/Test.ics")
682
-
683
- event2 = cal["event2-ID"]
684
- sample = [
685
- "2010-09-20T+09:00",
686
- "2011-05-13T+09:00",
687
- "2011-09-19T+09:00",
688
- "2012-01-13T+09:00",
689
- "2012-04-13T+09:00",
690
- "2012-07-13T+09:00",
691
- "2012-09-17T+09:00",
692
- "2013-09-13T+09:00",
693
- "2013-09-16T+09:00",
694
- "2013-12-13T+09:00",
695
- ]
696
- event2.enum_for(When.when?('20100101'), :forward, 10, {'1st'=>'DontCare'}).each do |date|
697
- assert_equal(sample.shift, date.to_s)
698
- end
699
- assert_equal([], sample)
700
- end
701
-
702
- def test__each_3
703
- When.Resource("examples/USA-DST.ics?C=New_York&Z=E&D=04&DZ=06&S=05&SZ=07")
704
- cal = When.Resource("examples/Test.ics")
705
-
706
- event3 = cal["event3-ID"]
707
- sample = [
708
- "1997-09-02T09:00:00-04:00",
709
- "1997-09-02T09:20:00-04:00",
710
- "1997-09-02T09:40:00-04:00",
711
- "1997-09-02T10:00:00-04:00",
712
- "1997-09-02T10:20:00-04:00",
713
- "1997-09-02T10:40:00-04:00",
714
- "1997-09-02T11:00:00-04:00",
715
- "1997-09-02T11:20:00-04:00",
716
- "1997-09-02T11:40:00-04:00",
717
- "1997-09-02T12:00:00-04:00",
718
- "1997-09-02T12:20:00-04:00",
719
- "1997-09-02T12:40:00-04:00",
720
- "1997-09-02T13:00:00-04:00",
721
- "1997-09-02T13:20:00-04:00",
722
- "1997-09-02T13:40:00-04:00",
723
- "1997-09-02T14:00:00-04:00",
724
- "1997-09-02T14:20:00-04:00",
725
- "1997-09-02T14:40:00-04:00",
726
- "1997-09-02T15:00:00-04:00",
727
- "1997-09-02T15:20:00-04:00",
728
- "1997-09-02T15:40:00-04:00",
729
- "1997-09-02T16:00:00-04:00",
730
- "1997-09-02T16:20:00-04:00",
731
- "1997-09-02T16:40:00-04:00",
732
- "1997-09-03T09:00:00-04:00",
733
- "1997-09-03T09:20:00-04:00",
734
- "1997-09-03T09:40:00-04:00",
735
- "1997-09-03T10:00:00-04:00",
736
- "1997-09-03T10:20:00-04:00",
737
- "1997-09-03T10:40:00-04:00",
738
- ]
739
- event3.enum_for(When.when?('19970902T090000'), :forward, {:count_limit=>30}).each do |date|
740
- assert_equal(sample.shift, date.to_s)
741
- end
742
- assert_equal([], sample)
743
-
744
- sample = [
745
- "1997-09-04T13:00:00-04:00",
746
- "1997-09-04T12:40:00-04:00",
747
- "1997-09-04T12:20:00-04:00",
748
- "1997-09-04T12:00:00-04:00",
749
- "1997-09-04T11:40:00-04:00",
750
- "1997-09-04T11:20:00-04:00",
751
- "1997-09-04T11:00:00-04:00",
752
- "1997-09-04T10:40:00-04:00",
753
- "1997-09-04T10:20:00-04:00",
754
- "1997-09-04T10:00:00-04:00",
755
- ]
756
- event3.enum_for(When.when?('19970904T170000'), {:direction=>:reverse, :count_limit=>10, '1st'=>'DontCare'}).each do |date|
757
- assert_equal(sample.shift, date.to_s)
758
- end
759
- assert_equal([], sample)
760
-
761
- sample = [
762
- "1997-09-04T16:40:00-04:00",
763
- "1997-09-04T16:20:00-04:00",
764
- "1997-09-04T16:00:00-04:00",
765
- ]
766
- event3.enum_for(When.when?('TZID=America/New_York:19970904T170000'), :reverse, 3, {'1st'=>'Exclude'}).each do |date|
767
- assert_equal(sample.shift, date.to_s)
768
- end
769
- assert_equal([], sample)
770
- end
771
-
772
- def test__each_4
773
- When.Resource("examples/USA-DST.ics?C=New_York&Z=E&D=04&DZ=06&S=05&SZ=07")
774
- cal = When.Resource("examples/Test.ics")
775
-
776
- event4 = cal["event4-ID"]
777
- sample = [
778
- "1997-09-02T09:00:00-04:00",
779
- "1997-09-02T09:00:10-04:00",
780
- "1997-09-02T09:20:00-04:00",
781
- "1997-09-02T09:40:00-04:00",
782
- "1997-09-02T10:00:00-04:00",
783
- "1997-09-02T10:20:00-04:00",
784
- "1997-09-02T10:40:00-04:00",
785
- "1997-09-02T11:00:00-04:00",
786
- "1997-09-02T11:20:00-04:00",
787
- "1997-09-02T11:40:00-04:00",
788
- "1997-09-02T12:20:00-04:00",
789
- ]
790
- event4.enum_for(When.when?('19970902T090000'), :forward, 11).each do |date|
791
- assert_equal(sample.shift, date.to_s)
792
- end
793
- assert_equal([], sample)
794
- end
795
-
796
- class Enumerator < Test::Unit::TestCase
797
-
798
- def test_nothing
799
- end
800
-
801
- class Step < Test::Unit::TestCase
802
- def test_nothing
803
- end
804
- end
805
-
806
- class Logic < Test::Unit::TestCase
807
-
808
- def test_nothing
809
- end
810
-
811
- class Enumerator < Test::Unit::TestCase
812
- def test_nothing
813
- end
814
- end
815
-
816
- class Month < Test::Unit::TestCase
817
- def test_nothing
818
- end
819
- end
820
-
821
- class Weekno < Test::Unit::TestCase
822
- def test_nothing
823
- end
824
- end
825
-
826
- class Yearday < Test::Unit::TestCase
827
- def test_nothing
828
- end
829
- end
830
-
831
- class Monthday < Test::Unit::TestCase
832
- def test_nothing
833
- end
834
- end
835
-
836
- class Weekday < Test::Unit::TestCase
837
- def test_nothing
838
- end
839
- end
840
-
841
- class Hour < Test::Unit::TestCase
842
- def test_nothing
843
- end
844
- end
845
-
846
- class Minute < Test::Unit::TestCase
847
- def test_nothing
848
- end
849
- end
850
-
851
- class Second < Test::Unit::TestCase
852
- def test_nothing
853
- end
854
- end
855
- end
856
- end
857
- end
858
- 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:V
10
+
11
+ class Root < MiniTest::TestCase
12
+ def test_nothing
13
+ end
14
+ end
15
+
16
+ class Calendar < MiniTest::TestCase
17
+ def test__each
18
+ When::TM::Clock.local_time = When.Clock("+0900")
19
+ cal = When.Resource("examples/JapanHolidays.ics")
20
+ sample = [
21
+ "2010-01-01T+09:00",
22
+ "2010-01-11T+09:00",
23
+ "2010-02-11T+09:00",
24
+ "2010-03-21T+09:00",
25
+ "2010-03-22T+09:00",
26
+ "2010-04-29T+09:00",
27
+ "2010-05-03T+09:00",
28
+ "2010-05-04T+09:00",
29
+ "2010-05-05T+09:00",
30
+ "2010-07-19T+09:00",
31
+ "2010-09-20T+09:00",
32
+ "2010-09-23T+09:00",
33
+ "2010-10-11T+09:00",
34
+ "2010-11-03T+09:00",
35
+ "2010-11-23T+09:00",
36
+ "2010-12-23T+09:00",
37
+ ]
38
+ cal.each(When.when?('20100101')...When.when?('20110101')) do |date|
39
+ assert_equal(sample.shift, date.to_s)
40
+ end
41
+ assert_equal([], sample)
42
+
43
+ cal = cal.intersection({'summary'=>'成人の日'})
44
+ sample = [
45
+ "2010-01-11T+09:00",
46
+ ]
47
+ cal.each(When.when?('20100101')...When.when?('20110101')) do |date|
48
+ assert_equal(sample.shift, date.to_s)
49
+ end
50
+ assert_equal([], sample)
51
+ end
52
+
53
+ def test__byweekno
54
+ sample = [
55
+ "1997-05-12",
56
+ "1998-05-11",
57
+ "1999-05-17"
58
+ ]
59
+ event = When::V::Event.new({
60
+ 'rrule' => 'FREQ=YEARLY;BYDAY=MO;BYWEEKNO=20',
61
+ 'dtstart' => 'VALUE=DATE:19970512'
62
+ })
63
+ event.enum_for(When.when?('19970512'), :forward, 3, {'1st'=>"don't care"}).each do |date|
64
+ assert_equal(sample.shift, date.to_s)
65
+ end
66
+ end
67
+
68
+ def test__include_event
69
+ d0504 = When.when?('20100504')
70
+ d0505 = When.when?('20100505')
71
+
72
+ cal = When.Resource("examples/JapanHolidays.ics")
73
+ it = cal.enum_for(When.when?('20100501'))
74
+ date = it.next
75
+ assert_equal(["2010-05-03T+09:00", 0], [date.to_s, date.precision])
76
+ assert_equal([true,true], [d0504,d0505].map {|v| cal.include?(v)})
77
+
78
+ event = When::Parts::Resource["examples/JapanHolidays.ics::Midori_no_hi_2"] # みどりの日
79
+ it = event.enum_for(When.when?('20100501'))
80
+ date = it.next
81
+ assert_equal(["2010-05-04T+09:00", 0], [date.to_s, date.precision])
82
+ assert_equal([true,false], [d0504,d0505].map {|v| event.include?(v)})
83
+ end
84
+
85
+ def test__rfc_update
86
+ sample = ["Children's_Day_(Japan)", 'Children"s_Day_(Japan)', "Children's_Day_(Japan)"]
87
+ When::TM::Clock.local_time = When.Clock("+0900")
88
+ ["JapanHolidays.ics", "JapanHolidays.ics?Escape=^'", "JapanHolidaysRFC6350.ics"].each do |ics|
89
+ cal = When.Resource('examples/' + ics)
90
+ cal = cal.intersection({'summary'=>/Children['"]s_Day_\(Japan\)/})
91
+ cal.each(When.when?('20100101')...When.when?('20110101')) do |date|
92
+ assert_equal(sample.shift, date.events[0].summary / 'en')
93
+ end
94
+ end
95
+ end
96
+ end
97
+
98
+ class Event < MiniTest::TestCase
99
+ def test__event
100
+ When::TM::Clock.local_time = When.Clock("+0900")
101
+ event = When::V::Event.new({
102
+ 'rrule' => {'FREQ'=>'MONTHLY', 'INTERVAL'=>12, 'BYDAY'=>{''=>'2MO'}},
103
+ 'dtstart' => 'VALUE=DATE:20070108'
104
+ })
105
+ sample = [
106
+ "2007-01-08",
107
+ "2008-01-14",
108
+ "2009-01-12",
109
+ "2010-01-11",
110
+ "2011-01-10",
111
+ "2012-01-09",
112
+ "2013-01-14",
113
+ "2014-01-13",
114
+ "2015-01-12",
115
+ "2016-01-11"
116
+ ]
117
+ event.enum_for(When.when?('20070101'), :forward, 10).each do |date|
118
+ assert_equal(sample.shift, date.to_s)
119
+ end
120
+ assert_equal([], sample)
121
+
122
+ sample = [
123
+ "2007-01-08",
124
+ "2007-01-15",
125
+ "2007-01-22",
126
+ "2007-01-29",
127
+ "2007-02-05",
128
+ "2007-02-12",
129
+ "2007-02-19",
130
+ "2007-02-26",
131
+ "2007-03-05",
132
+ "2007-03-12"
133
+ ]
134
+ event = When::V::Event.new({
135
+ 'rrule' => {'FREQ'=>'P1W'},
136
+ 'dtstart' => 'VALUE=DATE:20070108'
137
+ })
138
+ event.enum_for(When.when?('20070101'), :forward, 10).each do |date|
139
+ assert_equal(sample.shift, date.to_s)
140
+ end
141
+ assert_equal([], sample)
142
+ end
143
+
144
+ def test__last_work_days # See RFC 5545 [Page 43]
145
+ sample = [
146
+ "2011-01-28",
147
+ "2011-01-31",
148
+ "2011-02-25",
149
+ "2011-02-28",
150
+ "2011-03-30",
151
+ "2011-03-31",
152
+ ]
153
+ event = When::V::Event.new({
154
+ 'rrule' => 'FREQ=MONTHLY;BYDAY=MO,TU,WE,TH,FR;BYSETPOS=-1,-2',
155
+ 'dtstart' => 'VALUE=DATE:20010101'
156
+ })
157
+ event.enum_for(When.when?('20110101'), :forward, 6).each do |date|
158
+ assert_equal(sample.shift, date.to_s)
159
+ end
160
+ assert_equal([], sample)
161
+ end
162
+
163
+ def test__ignored_invalid_date
164
+ When.Resource("examples/USA-DST.ics?C=New_York&Z=E&D=04&DZ=06&S=05&SZ=07")
165
+ assert_equal("2007-03-30T09:00:00-04:00", When.when?('TZID=America/New_York:2007-03-30T09:00:00').to_s)
166
+ sample = [
167
+ "2007-01-15T09:00:00-05:00",
168
+ "2007-01-30T09:00:00-05:00",
169
+ "2007-02-15T09:00:00-05:00",
170
+ "2007-03-15T09:00:00-04:00",
171
+ "2007-03-30T09:00:00-04:00",
172
+ ]
173
+ When::V::Event.new({
174
+ 'rrule' => 'FREQ=MONTHLY;BYMONTHDAY=15,30;COUNT=5',
175
+ 'dtstart' => 'TZID=America/New_York:20070115T090000'
176
+ }).each do |date|
177
+ assert_equal(sample.shift, date.to_s)
178
+ break if sample == []
179
+ end
180
+ end
181
+
182
+ if Object.const_defined?(:TZInfo)
183
+ def test__ignored_invalid_date_chicago
184
+ assert_equal("2007-03-30T09:00:00-05:00", When.when?('TZID=America/Chicago:2007-03-30T09:00:00').to_s)
185
+ sample = [
186
+ "2007-01-15T09:00:00-06:00",
187
+ "2007-01-30T09:00:00-06:00",
188
+ "2007-02-15T09:00:00-06:00",
189
+ "2007-03-15T09:00:00-05:00",
190
+ "2007-03-30T09:00:00-05:00",
191
+ ]
192
+ When::V::Event.new({
193
+ 'rrule' => 'FREQ=MONTHLY;BYMONTHDAY=15,30;COUNT=5',
194
+ 'dtstart' => 'TZID=America/Chicago:20070115T090000'
195
+ }).each do |date|
196
+ assert_equal(sample.shift, date.to_s)
197
+ break if sample == []
198
+ end
199
+ end
200
+ else
201
+ puts "Tests for TZInfo have been skipped at line #{__LINE__} of #{__FILE__.split(/\//)[-1]}."
202
+ end
203
+
204
+ def test__multiple_BYxxx_rule # See RFC 5545 [Page 45]
205
+ When.Resource("examples/USA-DST.ics?C=New_York&Z=E&D=04&DZ=06&S=05&SZ=07")
206
+
207
+ sample = [
208
+ "1997-04-13T01:30:00-04:00",
209
+ "1997-04-13T02:30:00-04:00",
210
+ "1997-04-13T03:30:00-04:00",
211
+ "1998-04-12T01:30:00-04:00",
212
+ ]
213
+ When::V::Event.new({
214
+ 'rrule' => 'FREQ=YEARLY;BYMONTH=4;BYDAY=2SU;BYHOUR=1,2,3;BYMINUTE=30',
215
+ 'dtstart' => 'TZID=America/New_York:19970413T013000'
216
+ }).each do |date|
217
+ assert_equal(sample.shift, date.to_s)
218
+ break if sample == []
219
+ end
220
+
221
+ sample = [
222
+ "1997-04-06T01:30:00-05:00",
223
+ "1997-04-06T03:30:00-04:00",
224
+ "1997-04-06T04:30:00-04:00",
225
+ "1998-04-05T01:30:00-05:00",
226
+ ]
227
+ When::V::Event.new({
228
+ 'rrule' => 'FREQ=YEARLY;BYMONTH=4;BYDAY=1SU;BYHOUR=1,2,3,4;BYMINUTE=30',
229
+ 'dtstart' => 'TZID=America/New_York:19970406T013000'
230
+ }).each do |date|
231
+ assert_equal(sample.shift, date.to_s)
232
+ break if sample == []
233
+ end
234
+
235
+ sample = [
236
+ "1997-10-26T01:30:00-04:00",
237
+ "1997-10-26T01:30:00-05:00", # * 02:30:00-04:00
238
+ "1997-10-26T02:30:00-05:00",
239
+ "1997-10-26T03:30:00-05:00",
240
+ "1998-10-25T01:30:00-04:00",
241
+ ]
242
+ When::V::Event.new({
243
+ 'rrule' => 'FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU;BYHOUR=1,1=,2,3;BYMINUTE=30', # *
244
+ 'dtstart' => 'TZID=America/New_York:19971026T013000'
245
+ }).each do |date|
246
+ assert_equal(sample.shift, date.to_s)
247
+ break if sample == []
248
+ end
249
+
250
+ sample = [
251
+ "1997-10-19T01:30:00-04:00",
252
+ "1997-10-19T02:30:00-04:00",
253
+ "1998-10-18T01:30:00-04:00",
254
+ ]
255
+ When::V::Event.new({
256
+ 'rrule' => 'FREQ=YEARLY;BYMONTH=10;BYDAY=-2SU;BYHOUR=1,1=,2;BYMINUTE=30', # *
257
+ 'dtstart' => 'TZID=America/New_York:19971019T013000'
258
+ }).each do |date|
259
+ assert_equal(sample.shift, date.to_s)
260
+ break if sample == []
261
+ end
262
+ end
263
+
264
+ if Object.const_defined?(:TZInfo)
265
+ def test__multiple_BYxxx_rule_chicago # See RFC 5545 [Page 45]
266
+ sample = [
267
+ "1997-04-13T01:30:00-05:00",
268
+ "1997-04-13T02:30:00-05:00",
269
+ "1997-04-13T03:30:00-05:00",
270
+ "1998-04-12T01:30:00-05:00",
271
+ ]
272
+ When::V::Event.new({
273
+ 'rrule' => 'FREQ=YEARLY;BYMONTH=4;BYDAY=2SU;BYHOUR=1,2,3;BYMINUTE=30',
274
+ 'dtstart' => 'TZID=America/Chicago:19970413T013000'
275
+ }).each do |date|
276
+ assert_equal(sample.shift, date.to_s)
277
+ break if sample == []
278
+ end
279
+
280
+ sample = [
281
+ "1997-04-06T01:30:00-06:00",
282
+ "1997-04-06T03:30:00-05:00", # TODO !!
283
+ "1997-04-06T04:30:00-05:00",
284
+ "1998-04-05T01:30:00-06:00",
285
+ ]
286
+ When::V::Event.new({
287
+ 'rrule' => 'FREQ=YEARLY;BYMONTH=4;BYDAY=1SU;BYHOUR=1,2,3,4;BYMINUTE=30',
288
+ 'dtstart' => 'TZID=America/Chicago:19970406T013000'
289
+ }).each do |date|
290
+ assert_equal(sample.shift, date.to_s)
291
+ break if sample == []
292
+ end
293
+
294
+ sample = [
295
+ "1997-10-26T01:30:00-05:00",
296
+ "1997-10-26T01:30:00-06:00", # * - TODO !!
297
+ "1997-10-26T02:30:00-06:00",
298
+ "1997-10-26T03:30:00-06:00",
299
+ "1998-10-25T01:30:00-05:00",
300
+ ]
301
+ When::V::Event.new({
302
+ 'rrule' => 'FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU;BYHOUR=1,1=,2,3;BYMINUTE=30', # *
303
+ 'dtstart' => 'TZID=America/Chicago:19971026T013000'
304
+ }).each do |date|
305
+ assert_equal(sample.shift, date.to_s)
306
+ break if sample == []
307
+ end
308
+ sample = [
309
+ "1997-10-19T01:30:00-05:00",
310
+ "1997-10-19T02:30:00-05:00",
311
+ "1998-10-18T01:30:00-05:00",
312
+ ]
313
+ When::V::Event.new({
314
+ 'rrule' => 'FREQ=YEARLY;BYMONTH=10;BYDAY=-2SU;BYHOUR=1,1=,2;BYMINUTE=30', # *
315
+ 'dtstart' => 'TZID=America/Chicago:19971019T013000'
316
+ }).each do |date|
317
+ assert_equal(sample.shift, date.to_s)
318
+ break if sample == []
319
+ end
320
+ end
321
+ else
322
+ puts "Tests for TZInfo have been skipped at line #{__LINE__} of #{__FILE__.split(/\//)[-1]}."
323
+ end
324
+
325
+ def julian_easter(yy)
326
+ a = yy % 4
327
+ b = yy % 7
328
+ c = yy % 19
329
+ d = (19 * c + 15) % 30
330
+ e = (2 * a + 4 * b - d + 34) % 7
331
+ mm = (d + e + 114) / 31
332
+ dd = ((d + e + 114) % 31) + 1
333
+ [yy, mm, dd]
334
+ end
335
+
336
+ def gregorian_easter(yy)
337
+ a = yy % 19
338
+ b = yy / 100
339
+ c = yy % 100
340
+ d = b / 4
341
+ e = b % 4
342
+ f = (b + 8) / 25
343
+ g = (b - f + 1) / 3
344
+ h = (19 * a + b - d - g + 15) % 30
345
+ i = c / 4
346
+ k = c % 4
347
+ l = (32 + 2 * e + 2 * i - h - k) % 7
348
+ m = (a + 11 * h + 22 * l) / 451
349
+ mm = (h + l - 7 * m + 114) / 31
350
+ dd = ((h + l - 7 * m + 114) % 31) + 1
351
+ [yy, mm, dd]
352
+ end
353
+
354
+ def test__easter
355
+ jc = When.Resource('_c:Julian')
356
+ other = []
357
+ myself = []
358
+ 532.times do |yy|
359
+ y,m,d = julian_easter(yy+325)
360
+ other << jc._coordinates_to_number(y,m-1,d-1)
361
+ myself << jc.easter(yy+325)
362
+ end
363
+ assert_equal(other, myself)
364
+
365
+ gc = When.Resource('_c:Gregorian')
366
+ other = []
367
+ myself = []
368
+ 5700.times do |yy| # Should be 5_700_000
369
+ y,m,d = gregorian_easter(yy+1582)
370
+ other << gc._coordinates_to_number(y,m-1,d-1)
371
+ myself << gc.easter(yy+1582)
372
+ end
373
+ assert_equal(other, myself)
374
+
375
+ date = When.when?('2011').easter
376
+ assert_equal("2011-04-24", date.to_s)
377
+
378
+ sample = [
379
+ "2009-04-12",
380
+ # "2010-04-02",
381
+ "2011-04-22",
382
+ ]
383
+ event = When::V::Event.new({
384
+ 'rrule' => 'FREQ=YEARLY;INTERVAL=2;BYDAY/Christian=easter-2',
385
+ 'dtstart' => '20090412'
386
+ })
387
+ event.each do |date|
388
+ assert_equal(sample.shift, date.to_s)
389
+ break if sample == []
390
+ end
391
+
392
+ sample = [
393
+ "2011-04-22",
394
+ ]
395
+ event.enum_for(When.when?('20100101')).each do |date|
396
+ assert_equal(sample.shift, date.to_s)
397
+ break if sample == []
398
+ end
399
+
400
+ sample = [
401
+ "2009-04-12",
402
+ "2010-03-30",
403
+ "2011-04-17",
404
+ "2012-04-07"
405
+ ]
406
+ event = When::V::Event.new({
407
+ 'rrule' => 'FREQ=YEARLY;BYDAY/Christian?w=7=easter',
408
+ 'dtstart' => '20090412'
409
+ })
410
+ event.each do |date|
411
+ assert_equal(sample.shift, date.to_s)
412
+ break if sample == []
413
+ end
414
+
415
+ sample = [
416
+ "2009-12-25",
417
+ "2010-12-25",
418
+ "2011-12-25",
419
+ ]
420
+ When::V::Event.new({
421
+ 'rrule' => 'FREQ=YEARLY;BYDAY/Christian=christmas',
422
+ 'dtstart' => '20091225'
423
+ }).each do |date|
424
+ assert_equal(sample.shift, date.to_s)
425
+ break if sample == []
426
+ end
427
+ end
428
+
429
+ def test__terms
430
+
431
+ event = When::V::Event.new({
432
+ 'rrule' => 'FREQ=YEARLY;INTERVAL=2;BYDAY/SolarTerms=term180',
433
+ 'dtstart' => '20090922'
434
+ })
435
+ sample = [
436
+ "2011-09-23",
437
+ ]
438
+ event.enum_for(When.when?('20100101')).each do |date|
439
+ assert_equal(sample.shift, date.to_s)
440
+ break if sample == []
441
+ end
442
+
443
+ sample = [
444
+ "2009-09-22",
445
+ # "2010-09-22",
446
+ "2011-09-23",
447
+ ]
448
+ event.each do |date|
449
+ assert_equal(sample.shift, date.to_s)
450
+ break if sample == []
451
+ end
452
+ end
453
+ end
454
+
455
+ class Alarm < MiniTest::TestCase
456
+ def test_nothing
457
+ end
458
+ end
459
+
460
+ class Todo < MiniTest::TestCase
461
+ def test__todo
462
+ When::TM::Clock.local_time = When.Clock("+0900")
463
+ event = When::V::Todo.new({
464
+ 'rrule' => {'FREQ'=>'YEARLY', 'BYMONTH'=>1, 'BYDAY'=>{''=>'2MO'}},
465
+ 'due' => 'VALUE=DATE:20160111'
466
+ })
467
+ sample = [
468
+ "2011-01-10",
469
+ "2012-01-09",
470
+ "2013-01-14",
471
+ "2014-01-13",
472
+ "2015-01-12",
473
+ "2016-01-11"
474
+ ]
475
+ this_time = When.now.to_s
476
+ sample.shift while (sample[0] && sample[0] < this_time)
477
+ event.enum_for(When.when?('20070101'), :forward, 5).each do |date|
478
+ assert_equal(sample.shift, date.to_s)
479
+ end
480
+ assert_equal([], sample)
481
+ end
482
+ end
483
+
484
+ class Journal < MiniTest::TestCase
485
+ def test_nothing
486
+ end
487
+ end
488
+
489
+ class Freebusy < MiniTest::TestCase
490
+ def test__freebusy # RFC 5545 [Page 101]
491
+ sample = [
492
+ "1997-03-08T16:00:00Z...1997-03-08T19:00:00Z",
493
+ "1997-03-08T20:00:00Z...1997-03-08T21:00:00Z"
494
+ ]
495
+ When::V::Freebusy.new({'freebusy'=>'FBTYPE=FREE:19970308T160000Z/PT3H,19970308T200000Z/PT1H'}).each do |period|
496
+ assert_equal([sample.shift, 'FREE'], [period.to_s, period.query['FBTYPE']])
497
+ end
498
+ assert_equal([], sample)
499
+ end
500
+ end
501
+
502
+ class TimezoneProperty < MiniTest::TestCase
503
+ def test__tz_change
504
+ ic = When.Resource("examples/USA-DST.ics?C=New_York&Z=E&D=04&DZ=06&S=05&SZ=07")
505
+ tz = When::V::Timezone["America/New_York"]
506
+ gc = When.Resource('_c:Gregorian')
507
+ [
508
+ ["1997-04-06T01:59:59", "1997-04-06T01:59:59-05:00"],
509
+ ["1997-04-06T02:00:00", "1997-04-06T02:00:00-04:00"],
510
+ ["1997-04-06T03:00:00", "1997-04-06T03:00:00-04:00"],
511
+ ["1997-10-26T00:59:00", "1997-10-26T00:59:00-04:00"], # *
512
+ ["1997-10-26T01:00:00", "1997-10-26T01:00:00-04:00"], # *
513
+ ["1997-10-26T01:59:59", "1997-10-26T01:59:59-04:00"], # *
514
+ ["1997-10-26T01=00:00", "1997-10-26T01:00:00-05:00"], # *
515
+ ["1997-10-26T01=59:59", "1997-10-26T01:59:59-05:00"], # *
516
+ ["1997-10-26T02:00:00", "1997-10-26T02:00:00-05:00"] # *
517
+ ].each do |sample|
518
+ assert_equal(sample[1], When.when?(sample[0], {:clock=>tz}).to_s)
519
+ end
520
+
521
+ [
522
+ ["19970406T010000-0500", "1997-04-06T01:00:00-05:00"],
523
+ ["19970406T015959-0500", "1997-04-06T01:59:59-05:00"],
524
+ ["19970406T020000-0500", "1997-04-06T03:00:00-04:00"],
525
+ ["19970406T030000-0500", "1997-04-06T04:00:00-04:00"],
526
+ ["19971026T005959-0400", "1997-10-26T00:59:59-04:00"], # *
527
+ ["19971026T010000-0400", "1997-10-26T01:00:00-04:00"], # *
528
+ ["19971026T015959-0400", "1997-10-26T01:59:59-04:00"], # *
529
+ ["19971026T020000-0400", "1997-10-26T01:00:00-05:00"], # *
530
+ ["19971026T030000-0400", "1997-10-26T02:00:00-05:00"] # *
531
+ ].each do |sample|
532
+ sdate = When.when?(sample[0])
533
+ ddate = gc.jul_trans(sdate, {:clock=>tz})
534
+ assert_equal(sample[1], ddate.to_s)
535
+ end
536
+ end
537
+
538
+ if Object.const_defined?(:TZInfo)
539
+ def test__tz_change_chicago
540
+ tz = When::Parts::Timezone["America/Chicago"]
541
+ gc = When.Resource('_c:Gregorian')
542
+ [
543
+ ["19970406T010000-0600", "1997-04-06T01:00:00-06:00"],
544
+ ["19970406T015959-0600", "1997-04-06T01:59:59-06:00"],
545
+ ["19970406T020000-0600", "1997-04-06T03:00:00-05:00"],
546
+ ["19970406T030000-0600", "1997-04-06T04:00:00-05:00"],
547
+ ["19971026T005959-0500", "1997-10-26T00:59:59-05:00"], # *
548
+ ["19971026T010000-0500", "1997-10-26T01:00:00-05:00"], # *
549
+ ["19971026T015959-0500", "1997-10-26T01:59:59-05:00"], # *
550
+ ["19971026T020000-0500", "1997-10-26T01:00:00-06:00"], # *
551
+ ["19971026T030000-0500", "1997-10-26T02:00:00-06:00"], # *
552
+ ].each do |sample|
553
+ sdate = When.when?(sample[0])
554
+ ddate = gc.jul_trans(sdate, {:clock=>tz})
555
+ assert_equal(sample[1], ddate.to_s)
556
+ end
557
+
558
+ [
559
+ ["1997-04-06T01:59:59", "1997-04-06T01:59:59-06:00"],
560
+ ["1997-04-06T02:00:00", "1997-04-06T02:00:00-05:00"],
561
+ ["1997-04-06T03:00:00", "1997-04-06T03:00:00-05:00"],
562
+ ["1997-10-26T00:59:00", "1997-10-26T00:59:00-05:00"], # *
563
+ ["1997-10-26T01:00:00", "1997-10-26T01:00:00-05:00"], # * # "1997-10-26T02:00:00-05:00" - TODO !!
564
+ ["1997-10-26T01:59:59", "1997-10-26T01:59:59-05:00"], # * # "1997-10-26T02:59:59-05:00" - TODO !!
565
+ ["1997-10-26T01=00:00", "1997-10-26T01:00:00-06:00"], # *
566
+ ["1997-10-26T01=59:59", "1997-10-26T01:59:59-06:00"], # *
567
+ ["1997-10-26T02:00:00", "1997-10-26T02:00:00-06:00"] # *
568
+ ].each do |sample|
569
+ assert_equal(sample[1], When.when?(sample[0], {:clock=>tz}).to_s)
570
+ end
571
+ end
572
+ else
573
+ puts "Tests for TZInfo have been skipped at line #{__LINE__} of #{__FILE__.split(/\//)[-1]}."
574
+ end
575
+
576
+ def test__date_change
577
+ ic = When.Resource("examples/Millennium.ics")
578
+ tz = When::V::Timezone["Oceania/Millennium_Island"]
579
+ gc = When.Resource('_c:Gregorian')
580
+ [
581
+ ["1994-12-30T23:59:59", "1994-12-30T23:59:59-10:00"],
582
+ ["1995-01-01T00:00:00", "1995-01-01T00:00:00+14:00"]
583
+ ].each do |sample|
584
+ assert_equal(sample[1], When.when?(sample[0], {:clock=>tz}).to_s)
585
+ end
586
+ [
587
+ ["19941230T235959-1000", "1994-12-30T23:59:59-10:00"],
588
+ ["19941231T000000-1000", "1995-01-01T00:00:00+14:00"],
589
+ ].each do |sample|
590
+ sdate = When.when?(sample[0])
591
+ ddate = gc.jul_trans(sdate, {:clock=>tz})
592
+ assert_equal(sample[1], ddate.to_s)
593
+ end
594
+ end
595
+
596
+ def test__tzname
597
+ ic = When.Resource("examples/USA-DST.ics?C=New_York&Z=E&D=04&DZ=06&S=05&SZ=07")
598
+ date = When.when?('20110126T250000EST')
599
+ assert_equal(["2011-01-27T01:00:00-05:00", "Thu Jan 27 01:00:00 -0500 2011", "EST"],
600
+ [date.to_s, date.strftime('%+'), date.clk_time.frame.tzname[0]])
601
+
602
+ When::TM::Clock.local_time = When::V::Timezone["America/New_York"]
603
+
604
+ date = When.when?('20110526T250000')
605
+ assert_equal(["2011-05-27T01:00:00-04:00", "Fri May 27 01:00:00 -0400 2011", "EDT"],
606
+ [date.to_s, date.strftime('%+'), date.clk_time.frame.tzname[0]])
607
+ end
608
+ end
609
+
610
+ class Standard < MiniTest::TestCase
611
+ def test_nothing
612
+ end
613
+ end
614
+
615
+ class Daylight < MiniTest::TestCase
616
+ def test_nothing
617
+ end
618
+ end
619
+
620
+ class Timezone < MiniTest::TestCase
621
+ def test__neighbor_event_date
622
+ When.Resource("examples/USA-DST.ics?C=New_York&Z=E&D=04&DZ=06&S=05&SZ=07")
623
+ tz = When::V::Timezone["America/New_York"]
624
+ assert_equal("1997-04-06T02:00:00-05:00", tz.send(:_neighbor_event_date, When.when?("19970510").universal_time).to_s)
625
+ assert_equal("1997-10-26T02:00:00-04:00", tz.send(:_neighbor_event_date, When.when?("19971010").universal_time).to_s)
626
+ end
627
+
628
+ def test__current_period
629
+ When.Resource("examples/USA-DST.ics?C=New_York&Z=E&D=04&DZ=06&S=05&SZ=07")
630
+ tz = When::V::Timezone["America/New_York"]
631
+ assert_equal("1997-04-06T02:00:00-05:00...1997-10-26T02:00:00-04:00", tz.current_period(When.when?("19970510")).to_s)
632
+ assert_equal("1997-04-06T02:00:00-05:00...1997-10-26T02:00:00-04:00", tz.current_period(When.when?("19971010")).to_s)
633
+ end
634
+
635
+ if Object.const_defined?(:TZInfo)
636
+ def test__tz_info
637
+ assert_equal("1997-05-10T06:00-05:00", When.when?("TZID=America/Chicago:19970510T0600").to_s)
638
+ assert_equal("1582-10-07T11:00+09:18:59", When.when?("TZID=Asia/Tokyo:1582-10-07T11:00").to_s)
639
+ assert_equal("H24(2012).06.06T11:00+09:00", When.when?("TZID=Asia/Tokyo:H24-6-6T11:00").to_s)
640
+ assert_equal("1997-10-26T01:30:00-04:00", When.when?("TZID=America/New_York:1997-10-26T01:30:00").to_s)
641
+ assert_equal("1997-10-26T01:30:00-05:00", When.when?("TZID=America/New_York:1997-10-26T01=30:00").to_s)
642
+ assert_equal("1997-10-26T02:30:00-05:00", When.when?("TZID=America/New_York:1997-10-26T02:30:00").to_s)
643
+ assert_equal("1997-10-26T03:30:00-05:00", When.when?("TZID=America/New_York:1997-10-26T03:30:00").to_s)
644
+
645
+ location = When.Resource('_co:Spatial?tz=Asia/Tokyo')
646
+ assert_equal(['Asia/Tokyo', When::BasicTypes::M17n], [location.label.to_s, location.label.class])
647
+ end
648
+ else
649
+ puts "Tests for TZInfo have been skipped at line #{__LINE__} of #{__FILE__.split(/\//)[-1]}."
650
+ end
651
+ end
652
+
653
+ class Event
654
+
655
+ def test__each_1
656
+ When.Resource("examples/USA-DST.ics?C=New_York&Z=E&D=04&DZ=06&S=05&SZ=07")
657
+ cal = When.Resource("examples/Test.ics")
658
+
659
+ event1 = When.Resource("examples/Test.ics::event1-ID")
660
+ sample = [
661
+ "2008-09-15T+09:00",
662
+ "2009-09-21T+09:00",
663
+ "2010-09-20T+09:00",
664
+ "2011-09-19T+09:00",
665
+ "2012-09-17T+09:00",
666
+ "2013-09-16T+09:00",
667
+ "2014-09-15T+09:00",
668
+ "2015-09-21T+09:00",
669
+ "2016-09-19T+09:00",
670
+ ]
671
+ event1.enum_for(When.when?('20080101'), :forward, 9).each do |date|
672
+ assert_equal(sample.shift, date.to_s)
673
+ end
674
+ assert_equal([], sample)
675
+
676
+ sample = [
677
+ "2010-09-20T+09:00",
678
+ "2011-09-19T+09:00",
679
+ "2012-09-17T+09:00",
680
+ "2013-09-16T+09:00",
681
+ ]
682
+ event1.enum_for(When.when?('20100101'), :forward, 4).each do |date|
683
+ assert_equal(sample.shift, date.to_s)
684
+ end
685
+ assert_equal([], sample)
686
+ end
687
+
688
+ def test__each_2
689
+ When.Resource("examples/USA-DST.ics?C=New_York&Z=E&D=04&DZ=06&S=05&SZ=07")
690
+ cal = When.Resource("examples/Test.ics")
691
+
692
+ event2 = cal["event2-ID"]
693
+ sample = [
694
+ "2010-09-20T+09:00",
695
+ "2011-05-13T+09:00",
696
+ "2011-09-19T+09:00",
697
+ "2012-01-13T+09:00",
698
+ "2012-04-13T+09:00",
699
+ "2012-07-13T+09:00",
700
+ "2012-09-17T+09:00",
701
+ "2013-09-13T+09:00",
702
+ "2013-09-16T+09:00",
703
+ "2013-12-13T+09:00",
704
+ ]
705
+ event2.enum_for(When.when?('20100101'), :forward, 10, {'1st'=>'DontCare'}).each do |date|
706
+ assert_equal(sample.shift, date.to_s)
707
+ end
708
+ assert_equal([], sample)
709
+ end
710
+
711
+ def test__each_3
712
+ When.Resource("examples/USA-DST.ics?C=New_York&Z=E&D=04&DZ=06&S=05&SZ=07")
713
+ cal = When.Resource("examples/Test.ics")
714
+
715
+ event3 = cal["event3-ID"]
716
+ sample = [
717
+ "1997-09-02T09:00:00-04:00",
718
+ "1997-09-02T09:20:00-04:00",
719
+ "1997-09-02T09:40:00-04:00",
720
+ "1997-09-02T10:00:00-04:00",
721
+ "1997-09-02T10:20:00-04:00",
722
+ "1997-09-02T10:40:00-04:00",
723
+ "1997-09-02T11:00:00-04:00",
724
+ "1997-09-02T11:20:00-04:00",
725
+ "1997-09-02T11:40:00-04:00",
726
+ "1997-09-02T12:00:00-04:00",
727
+ "1997-09-02T12:20:00-04:00",
728
+ "1997-09-02T12:40:00-04:00",
729
+ "1997-09-02T13:00:00-04:00",
730
+ "1997-09-02T13:20:00-04:00",
731
+ "1997-09-02T13:40:00-04:00",
732
+ "1997-09-02T14:00:00-04:00",
733
+ "1997-09-02T14:20:00-04:00",
734
+ "1997-09-02T14:40:00-04:00",
735
+ "1997-09-02T15:00:00-04:00",
736
+ "1997-09-02T15:20:00-04:00",
737
+ "1997-09-02T15:40:00-04:00",
738
+ "1997-09-02T16:00:00-04:00",
739
+ "1997-09-02T16:20:00-04:00",
740
+ "1997-09-02T16:40:00-04:00",
741
+ "1997-09-03T09:00:00-04:00",
742
+ "1997-09-03T09:20:00-04:00",
743
+ "1997-09-03T09:40:00-04:00",
744
+ "1997-09-03T10:00:00-04:00",
745
+ "1997-09-03T10:20:00-04:00",
746
+ "1997-09-03T10:40:00-04:00",
747
+ ]
748
+ event3.enum_for(When.when?('19970902T090000'), :forward, {:count_limit=>30}).each do |date|
749
+ assert_equal(sample.shift, date.to_s)
750
+ end
751
+ assert_equal([], sample)
752
+
753
+ sample = [
754
+ "1997-09-04T13:00:00-04:00",
755
+ "1997-09-04T12:40:00-04:00",
756
+ "1997-09-04T12:20:00-04:00",
757
+ "1997-09-04T12:00:00-04:00",
758
+ "1997-09-04T11:40:00-04:00",
759
+ "1997-09-04T11:20:00-04:00",
760
+ "1997-09-04T11:00:00-04:00",
761
+ "1997-09-04T10:40:00-04:00",
762
+ "1997-09-04T10:20:00-04:00",
763
+ "1997-09-04T10:00:00-04:00",
764
+ ]
765
+ event3.enum_for(When.when?('19970904T170000'), {:direction=>:reverse, :count_limit=>10, '1st'=>'DontCare'}).each do |date|
766
+ assert_equal(sample.shift, date.to_s)
767
+ end
768
+ assert_equal([], sample)
769
+
770
+ sample = [
771
+ "1997-09-04T16:40:00-04:00",
772
+ "1997-09-04T16:20:00-04:00",
773
+ "1997-09-04T16:00:00-04:00",
774
+ ]
775
+ event3.enum_for(When.when?('TZID=America/New_York:19970904T170000'), :reverse, 3, {'1st'=>'Exclude'}).each do |date|
776
+ assert_equal(sample.shift, date.to_s)
777
+ end
778
+ assert_equal([], sample)
779
+ end
780
+
781
+ def test__each_4
782
+ When.Resource("examples/USA-DST.ics?C=New_York&Z=E&D=04&DZ=06&S=05&SZ=07")
783
+ cal = When.Resource("examples/Test.ics")
784
+
785
+ event4 = cal["event4-ID"]
786
+ sample = [
787
+ "1997-09-02T09:00:00-04:00",
788
+ "1997-09-02T09:00:10-04:00",
789
+ "1997-09-02T09:20:00-04:00",
790
+ "1997-09-02T09:40:00-04:00",
791
+ "1997-09-02T10:00:00-04:00",
792
+ "1997-09-02T10:20:00-04:00",
793
+ "1997-09-02T10:40:00-04:00",
794
+ "1997-09-02T11:00:00-04:00",
795
+ "1997-09-02T11:20:00-04:00",
796
+ "1997-09-02T11:40:00-04:00",
797
+ "1997-09-02T12:20:00-04:00",
798
+ ]
799
+ event4.enum_for(When.when?('19970902T090000'), :forward, 11).each do |date|
800
+ assert_equal(sample.shift, date.to_s)
801
+ end
802
+ assert_equal([], sample)
803
+ end
804
+
805
+ class Enumerator < MiniTest::TestCase
806
+
807
+ def test_nothing
808
+ end
809
+
810
+ class Step < MiniTest::TestCase
811
+ def test_nothing
812
+ end
813
+ end
814
+
815
+ class Logic < MiniTest::TestCase
816
+
817
+ def test_nothing
818
+ end
819
+
820
+ class Enumerator < MiniTest::TestCase
821
+ def test_nothing
822
+ end
823
+ end
824
+
825
+ class Month < MiniTest::TestCase
826
+ def test_nothing
827
+ end
828
+ end
829
+
830
+ class Weekno < MiniTest::TestCase
831
+ def test_nothing
832
+ end
833
+ end
834
+
835
+ class Yearday < MiniTest::TestCase
836
+ def test_nothing
837
+ end
838
+ end
839
+
840
+ class Monthday < MiniTest::TestCase
841
+ def test_nothing
842
+ end
843
+ end
844
+
845
+ class Weekday < MiniTest::TestCase
846
+ def test_nothing
847
+ end
848
+ end
849
+
850
+ class Hour < MiniTest::TestCase
851
+ def test_nothing
852
+ end
853
+ end
854
+
855
+ class Minute < MiniTest::TestCase
856
+ def test_nothing
857
+ end
858
+ end
859
+
860
+ class Second < MiniTest::TestCase
861
+ def test_nothing
862
+ end
863
+ end
864
+ end
865
+ end
866
+ end
867
+ end