when_exe 0.2.100 → 0.3.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (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