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