when_exe 0.4.0 → 0.4.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,10 +1,10 @@
1
1
  # -*- coding: utf-8 -*-
2
2
  =begin
3
- Copyright (C) 2013-2014 Takashi SUGA
3
+ Copyright (C) 2013-2015 Takashi SUGA
4
4
 
5
5
  You may use and/or modify this file according to the license described in the LICENSE.txt file included in this archive.
6
6
  =end
7
7
 
8
8
  module When
9
- VERSION = "0.4.0"
9
+ VERSION = "0.4.1"
10
10
  end
@@ -2,7 +2,7 @@ See online documents.
2
2
  code: <https://github.com/suchowan/when_exe> (Please see README.md)
3
3
  demo: <http://hosi.org> (Preferences - <http://hosi.org/cookies>)
4
4
  gems: <https://rubygems.org/gems/when_exe>
5
- yard: <http://rubydoc.info/gems/when_exe/frames>
5
+ yard: <http://rubydoc.info/gems/when_exe/frames> or <http://www2u.biglobe.ne.jp/~suchowan/when_exe/frames.html>
6
6
  wiki: <http://www2u.biglobe.ne.jp/~suchowan/when_exe_wiki.html>(Japanese and machine translated English)
7
7
  blog: <http://suchowan.at.webry.info/theme/a543700674.html> (Japanese)
8
8
  dict: <http://www2u.biglobe.ne.jp/~suchowan/ResourceDictionary.html> (Japanese)
@@ -1,6 +1,6 @@
1
1
  # -*- coding: utf-8 -*-
2
2
  =begin
3
- Copyright (C) 2014 Takashi SUGA
3
+ Copyright (C) 2014-2015 Takashi SUGA
4
4
 
5
5
  You may use and/or modify this file according to the license described in the LICENSE.txt file included in this archive.
6
6
  =end
@@ -103,14 +103,14 @@ date = '1868-10-22'.when?
103
103
  p date #=> 1868-10-22
104
104
  list = date ^ 'Japanese'.calendar_era
105
105
  p list #=> [慶応04(1868).09.07, 明治01(1868).09.07]
106
- p list[0].calendar_name[3] #=> nil
107
- p list[1].calendar_name[3] #=> true (改元前)
106
+ p list[0].calendar_era_go_back #=> nil
107
+ p list[1].calendar_era_go_back #=> true (改元前)
108
108
  # **改元後
109
109
  date = '1868-10-23'.when?
110
110
  p date #=> 1868-10-23
111
111
  list = date ^ 'Japanese'.calendar_era
112
112
  p list #=> [明治01(1868).09.08]
113
- p list[0].calendar_name[3] #=> nil
113
+ p list[0].calendar_era_go_back #=> nil
114
114
  p list[0].calendar_era.reference_date #=> 01(1868)
115
115
 
116
116
  # 年号の reference_date の“精度”が“年”なら、年初に遡って検索をヒットさせる
@@ -121,13 +121,13 @@ date = '1912-7-29'.when?
121
121
  p date #=> 1912-07-29
122
122
  list = date ^ 'Japanese'.calendar_era
123
123
  p list #=> [明治45(1912).07.29]
124
- p list[0].calendar_name[3] #=> nil
124
+ p list[0].calendar_era_go_back #=> nil
125
125
  # **改元後
126
126
  date = '1912-7-30'.when?
127
127
  p date #=> 1912-07-30
128
128
  list = date ^ 'Japanese'.calendar_era
129
129
  p list #=> [大正01(1912).07.30]
130
- p list[0].calendar_name[3] #=> nil
130
+ p list[0].calendar_era_go_back #=> nil
131
131
  p list[0].calendar_era.reference_date #=> 01(1912).07.30
132
132
 
133
133
  # 年号の reference_date の“精度”が“日”なら、年初に遡って検索をヒットさせない
@@ -1,6 +1,6 @@
1
1
  # -*- coding: utf-8 -*-
2
2
  =begin
3
- Copyright (C) 2014 Takashi SUGA
3
+ Copyright (C) 2014-2015 Takashi SUGA
4
4
 
5
5
  You may use and/or modify this file according to the license described in the LICENSE.txt file included in this archive.
6
6
  =end
@@ -104,14 +104,14 @@ date = when?('1868-10-22')
104
104
  p date #=> 1868-10-22
