when_exe 0.2.100 → 0.3.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (193) hide show
  1. data/LICENSE.ja.txt +25 -25
  2. data/LICENSE.txt +31 -31
  3. data/bin/irb.rc +5 -0
  4. data/bin/locales.rb +2 -2
  5. data/bin/when.rb +16 -0
  6. data/bin/when.rb.config +7 -0
  7. data/lib/when_exe.rb +616 -14
  8. data/lib/when_exe/basictypes.rb +615 -0
  9. data/lib/when_exe/calendartypes.rb +1700 -0
  10. data/lib/when_exe/coordinates.rb +1936 -0
  11. data/lib/when_exe/core/compatibility.rb +54 -0
  12. data/lib/when_exe/core/duration.rb +72 -72
  13. data/lib/when_exe/core/extension.rb +382 -0
  14. data/lib/when_exe/ephemeris.rb +1845 -0
  15. data/lib/when_exe/googlecalendar.rb +140 -0
  16. data/lib/when_exe/icalendar.rb +1587 -0
  17. data/lib/when_exe/inspect.rb +1237 -0
  18. data/lib/when_exe/locales/af.rb +90 -0
  19. data/lib/when_exe/locales/ar.rb +145 -0
  20. data/lib/when_exe/locales/az.rb +90 -0
  21. data/lib/when_exe/locales/bg.rb +90 -0
  22. data/lib/when_exe/locales/bn.rb +94 -0
  23. data/lib/when_exe/locales/bs.rb +121 -0
  24. data/lib/when_exe/locales/ca.rb +92 -0
  25. data/lib/when_exe/locales/cs.rb +107 -0
  26. data/lib/when_exe/locales/cy.rb +150 -0
  27. data/lib/when_exe/locales/da.rb +84 -0
  28. data/lib/when_exe/locales/de.rb +92 -0
  29. data/lib/when_exe/locales/de_AT.rb +92 -0
  30. data/lib/when_exe/locales/de_CH.rb +92 -0
  31. data/lib/when_exe/locales/el.rb +93 -0
  32. data/lib/when_exe/locales/en.rb +88 -0
  33. data/lib/when_exe/locales/en_AU.rb +88 -0
  34. data/lib/when_exe/locales/en_CA.rb +88 -0
  35. data/lib/when_exe/locales/en_GB.rb +88 -0
  36. data/lib/when_exe/locales/en_IN.rb +88 -0
  37. data/lib/when_exe/locales/en_NZ.rb +88 -0
  38. data/lib/when_exe/locales/eo.rb +89 -0
  39. data/lib/when_exe/locales/es.rb +84 -0
  40. data/lib/when_exe/locales/es_419.rb +84 -0
  41. data/lib/when_exe/locales/es_AR.rb +84 -0
  42. data/lib/when_exe/locales/es_CL.rb +84 -0
  43. data/lib/when_exe/locales/es_CO.rb +84 -0
  44. data/lib/when_exe/locales/es_MX.rb +84 -0
  45. data/lib/when_exe/locales/es_PE.rb +85 -0
  46. data/lib/when_exe/locales/es_VE.rb +84 -0
  47. data/lib/when_exe/locales/et.rb +94 -0
  48. data/lib/when_exe/locales/eu.rb +95 -0
  49. data/lib/when_exe/locales/fa.rb +80 -0
  50. data/lib/when_exe/locales/fi.rb +89 -0
  51. data/lib/when_exe/locales/fr.rb +88 -0
  52. data/lib/when_exe/locales/fr_CA.rb +88 -0
  53. data/lib/when_exe/locales/fr_CH.rb +88 -0
  54. data/lib/when_exe/locales/gl.rb +81 -0
  55. data/lib/when_exe/locales/he.rb +84 -0
  56. data/lib/when_exe/locales/hi.rb +80 -0
  57. data/lib/when_exe/locales/hi_IN.rb +84 -0
  58. data/lib/when_exe/locales/hr.rb +128 -0
  59. data/lib/when_exe/locales/hu.rb +84 -0
  60. data/lib/when_exe/locales/id.rb +89 -0
  61. data/lib/when_exe/locales/is.rb +89 -0
  62. data/lib/when_exe/locales/it.rb +87 -0
  63. data/lib/when_exe/locales/it_CH.rb +87 -0
  64. data/lib/when_exe/locales/ja.rb +78 -0
  65. data/lib/when_exe/locales/kn.rb +86 -0
  66. data/lib/when_exe/locales/ko.rb +78 -0
  67. data/lib/when_exe/locales/links.rb +2342 -0
  68. data/lib/when_exe/locales/lo.rb +123 -0
  69. data/lib/when_exe/locales/locales.rb +91 -0
  70. data/lib/when_exe/locales/lt.rb +111 -0
  71. data/lib/when_exe/locales/lv.rb +118 -0
  72. data/lib/when_exe/locales/mk.rb +93 -0
  73. data/lib/when_exe/locales/mn.rb +80 -0
  74. data/lib/when_exe/locales/nb.rb +81 -0
  75. data/lib/when_exe/locales/ne.rb +81 -0
  76. data/lib/when_exe/locales/nl.rb +92 -0
  77. data/lib/when_exe/locales/nn.rb +73 -0
  78. data/lib/when_exe/locales/or.rb +84 -0
  79. data/lib/when_exe/locales/pl.rb +128 -0
  80. data/lib/when_exe/locales/pt.rb +88 -0
  81. data/lib/when_exe/locales/pt_BR.rb +88 -0
  82. data/lib/when_exe/locales/rm.rb +143 -0
  83. data/lib/when_exe/locales/ro.rb +105 -0
  84. data/lib/when_exe/locales/ru.rb +128 -0
  85. data/lib/when_exe/locales/sk.rb +109 -0
  86. data/lib/when_exe/locales/sl.rb +122 -0
  87. data/lib/when_exe/locales/sr.rb +122 -0
  88. data/lib/when_exe/locales/sv.rb +83 -0
  89. data/lib/when_exe/locales/sw.rb +89 -0
  90. data/lib/when_exe/locales/th.rb +78 -0
  91. data/lib/when_exe/locales/tl.rb +99 -0
  92. data/lib/when_exe/locales/tr.rb +96 -0
  93. data/lib/when_exe/locales/uk.rb +128 -0
  94. data/lib/when_exe/locales/uz.rb +128 -0
  95. data/lib/when_exe/locales/vi.rb +94 -0
  96. data/lib/when_exe/locales/wo.rb +82 -0
  97. data/lib/when_exe/locales/zh_CN.rb +77 -0
  98. data/lib/when_exe/locales/zh_HK.rb +77 -0
  99. data/lib/when_exe/locales/zh_TW.rb +77 -0
  100. data/lib/when_exe/mini_application.rb +252 -0
  101. data/lib/when_exe/parts/enumerator.rb +472 -0
  102. data/lib/when_exe/parts/geometric_complex.rb +379 -0
  103. data/lib/when_exe/parts/locale.rb +513 -0
  104. data/lib/when_exe/parts/method_cash.rb +207 -0
  105. data/lib/when_exe/parts/resource.rb +806 -0
  106. data/lib/when_exe/parts/timezone.rb +182 -0
  107. data/lib/when_exe/region/bahai.rb +145 -0
  108. data/lib/when_exe/region/balinese.rb +627 -0
  109. data/lib/when_exe/region/chinese.rb +896 -0
  110. data/lib/when_exe/region/chinese_calendar.rb +919 -0
  111. data/lib/when_exe/region/chinese_epoch.rb +1245 -0
  112. data/lib/when_exe/region/christian.rb +644 -0
  113. data/lib/when_exe/region/far_east.rb +192 -0
  114. data/lib/when_exe/region/french.rb +66 -0
  115. data/lib/when_exe/region/geologicalage.rb +639 -0
  116. data/lib/when_exe/region/indian.rb +1066 -0
  117. data/lib/when_exe/region/iranian.rb +66 -0
  118. data/lib/when_exe/region/islamic.rb +105 -0
  119. data/lib/when_exe/region/japanese.rb +851 -0
  120. data/lib/when_exe/region/japanese_notes.rb +964 -0
  121. data/lib/when_exe/region/japanese_residues.rb +1149 -0
  122. data/lib/when_exe/region/javanese.rb +228 -0
  123. data/lib/when_exe/region/jewish.rb +127 -0
  124. data/lib/when_exe/region/korean.rb +267 -0
  125. data/lib/when_exe/region/m17n.rb +115 -0
  126. data/lib/when_exe/region/martian.rb +215 -0
  127. data/lib/when_exe/region/mayan.rb +122 -0
  128. data/lib/when_exe/region/moon.rb +333 -0
  129. data/lib/when_exe/region/nihon_shoki.rb +73 -0
  130. data/lib/when_exe/region/planets.rb +585 -0
  131. data/lib/when_exe/region/pope.rb +298 -0
  132. data/lib/when_exe/region/residue.rb +229 -0
  133. data/lib/when_exe/region/roman.rb +325 -0
  134. data/lib/when_exe/region/ryukyu.rb +98 -0
  135. data/lib/when_exe/region/shire.rb +254 -0
  136. data/lib/when_exe/region/sun.rb +210 -0
  137. data/lib/when_exe/region/thai.rb +227 -0
  138. data/lib/when_exe/region/tibetan.rb +233 -0
  139. data/lib/when_exe/region/v50.rb +111 -0
  140. data/lib/when_exe/region/vietnamese.rb +173 -0
  141. data/lib/when_exe/region/world.rb +197 -0
  142. data/lib/when_exe/timestandard.rb +547 -0
  143. data/lib/when_exe/tmduration.rb +330 -330
  144. data/lib/when_exe/tmobjects.rb +1295 -0
  145. data/lib/when_exe/tmposition.rb +1955 -0
  146. data/lib/when_exe/tmreference.rb +1547 -0
  147. data/lib/when_exe/version.rb +10 -3
  148. data/link_to_online_documents +4 -0
  149. data/test/examples/JapanHolidays.ics +456 -0
  150. data/test/examples/Millennium.ics +17 -0
  151. data/test/examples/NewYork.ics +61 -0
  152. data/test/examples/Residue.m17n +135 -0
  153. data/test/examples/Spatial.m17n +179 -0
  154. data/test/examples/Terms.m17n +39 -0
  155. data/test/examples/Test.ics +53 -0
  156. data/test/examples/USA-DST.ics +61 -0
  157. data/test/examples/geometric_complex.rb +41 -0
  158. data/test/examples/sample.xml +14 -0
  159. data/test/examples/today.rb +61 -0
  160. data/test/test.rb +54 -19
  161. data/test/test.rb.config +1 -0
  162. data/test/test/basictypes.rb +368 -0
  163. data/test/test/calendartypes.rb +57 -0
  164. data/test/test/coordinates.rb +380 -0
  165. data/test/test/ephemeris.rb +127 -0
  166. data/test/test/googlecalendar.rb +167 -0
  167. data/test/test/icalendar.rb +848 -0
  168. data/test/test/inspect.rb +115 -0
  169. data/test/test/parts.rb +480 -0
  170. data/test/test/region/chinese.rb +161 -0
  171. data/test/test/region/french.rb +33 -0
  172. data/test/test/region/geologicalage.rb +14 -0
  173. data/test/test/region/indian.rb +55 -0
  174. data/test/test/region/iran.rb +54 -0
  175. data/test/test/region/islamic.rb +18 -0
  176. data/test/test/region/japanese.rb +62 -0
  177. data/test/test/region/jewish.rb +61 -0
  178. data/test/test/region/m17n.rb +181 -0
  179. data/test/test/region/mayan.rb +78 -0
  180. data/test/test/region/moon.rb +14 -0
  181. data/test/test/region/planets.rb +14 -0
  182. data/test/test/region/residue.rb +123 -0
  183. data/test/test/region/sun.rb +14 -0
  184. data/test/test/region/thai.rb +94 -0
  185. data/test/test/region/tibetan.rb +30 -0
  186. data/test/test/tmobjects.rb +356 -57
  187. data/test/test/tmposition.rb +237 -0
  188. data/test/test/tmreference.rb +95 -0
  189. data/when_exe.gemspec +2 -2
  190. metadata +187 -7
  191. data/doc/COPYING +0 -31
  192. data/doc/COPYING.ja +0 -25
  193. data/doc/document_url +0 -1
