tilia-vobject 4.0.0.pre.alpha2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (193) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +19 -0
  3. data/.rubocop.yml +32 -0
  4. data/.simplecov +4 -0
  5. data/.travis.yml +3 -0
  6. data/CHANGELOG.sabre.md +626 -0
  7. data/CONTRIBUTING.md +25 -0
  8. data/Gemfile +17 -0
  9. data/Gemfile.lock +68 -0
  10. data/LICENSE +27 -0
  11. data/LICENSE.sabre +27 -0
  12. data/README.md +63 -0
  13. data/Rakefile +17 -0
  14. data/bin/vobject +7 -0
  15. data/lib/tilia/v_object/birthday_calendar_generator.rb +142 -0
  16. data/lib/tilia/v_object/cli.rb +582 -0
  17. data/lib/tilia/v_object/component/available.rb +107 -0
  18. data/lib/tilia/v_object/component/v_alarm.rb +114 -0
  19. data/lib/tilia/v_object/component/v_availability.rb +128 -0
  20. data/lib/tilia/v_object/component/v_calendar.rb +468 -0
  21. data/lib/tilia/v_object/component/v_card.rb +457 -0
  22. data/lib/tilia/v_object/component/v_event.rb +127 -0
  23. data/lib/tilia/v_object/component/v_free_busy.rb +81 -0
  24. data/lib/tilia/v_object/component/v_journal.rb +75 -0
  25. data/lib/tilia/v_object/component/v_time_zone.rb +51 -0
  26. data/lib/tilia/v_object/component/v_todo.rb +147 -0
  27. data/lib/tilia/v_object/component.rb +591 -0
  28. data/lib/tilia/v_object/date_time_parser.rb +486 -0
  29. data/lib/tilia/v_object/document.rb +218 -0
  30. data/lib/tilia/v_object/element_list.rb +18 -0
  31. data/lib/tilia/v_object/eof_exception.rb +8 -0
  32. data/lib/tilia/v_object/free_busy_data.rb +149 -0
  33. data/lib/tilia/v_object/free_busy_generator.rb +465 -0
  34. data/lib/tilia/v_object/i_tip/broker.rb +909 -0
  35. data/lib/tilia/v_object/i_tip/i_tip_exception.rb +9 -0
  36. data/lib/tilia/v_object/i_tip/message.rb +109 -0
  37. data/lib/tilia/v_object/i_tip/same_organizer_for_all_components_exception.rb +13 -0
  38. data/lib/tilia/v_object/i_tip.rb +10 -0
  39. data/lib/tilia/v_object/node.rb +192 -0
  40. data/lib/tilia/v_object/parameter.rb +327 -0
  41. data/lib/tilia/v_object/parse_exception.rb +7 -0
  42. data/lib/tilia/v_object/parser/json.rb +149 -0
  43. data/lib/tilia/v_object/parser/mime_dir.rb +543 -0
  44. data/lib/tilia/v_object/parser/parser.rb +61 -0
  45. data/lib/tilia/v_object/parser/xml/element/key_value.rb +60 -0
  46. data/lib/tilia/v_object/parser/xml/element.rb +11 -0
  47. data/lib/tilia/v_object/parser/xml.rb +322 -0
  48. data/lib/tilia/v_object/parser.rb +10 -0
  49. data/lib/tilia/v_object/property/binary.rb +96 -0
  50. data/lib/tilia/v_object/property/boolean.rb +57 -0
  51. data/lib/tilia/v_object/property/flat_text.rb +52 -0
  52. data/lib/tilia/v_object/property/float_value.rb +107 -0
  53. data/lib/tilia/v_object/property/i_calendar/cal_address.rb +49 -0
  54. data/lib/tilia/v_object/property/i_calendar/date.rb +15 -0
  55. data/lib/tilia/v_object/property/i_calendar/date_time.rb +330 -0
  56. data/lib/tilia/v_object/property/i_calendar/duration.rb +65 -0
  57. data/lib/tilia/v_object/property/i_calendar/period.rb +124 -0
  58. data/lib/tilia/v_object/property/i_calendar/recur.rb +173 -0
  59. data/lib/tilia/v_object/property/i_calendar.rb +14 -0
  60. data/lib/tilia/v_object/property/integer_value.rb +60 -0
  61. data/lib/tilia/v_object/property/text.rb +352 -0
  62. data/lib/tilia/v_object/property/time.rb +85 -0
  63. data/lib/tilia/v_object/property/unknown.rb +30 -0
  64. data/lib/tilia/v_object/property/uri.rb +78 -0
  65. data/lib/tilia/v_object/property/utc_offset.rb +56 -0
  66. data/lib/tilia/v_object/property/v_card/date.rb +31 -0
  67. data/lib/tilia/v_object/property/v_card/date_and_or_time.rb +343 -0
  68. data/lib/tilia/v_object/property/v_card/date_time.rb +22 -0
  69. data/lib/tilia/v_object/property/v_card/language_tag.rb +41 -0
  70. data/lib/tilia/v_object/property/v_card/time_stamp.rb +74 -0
  71. data/lib/tilia/v_object/property/v_card.rb +13 -0
  72. data/lib/tilia/v_object/property.rb +532 -0
  73. data/lib/tilia/v_object/reader.rb +73 -0
  74. data/lib/tilia/v_object/recur/event_iterator.rb +417 -0
  75. data/lib/tilia/v_object/recur/no_instances_exception.rb +11 -0
  76. data/lib/tilia/v_object/recur/r_date_iterator.rb +138 -0
  77. data/lib/tilia/v_object/recur/r_rule_iterator.rb +717 -0
  78. data/lib/tilia/v_object/recur.rb +10 -0
  79. data/lib/tilia/v_object/settings.rb +32 -0
  80. data/lib/tilia/v_object/splitter/i_calendar.rb +95 -0
  81. data/lib/tilia/v_object/splitter/splitter_interface.rb +31 -0
  82. data/lib/tilia/v_object/splitter/v_card.rb +56 -0
  83. data/lib/tilia/v_object/splitter.rb +9 -0
  84. data/lib/tilia/v_object/string_util.rb +58 -0
  85. data/lib/tilia/v_object/time_zone_data/exchange_zones.rb +96 -0
  86. data/lib/tilia/v_object/time_zone_data/lotus_zones.rb +104 -0
  87. data/lib/tilia/v_object/time_zone_data/php_zones.rb +49 -0
  88. data/lib/tilia/v_object/time_zone_data/windows_zones.rb +121 -0
  89. data/lib/tilia/v_object/time_zone_data.rb +10 -0
  90. data/lib/tilia/v_object/time_zone_util.rb +213 -0
  91. data/lib/tilia/v_object/uuid_util.rb +51 -0
  92. data/lib/tilia/v_object/v_card_converter.rb +354 -0
  93. data/lib/tilia/v_object/version.rb +9 -0
  94. data/lib/tilia/v_object/writer.rb +56 -0
  95. data/lib/tilia/v_object.rb +45 -0
  96. data/lib/tilia/vobject.rb +1 -0
  97. data/resources/schema/xcal.rng +1192 -0
  98. data/resources/schema/xcard.rng +388 -0
  99. data/test/test_helper.rb +56 -0
  100. data/test/v_object/attach_issue_test.rb +19 -0
  101. data/test/v_object/birthday_calendar_generator_test.rb +463 -0
  102. data/test/v_object/cli_mock.rb +19 -0
  103. data/test/v_object/cli_test.rb +460 -0
  104. data/test/v_object/component/available_test.rb +59 -0
  105. data/test/v_object/component/v_alarm_test.rb +160 -0
  106. data/test/v_object/component/v_availability_test.rb +388 -0
  107. data/test/v_object/component/v_calendar_test.rb +646 -0
  108. data/test/v_object/component/v_card_test.rb +258 -0
  109. data/test/v_object/component/v_event_test.rb +85 -0
  110. data/test/v_object/component/v_free_busy_test.rb +59 -0
  111. data/test/v_object/component/v_journal_test.rb +85 -0
  112. data/test/v_object/component/v_time_zone_test.rb +47 -0
  113. data/test/v_object/component/v_todo_test.rb +172 -0
  114. data/test/v_object/component_test.rb +419 -0
  115. data/test/v_object/date_time_parser_test.rb +526 -0
  116. data/test/v_object/document_test.rb +71 -0
  117. data/test/v_object/element_list_test.rb +27 -0
  118. data/test/v_object/em_client_test.rb +53 -0
  119. data/test/v_object/empty_parameter_test.rb +65 -0
  120. data/test/v_object/empty_value_issue_test.rb +25 -0
  121. data/test/v_object/fake_component.rb +21 -0
  122. data/test/v_object/free_busy_data_test.rb +285 -0
  123. data/test/v_object/free_busy_generator_test.rb +637 -0
  124. data/test/v_object/google_colon_escaping_test.rb +27 -0
  125. data/test/v_object/i_calendar/attach_parse_test.rb +24 -0
  126. data/test/v_object/i_tip/broker_attendee_reply_test.rb +1042 -0
  127. data/test/v_object/i_tip/broker_delete_event_test.rb +175 -0
  128. data/test/v_object/i_tip/broker_new_event_test.rb +440 -0
  129. data/test/v_object/i_tip/broker_process_message_test.rb +153 -0
  130. data/test/v_object/i_tip/broker_process_reply_test.rb +402 -0
  131. data/test/v_object/i_tip/broker_tester.rb +71 -0
  132. data/test/v_object/i_tip/broker_update_event_test.rb +763 -0
  133. data/test/v_object/i_tip/evolution_test.rb +2644 -0
  134. data/test/v_object/i_tip/message_test.rb +25 -0
  135. data/test/v_object/issue153.vcf +352 -0
  136. data/test/v_object/issue153_test.rb +12 -0
  137. data/test/v_object/issue26_test.rb +25 -0
  138. data/test/v_object/issue36_work_around_test.rb +37 -0
  139. data/test/v_object/issue40_test.rb +26 -0
  140. data/test/v_object/issue64.vcf +351 -0
  141. data/test/v_object/issue64_test.rb +17 -0
  142. data/test/v_object/issue96_test.rb +22 -0
  143. data/test/v_object/issue_undefined_index_test.rb +24 -0
  144. data/test/v_object/j_cal_test.rb +150 -0
  145. data/test/v_object/j_card_test.rb +192 -0
  146. data/test/v_object/line_folding_issue_test.rb +19 -0
  147. data/test/v_object/mock_document.rb +6 -0
  148. data/test/v_object/parameter_test.rb +109 -0
  149. data/test/v_object/parser/json_test.rb +370 -0
  150. data/test/v_object/parser/mime_dir_test.rb +14 -0
  151. data/test/v_object/parser/quoted_printable_test.rb +78 -0
  152. data/test/v_object/parser/xml_test.rb +2563 -0
  153. data/test/v_object/property/binary_test.rb +12 -0
  154. data/test/v_object/property/boolean_test.rb +18 -0
  155. data/test/v_object/property/compound_test.rb +43 -0
  156. data/test/v_object/property/float_test.rb +20 -0
  157. data/test/v_object/property/i_calendar/cal_address_test.rb +26 -0
  158. data/test/v_object/property/i_calendar/date_time_test.rb +303 -0
  159. data/test/v_object/property/i_calendar/duration_test.rb +14 -0
  160. data/test/v_object/property/i_calendar/recur_test.rb +39 -0
  161. data/test/v_object/property/text_test.rb +81 -0
  162. data/test/v_object/property/v_card/date_and_or_time_test.rb +205 -0
  163. data/test/v_object/property/v_card/language_tag_test.rb +35 -0
  164. data/test/v_object/property_test.rb +338 -0
  165. data/test/v_object/reader_test.rb +403 -0
  166. data/test/v_object/recur/event_iterator/by_month_in_daily_test.rb +52 -0
  167. data/test/v_object/recur/event_iterator/by_set_pos_hang_test.rb +55 -0
  168. data/test/v_object/recur/event_iterator/expand_floating_times_test.rb +109 -0
  169. data/test/v_object/recur/event_iterator/fifth_tuesday_problem_test.rb +45 -0
  170. data/test/v_object/recur/event_iterator/incorrect_expand_test.rb +53 -0
  171. data/test/v_object/recur/event_iterator/infinite_loop_problem_test.rb +75 -0
  172. data/test/v_object/recur/event_iterator/issue48_test.rb +43 -0
  173. data/test/v_object/recur/event_iterator/issue50_test.rb +123 -0
  174. data/test/v_object/recur/event_iterator/main_test.rb +1222 -0
  175. data/test/v_object/recur/event_iterator/missing_overridden_test.rb +55 -0
  176. data/test/v_object/recur/event_iterator/no_instances_test.rb +32 -0
  177. data/test/v_object/recur/event_iterator/override_first_event_test.rb +106 -0
  178. data/test/v_object/recur/r_date_iterator_test.rb +44 -0
  179. data/test/v_object/recur/r_rule_iterator_test.rb +608 -0
  180. data/test/v_object/recurrence_iterator/UntilRespectsTimezoneTest.ics +39 -0
  181. data/test/v_object/slash_r_test.rb +15 -0
  182. data/test/v_object/splitter/i_calendar_test.rb +299 -0
  183. data/test/v_object/splitter/v_card_test.rb +173 -0
  184. data/test/v_object/string_util_test.rb +37 -0
  185. data/test/v_object/test_case.rb +42 -0
  186. data/test/v_object/time_zone_util_test.rb +271 -0
  187. data/test/v_object/uuid_util_test.rb +18 -0
  188. data/test/v_object/v_card21_test.rb +43 -0
  189. data/test/v_object/v_card_converter_test.rb +419 -0
  190. data/test/v_object/version_test.rb +15 -0
  191. data/test/v_object/writer_test.rb +33 -0
  192. data/tilia-vobject.gemspec +17 -0
  193. metadata +308 -0