105
105
  list = date ^ CalendarEra('Japanese')
106
106
  p list #=> [慶応04(1868).09.07, 明治01(1868).09.07]
107
- p list[0].calendar_name[3] #=> nil
108
- p list[1].calendar_name[3] #=> true (改元前)
107
+ p list[0].calendar_era_go_back #=> nil
108
+ p list[1].calendar_era_go_back #=> true (改元前)
109
109
  # **改元後
110
110
  date = when?('1868-10-23')
111
111
  p date #=> 1868-10-23
112
112
  list = date ^ CalendarEra('Japanese')
113
113
  p list #=> [明治01(1868).09.08]
114
- p list[0].calendar_name[3] #=> nil
114
+ p list[0].calendar_era_go_back #=> nil
115
115
  p list[0].calendar_era.reference_date #=> 01(1868)
116
116
 
117
117
  # 年号の reference_date の“精度”が“年”なら、年初に遡って検索をヒットさせる
@@ -122,13 +122,13 @@ date = when?('1912-7-29')
122
122
  p date #=> 1912-07-29
123
123
  list = date ^ CalendarEra('Japanese')
124
124
  p list #=> [明治45(1912).07.29]
125
- p list[0].calendar_name[3] #=> nil
125
+ p list[0].calendar_era_go_back #=> nil
126
126
  # **改元後
127
127
  date = when?('1912-7-30')
128
128
  p date #=> 1912-07-30
129
129
  list = date ^ CalendarEra('Japanese')
130
130
  p list #=> [大正01(1912).07.30]
131
- p list[0].calendar_name[3] #=> nil
131
+ p list[0].calendar_era_go_back #=> nil
132
132
  p list[0].calendar_era.reference_date #=> 01(1912).07.30
133
133
 
134
134
  # 年号の reference_date の“精度”が“日”なら、年初に遡って検索をヒットさせない