@@ -0,0 +1,167 @@
1
+ # -*- coding: utf-8 -*-
2
+ =begin
3
+ Copyright (C) 2012-2013 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
10
+
11
+ class GoogleCalendar < Test::Unit::TestCase
12
+
13
+ config = ::When.config
14
+ ACCOUNT, PASSWORD = config['@'] if config.key?('@')
15
+
16
+ PUBLIC_FEED = "http://www.google.com/calendar/feeds/%s__%s%%40holiday.calendar.google.com/public/full"
17
+ PRIVATE_FEED = "http://www.google.com/calendar/feeds/%s%%40gmail.com/private/full"
18
+ YEAR = "1949"
19
+ RULE0 = <<RULE0
20
+ DTSTART;VALUE=DATE:19490101
21
+ DTEND;VALUE=DATE:19490102
22
+ RRULE:FREQ=YEARLY
23
+ RULE0
24
+ RULE1 = <<RULE1
25
+ RRULE:FREQ=YEARLY
26
+ DTSTART;TZID=America/New_York:#{YEAR}0321T120000
27
+ DTEND;TZID=America/New_York:#{YEAR}0322T130000
28
+ RULE1
29
+ RECURRENCE = <<RECURRENCE
30
+ DTSTART;TZID=America/New_York:#{YEAR}0321T120000
31
+ DTEND;TZID=America/New_York:#{YEAR}0322T130000
32
+ RRULE:FREQ=YEARLY
33
+ BEGIN:VTIMEZONE
34
+ TZID:America/New_York
35
+ X-LIC-LOCATION:America/New_York
36
+ BEGIN:DAYLIGHT
37
+ TZOFFSETFROM:-0500
38
+ TZOFFSETTO:-0400
39
+ TZNAME:EDT
40
+ DTSTART:19700308T020000
41
+ RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU
42
+ END:DAYLIGHT
43
+ BEGIN:STANDARD
44
+ TZOFFSETFROM:-0400
45
+ TZOFFSETTO:-0500
46
+ TZNAME:EST
47
+ DTSTART:19701101T020000
48
+ RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU
49
+ END:STANDARD
50
+ END:VTIMEZONE
51
+ RECURRENCE
52
+
53
+ HOLIDAYS = [
54
+ ["元日", "2012-01-01T00:00:00.00+09:00", "2012-01-02T00:00:00.00+09:00"],
55
+ ["成人の日", "2012-01-09T00:00:00.00+09:00", "2012-01-10T00:00:00.00+09:00"],
56
+ ["建国記念の日", "2012-02-11T00:00:00.00+09:00", "2012-02-12T00:00:00.00+09:00"],
57
+ ["昭和の日", "2012-04-29T00:00:00.00+09:00", "2012-04-30T00:00:00.00+09:00"],
58
+ # ["振替休日", "2012-04-30T00:00:00.00+09:00", "2012-05-01T00:00:00.00+09:00"],
59
+ ["憲法記念日", "2012-05-03T00:00:00.00+09:00", "2012-05-04T00:00:00.00+09:00"],
60
+ ["みどりの日", "2012-05-04T00:00:00.00+09:00", "2012-05-05T00:00:00.00+09:00"],
61
+ ["こどもの日", "2012-05-05T00:00:00.00+09:00", "2012-05-06T00:00:00.00+09:00"],
62
+ ["海の日", "2012-07-16T00:00:00.00+09:00", "2012-07-17T00:00:00.00+09:00"],
63
+ ["敬老の日", "2012-09-17T00:00:00.00+09:00", "2012-09-18T00:00:00.00+09:00"],
64
+ # ["秋分の日", "2012-09-22T00:00:00.00+09:00", "2012-09-23T00:00:00.00+09:00"],
65
+ ["体育の日", "2012-10-08T00:00:00.00+09:00", "2012-10-09T00:00:00.00+09:00"],
66
+ ["文化の日", "2012-11-03T00:00:00.00+09:00", "2012-11-04T00:00:00.00+09:00"],
67
+ ["勤労感謝の日", "2012-11-23T00:00:00.00+09:00", "2012-11-24T00:00:00.00+09:00"],
68
+ ["天皇誕生日", "2012-12-23T00:00:00.00+09:00", "2012-12-24T00:00:00.00+09:00"],
69
+ # ["振替休日", "2012-12-24T00:00:00.00+09:00", "2012-12-25T00:00:00.00+09:00"]
70
+ ]
71
+
72
+ WEEKLY_EVENTS = [
73
+ "2012-03-08T08:30:00+09:00...2012-03-08T09:30:00+09:00",
74
+ "2012-03-15T08:30:00+09:00...2012-03-15T09:30:00+09:00",
75
+ "2012-03-22T08:30:00+09:00...2012-03-22T09:30:00+09:00",
76
+ "2012-03-29T08:30:00+09:00...2012-03-29T09:30:00+09:00"
77
+ ]
78
+
79
+ def get_cal(feed)
80
+ ::GoogleCalendar::Calendar::new(::GoogleCalendar::Service.new("#{ACCOUNT}@gmail.com", PASSWORD), feed)
81
+ end
82
+
83
+ def test_nothing
84
+ end
85
+
86
+ if const_defined?(:PASSWORD) && Object.const_defined?(:GoogleCalendar)
87
+ def test__to_vevent
88
+ holidays = HOLIDAYS.dup
89
+ gcal = get_cal(PUBLIC_FEED % ['japanese', 'ja'])
90
+ gcal.events({'start-min'=>'2012-01-01', 'start-max'=>'2013-01-01',
91
+ 'orderby'=>'starttime', 'sortorder'=>'a' # a:asend, d:desend
92
+ }).each do |event|
93
+ vevent = event.to_vevent
94
+ assert_equal(holidays.shift, [vevent.summary, vevent.dtstart.to_s, vevent.dtend.to_s])
95
+ # puts event.xml
96
+ end
97
+ assert_equal(0, holidays.size)
98
+ end
99
+
100
+ def test__to_gcalevent
101
+ gcal = get_cal(PRIVATE_FEED % ACCOUNT)
102
+ period = {'start-min'=>'2001-01-01', 'start-max'=>'2001-01-31'}
103
+ gcal.events(period).each do |event|
104
+ event.destroy
105
+ end
106
+ event = When.Resource("examples/JapanHolidays.ics::Ganjitsu").to_gcalevent(gcal)
107
+ event.save!
108
+ holidays = [RULE0]
109
+ gcal.events(period).each do |event|
110
+ assert_equal(holidays.shift, event.recurrence)
111
+ end
112
+ assert_equal(0, holidays.size)
113
+ end
114
+
115
+ def test__enum_for
116
+ holidays = HOLIDAYS.dup
117
+ gcal = get_cal(PUBLIC_FEED % ['japanese', 'ja'])
118
+ gcal.enum_for({'start-min'=>'2012-01-01', 'start-max'=>'2013-01-01'}).each do |date|
119
+ sample = holidays.shift
120
+ assert_equal(sample[1] + '...' + sample[2], date.to_s)
121
+ end
122
+ assert_equal(0, holidays.size)
123
+ end
124
+
125
+ =begin
126
+ def test__eprivate_events_1
127
+ weekly_events = WEEKLY_EVENTS.dup
128
+ gcal = get_cal(PRIVATE_FEED % ACCOUNT)
129
+ period = {'start-min'=>'2012-03-01', 'start-max'=>'2012-03-31'}
130
+
131
+ assert_equal(["canceled","confirmed"], gcal.events(period).map {|event| event.event_status})
132
+ gcal.enum_for(period).each do |date|
133
+ assert_equal(weekly_events.shift, date.to_s)
134
+ end
135
+ assert_equal(0, weekly_events.size)
136
+ end
137
+
138
+ def test__private_events_2
139
+ gcal = get_cal(PRIVATE_FEED % ACCOUNT)
140
+ period = {'start-min'=>YEAR + '-03-01', 'start-max'=>YEAR + '-03-31'}
141
+
142
+ gcal.events(period).each do |event|
143
+ event.destroy
144
+ end
145
+
146
+ new_event = gcal.create_event
147
+ new_event.title = "Test Event"
148
+ new_event.desc = "Test Event Description"
149
+ new_event.where = "America/New_York"
150
+ #new_event.st = Time.mktime(YEAR.to_i, 3, 21, 12, 0, 0)
151
+ #new_event.en = Time.mktime(YEAR.to_i, 3, 22, 13, 0, 0)
152
+ new_event.recurrence = RULE1
153
+ new_event.save!
154
+
155
+ gcal.events(period).each do |event|
156
+ assert_equal([new_event.title, new_event.desc, new_event.where, RECURRENCE],
157
+ [event.title, event.desc, event.where, event.recurrence])
158
+ end
159
+ new_event.destroy
160
+ end
161
+ =end
162
+ else
163
+ puts "Tests for GoogleCalendar have been skipped at line #{__LINE__} of #{__FILE__.split(/\//)[-1]}."
164
+ end
165
+ end
166
+ end
167
+
@@ -0,0 +1,848 @@
1
+ # -*- coding: utf-8 -*-
2
+ =begin
3
+ Copyright (C) 2011-2012 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
+ end
85
+
86
+ class Event < Test::Unit::TestCase
87
+ def test__event
88
+ When::TM::Clock.local_time = When.Clock("+0900")
89
+ event = When::V::Event.new({
90
+ 'rrule' => {'FREQ'=>'MONTHLY', 'INTERVAL'=>12, 'BYDAY'=>{''=>'2MO'}},
91
+ 'dtstart' => 'VALUE=DATE:20070108'
92
+ })
93
+ sample = [
94
+ "2007-01-08",
95
+ "2008-01-14",
96
+ "2009-01-12",
97
+ "2010-01-11",
98
+ "2011-01-10",
99
+ "2012-01-09",
100
+ "2013-01-14",
101
+ "2014-01-13",
102
+ "2015-01-12",
103
+ "2016-01-11"
104
+ ]
105
+ event.enum_for(When.when?('20070101'), :forward, 10).each do |date|
106
+ assert_equal(sample.shift, date.to_s)
107
+ end
108
+ assert_equal([], sample)
109
+
110
+ sample = [
111
+ "2007-01-08",
112
+ "2007-01-15",
113
+ "2007-01-22",
114
+ "2007-01-29",
115
+ "2007-02-05",
116
+ "2007-02-12",
117
+ "2007-02-19",
118
+ "2007-02-26",
119
+ "2007-03-05",
120
+ "2007-03-12"
121
+ ]
122
+ event = When::V::Event.new({
123
+ 'rrule' => {'FREQ'=>'P1W'},
124
+ 'dtstart' => 'VALUE=DATE:20070108'
125
+ })
126
+ event.enum_for(When.when?('20070101'), :forward, 10).each do |date|
127
+ assert_equal(sample.shift, date.to_s)
128
+ end
129
+ assert_equal([], sample)
130
+ end
131
+
132
+ def test__last_work_days # See RFC 5545 [Page 43]
133
+ sample = [
134
+ "2011-01-28",
135
+ "2011-01-31",
136
+ "2011-02-25",
137
+ "2011-02-28",
138
+ "2011-03-30",
139
+ "2011-03-31",
140
+ ]
141
+ event = When::V::Event.new({
142
+ 'rrule' => 'FREQ=MONTHLY;BYDAY=MO,TU,WE,TH,FR;BYSETPOS=-1,-2',
143
+ 'dtstart' => 'VALUE=DATE:20010101'
144
+ })
145
+ event.enum_for(When.when?('20110101'), :forward, 6).each do |date|
146
+ assert_equal(sample.shift, date.to_s)
147
+ end
148
+ assert_equal([], sample)
149
+ end
150
+
151
+ def test__ignored_invalid_date
152
+ When.Resource("examples/USA-DST.ics?!C=New_York&!Z=E&!D=04&!DZ=06&!S=05&!SZ=07")
153
+ assert_equal("2007-03-30T09:00:00-04:00", When.when?('TZID=America/New_York:2007-03-30T09:00:00').to_s)
154
+ sample = [
155
+ "2007-01-15T09:00:00-05:00",
156
+ "2007-01-30T09:00:00-05:00",
157
+ "2007-02-15T09:00:00-05:00",
158
+ "2007-03-15T09:00:00-04:00",
159
+ "2007-03-30T09:00:00-04:00",
160
+ ]
161
+ When::V::Event.new({
162
+ 'rrule' => 'FREQ=MONTHLY;BYMONTHDAY=15,30;COUNT=5',
163
+ 'dtstart' => 'TZID=America/New_York:20070115T090000'
164
+ }).each do |date|
165
+ assert_equal(sample.shift, date.to_s)
166
+ break if sample == []
167
+ end
168
+ end
169
+
170
+ if Object.const_defined?(:TZInfo)
171
+ def test__ignored_invalid_date_chicago
172
+ assert_equal("2007-03-30T09:00:00-05:00", When.when?('TZID=America/Chicago:2007-03-30T09:00:00').to_s)
173
+ sample = [
174
+ "2007-01-15T09:00:00-06:00",
175
+ "2007-01-30T09:00:00-06:00",
176
+ "2007-02-15T09:00:00-06:00",
177
+ "2007-03-15T09:00:00-05:00",
178
+ "2007-03-30T09:00:00-05:00",
179
+ ]
180
+ When::V::Event.new({
181
+ 'rrule' => 'FREQ=MONTHLY;BYMONTHDAY=15,30;COUNT=5',
182
+ 'dtstart' => 'TZID=America/Chicago:20070115T090000'
183
+ }).each do |date|
184
+ assert_equal(sample.shift, date.to_s)
185
+ break if sample == []
186
+ end
187
+ end
188
+ else
189
+ puts "Tests for TZInfo have been skipped at line #{__LINE__} of #{__FILE__.split(/\//)[-1]}."
190
+ end
191
+
192
+ def test__multiple_BYxxx_rule # See RFC 5545 [Page 45]
193
+ When.Resource("examples/USA-DST.ics?!C=New_York&!Z=E&!D=04&!DZ=06&!S=05&!SZ=07")
194
+
195
+ sample = [
196
+ "1997-04-13T01:30:00-04:00",
197
+ "1997-04-13T02:30:00-04:00",
198
+ "1997-04-13T03:30:00-04:00",
199
+ "1998-04-12T01:30:00-04:00",
200
+ ]
201
+ When::V::Event.new({
202
+ 'rrule' => 'FREQ=YEARLY;BYMONTH=4;BYDAY=2SU;BYHOUR=1,2,3;BYMINUTE=30',
203
+ 'dtstart' => 'TZID=America/New_York:19970413T013000'
204
+ }).each do |date|
205
+ assert_equal(sample.shift, date.to_s)
206
+ break if sample == []
207
+ end
208
+
209
+ sample = [
210
+ "1997-04-06T01:30:00-05:00",
211
+ "1997-04-06T03:30:00-04:00",
212
+ "1997-04-06T04:30:00-04:00",
213
+ "1998-04-05T01:30:00-05:00",
214
+ ]
215
+ When::V::Event.new({
216
+ 'rrule' => 'FREQ=YEARLY;BYMONTH=4;BYDAY=1SU;BYHOUR=1,2,3,4;BYMINUTE=30',
217
+ 'dtstart' => 'TZID=America/New_York:19970406T013000'
218
+ }).each do |date|
219
+ assert_equal(sample.shift, date.to_s)
220
+ break if sample == []
221
+ end
222
+
223
+ sample = [
224
+ "1997-10-26T01:30:00-04:00",
225
+ "1997-10-26T02:30:00-04:00",
226
+ "1997-10-26T02:30:00-05:00",
227
+ "1997-10-26T03:30:00-05:00",
228
+ "1998-10-25T01:30:00-04:00",
229
+ ]
230
+ When::V::Event.new({
231
+ 'rrule' => 'FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU;BYHOUR=1,2,2=,3;BYMINUTE=30',
232
+ 'dtstart' => 'TZID=America/New_York:19971026T013000'
233
+ }).each do |date|
234
+ assert_equal(sample.shift, date.to_s)
235
+ break if sample == []
236
+ end
237
+
238
+ sample = [
239
+ "1997-10-19T01:30:00-04:00",
240
+ "1997-10-19T02:30:00-04:00",
241
+ "1998-10-18T01:30:00-04:00",
242
+ ]
243
+ When::V::Event.new({
244
+ 'rrule' => 'FREQ=YEARLY;BYMONTH=10;BYDAY=-2SU;BYHOUR=1,2,2=;BYMINUTE=30',
245
+ 'dtstart' => 'TZID=America/New_York:19971019T013000'
246
+ }).each do |date|
247
+ assert_equal(sample.shift, date.to_s)
248
+ break if sample == []
249
+ end
250
+ end
251
+
252
+ if Object.const_defined?(:TZInfo)
253
+ def test__multiple_BYxxx_rule_chicago # See RFC 5545 [Page 45]
254
+ sample = [
255
+ "1997-04-13T01:30:00-05:00",
256
+ "1997-04-13T02:30:00-05:00",
257
+ "1997-04-13T03:30:00-05:00",
258
+ "1998-04-12T01:30:00-05:00",
259
+ ]
260
+ When::V::Event.new({
261
+ 'rrule' => 'FREQ=YEARLY;BYMONTH=4;BYDAY=2SU;BYHOUR=1,2,3;BYMINUTE=30',
262
+ 'dtstart' => 'TZID=America/Chicago:19970413T013000'
263
+ }).each do |date|
264
+ assert_equal(sample.shift, date.to_s)
265
+ break if sample == []
266
+ end
267
+
268
+ sample = [
269
+ "1997-04-06T01:30:00-06:00",
270
+ "1997-04-06T02:30:00-06:00", # "1997-04-06T03:30:00-05:00", - TODO !!
271
+ "1997-04-06T04:30:00-05:00",
272
+ "1998-04-05T01:30:00-06:00",
273
+ ]
274
+ When::V::Event.new({
275
+ 'rrule' => 'FREQ=YEARLY;BYMONTH=4;BYDAY=1SU;BYHOUR=1,2,3,4;BYMINUTE=30',
276
+ 'dtstart' => 'TZID=America/Chicago:19970406T013000'
277
+ }).each do |date|
278
+ assert_equal(sample.shift, date.to_s)
279
+ break if sample == []
280
+ end
281
+
282
+ sample = [
283
+ "1997-10-26T01:30:00-05:00",
284
+ # "1997-10-26T02:30:00-05:00", - TODO !!
285
+ "1997-10-26T02:30:00-06:00",
286
+ "1997-10-26T03:30:00-06:00",
287
+ "1998-10-25T01:30:00-05:00",
288
+ ]
289
+ When::V::Event.new({
290
+ 'rrule' => 'FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU;BYHOUR=1,2,2=,3;BYMINUTE=30',
291
+ 'dtstart' => 'TZID=America/Chicago:19971026T013000'
292
+ }).each do |date|
293
+ assert_equal(sample.shift, date.to_s)
294
+ break if sample == []
295
+ end
296
+ sample = [
297
+ "1997-10-19T01:30:00-05:00",
298
+ "1997-10-19T02:30:00-05:00",
299
+ "1998-10-18T01:30:00-05:00",
300
+ ]
301
+ When::V::Event.new({
302
+ 'rrule' => 'FREQ=YEARLY;BYMONTH=10;BYDAY=-2SU;BYHOUR=1,2,2=;BYMINUTE=30',
303
+ 'dtstart' => 'TZID=America/Chicago:19971019T013000'
304
+ }).each do |date|
305
+ assert_equal(sample.shift, date.to_s)
306
+ break if sample == []
307
+ end
308
+ end
309
+ else
310
+ puts "Tests for TZInfo have been skipped at line #{__LINE__} of #{__FILE__.split(/\//)[-1]}."
311
+ end
312
+
313
+ def julian_easter(yy)
314
+ a = yy % 4
315
+ b = yy % 7
316
+ c = yy % 19
317
+ d = (19 * c + 15) % 30
318
+ e = (2 * a + 4 * b - d + 34) % 7
319
+ mm = (d + e + 114) / 31
320
+ dd = ((d + e + 114) % 31) + 1
321
+ [yy, mm, dd]
322
+ end
323
+
324
+ def gregorian_easter(yy)
325
+ a = yy % 19
326
+ b = yy / 100
327
+ c = yy % 100
328
+ d = b / 4
329
+ e = b % 4
330
+ f = (b + 8) / 25
331
+ g = (b - f + 1) / 3
332
+ h = (19 * a + b - d - g + 15) % 30
333
+ i = c / 4
334
+ k = c % 4
335
+ l = (32 + 2 * e + 2 * i - h - k) % 7
336
+ m = (a + 11 * h + 22 * l) / 451
337
+ mm = (h + l - 7 * m + 114) / 31
338
+ dd = ((h + l - 7 * m + 114) % 31) + 1
339
+ [yy, mm, dd]
340
+ end
341
+
342
+ def test__easter
343
+ jc = When.Resource('_c:Julian')
344
+ other = []
345
+ myself = []
346
+ 532.times do |yy|
347
+ y,m,d = julian_easter(yy+325)
348
+ other << jc._coordinates_to_number(y,m-1,d-1)
349
+ myself << jc.easter(yy+325)
350
+ end
351
+ assert_equal(other, myself)
352
+
353
+ gc = When.Resource('_c:Gregorian')
354
+ other = []
355
+ myself = []
356
+ 5700.times do |yy| # Should be 5_700_000
357
+ y,m,d = gregorian_easter(yy+1582)
358
+ other << gc._coordinates_to_number(y,m-1,d-1)
359
+ myself << gc.easter(yy+1582)
360
+ end
361
+ assert_equal(other, myself)
362
+
363
+ date = When.when?('2011').easter
364
+ assert_equal("2011-04-24", date.to_s)
365
+
366
+ sample = [
367
+ "2009-04-12",
368
+ # "2010-04-02",
369
+ "2011-04-22",
370
+ ]
371
+ event = When::V::Event.new({
372
+ 'rrule' => 'FREQ=YEARLY;INTERVAL=2;BYDAY/Christian=easter-2',
373
+ 'dtstart' => '20090412'
374
+ })
375
+ event.each do |date|
376
+ assert_equal(sample.shift, date.to_s)
377
+ break if sample == []
378
+ end
379
+
380
+ sample = [
381
+ "2011-04-22",
382
+ ]
383
+ event.enum_for(When.when?('20100101')).each do |date|
384
+ assert_equal(sample.shift, date.to_s)
385
+ break if sample == []
386
+ end
387
+
388
+ sample = [
389
+ "2009-04-12",
390
+ "2010-03-30",
391
+ "2011-04-17",
392
+ "2012-04-07"
393
+ ]
394
+ event = When::V::Event.new({
395
+ 'rrule' => 'FREQ=YEARLY;BYDAY/Christian?w=7=easter',
396
+ 'dtstart' => '20090412'
397
+ })
398
+ event.each do |date|
399
+ assert_equal(sample.shift, date.to_s)
400
+ break if sample == []
401
+ end
402
+
403
+ sample = [
404
+ "2009-12-25",
405
+ "2010-12-25",
406
+ "2011-12-25",
407
+ ]
408
+ When::V::Event.new({
409
+ 'rrule' => 'FREQ=YEARLY;BYDAY/Christian=christmas',
410
+ 'dtstart' => '20091225'
411
+ }).each do |date|
412
+ assert_equal(sample.shift, date.to_s)
413
+ break if sample == []
414
+ end
415
+ end
416
+
417
+ def test__terms
418
+
419
+ event = When::V::Event.new({
420
+ 'rrule' => 'FREQ=YEARLY;INTERVAL=2;BYDAY/SolarTerms=term180',
421
+ 'dtstart' => '20090922'
422
+ })
423
+ sample = [
424
+ "2011-09-23",
425
+ ]
426
+ event.enum_for(When.when?('20100101')).each do |date|
427
+ assert_equal(sample.shift, date.to_s)
428
+ break if sample == []
429
+ end
430
+
431
+ sample = [
432
+ "2009-09-22",
433
+ # "2010-09-22",
434
+ "2011-09-23",
435
+ ]
436
+ event.each do |date|
437
+ assert_equal(sample.shift, date.to_s)
438
+ break if sample == []
439
+ end
440
+ end
441
+ end
442
+
443
+ class Alarm < Test::Unit::TestCase
444
+ def test_nothing
445
+ end
446
+ end
447
+
448
+ class Todo < Test::Unit::TestCase
449
+ def test__todo
450
+ When::TM::Clock.local_time = When.Clock("+0900")
451
+ event = When::V::Todo.new({
452
+ 'rrule' => {'FREQ'=>'YEARLY', 'BYMONTH'=>1, 'BYDAY'=>{''=>'2MO'}},
453
+ 'due' => 'VALUE=DATE:20160111'
454
+ })
455
+ sample = [
456
+ "2011-01-10",
457
+ "2012-01-09",
458
+ "2013-01-14",
459
+ "2014-01-13",
460
+ "2015-01-12",
461
+ "2016-01-11"
462
+ ]
463
+ this_time = When.now.to_s
464
+ sample.shift while (sample[0] && sample[0] < this_time)
465
+ event.enum_for(When.when?('20070101'), :forward, 5).each do |date|
466
+ assert_equal(sample.shift, date.to_s)
467
+ end
468
+ assert_equal([], sample)
469
+ end
470
+ end
471
+
472
+ class Journal < Test::Unit::TestCase
473
+ def test_nothing
474
+ end
475
+ end
476
+
477
+ class Freebusy < Test::Unit::TestCase
478
+ def test__freebusy # RFC 5545 [Page 101]
479
+ sample = [
480
+ "1997-03-08T16:00:00Z...1997-03-08T19:00:00Z",
481
+ "1997-03-08T20:00:00Z...1997-03-08T21:00:00Z"
482
+ ]
483
+ When::V::Freebusy.new({'freebusy'=>'FBTYPE=FREE:19970308T160000Z/PT3H,19970308T200000Z/PT1H'}).each do |period|
484
+ assert_equal([sample.shift, 'FREE'], [period.to_s, period.query['FBTYPE']])
485
+ end
486
+ assert_equal([], sample)
487
+ end
488
+ end
489
+
490
+ class TimezoneProperty < Test::Unit::TestCase
491
+ def test__tz_change
492
+ ic = When.Resource("examples/USA-DST.ics?!C=New_York&!Z=E&!D=04&!DZ=06&!S=05&!SZ=07")
493
+ tz = When::V::Timezone["America/New_York"]
494
+ gc = When.Resource('_c:Gregorian')
495
+ [
496
+ ["1997-04-06T01:59:59", "1997-04-06T01:59:59-05:00"],
497
+ ["1997-04-06T02:00:00", "1997-04-06T02:00:00-04:00"],
498
+ ["1997-04-06T03:00:00", "1997-04-06T03:00:00-04:00"],
499
+ ["1997-10-26T01:59:00", "1997-10-26T01:59:00-04:00"],
500
+ ["1997-10-26T02:00:00", "1997-10-26T02:00:00-04:00"],
501
+ ["1997-10-26T02:59:59", "1997-10-26T02:59:59-04:00"],
502
+ ["1997-10-26T02=00:00", "1997-10-26T02:00:00-05:00"],
503
+ ["1997-10-26T02=59:59", "1997-10-26T02:59:59-05:00"],
504
+ ["1997-10-26T03:00:00", "1997-10-26T03:00:00-05:00"]
505
+ ].each do |sample|
506
+ assert_equal(sample[1], When.when?(sample[0], {:clock=>tz}).to_s)
507
+ end
508
+
509
+ [
510
+ ["19970406T010000-0500", "1997-04-06T01:00:00-05:00"],
511
+ ["19970406T015959-0500", "1997-04-06T01:59:59-05:00"],
512
+ ["19970406T020000-0500", "1997-04-06T03:00:00-04:00"],
513
+ ["19970406T030000-0500", "1997-04-06T04:00:00-04:00"],
514
+ ["19971026T015959-0400", "1997-10-26T01:59:59-04:00"],
515
+ ["19971026T020000-0400", "1997-10-26T02:00:00-04:00"],
516
+ ["19971026T025959-0400", "1997-10-26T02:59:59-04:00"],
517
+ ["19971026T030000-0400", "1997-10-26T02:00:00-05:00"],
518
+ ["19971026T040000-0400", "1997-10-26T03:00:00-05:00"],
519
+ ].each do |sample|
520
+ sdate = When.when?(sample[0])
521
+ ddate = gc.jul_trans(sdate, {:clock=>tz})
522
+ assert_equal(sample[1], ddate.to_s)
523
+ end
524
+ end
525
+
526
+ if Object.const_defined?(:TZInfo)
527
+ def test__tz_change_chicago
528
+ tz = When::Parts::Timezone["America/Chicago"]
529
+ gc = When.Resource('_c:Gregorian')
530
+ [
531
+ ["19970406T010000-0600", "1997-04-06T01:00:00-06:00"],
532
+ ["19970406T015959-0600", "1997-04-06T01:59:59-06:00"],
533
+ ["19970406T020000-0600", "1997-04-06T03:00:00-05:00"],
534
+ ["19970406T030000-0600", "1997-04-06T04:00:00-05:00"],
535
+ ["19971026T015959-0500", "1997-10-26T01:59:59-05:00"],
536
+ ["19971026T020000-0500", "1997-10-26T02:00:00-05:00"],
537
+ ["19971026T025959-0500", "1997-10-26T02:59:59-05:00"],
538
+ ["19971026T030000-0500", "1997-10-26T02:00:00-06:00"],
539
+ ["19971026T040000-0500", "1997-10-26T03:00:00-06:00"],
540
+ ].each do |sample|
541
+ sdate = When.when?(sample[0])
542
+ ddate = gc.jul_trans(sdate, {:clock=>tz})
543
+ assert_equal(sample[1], ddate.to_s)
544
+ end
545
+
546
+ [
547
+ ["1997-04-06T01:59:59", "1997-04-06T01:59:59-06:00"],
548
+ ["1997-04-06T02:00:00", "1997-04-06T02:00:00-05:00"],
549
+ ["1997-04-06T03:00:00", "1997-04-06T03:00:00-05:00"],
550
+ ["1997-10-26T01:59:00", "1997-10-26T01:59:00-05:00"],
551
+ ["1997-10-26T02:00:00", "1997-10-26T02:00:00-06:00"], # "1997-10-26T02:00:00-05:00" - TODO !!
552
+ ["1997-10-26T02:59:59", "1997-10-26T02:59:59-06:00"], # "1997-10-26T02:59:59-05:00" - TODO !!
553
+ ["1997-10-26T02=00:00", "1997-10-26T02:00:00-06:00"],
554
+ ["1997-10-26T02=59:59", "1997-10-26T02:59:59-06:00"],
555
+ ["1997-10-26T03:00:00", "1997-10-26T03:00:00-06:00"]
556
+ ].each do |sample|
557
+ assert_equal(sample[1], When.when?(sample[0], {:clock=>tz}).to_s)
558
+ end
559
+ end
560
+ else
561
+ puts "Tests for TZInfo have been skipped at line #{__LINE__} of #{__FILE__.split(/\//)[-1]}."
562
+ end
563
+
564
+ def test__date_change
565
+ ic = When.Resource("examples/Millennium.ics")
566
+ tz = When::V::Timezone["Oceania/Millennium_Island"]
567
+ gc = When.Resource('_c:Gregorian')
568
+ [
569
+ ["1994-12-30T23:59:59", "1994-12-30T23:59:59-10:00"],
570
+ ["1995-01-01T00:00:00", "1995-01-01T00:00:00+14:00"]
571
+ ].each do |sample|
572
+ assert_equal(sample[1], When.when?(sample[0], {:clock=>tz}).to_s)
573
+ end
574
+ [
575
+ ["19941230T235959-1000", "1994-12-30T23:59:59-10:00"],
576
+ ["19941231T000000-1000", "1995-01-01T00:00:00+14:00"],
577
+ ].each do |sample|
578
+ sdate = When.when?(sample[0])
579
+ ddate = gc.jul_trans(sdate, {:clock=>tz})
580
+ assert_equal(sample[1], ddate.to_s)
581
+ end
582
+ end
583
+
584
+ def test__tzname
585
+ ic = When.Resource("examples/USA-DST.ics?!C=New_York&!Z=E&!D=04&!DZ=06&!S=05&!SZ=07")
586
+ date = When.when?('20110126T250000EST')
587
+ assert_equal(["2011-01-27T01:00:00-05:00", "Thu Jan 27 01:00:00 -0500 2011", "EST"],
588
+ [date.to_s, date.strftime('%+'), date.clk_time.frame.tzname[0]])
589
+
590
+ When::TM::Clock.local_time = When::V::Timezone["America/New_York"]
591
+
592
+ date = When.when?('20110526T250000')
593
+ assert_equal(["2011-05-27T01:00:00-04:00", "Fri May 27 01:00:00 -0400 2011", "EDT"],
594
+ [date.to_s, date.strftime('%+'), date.clk_time.frame.tzname[0]])
595
+ end
596
+ end
597
+
598
+ class Standard < Test::Unit::TestCase
599
+ def test_nothing
600
+ end
601
+ end
602
+
603
+ class Daylight < Test::Unit::TestCase
604
+ def test_nothing
605
+ end
606
+ end
607
+
608
+ class Timezone < Test::Unit::TestCase
609
+ def test__neighbor_event_date
610
+ When.Resource("examples/USA-DST.ics?!C=New_York&!Z=E&!D=04&!DZ=06&!S=05&!SZ=07")
611
+ tz = When::V::Timezone["America/New_York"]
612
+ eval('class When::V::Timezone ; public :_neighbor_event_date ; end')
613
+ assert_equal("1997-04-06T02:00:00-05:00", tz._neighbor_event_date(When.when?("19970510")).to_s)
614
+ assert_equal("1997-10-26T02:00:00-04:00", tz._neighbor_event_date(When.when?("19971010")).to_s)
615
+ eval('class When::V::Timezone ; private :_neighbor_event_date ; end')
616
+ end
617
+
618
+ def test__current_period
619
+ When.Resource("examples/USA-DST.ics?!C=New_York&!Z=E&!D=04&!DZ=06&!S=05&!SZ=07")
620
+ tz = When::V::Timezone["America/New_York"]
621
+ assert_equal("1997-04-06T02:00:00-05:00...1997-10-26T02:00:00-04:00", tz.current_period(When.when?("19970510")).to_s)
622
+ assert_equal("1997-04-06T02:00:00-05:00...1997-10-26T02:00:00-04:00", tz.current_period(When.when?("19971010")).to_s)
623
+ end
624
+
625
+ if Object.const_defined?(:TZInfo)
626
+ def test__tz_info
627
+ assert_equal("1997-05-10T06:00-05:00", When.when?("TZID=America/Chicago:19970510T0600").to_s)
628
+ end
629
+ else
630
+ puts "Tests for TZInfo have been skipped at line #{__LINE__} of #{__FILE__.split(/\//)[-1]}."
631
+ end
632
+ end
633
+
634
+ class Event
635
+
636
+ def test__each_1
637
+ When.Resource("examples/USA-DST.ics?!C=New_York&!Z=E&!D=04&!DZ=06&!S=05&!SZ=07")
638
+ cal = When.Resource("examples/Test.ics")
639
+
640
+ event1 = When.Resource("examples/Test.ics::event1-ID")
641
+ sample = [
642
+ "2008-09-15T+09:00",
643
+ "2009-09-21T+09:00",
644
+ "2010-09-20T+09:00",
645
+ "2011-09-19T+09:00",
646
+ "2012-09-17T+09:00",
647
+ "2013-09-16T+09:00",
648
+ "2014-09-15T+09:00",
649
+ "2015-09-21T+09:00",
650
+ "2016-09-19T+09:00",
651
+ ]
652
+ event1.enum_for(When.when?('20080101'), :forward, 9).each do |date|
653
+ assert_equal(sample.shift, date.to_s)
654
+ end
655
+ assert_equal([], sample)
656
+
657
+ sample = [
658
+ "2010-09-20T+09:00",
659
+ "2011-09-19T+09:00",
660
+ "2012-09-17T+09:00",
661
+ "2013-09-16T+09:00",
662
+ ]
663
+ event1.enum_for(When.when?('20100101'), :forward, 4).each do |date|
664
+ assert_equal(sample.shift, date.to_s)
665
+ end
666
+ assert_equal([], sample)
667
+ end
668
+
669
+ def test__each_2
670
+ When.Resource("examples/USA-DST.ics?!C=New_York&!Z=E&!D=04&!DZ=06&!S=05&!SZ=07")
671
+ cal = When.Resource("examples/Test.ics")
672
+
673
+ event2 = cal["event2-ID"]
674
+ sample = [
675
+ "2010-09-20T+09:00",
676
+ "2011-05-13T+09:00",
677
+ "2011-09-19T+09:00",
678
+ "2012-01-13T+09:00",
679
+ "2012-04-13T+09:00",
680
+ "2012-07-13T+09:00",
681
+ "2012-09-17T+09:00",
682
+ "2013-09-13T+09:00",
683
+ "2013-09-16T+09:00",
684
+ "2013-12-13T+09:00",
685
+ ]
686
+ event2.enum_for(When.when?('20100101'), :forward, 10, {'1st'=>'DontCare'}).each do |date|
687
+ assert_equal(sample.shift, date.to_s)
688
+ end
689
+ assert_equal([], sample)
690
+ end
691
+
692
+ def test__each_3
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
+ event3 = cal["event3-ID"]
697
+ sample = [
698
+ "1997-09-02T09:00:00-04:00",
699
+ "1997-09-02T09:20:00-04:00",
700
+ "1997-09-02T09:40:00-04:00",
701
+ "1997-09-02T10:00:00-04:00",
702
+ "1997-09-02T10:20:00-04:00",
703
+ "1997-09-02T10:40:00-04:00",
704
+ "1997-09-02T11:00:00-04:00",
705
+ "1997-09-02T11:20:00-04:00",
706
+ "1997-09-02T11:40:00-04:00",
707
+ "1997-09-02T12:00:00-04:00",
708
+ "1997-09-02T12:20:00-04:00",
709
+ "1997-09-02T12:40:00-04:00",
710
+ "1997-09-02T13:00:00-04:00",
711
+ "1997-09-02T13:20:00-04:00",
712
+ "1997-09-02T13:40:00-04:00",
713
+ "1997-09-02T14:00:00-04:00",
714
+ "1997-09-02T14:20:00-04:00",
715
+ "1997-09-02T14:40:00-04:00",
716
+ "1997-09-02T15:00:00-04:00",
717
+ "1997-09-02T15:20:00-04:00",
718
+ "1997-09-02T15:40:00-04:00",
719
+ "1997-09-02T16:00:00-04:00",
720
+ "1997-09-02T16:20:00-04:00",
721
+ "1997-09-02T16:40:00-04:00",
722
+ "1997-09-03T09:00:00-04:00",
723
+ "1997-09-03T09:20:00-04:00",
724
+ "1997-09-03T09:40:00-04:00",
725
+ "1997-09-03T10:00:00-04:00",
726
+ "1997-09-03T10:20:00-04:00",
727
+ "1997-09-03T10:40:00-04:00",
728
+ ]
729
+ event3.enum_for(When.when?('19970902T090000'), :forward, 30).each do |date|
730
+ assert_equal(sample.shift, date.to_s)
731
+ end
732
+ assert_equal([], sample)
733
+
734
+ sample = [
735
+ "1997-09-04T13:00:00-04:00",
736
+ "1997-09-04T12:40:00-04:00",
737
+ "1997-09-04T12:20:00-04:00",
738
+ "1997-09-04T12:00:00-04:00",
739
+ "1997-09-04T11:40:00-04:00",
740
+ "1997-09-04T11:20:00-04:00",
741
+ "1997-09-04T11:00:00-04:00",
742
+ "1997-09-04T10:40:00-04:00",
743
+ "1997-09-04T10:20:00-04:00",
744
+ "1997-09-04T10:00:00-04:00",
745
+ ]
746
+ event3.enum_for(When.when?('19970904T170000'), :reverse, 10, {'1st'=>'DontCare'}).each do |date|
747
+ assert_equal(sample.shift, date.to_s)
748
+ end
749
+ assert_equal([], sample)
750
+
751
+ sample = [
752
+ "1997-09-04T16:40:00-04:00",
753
+ "1997-09-04T16:20:00-04:00",
754
+ "1997-09-04T16:00:00-04:00",
755
+ ]
756
+ event3.enum_for(When.when?('TZID=America/New_York:19970904T170000'), :reverse, 3, {'1st'=>'Exclude'}).each do |date|
757
+ assert_equal(sample.shift, date.to_s)
758
+ end
759
+ assert_equal([], sample)
760
+ end
761
+
762
+ def test__each_4
763
+ When.Resource("examples/USA-DST.ics?!C=New_York&!Z=E&!D=04&!DZ=06&!S=05&!SZ=07")
764
+ cal = When.Resource("examples/Test.ics")
765
+
766
+ event4 = cal["event4-ID"]
767
+ sample = [
768
+ "1997-09-02T09:00:00-04:00",
769
+ "1997-09-02T09:00:10-04:00",
770
+ "1997-09-02T09:20:00-04:00",
771
+ "1997-09-02T09:40:00-04:00",
772
+ "1997-09-02T10:00:00-04:00",
773
+ "1997-09-02T10:20:00-04:00",
774
+ "1997-09-02T10:40:00-04:00",
775
+ "1997-09-02T11:00:00-04:00",
776
+ "1997-09-02T11:20:00-04:00",
777
+ "1997-09-02T11:40:00-04:00",
778
+ "1997-09-02T12:20:00-04:00",
779
+ ]
780
+ event4.enum_for(When.when?('19970902T090000'), :forward, 11).each do |date|
781
+ assert_equal(sample.shift, date.to_s)
782
+ end
783
+ assert_equal([], sample)
784
+ end
785
+
786
+ class Enumerator < Test::Unit::TestCase
787
+
788
+ def test_nothing
789
+ end
790
+
791
+ class Step < Test::Unit::TestCase
792
+ def test_nothing
793
+ end
794
+ end
795
+
796
+ class Logic < Test::Unit::TestCase
797
+
798
+ def test_nothing
799
+ end
800
+
801
+ class Enumerator < Test::Unit::TestCase
802
+ def test_nothing
803
+ end
804
+ end
805
+
806
+ class Month < Test::Unit::TestCase
807
+ def test_nothing
808
+ end
809
+ end
810
+
811
+ class Weekno < Test::Unit::TestCase
812
+ def test_nothing
813
+ end
814
+ end
815
+
816
+ class Yearday < Test::Unit::TestCase
817
+ def test_nothing
818
+ end
819
+ end
820
+
821
+ class Monthday < Test::Unit::TestCase
822
+ def test_nothing
823
+ end
824
+ end
825
+
826
+ class Weekday < Test::Unit::TestCase
827
+ def test_nothing
828
+ end
829
+ end
830
+
831
+ class Hour < Test::Unit::TestCase
832
+ def test_nothing
833
+ end
834
+ end
835
+
836
+ class Minute < Test::Unit::TestCase
837
+ def test_nothing
838
+ end
839
+ end
840
+
841
+ class Second < Test::Unit::TestCase
842
+ def test_nothing
843
+ end
844
+ end
845
+ end
846
+ end
847
+ end
848
+ end