@@ -0,0 +1,463 @@
1
+ require 'test_helper'
2
+ require 'v_object/test_case'
3
+
4
+ module Tilia
5
+ module VObject
6
+ class BirthdayCalendarGeneratorTest < TestCase
7
+ def test_vcard_string_with_valid_birthday
8
+ generator = Tilia::VObject::BirthdayCalendarGenerator.new
9
+ input = <<VCF
10
+ BEGIN:VCARD
11
+ VERSION:3.0
12
+ N:Gump;Forrest;;Mr.
13
+ FN:Forrest Gump
14
+ BDAY:19850407
15
+ UID:foo
16
+ END:VCARD
17
+ VCF
18
+
19
+ expected = <<ICS
20
+ BEGIN:VCALENDAR
21
+ VERSION:2.0
22
+ BEGIN:VEVENT
23
+ SUMMARY:Forrest Gump's Birthday
24
+ DTSTART;VALUE=DATE:19850407
25
+ RRULE:FREQ=YEARLY
26
+ TRANSP:TRANSPARENT
27
+ X-SABRE-BDAY;X-SABRE-VCARD-UID=foo;X-SABRE-VCARD-FN=Forrest Gump:BDAY
28
+ END:VEVENT
29
+ END:VCALENDAR
30
+ ICS
31
+
32
+ generator.objects = input
33
+ output = generator.result
34
+
35
+ assert_v_obj_equals(expected, output)
36
+ end
37
+
38
+ def test_array_of_vcard_strings_with_valid_birthdays
39
+ generator = Tilia::VObject::BirthdayCalendarGenerator.new
40
+ input = []
41
+
42
+ input << <<VCF
43
+ BEGIN:VCARD
44
+ VERSION:3.0
45
+ N:Gump;Forrest;;Mr.
46
+ FN:Forrest Gump
47
+ BDAY:19850407
48
+ UID:foo
49
+ END:VCARD
50
+ VCF
51
+
52
+ input << <<VCF
53
+ BEGIN:VCARD
54
+ VERSION:3.0
55
+ N:Doe;John;;Mr.
56
+ FN:John Doe
57
+ BDAY:19820210
58
+ UID:bar
59
+ END:VCARD
60
+ VCF
61
+
62
+ expected = <<ICS
63
+ BEGIN:VCALENDAR
64
+ VERSION:2.0
65
+ BEGIN:VEVENT
66
+ SUMMARY:Forrest Gump's Birthday
67
+ DTSTART;VALUE=DATE:19850407
68
+ RRULE:FREQ=YEARLY
69
+ TRANSP:TRANSPARENT
70
+ X-SABRE-BDAY;X-SABRE-VCARD-UID=foo;X-SABRE-VCARD-FN=Forrest Gump:BDAY
71
+ END:VEVENT
72
+ BEGIN:VEVENT
73
+ SUMMARY:John Doe's Birthday
74
+ DTSTART;VALUE=DATE:19820210
75
+ RRULE:FREQ=YEARLY
76
+ TRANSP:TRANSPARENT
77
+ X-SABRE-BDAY;X-SABRE-VCARD-UID=bar;X-SABRE-VCARD-FN=John Doe:BDAY
78
+ END:VEVENT
79
+ END:VCALENDAR
80
+ ICS
81
+
82
+ generator.objects = input
83
+ output = generator.result
84
+
85
+ assert_v_obj_equals(expected, output)
86
+ end
87
+
88
+ def test_array_of_vcard_strings_with_valid_birthdays_via_constructor
89
+ input = []
90
+
91
+ input << <<VCF
92
+ BEGIN:VCARD
93
+ VERSION:3.0
94
+ N:Gump;Forrest;;Mr.
95
+ FN:Forrest Gump
96
+ BDAY:19850407
97
+ UID:foo
98
+ END:VCARD
99
+ VCF
100
+
101
+ input << <<VCF
102
+ BEGIN:VCARD
103
+ VERSION:3.0
104
+ N:Doe;John;;Mr.
105
+ FN:John Doe
106
+ BDAY:19820210
107
+ UID:bar
108
+ END:VCARD
109
+ VCF
110
+
111
+ generator = Tilia::VObject::BirthdayCalendarGenerator.new(input)
112
+
113
+ expected = <<ICS
114
+ BEGIN:VCALENDAR
115
+ VERSION:2.0
116
+ BEGIN:VEVENT
117
+ SUMMARY:Forrest Gump's Birthday
118
+ DTSTART;VALUE=DATE:19850407
119
+ RRULE:FREQ=YEARLY
120
+ TRANSP:TRANSPARENT
121
+ X-SABRE-BDAY;X-SABRE-VCARD-UID=foo;X-SABRE-VCARD-FN=Forrest Gump:BDAY
122
+ END:VEVENT
123
+ BEGIN:VEVENT
124
+ SUMMARY:John Doe's Birthday
125
+ DTSTART;VALUE=DATE:19820210
126
+ RRULE:FREQ=YEARLY
127
+ TRANSP:TRANSPARENT
128
+ X-SABRE-BDAY;X-SABRE-VCARD-UID=bar;X-SABRE-VCARD-FN=John Doe:BDAY
129
+ END:VEVENT
130
+ END:VCALENDAR
131
+ ICS
132
+
133
+ generator.objects = input
134
+ output = generator.result
135
+
136
+ assert_v_obj_equals(expected, output)
137
+ end
138
+
139
+ def test_vcard_object_with_valid_birthday
140
+ generator = Tilia::VObject::BirthdayCalendarGenerator.new
141
+ input = <<VCF
142
+ BEGIN:VCARD
143
+ VERSION:3.0
144
+ N:Gump;Forrest;;Mr.
145
+ FN:Forrest Gump
146
+ BDAY:19850407
147
+ UID:foo
148
+ END:VCARD
149
+ VCF
150
+
151
+ input = Tilia::VObject::Reader.read(input)
152
+
153
+ expected = <<ICS
154
+ BEGIN:VCALENDAR
155
+ VERSION:2.0
156
+ BEGIN:VEVENT
157
+ SUMMARY:Forrest Gump's Birthday
158
+ DTSTART;VALUE=DATE:19850407
159
+ RRULE:FREQ=YEARLY
160
+ TRANSP:TRANSPARENT
161
+ X-SABRE-BDAY;X-SABRE-VCARD-UID=foo;X-SABRE-VCARD-FN=Forrest Gump:BDAY
162
+ END:VEVENT
163
+ END:VCALENDAR
164
+ ICS
165
+
166
+ generator.objects = input
167
+ output = generator.result
168
+
169
+ assert_v_obj_equals(expected, output)
170
+ end
171
+
172
+ def test_array_of_vcard_objects_with_valid_birthdays
173
+ generator = Tilia::VObject::BirthdayCalendarGenerator.new
174
+ input = []
175
+
176
+ input << <<VCF
177
+ BEGIN:VCARD
178
+ VERSION:3.0
179
+ N:Gump;Forrest;;Mr.
180
+ FN:Forrest Gump
181
+ BDAY:19850407
182
+ UID:foo
183
+ END:VCARD
184
+ VCF
185
+
186
+ input << <<VCF
187
+ BEGIN:VCARD
188
+ VERSION:3.0
189
+ N:Doe;John;;Mr.
190
+ FN:John Doe
191
+ BDAY:19820210
192
+ UID:bar
193
+ END:VCARD
194
+ VCF
195
+
196
+ input.map! { |v| Tilia::VObject::Reader.read(v) }
197
+
198
+ expected = <<ICS
199
+ BEGIN:VCALENDAR
200
+ VERSION:2.0
201
+ BEGIN:VEVENT
202
+ SUMMARY:Forrest Gump's Birthday
203
+ DTSTART;VALUE=DATE:19850407
204
+ RRULE:FREQ=YEARLY
205
+ TRANSP:TRANSPARENT
206
+ X-SABRE-BDAY;X-SABRE-VCARD-UID=foo;X-SABRE-VCARD-FN=Forrest Gump:BDAY
207
+ END:VEVENT
208
+ BEGIN:VEVENT
209
+ SUMMARY:John Doe's Birthday
210
+ DTSTART;VALUE=DATE:19820210
211
+ RRULE:FREQ=YEARLY
212
+ TRANSP:TRANSPARENT
213
+ X-SABRE-BDAY;X-SABRE-VCARD-UID=bar;X-SABRE-VCARD-FN=John Doe:BDAY
214
+ END:VEVENT
215
+ END:VCALENDAR
216
+ ICS
217
+
218
+ generator.objects = input
219
+ output = generator.result
220
+
221
+ assert_v_obj_equals(expected, output)
222
+ end
223
+
224
+ def test_vcard_string_with_valid_birthday_with_x_apple_omit_year
225
+ generator = Tilia::VObject::BirthdayCalendarGenerator.new
226
+ input = <<VCF
227
+ BEGIN:VCARD
228
+ VERSION:3.0
229
+ N:Gump;Forrest;;Mr.
230
+ FN:Forrest Gump
231
+ BDAY;X-APPLE-OMIT-YEAR=1604:1604-04-07
232
+ UID:foo
233
+ END:VCARD
234
+ VCF
235
+
236
+ expected = <<ICS
237
+ BEGIN:VCALENDAR
238
+ VERSION:2.0
239
+ BEGIN:VEVENT
240
+ SUMMARY:Forrest Gump's Birthday
241
+ DTSTART;VALUE=DATE:20000407
242
+ RRULE:FREQ=YEARLY
243
+ TRANSP:TRANSPARENT
244
+ X-SABRE-BDAY;X-SABRE-VCARD-UID=foo;X-SABRE-VCARD-FN=Forrest Gump;X-SABRE-OMIT-YEAR=2000:BDAY
245
+ END:VEVENT
246
+ END:VCALENDAR
247
+ ICS
248
+
249
+ generator.objects = input
250
+ output = generator.result
251
+
252
+ assert_v_obj_equals(expected, output)
253
+ end
254
+
255
+ def test_vcard_string_with_valid_birthday_without_year
256
+ generator = Tilia::VObject::BirthdayCalendarGenerator.new
257
+ input = <<VCF
258
+ BEGIN:VCARD
259
+ VERSION:4.0
260
+ N:Gump;Forrest;;Mr.
261
+ FN:Forrest Gump
262
+ BDAY:--04-07
263
+ UID:foo
264
+ END:VCARD
265
+ VCF
266
+
267
+ expected = <<ICS
268
+ BEGIN:VCALENDAR
269
+ VERSION:2.0
270
+ BEGIN:VEVENT
271
+ SUMMARY:Forrest Gump's Birthday
272
+ DTSTART;VALUE=DATE:20000407
273
+ RRULE:FREQ=YEARLY
274
+ TRANSP:TRANSPARENT
275
+ X-SABRE-BDAY;X-SABRE-VCARD-UID=foo;X-SABRE-VCARD-FN=Forrest Gump;X-SABRE-OMIT-YEAR=2000:BDAY
276
+ END:VEVENT
277
+ END:VCALENDAR
278
+ ICS
279
+
280
+ generator.objects = input
281
+ output = generator.result
282
+
283
+ assert_v_obj_equals(expected, output)
284
+ end
285
+
286
+ def test_vcard_string_with_invalid_birthday
287
+ generator = Tilia::VObject::BirthdayCalendarGenerator.new
288
+ input = <<VCF
289
+ BEGIN:VCARD
290
+ VERSION:3.0
291
+ N:Gump;Forrest;;Mr.
292
+ FN:Forrest Gump
293
+ BDAY:foo
294
+ X-SABRE-BDAY;X-SABRE-VCARD-UID=foo;X-SABRE-VCARD-FN=Forrest Gump:BDAY
295
+ END:VCARD
296
+ VCF
297
+
298
+ expected = <<ICS
299
+ BEGIN:VCALENDAR
300
+ VERSION:2.0
301
+ END:VCALENDAR
302
+ ICS
303
+
304
+ generator.objects = input
305
+ output = generator.result
306
+
307
+ assert_v_obj_equals(expected, output)
308
+ end
309
+
310
+ def test_vcard_string_with_no_birthday
311
+ generator = Tilia::VObject::BirthdayCalendarGenerator.new
312
+ input = <<VCF
313
+ BEGIN:VCARD
314
+ VERSION:3.0
315
+ N:Gump;Forrest;;Mr.
316
+ FN:Forrest Gump
317
+ UID:foo
318
+ END:VCARD
319
+ VCF
320
+
321
+ expected = <<ICS
322
+ BEGIN:VCALENDAR
323
+ VERSION:2.0
324
+ END:VCALENDAR
325
+ ICS
326
+
327
+ generator.objects = input
328
+ output = generator.result
329
+
330
+ assert_v_obj_equals(expected, output)
331
+ end
332
+
333
+ def test_vcard_string_with_valid_birthday_localized
334
+ generator = Tilia::VObject::BirthdayCalendarGenerator.new
335
+ input = <<VCF
336
+ BEGIN:VCARD
337
+ VERSION:3.0
338
+ N:Gump;Forrest;;Mr.
339
+ FN:Forrest Gump
340
+ BDAY:19850407
341
+ UID:foo
342
+ END:VCARD
343
+ VCF
344
+
345
+ expected = <<ICS
346
+ BEGIN:VCALENDAR
347
+ VERSION:2.0
348
+ BEGIN:VEVENT
349
+ SUMMARY:Forrest Gump's Geburtstag
350
+ DTSTART;VALUE=DATE:19850407
351
+ RRULE:FREQ=YEARLY
352
+ TRANSP:TRANSPARENT
353
+ X-SABRE-BDAY;X-SABRE-VCARD-UID=foo;X-SABRE-VCARD-FN=Forrest Gump:BDAY
354
+ END:VEVENT
355
+ END:VCALENDAR
356
+ ICS
357
+
358
+ generator.objects = input
359
+ generator.format = '%1s\'s Geburtstag'
360
+ output = generator.result
361
+
362
+ assert_v_obj_equals(expected, output)
363
+ end
364
+
365
+ def test_vcard_string_with_empty_birthday_property
366
+ generator = Tilia::VObject::BirthdayCalendarGenerator.new
367
+ input = <<VCF
368
+ BEGIN:VCARD
369
+ VERSION:3.0
370
+ N:Gump;Forrest;;Mr.
371
+ FN:Forrest Gump
372
+ BDAY:
373
+ UID:foo
374
+ END:VCARD
375
+ VCF
376
+
377
+ expected = <<ICS
378
+ BEGIN:VCALENDAR
379
+ VERSION:2.0
380
+ END:VCALENDAR
381
+ ICS
382
+
383
+ generator.objects = input
384
+ output = generator.result
385
+
386
+ assert_v_obj_equals(expected, output)
387
+ end
388
+
389
+ def test_parse_exception
390
+ generator = Tilia::VObject::BirthdayCalendarGenerator.new
391
+ input = <<INVALID
392
+ BEGIN:FOO
393
+ FOO:Bar
394
+ END:FOO
395
+ INVALID
396
+
397
+ assert_raises(Tilia::VObject::ParseException) { generator.objects = input }
398
+ end
399
+
400
+ def test_invalid_argument_exception
401
+ generator = Tilia::VObject::BirthdayCalendarGenerator.new
402
+ input = <<ICS
403
+ BEGIN:VCALENDAR
404
+ VERSION:2.0
405
+ BEGIN:VEVENT
406
+ SUMMARY:Foo
407
+ DTSTART;VALUE=DATE:19850407
408
+ END:VEVENT
409
+ END:VCALENDAR
410
+ ICS
411
+
412
+ assert_raises(ArgumentError) { generator.objects = input }
413
+ end
414
+
415
+ def test_invalid_argument_exception_for_partially_invalid_array
416
+ generator = Tilia::VObject::BirthdayCalendarGenerator.new
417
+ input = []
418
+
419
+ input << <<VCF
420
+ BEGIN:VCARD
421
+ VERSION:3.0
422
+ N:Gump;Forrest;;Mr.
423
+ FN:Forrest Gump
424
+ BDAY:19850407
425
+ UID:foo
426
+ END:VCARD
427
+ VCF
428
+ calendar = Tilia::VObject::Component::VCalendar.new
429
+
430
+ input = calendar.add(
431
+ 'VEVENT',
432
+ 'SUMMARY' => 'Foo',
433
+ 'DTSTART' => Time.zone.parse('NOW')
434
+ )
435
+
436
+ assert_raises(ArgumentError) { generator.objects = input }
437
+ end
438
+
439
+ def test_broken_vcard_without_fn
440
+ generator = Tilia::VObject::BirthdayCalendarGenerator.new
441
+ input = <<VCF
442
+ BEGIN:VCARD
443
+ VERSION:3.0
444
+ N:Gump;Forrest;;Mr.
445
+ BDAY:19850407
446
+ UID:foo
447
+ END:VCARD
448
+ VCF
449
+
450
+ expected = <<ICS
451
+ BEGIN:VCALENDAR
452
+ VERSION:2.0
453
+ END:VCALENDAR
454
+ ICS
455
+
456
+ generator.objects = input
457
+ output = generator.result
458
+
459
+ assert_v_obj_equals(expected, output)
460
+ end
461
+ end
462
+ end
463
+ end
@@ -0,0 +1,19 @@
1
+ module Tilia
2
+ module VObject
3
+ class CliMock < Cli
4
+ attr_accessor :quiet
5
+ attr_accessor :format
6
+ attr_accessor :pretty
7
+ attr_accessor :stdin
8
+ attr_accessor :stdout
9
+ attr_accessor :stderr
10
+ attr_accessor :input_format
11
+ attr_accessor :output_format
12
+
13
+ def initialize
14
+ super
15
+ @quiet = false
16
+ end
17
+ end
18
+ end
19
+ end