@@ -1,75 +1,76 @@
1
- #!/usr/bin/env ruby
2
- # -*- coding: utf-8 -*-
3
- =begin
4
- Copyright (C) 2011-2014 Takashi SUGA
5
-
6
- You may use and/or modify this file according to the license
7
- described in the LICENSE.txt file included in this archive.
8
- =end
9
-
10
- require 'pp'
11
- require 'date'
12
- begin
13
- require 'minitest/autorun'
14
- module MiniTest
15
- TestCase = MiniTest.const_defined?(:Test) ? Test : Unit::TestCase
16
- end
17
- rescue LoadError
18
- require 'test/unit'
19
- MiniTest = Test
20
- module Test
21
- TestCase = Unit::TestCase
22
- class Unit::TestCase
23
- alias :assert_raises :assert_raise
24
- end
25
- end
26
- end
27
-
28
- class MiniTest::TestCase
29
- def setup
30
- When._setup_({:multi_thread=>true})
31
- end
32
- end
33
-
34
- require 'when_exe'
35
- require 'when_exe/mini_application'
36
- #include When
37
-
38
- require './test/parts'
39
- require './test/basictypes'
40
- require './test/ephemeris'
41
- require './test/timestandard'
42
- require './test/coordinates'
43
- require './test/icalendar'
44
- require './test/tmobjects'
45
- require './test/tmreference'
46
- require './test/tmposition'
47
- require './test/calendartypes'
48
- require './test/calendarnote'
49
- require './test/inspect'
50
- require './test/googlecalendar'
51
- require './test/region/m17n'
52
- require './test/region/residue'
53
- require './test/region/christian'
54
- require './test/region/swedish'
55
- require './test/region/armenian'
56
- require './test/region/japanese'
57
- require './test/region/chinese'
58
- require './test/region/vietnamese'
59
- require './test/region/tibetan'
60
- require './test/region/balinese'
61
- require './test/region/thai'
62
- require './test/region/indian'
63
- require './test/region/iran'
64
- require './test/region/islamic'
65
- require './test/region/jewish'
66
- require './test/region/french'
67
- require './test/region/coptic'
68
- require './test/region/bahai'
69
- require './test/region/mayan'
70
- require './test/region/discordian'
71
- require './test/region/zoroastrian'
72
- require './test/region/yerm'
73
- require './test/region/reforms'
74
- require './test/region/shire'
75
- require './test/region/geologicalage'
1
+ #!/usr/bin/env ruby
2
+ # -*- coding: utf-8 -*-
3
+ =begin
4
+ Copyright (C) 2011-2014 Takashi SUGA
5
+
6
+ You may use and/or modify this file according to the license
7
+ described in the LICENSE.txt file included in this archive.
8
+ =end
9
+
10
+ require 'pp'
11
+ require 'date'
12
+ begin
13
+ require 'minitest/autorun'
14
+ module MiniTest
15
+ TestCase = MiniTest.const_defined?(:Test) ? Test : Unit::TestCase
16
+ end
17
+ rescue LoadError
18
+ require 'test/unit'
19
+ MiniTest = Test
20
+ module Test
21
+ TestCase = Unit::TestCase
22
+ class Unit::TestCase
23
+ alias :assert_raises :assert_raise
24
+ end
25
+ end
26
+ end
27
+
28
+ class MiniTest::TestCase
29
+ def setup
30
+ When._setup_({:multi_thread=>true})
31
+ end
32
+ end
33
+
34
+ require 'when_exe'
35
+ require 'when_exe/mini_application'
36
+ #include When
37
+
38
+ require './test/parts'
39
+ require './test/basictypes'
40
+ require './test/ephemeris'
41
+ require './test/timestandard'
42
+ require './test/coordinates'
43
+ require './test/icalendar'
44
+ require './test/tmobjects'
45
+ require './test/tmreference'
46
+ require './test/tmposition'
47
+ require './test/calendartypes'
48
+ require './test/calendarnote'
49
+ require './test/inspect'
50
+ require './test/linkeddata'
51
+ require './test/googlecalendar'
52
+ require './test/region/m17n'
53
+ require './test/region/residue'
54
+ require './test/region/christian'
55
+ require './test/region/swedish'
56
+ require './test/region/armenian'
57
+ require './test/region/japanese'
58
+ require './test/region/chinese'
59
+ require './test/region/vietnamese'
60
+ require './test/region/tibetan'
61
+ require './test/region/balinese'
62
+ require './test/region/thai'
63
+ require './test/region/indian'
64
+ require './test/region/iran'
65
+ require './test/region/islamic'
66
+ require './test/region/jewish'
67
+ require './test/region/french'
68
+ require './test/region/coptic'
69
+ require './test/region/bahai'
70
+ require './test/region/mayan'
71
+ require './test/region/discordian'
72
+ require './test/region/zoroastrian'
73
+ require './test/region/yerm'
74
+ require './test/region/reforms'
75
+ require './test/region/shire'
76
+ require './test/region/geologicalage'
@@ -1,879 +1,883 @@
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
- def test__each_5
806
- event5 = When::V::Event.new({
807
- 'rrule' => 'FREQ=MONTHLY;BYMONTHDAY=31',
808
- 'dtstart' => 'VALUE=DATE:20070131'
809
- })
810
- sample =%w(2007-01-31 2007-03-31 2007-05-31 2007-07-31 2007-08-31
811
- 2007-10-31 2007-12-31 2008-01-31 2008-03-31 2008-05-31)
812
- event5.enum_for(When.when?('20070101'), :forward, 10).each do |date|
813
- assert_equal(sample.shift, date.to_s)
814
- end
815
- end
816
-
817
- class Enumerator < MiniTest::TestCase
818
-
819
- def test_nothing
820
- end
821
-
822
- class Step < MiniTest::TestCase
823
- def test_nothing
824
- end
825
- end
826
-
827
- class Logic < MiniTest::TestCase
828
-
829
- def test_nothing
830
- end
831
-
832
- class Enumerator < MiniTest::TestCase
833
- def test_nothing
834
- end
835
- end
836
-
837
- class Month < MiniTest::TestCase
838
- def test_nothing
839
- end
840
- end
841
-
842
- class Weekno < MiniTest::TestCase
843
- def test_nothing
844
- end
845
- end
846
-
847
- class Yearday < MiniTest::TestCase
848
- def test_nothing
849
- end
850
- end
851
-
852
- class Monthday < MiniTest::TestCase
853
- def test_nothing
854
- end
855
- end
856
-
857
- class Weekday < MiniTest::TestCase
858
- def test_nothing
859
- end
860
- end
861
-
862
- class Hour < MiniTest::TestCase
863
- def test_nothing
864
- end
865
- end
866
-
867
- class Minute < MiniTest::TestCase
868
- def test_nothing
869
- end
870
- end
871
-
872
- class Second < MiniTest::TestCase
873
- def test_nothing
874
- end
875
- end
876
- end
877
- end
878
- end
879
- end
1
+ # -*- coding: utf-8 -*-
2
+ =begin
3
+ Copyright (C) 2011-2015 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:20200113'
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
+ "2017-01-09",
475
+ "2018-01-08",
476
+ "2019-01-14",
477
+ "2020-01-13"
478
+ ]
479
+ this_time = When.now.to_s
480
+ sample.shift while (sample[0] && sample[0] <= this_time)
481
+ event.enum_for(When.when?('20070101'), :forward, 9).each do |date|
482
+ assert_equal(sample.shift, date.to_s)
483
+ end
484
+ assert_equal([], sample)
485
+ end
486
+ end
487
+
488
+ class Journal < MiniTest::TestCase
489
+ def test_nothing
490
+ end
491
+ end
492
+
493
+ class Freebusy < MiniTest::TestCase
494
+ def test__freebusy # RFC 5545 [Page 101]
495
+ sample = [
496
+ "1997-03-08T16:00:00Z...1997-03-08T19:00:00Z",
497
+ "1997-03-08T20:00:00Z...1997-03-08T21:00:00Z"
498
+ ]
499
+ When::V::Freebusy.new({'freebusy'=>'FBTYPE=FREE:19970308T160000Z/PT3H,19970308T200000Z/PT1H'}).each do |period|
500
+ assert_equal([sample.shift, 'FREE'], [period.to_s, period.query['FBTYPE']])
501
+ end
502
+ assert_equal([], sample)
503
+ end
504
+ end
505
+
506
+ class TimezoneProperty < MiniTest::TestCase
507
+ def test__tz_change
508
+ ic = When.Resource("examples/USA-DST.ics?C=New_York&Z=E&D=04&DZ=06&S=05&SZ=07")
509
+ tz = When::V::Timezone["America/New_York"]
510
+ gc = When.Resource('_c:Gregorian')
511
+ [
512
+ ["1997-04-06T01:59:59", "1997-04-06T01:59:59-05:00"],
513
+ ["1997-04-06T02:00:00", "1997-04-06T02:00:00-04:00"],
514
+ ["1997-04-06T03:00:00", "1997-04-06T03:00:00-04:00"],
515
+ ["1997-10-26T00:59:00", "1997-10-26T00:59:00-04:00"], # *
516
+ ["1997-10-26T01:00:00", "1997-10-26T01:00:00-04:00"], # *
517
+ ["1997-10-26T01:59:59", "1997-10-26T01:59:59-04:00"], # *
518
+ ["1997-10-26T01=00:00", "1997-10-26T01:00:00-05:00"], # *
519
+ ["1997-10-26T01=59:59", "1997-10-26T01:59:59-05:00"], # *
520
+ ["1997-10-26T02:00:00", "1997-10-26T02:00:00-05:00"] # *
521
+ ].each do |sample|
522
+ assert_equal(sample[1], When.when?(sample[0], {:clock=>tz}).to_s)
523
+ end
524
+
525
+ [
526
+ ["19970406T010000-0500", "1997-04-06T01:00:00-05:00"],
527
+ ["19970406T015959-0500", "1997-04-06T01:59:59-05:00"],
528
+ ["19970406T020000-0500", "1997-04-06T03:00:00-04:00"],
529
+ ["19970406T030000-0500", "1997-04-06T04:00:00-04:00"],
530
+ ["19971026T005959-0400", "1997-10-26T00:59:59-04:00"], # *
531
+ ["19971026T010000-0400", "1997-10-26T01:00:00-04:00"], # *
532
+ ["19971026T015959-0400", "1997-10-26T01:59:59-04:00"], # *
533
+ ["19971026T020000-0400", "1997-10-26T01:00:00-05:00"], # *
534
+ ["19971026T030000-0400", "1997-10-26T02:00:00-05:00"] # *
535
+ ].each do |sample|
536
+ sdate = When.when?(sample[0])
537
+ ddate = gc.jul_trans(sdate, {:clock=>tz})
538
+ assert_equal(sample[1], ddate.to_s)
539
+ end
540
+ end
541
+
542
+ if Object.const_defined?(:TZInfo)
543
+ def test__tz_change_chicago
544
+ tz = When::Parts::Timezone["America/Chicago"]
545
+ gc = When.Resource('_c:Gregorian')
546
+ [
547
+ ["19970406T010000-0600", "1997-04-06T01:00:00-06:00"],
548
+ ["19970406T015959-0600", "1997-04-06T01:59:59-06:00"],
549
+ ["19970406T020000-0600", "1997-04-06T03:00:00-05:00"],
550
+ ["19970406T030000-0600", "1997-04-06T04:00:00-05:00"],
551
+ ["19971026T005959-0500", "1997-10-26T00:59:59-05:00"], # *
552
+ ["19971026T010000-0500", "1997-10-26T01:00:00-05:00"], # *
553
+ ["19971026T015959-0500", "1997-10-26T01:59:59-05:00"], # *
554
+ ["19971026T020000-0500", "1997-10-26T01:00:00-06:00"], # *
555
+ ["19971026T030000-0500", "1997-10-26T02:00:00-06:00"], # *
556
+ ].each do |sample|
557
+ sdate = When.when?(sample[0])
558
+ ddate = gc.jul_trans(sdate, {:clock=>tz})
559
+ assert_equal(sample[1], ddate.to_s)
560
+ end
561
+
562
+ [
563
+ ["1997-04-06T01:59:59", "1997-04-06T01:59:59-06:00"],
564
+ ["1997-04-06T02:00:00", "1997-04-06T02:00:00-05:00"],
565
+ ["1997-04-06T03:00:00", "1997-04-06T03:00:00-05:00"],
566
+ ["1997-10-26T00:59:00", "1997-10-26T00:59:00-05:00"], # *
567
+ ["1997-10-26T01:00:00", "1997-10-26T01:00:00-05:00"], # * # "1997-10-26T02:00:00-05:00" - TODO !!
568
+ ["1997-10-26T01:59:59", "1997-10-26T01:59:59-05:00"], # * # "1997-10-26T02:59:59-05:00" - TODO !!
569
+ ["1997-10-26T01=00:00", "1997-10-26T01:00:00-06:00"], # *
570
+ ["1997-10-26T01=59:59", "1997-10-26T01:59:59-06:00"], # *
571
+ ["1997-10-26T02:00:00", "1997-10-26T02:00:00-06:00"] # *
572
+ ].each do |sample|
573
+ assert_equal(sample[1], When.when?(sample[0], {:clock=>tz}).to_s)
574
+ end
575
+ end
576
+ else
577
+ puts "Tests for TZInfo have been skipped at line #{__LINE__} of #{__FILE__.split(/\//)[-1]}."
578
+ end
579
+
580
+ def test__date_change
581
+ ic = When.Resource("examples/Millennium.ics")
582
+ tz = When::V::Timezone["Oceania/Millennium_Island"]
583
+ gc = When.Resource('_c:Gregorian')
584
+ [
585
+ ["1994-12-30T23:59:59", "1994-12-30T23:59:59-10:00"],
586
+ ["1995-01-01T00:00:00", "1995-01-01T00:00:00+14:00"]
587
+ ].each do |sample|
588
+ assert_equal(sample[1], When.when?(sample[0], {:clock=>tz}).to_s)
589
+ end
590
+ [
591
+ ["19941230T235959-1000", "1994-12-30T23:59:59-10:00"],
592
+ ["19941231T000000-1000", "1995-01-01T00:00:00+14:00"],
593
+ ].each do |sample|
594
+ sdate = When.when?(sample[0])
595
+ ddate = gc.jul_trans(sdate, {:clock=>tz})
596
+ assert_equal(sample[1], ddate.to_s)
597
+ end
598
+ end
599
+
600
+ def test__tzname
601
+ ic = When.Resource("examples/USA-DST.ics?C=New_York&Z=E&D=04&DZ=06&S=05&SZ=07")
602
+ date = When.when?('20110126T250000EST')
603
+ assert_equal(["2011-01-27T01:00:00-05:00", "Thu Jan 27 01:00:00 -0500 2011", "EST"],
604
+ [date.to_s, date.strftime('%+'), date.clk_time.frame.tzname[0]])
605
+
606
+ When::TM::Clock.local_time = When::V::Timezone["America/New_York"]
607
+
608
+ date = When.when?('20110526T250000')
609
+ assert_equal(["2011-05-27T01:00:00-04:00", "Fri May 27 01:00:00 -0400 2011", "EDT"],
610
+ [date.to_s, date.strftime('%+'), date.clk_time.frame.tzname[0]])
611
+ end
612
+ end
613
+
614
+ class Standard < MiniTest::TestCase
615
+ def test_nothing
616
+ end
617
+ end
618
+
619
+ class Daylight < MiniTest::TestCase
620
+ def test_nothing
621
+ end
622
+ end
623
+
624
+ class Timezone < MiniTest::TestCase
625
+ def test__neighbor_event_date
626
+ When.Resource("examples/USA-DST.ics?C=New_York&Z=E&D=04&DZ=06&S=05&SZ=07")
627
+ tz = When::V::Timezone["America/New_York"]
628
+ assert_equal("1997-04-06T02:00:00-05:00", tz.send(:_neighbor_event_date, When.when?("19970510").universal_time).to_s)
629
+ assert_equal("1997-10-26T02:00:00-04:00", tz.send(:_neighbor_event_date, When.when?("19971010").universal_time).to_s)
630
+ end
631
+
632
+ def test__current_period
633
+ When.Resource("examples/USA-DST.ics?C=New_York&Z=E&D=04&DZ=06&S=05&SZ=07")
634
+ tz = When::V::Timezone["America/New_York"]
635
+ assert_equal("1997-04-06T02:00:00-05:00...1997-10-26T02:00:00-04:00", tz.current_period(When.when?("19970510")).to_s)
636
+ assert_equal("1997-04-06T02:00:00-05:00...1997-10-26T02:00:00-04:00", tz.current_period(When.when?("19971010")).to_s)
637
+ end
638
+
639
+ if Object.const_defined?(:TZInfo)
640
+ def test__tz_info
641
+ assert_equal("1997-05-10T06:00-05:00", When.when?("TZID=America/Chicago:19970510T0600").to_s)
642
+ assert_equal("1582-10-07T11:00+09:18:59", When.when?("TZID=Asia/Tokyo:1582-10-07T11:00").to_s)
643
+ assert_equal("H24(2012).06.06T11:00+09:00", When.when?("TZID=Asia/Tokyo:H24-6-6T11:00").to_s)
644
+ assert_equal("1997-10-26T01:30:00-04:00", When.when?("TZID=America/New_York:1997-10-26T01:30:00").to_s)
645
+ assert_equal("1997-10-26T01:30:00-05:00", When.when?("TZID=America/New_York:1997-10-26T01=30:00").to_s)
646
+ assert_equal("1997-10-26T02:30:00-05:00", When.when?("TZID=America/New_York:1997-10-26T02:30:00").to_s)
647
+ assert_equal("1997-10-26T03:30:00-05:00", When.when?("TZID=America/New_York:1997-10-26T03:30:00").to_s)
648
+
649
+ location = When.Resource('_co:Spatial?tz=Asia/Tokyo')
650
+ assert_equal(['Asia/Tokyo', When::BasicTypes::M17n], [location.label.to_s, location.label.class])
651
+ end
652
+ else
653
+ puts "Tests for TZInfo have been skipped at line #{__LINE__} of #{__FILE__.split(/\//)[-1]}."
654
+ end
655
+ end
656
+
657
+ class Event
658
+
659
+ def test__each_1
660
+ When.Resource("examples/USA-DST.ics?C=New_York&Z=E&D=04&DZ=06&S=05&SZ=07")
661
+ cal = When.Resource("examples/Test.ics")
662
+
663
+ event1 = When.Resource("examples/Test.ics::event1-ID")
664
+ sample = [
665
+ "2008-09-15T+09:00",
666
+ "2009-09-21T+09:00",
667
+ "2010-09-20T+09:00",
668
+ "2011-09-19T+09:00",
669
+ "2012-09-17T+09:00",
670
+ "2013-09-16T+09:00",
671
+ "2014-09-15T+09:00",
672
+ "2015-09-21T+09:00",
673
+ "2016-09-19T+09:00",
674
+ ]
675
+ event1.enum_for(When.when?('20080101'), :forward, 9).each do |date|
676
+ assert_equal(sample.shift, date.to_s)
677
+ end
678
+ assert_equal([], sample)
679
+
680
+ sample = [
681
+ "2010-09-20T+09:00",
682
+ "2011-09-19T+09:00",
683
+ "2012-09-17T+09:00",
684
+ "2013-09-16T+09:00",
685
+ ]
686
+ event1.enum_for(When.when?('20100101'), :forward, 4).each do |date|
687
+ assert_equal(sample.shift, date.to_s)
688
+ end
689
+ assert_equal([], sample)
690
+ end
691
+
692
+ def test__each_2
693
+ When.Resource("examples/USA-DST.ics?C=New_York&Z=E&D=04&DZ=06&S=05&SZ=07")
694
+ cal = When.Resource("examples/Test.ics")
695
+
696
+ event2 = cal["event2-ID"]
697
+ sample = [
698
+ "2010-09-20T+09:00",
699
+ "2011-05-13T+09:00",
700
+ "2011-09-19T+09:00",
701
+ "2012-01-13T+09:00",
702
+ "2012-04-13T+09:00",
703
+ "2012-07-13T+09:00",
704
+ "2012-09-17T+09:00",
705
+ "2013-09-13T+09:00",
706
+ "2013-09-16T+09:00",
707
+ "2013-12-13T+09:00",
708
+ ]
709
+ event2.enum_for(When.when?('20100101'), :forward, 10, {'1st'=>'DontCare'}).each do |date|
710
+ assert_equal(sample.shift, date.to_s)
711
+ end
712
+ assert_equal([], sample)
713
+ end
714
+
715
+ def test__each_3
716
+ When.Resource("examples/USA-DST.ics?C=New_York&Z=E&D=04&DZ=06&S=05&SZ=07")
717
+ cal = When.Resource("examples/Test.ics")
718
+
719
+ event3 = cal["event3-ID"]
720
+ sample = [
721
+ "1997-09-02T09:00:00-04:00",
722
+ "1997-09-02T09:20:00-04:00",
723
+ "1997-09-02T09:40:00-04:00",
724
+ "1997-09-02T10:00:00-04:00",
725
+ "1997-09-02T10:20:00-04:00",
726
+ "1997-09-02T10:40:00-04:00",
727
+ "1997-09-02T11:00:00-04:00",
728
+ "1997-09-02T11:20:00-04:00",
729
+ "1997-09-02T11:40:00-04:00",
730
+ "1997-09-02T12:00:00-04:00",
731
+ "1997-09-02T12:20:00-04:00",
732
+ "1997-09-02T12:40:00-04:00",
733
+ "1997-09-02T13:00:00-04:00",
734
+ "1997-09-02T13:20:00-04:00",
735
+ "1997-09-02T13:40:00-04:00",
736
+ "1997-09-02T14:00:00-04:00",
737
+ "1997-09-02T14:20:00-04:00",
738
+ "1997-09-02T14:40:00-04:00",
739
+ "1997-09-02T15:00:00-04:00",
740
+ "1997-09-02T15:20:00-04:00",
741
+ "1997-09-02T15:40:00-04:00",
742
+ "1997-09-02T16:00:00-04:00",
743
+ "1997-09-02T16:20:00-04:00",
744
+ "1997-09-02T16:40:00-04:00",
745
+ "1997-09-03T09:00:00-04:00",
746
+ "1997-09-03T09:20:00-04:00",
747
+ "1997-09-03T09:40:00-04:00",
748
+ "1997-09-03T10:00:00-04:00",
749
+ "1997-09-03T10:20:00-04:00",
750
+ "1997-09-03T10:40:00-04:00",
751
+ ]
752
+ event3.enum_for(When.when?('19970902T090000'), :forward, {:count_limit=>30}).each do |date|
753
+ assert_equal(sample.shift, date.to_s)
754
+ end
755
+ assert_equal([], sample)
756
+
757
+ sample = [
758
+ "1997-09-04T13:00:00-04:00",
759
+ "1997-09-04T12:40:00-04:00",
760
+ "1997-09-04T12:20:00-04:00",
761
+ "1997-09-04T12:00:00-04:00",
762
+ "1997-09-04T11:40:00-04:00",
763
+ "1997-09-04T11:20:00-04:00",
764
+ "1997-09-04T11:00:00-04:00",
765
+ "1997-09-04T10:40:00-04:00",
766
+ "1997-09-04T10:20:00-04:00",
767
+ "1997-09-04T10:00:00-04:00",
768
+ ]
769
+ event3.enum_for(When.when?('19970904T170000'), {:direction=>:reverse, :count_limit=>10, '1st'=>'DontCare'}).each do |date|
770
+ assert_equal(sample.shift, date.to_s)
771
+ end
772
+ assert_equal([], sample)
773
+
774
+ sample = [
775
+ "1997-09-04T16:40:00-04:00",
776
+ "1997-09-04T16:20:00-04:00",
777
+ "1997-09-04T16:00:00-04:00",
778
+ ]
779
+ event3.enum_for(When.when?('TZID=America/New_York:19970904T170000'), :reverse, 3, {'1st'=>'Exclude'}).each do |date|
780
+ assert_equal(sample.shift, date.to_s)
781
+ end
782
+ assert_equal([], sample)
783
+ end
784
+
785
+ def test__each_4
786
+ When.Resource("examples/USA-DST.ics?C=New_York&Z=E&D=04&DZ=06&S=05&SZ=07")
787
+ cal = When.Resource("examples/Test.ics")
788
+
789
+ event4 = cal["event4-ID"]
790
+ sample = [
791
+ "1997-09-02T09:00:00-04:00",
792
+ "1997-09-02T09:00:10-04:00",
793
+ "1997-09-02T09:20:00-04:00",
794
+ "1997-09-02T09:40:00-04:00",
795
+ "1997-09-02T10:00:00-04:00",
796
+ "1997-09-02T10:20:00-04:00",
797
+ "1997-09-02T10:40:00-04:00",
798
+ "1997-09-02T11:00:00-04:00",
799
+ "1997-09-02T11:20:00-04:00",
800
+ "1997-09-02T11:40:00-04:00",
801
+ "1997-09-02T12:20:00-04:00",
802
+ ]
803
+ event4.enum_for(When.when?('19970902T090000'), :forward, 11).each do |date|
804
+ assert_equal(sample.shift, date.to_s)
805
+ end
806
+ assert_equal([], sample)
807
+ end
808
+
809
+ def test__each_5
810
+ event5 = When::V::Event.new({
811
+ 'rrule' => 'FREQ=MONTHLY;BYMONTHDAY=31',
812
+ 'dtstart' => 'VALUE=DATE:20070131'
813
+ })
814
+ sample =%w(2007-01-31 2007-03-31 2007-05-31 2007-07-31 2007-08-31
815
+ 2007-10-31 2007-12-31 2008-01-31 2008-03-31 2008-05-31)
816
+ event5.enum_for(When.when?('20070101'), :forward, 10).each do |date|
817
+ assert_equal(sample.shift, date.to_s)
818
+ end
819
+ end
820
+
821
+ class Enumerator < MiniTest::TestCase
822
+
823
+ def test_nothing
824
+ end
825
+
826
+ class Step < MiniTest::TestCase
827
+ def test_nothing
828
+ end
829
+ end
830
+
831
+ class Logic < MiniTest::TestCase
832
+
833
+ def test_nothing
834
+ end
835
+
836
+ class Enumerator < MiniTest::TestCase
837
+ def test_nothing
838
+ end
839
+ end
840
+
841
+ class Month < MiniTest::TestCase
842
+ def test_nothing
843
+ end
844
+ end
845
+
846
+ class Weekno < MiniTest::TestCase
847
+ def test_nothing
848
+ end
849
+ end
850
+
851
+ class Yearday < MiniTest::TestCase
852
+ def test_nothing
853
+ end
854
+ end
855
+
856
+ class Monthday < MiniTest::TestCase
857
+ def test_nothing
858
+ end
859
+ end
860
+
861
+ class Weekday < MiniTest::TestCase
862
+ def test_nothing
863
+ end
864
+ end
865
+
866
+ class Hour < MiniTest::TestCase
867
+ def test_nothing
868
+ end
869
+ end
870
+
871
+ class Minute < MiniTest::TestCase
872
+ def test_nothing
873
+ end
874
+ end
875
+
876
+ class Second < MiniTest::TestCase
877
+ def test_nothing
878
+ end
879
+ end
880
+ end
881
+ end
882
+ end
883
+ end