tilia-vobject 4.0.0.pre.alpha2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.gitignore +19 -0
- data/.rubocop.yml +32 -0
- data/.simplecov +4 -0
- data/.travis.yml +3 -0
- data/CHANGELOG.sabre.md +626 -0
- data/CONTRIBUTING.md +25 -0
- data/Gemfile +17 -0
- data/Gemfile.lock +68 -0
- data/LICENSE +27 -0
- data/LICENSE.sabre +27 -0
- data/README.md +63 -0
- data/Rakefile +17 -0
- data/bin/vobject +7 -0
- data/lib/tilia/v_object/birthday_calendar_generator.rb +142 -0
- data/lib/tilia/v_object/cli.rb +582 -0
- data/lib/tilia/v_object/component/available.rb +107 -0
- data/lib/tilia/v_object/component/v_alarm.rb +114 -0
- data/lib/tilia/v_object/component/v_availability.rb +128 -0
- data/lib/tilia/v_object/component/v_calendar.rb +468 -0
- data/lib/tilia/v_object/component/v_card.rb +457 -0
- data/lib/tilia/v_object/component/v_event.rb +127 -0
- data/lib/tilia/v_object/component/v_free_busy.rb +81 -0
- data/lib/tilia/v_object/component/v_journal.rb +75 -0
- data/lib/tilia/v_object/component/v_time_zone.rb +51 -0
- data/lib/tilia/v_object/component/v_todo.rb +147 -0
- data/lib/tilia/v_object/component.rb +591 -0
- data/lib/tilia/v_object/date_time_parser.rb +486 -0
- data/lib/tilia/v_object/document.rb +218 -0
- data/lib/tilia/v_object/element_list.rb +18 -0
- data/lib/tilia/v_object/eof_exception.rb +8 -0
- data/lib/tilia/v_object/free_busy_data.rb +149 -0
- data/lib/tilia/v_object/free_busy_generator.rb +465 -0
- data/lib/tilia/v_object/i_tip/broker.rb +909 -0
- data/lib/tilia/v_object/i_tip/i_tip_exception.rb +9 -0
- data/lib/tilia/v_object/i_tip/message.rb +109 -0
- data/lib/tilia/v_object/i_tip/same_organizer_for_all_components_exception.rb +13 -0
- data/lib/tilia/v_object/i_tip.rb +10 -0
- data/lib/tilia/v_object/node.rb +192 -0
- data/lib/tilia/v_object/parameter.rb +327 -0
- data/lib/tilia/v_object/parse_exception.rb +7 -0
- data/lib/tilia/v_object/parser/json.rb +149 -0
- data/lib/tilia/v_object/parser/mime_dir.rb +543 -0
- data/lib/tilia/v_object/parser/parser.rb +61 -0
- data/lib/tilia/v_object/parser/xml/element/key_value.rb +60 -0
- data/lib/tilia/v_object/parser/xml/element.rb +11 -0
- data/lib/tilia/v_object/parser/xml.rb +322 -0
- data/lib/tilia/v_object/parser.rb +10 -0
- data/lib/tilia/v_object/property/binary.rb +96 -0
- data/lib/tilia/v_object/property/boolean.rb +57 -0
- data/lib/tilia/v_object/property/flat_text.rb +52 -0
- data/lib/tilia/v_object/property/float_value.rb +107 -0
- data/lib/tilia/v_object/property/i_calendar/cal_address.rb +49 -0
- data/lib/tilia/v_object/property/i_calendar/date.rb +15 -0
- data/lib/tilia/v_object/property/i_calendar/date_time.rb +330 -0
- data/lib/tilia/v_object/property/i_calendar/duration.rb +65 -0
- data/lib/tilia/v_object/property/i_calendar/period.rb +124 -0
- data/lib/tilia/v_object/property/i_calendar/recur.rb +173 -0
- data/lib/tilia/v_object/property/i_calendar.rb +14 -0
- data/lib/tilia/v_object/property/integer_value.rb +60 -0
- data/lib/tilia/v_object/property/text.rb +352 -0
- data/lib/tilia/v_object/property/time.rb +85 -0
- data/lib/tilia/v_object/property/unknown.rb +30 -0
- data/lib/tilia/v_object/property/uri.rb +78 -0
- data/lib/tilia/v_object/property/utc_offset.rb +56 -0
- data/lib/tilia/v_object/property/v_card/date.rb +31 -0
- data/lib/tilia/v_object/property/v_card/date_and_or_time.rb +343 -0
- data/lib/tilia/v_object/property/v_card/date_time.rb +22 -0
- data/lib/tilia/v_object/property/v_card/language_tag.rb +41 -0
- data/lib/tilia/v_object/property/v_card/time_stamp.rb +74 -0
- data/lib/tilia/v_object/property/v_card.rb +13 -0
- data/lib/tilia/v_object/property.rb +532 -0
- data/lib/tilia/v_object/reader.rb +73 -0
- data/lib/tilia/v_object/recur/event_iterator.rb +417 -0
- data/lib/tilia/v_object/recur/no_instances_exception.rb +11 -0
- data/lib/tilia/v_object/recur/r_date_iterator.rb +138 -0
- data/lib/tilia/v_object/recur/r_rule_iterator.rb +717 -0
- data/lib/tilia/v_object/recur.rb +10 -0
- data/lib/tilia/v_object/settings.rb +32 -0
- data/lib/tilia/v_object/splitter/i_calendar.rb +95 -0
- data/lib/tilia/v_object/splitter/splitter_interface.rb +31 -0
- data/lib/tilia/v_object/splitter/v_card.rb +56 -0
- data/lib/tilia/v_object/splitter.rb +9 -0
- data/lib/tilia/v_object/string_util.rb +58 -0
- data/lib/tilia/v_object/time_zone_data/exchange_zones.rb +96 -0
- data/lib/tilia/v_object/time_zone_data/lotus_zones.rb +104 -0
- data/lib/tilia/v_object/time_zone_data/php_zones.rb +49 -0
- data/lib/tilia/v_object/time_zone_data/windows_zones.rb +121 -0
- data/lib/tilia/v_object/time_zone_data.rb +10 -0
- data/lib/tilia/v_object/time_zone_util.rb +213 -0
- data/lib/tilia/v_object/uuid_util.rb +51 -0
- data/lib/tilia/v_object/v_card_converter.rb +354 -0
- data/lib/tilia/v_object/version.rb +9 -0
- data/lib/tilia/v_object/writer.rb +56 -0
- data/lib/tilia/v_object.rb +45 -0
- data/lib/tilia/vobject.rb +1 -0
- data/resources/schema/xcal.rng +1192 -0
- data/resources/schema/xcard.rng +388 -0
- data/test/test_helper.rb +56 -0
- data/test/v_object/attach_issue_test.rb +19 -0
- data/test/v_object/birthday_calendar_generator_test.rb +463 -0
- data/test/v_object/cli_mock.rb +19 -0
- data/test/v_object/cli_test.rb +460 -0
- data/test/v_object/component/available_test.rb +59 -0
- data/test/v_object/component/v_alarm_test.rb +160 -0
- data/test/v_object/component/v_availability_test.rb +388 -0
- data/test/v_object/component/v_calendar_test.rb +646 -0
- data/test/v_object/component/v_card_test.rb +258 -0
- data/test/v_object/component/v_event_test.rb +85 -0
- data/test/v_object/component/v_free_busy_test.rb +59 -0
- data/test/v_object/component/v_journal_test.rb +85 -0
- data/test/v_object/component/v_time_zone_test.rb +47 -0
- data/test/v_object/component/v_todo_test.rb +172 -0
- data/test/v_object/component_test.rb +419 -0
- data/test/v_object/date_time_parser_test.rb +526 -0
- data/test/v_object/document_test.rb +71 -0
- data/test/v_object/element_list_test.rb +27 -0
- data/test/v_object/em_client_test.rb +53 -0
- data/test/v_object/empty_parameter_test.rb +65 -0
- data/test/v_object/empty_value_issue_test.rb +25 -0
- data/test/v_object/fake_component.rb +21 -0
- data/test/v_object/free_busy_data_test.rb +285 -0
- data/test/v_object/free_busy_generator_test.rb +637 -0
- data/test/v_object/google_colon_escaping_test.rb +27 -0
- data/test/v_object/i_calendar/attach_parse_test.rb +24 -0
- data/test/v_object/i_tip/broker_attendee_reply_test.rb +1042 -0
- data/test/v_object/i_tip/broker_delete_event_test.rb +175 -0
- data/test/v_object/i_tip/broker_new_event_test.rb +440 -0
- data/test/v_object/i_tip/broker_process_message_test.rb +153 -0
- data/test/v_object/i_tip/broker_process_reply_test.rb +402 -0
- data/test/v_object/i_tip/broker_tester.rb +71 -0
- data/test/v_object/i_tip/broker_update_event_test.rb +763 -0
- data/test/v_object/i_tip/evolution_test.rb +2644 -0
- data/test/v_object/i_tip/message_test.rb +25 -0
- data/test/v_object/issue153.vcf +352 -0
- data/test/v_object/issue153_test.rb +12 -0
- data/test/v_object/issue26_test.rb +25 -0
- data/test/v_object/issue36_work_around_test.rb +37 -0
- data/test/v_object/issue40_test.rb +26 -0
- data/test/v_object/issue64.vcf +351 -0
- data/test/v_object/issue64_test.rb +17 -0
- data/test/v_object/issue96_test.rb +22 -0
- data/test/v_object/issue_undefined_index_test.rb +24 -0
- data/test/v_object/j_cal_test.rb +150 -0
- data/test/v_object/j_card_test.rb +192 -0
- data/test/v_object/line_folding_issue_test.rb +19 -0
- data/test/v_object/mock_document.rb +6 -0
- data/test/v_object/parameter_test.rb +109 -0
- data/test/v_object/parser/json_test.rb +370 -0
- data/test/v_object/parser/mime_dir_test.rb +14 -0
- data/test/v_object/parser/quoted_printable_test.rb +78 -0
- data/test/v_object/parser/xml_test.rb +2563 -0
- data/test/v_object/property/binary_test.rb +12 -0
- data/test/v_object/property/boolean_test.rb +18 -0
- data/test/v_object/property/compound_test.rb +43 -0
- data/test/v_object/property/float_test.rb +20 -0
- data/test/v_object/property/i_calendar/cal_address_test.rb +26 -0
- data/test/v_object/property/i_calendar/date_time_test.rb +303 -0
- data/test/v_object/property/i_calendar/duration_test.rb +14 -0
- data/test/v_object/property/i_calendar/recur_test.rb +39 -0
- data/test/v_object/property/text_test.rb +81 -0
- data/test/v_object/property/v_card/date_and_or_time_test.rb +205 -0
- data/test/v_object/property/v_card/language_tag_test.rb +35 -0
- data/test/v_object/property_test.rb +338 -0
- data/test/v_object/reader_test.rb +403 -0
- data/test/v_object/recur/event_iterator/by_month_in_daily_test.rb +52 -0
- data/test/v_object/recur/event_iterator/by_set_pos_hang_test.rb +55 -0
- data/test/v_object/recur/event_iterator/expand_floating_times_test.rb +109 -0
- data/test/v_object/recur/event_iterator/fifth_tuesday_problem_test.rb +45 -0
- data/test/v_object/recur/event_iterator/incorrect_expand_test.rb +53 -0
- data/test/v_object/recur/event_iterator/infinite_loop_problem_test.rb +75 -0
- data/test/v_object/recur/event_iterator/issue48_test.rb +43 -0
- data/test/v_object/recur/event_iterator/issue50_test.rb +123 -0
- data/test/v_object/recur/event_iterator/main_test.rb +1222 -0
- data/test/v_object/recur/event_iterator/missing_overridden_test.rb +55 -0
- data/test/v_object/recur/event_iterator/no_instances_test.rb +32 -0
- data/test/v_object/recur/event_iterator/override_first_event_test.rb +106 -0
- data/test/v_object/recur/r_date_iterator_test.rb +44 -0
- data/test/v_object/recur/r_rule_iterator_test.rb +608 -0
- data/test/v_object/recurrence_iterator/UntilRespectsTimezoneTest.ics +39 -0
- data/test/v_object/slash_r_test.rb +15 -0
- data/test/v_object/splitter/i_calendar_test.rb +299 -0
- data/test/v_object/splitter/v_card_test.rb +173 -0
- data/test/v_object/string_util_test.rb +37 -0
- data/test/v_object/test_case.rb +42 -0
- data/test/v_object/time_zone_util_test.rb +271 -0
- data/test/v_object/uuid_util_test.rb +18 -0
- data/test/v_object/v_card21_test.rb +43 -0
- data/test/v_object/v_card_converter_test.rb +419 -0
- data/test/v_object/version_test.rb +15 -0
- data/test/v_object/writer_test.rb +33 -0
- data/tilia-vobject.gemspec +17 -0
- metadata +308 -0
@@ -0,0 +1,205 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
module Tilia
|
4
|
+
module VObject
|
5
|
+
class DateAndOrTimeTest < Minitest::Test
|
6
|
+
def dates
|
7
|
+
[
|
8
|
+
[
|
9
|
+
'19961022T140000',
|
10
|
+
'1996-10-22T14:00:00'
|
11
|
+
],
|
12
|
+
[
|
13
|
+
'--1022T1400',
|
14
|
+
'--10-22T14:00'
|
15
|
+
],
|
16
|
+
[
|
17
|
+
'---22T14',
|
18
|
+
'---22T14'
|
19
|
+
],
|
20
|
+
[
|
21
|
+
'19850412',
|
22
|
+
'1985-04-12'
|
23
|
+
],
|
24
|
+
[
|
25
|
+
'1985-04',
|
26
|
+
'1985-04'
|
27
|
+
],
|
28
|
+
[
|
29
|
+
'1985',
|
30
|
+
'1985'
|
31
|
+
],
|
32
|
+
[
|
33
|
+
'--0412',
|
34
|
+
'--04-12'
|
35
|
+
],
|
36
|
+
[
|
37
|
+
'T102200',
|
38
|
+
'T10:22:00'
|
39
|
+
],
|
40
|
+
[
|
41
|
+
'T1022',
|
42
|
+
'T10:22'
|
43
|
+
],
|
44
|
+
[
|
45
|
+
'T10',
|
46
|
+
'T10'
|
47
|
+
],
|
48
|
+
[
|
49
|
+
'T-2200',
|
50
|
+
'T-22:00'
|
51
|
+
],
|
52
|
+
[
|
53
|
+
'T102200Z',
|
54
|
+
'T10:22:00Z'
|
55
|
+
],
|
56
|
+
[
|
57
|
+
'T102200-0800',
|
58
|
+
'T10:22:00-0800'
|
59
|
+
],
|
60
|
+
[
|
61
|
+
'T--00',
|
62
|
+
'T--00'
|
63
|
+
]
|
64
|
+
]
|
65
|
+
end
|
66
|
+
|
67
|
+
def test_get_json_value
|
68
|
+
dates.each do |data|
|
69
|
+
(input, output) = data
|
70
|
+
vcard = Tilia::VObject::Component::VCard.new
|
71
|
+
prop = vcard.create_property('BDAY', input)
|
72
|
+
|
73
|
+
assert_equal([output], prop.json_value)
|
74
|
+
end
|
75
|
+
end
|
76
|
+
|
77
|
+
def test_set_parts
|
78
|
+
vcard = Tilia::VObject::Component::VCard.new
|
79
|
+
|
80
|
+
prop = vcard.create_property('BDAY')
|
81
|
+
prop.parts = [Time.zone.parse('2014-04-02 18:37:00')]
|
82
|
+
|
83
|
+
assert_equal('20140402T183700Z', prop.value)
|
84
|
+
end
|
85
|
+
|
86
|
+
def test_set_parts_too_many
|
87
|
+
vcard = Tilia::VObject::Component::VCard.new
|
88
|
+
|
89
|
+
prop = vcard.create_property('BDAY')
|
90
|
+
|
91
|
+
assert_raises(ArgumentError) { prop.parts = [1, 2] }
|
92
|
+
end
|
93
|
+
|
94
|
+
def test_set_parts_string
|
95
|
+
vcard = Tilia::VObject::Component::VCard.new
|
96
|
+
|
97
|
+
prop = vcard.create_property('BDAY')
|
98
|
+
prop.parts = ['20140402T183700Z']
|
99
|
+
|
100
|
+
assert_equal('20140402T183700Z', prop.value)
|
101
|
+
end
|
102
|
+
|
103
|
+
def test_set_value_date_time
|
104
|
+
vcard = Tilia::VObject::Component::VCard.new
|
105
|
+
|
106
|
+
prop = vcard.create_property('BDAY')
|
107
|
+
prop.value = Time.zone.parse('2014-04-02 18:37:00')
|
108
|
+
|
109
|
+
assert_equal('20140402T183700Z', prop.value)
|
110
|
+
end
|
111
|
+
|
112
|
+
def test_set_date_time_offset
|
113
|
+
vcard = Tilia::VObject::Component::VCard.new
|
114
|
+
|
115
|
+
prop = vcard.create_property('BDAY')
|
116
|
+
prop.value = ActiveSupport::TimeZone.new('America/Toronto').parse('2014-04-02 18:37:00')
|
117
|
+
|
118
|
+
assert_equal('20140402T183700-0400', prop.value)
|
119
|
+
end
|
120
|
+
|
121
|
+
def test_get_date_time
|
122
|
+
datetime = ActiveSupport::TimeZone.new('America/Toronto').parse('2014-04-02 18:37:00')
|
123
|
+
|
124
|
+
vcard = Tilia::VObject::Component::VCard.new
|
125
|
+
prop = vcard.create_property('BDAY', datetime)
|
126
|
+
|
127
|
+
dt = prop.date_time
|
128
|
+
assert_equal('2014-04-02T18:37:00-04:00', dt.strftime('%FT%T%:z'), "For some reason this one failed. Current default timezone is: #{::Time.zone}")
|
129
|
+
end
|
130
|
+
|
131
|
+
def test_get_date
|
132
|
+
datetime = Time.zone.parse('2014-04-02')
|
133
|
+
|
134
|
+
vcard = Tilia::VObject::Component::VCard.new
|
135
|
+
prop = vcard.create_property('BDAY', datetime, nil, 'DATE')
|
136
|
+
|
137
|
+
assert_equal('DATE', prop.value_type)
|
138
|
+
assert_equal('BDAY:20140402', prop.serialize.chomp)
|
139
|
+
end
|
140
|
+
|
141
|
+
def test_get_date_incomplete
|
142
|
+
datetime = '--0407'
|
143
|
+
|
144
|
+
vcard = Tilia::VObject::Component::VCard.new
|
145
|
+
prop = vcard.add('BDAY', datetime)
|
146
|
+
|
147
|
+
dt = prop.date_time
|
148
|
+
# Note: if the year changes between the last line and the next line of
|
149
|
+
# code, this test may fail.
|
150
|
+
#
|
151
|
+
# If that happens, head outside and have a drink.
|
152
|
+
current = Time.zone.now
|
153
|
+
year = current.year
|
154
|
+
|
155
|
+
assert_equal("#{year}0407", dt.strftime('%Y%m%d'))
|
156
|
+
end
|
157
|
+
|
158
|
+
def test_get_date_incomplete_from_v_card
|
159
|
+
vcard = <<VCF
|
160
|
+
BEGIN:VCARD
|
161
|
+
VERSION:4.0
|
162
|
+
BDAY:--0407
|
163
|
+
END:VCARD
|
164
|
+
VCF
|
165
|
+
vcard = Tilia::VObject::Reader.read(vcard)
|
166
|
+
prop = vcard['BDAY']
|
167
|
+
|
168
|
+
dt = prop.date_time
|
169
|
+
# Note: if the year changes between the last line and the next line of
|
170
|
+
# code, this test may fail.
|
171
|
+
#
|
172
|
+
# If that happens, head outside and have a drink.
|
173
|
+
current = Time.zone.now
|
174
|
+
year = current.year
|
175
|
+
|
176
|
+
assert_equal("#{year}0407", dt.strftime('%Y%m%d'))
|
177
|
+
end
|
178
|
+
|
179
|
+
def test_validate
|
180
|
+
datetime = '--0407'
|
181
|
+
|
182
|
+
vcard = Tilia::VObject::Component::VCard.new
|
183
|
+
prop = vcard.add('BDAY', datetime)
|
184
|
+
|
185
|
+
assert_equal([], prop.validate)
|
186
|
+
end
|
187
|
+
|
188
|
+
def test_validate_broken
|
189
|
+
datetime = '123'
|
190
|
+
|
191
|
+
vcard = Tilia::VObject::Component::VCard.new
|
192
|
+
prop = vcard.add('BDAY', datetime)
|
193
|
+
|
194
|
+
assert_equal(
|
195
|
+
[ # Hash in Array!
|
196
|
+
'level' => 3,
|
197
|
+
'message' => 'The supplied value (123) is not a correct DATE-AND-OR-TIME property',
|
198
|
+
'node' => prop
|
199
|
+
],
|
200
|
+
prop.validate
|
201
|
+
)
|
202
|
+
end
|
203
|
+
end
|
204
|
+
end
|
205
|
+
end
|
@@ -0,0 +1,35 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
module Tilia
|
4
|
+
module VObject
|
5
|
+
class LanguageTagTest < Minitest::Test
|
6
|
+
def test_mime_dir
|
7
|
+
input = "BEGIN:VCARD\r\nVERSION:4.0\r\nLANG:nl\r\nEND:VCARD\r\n"
|
8
|
+
mime_dir = Tilia::VObject::Parser::MimeDir.new(input)
|
9
|
+
result = mime_dir.parse(input)
|
10
|
+
|
11
|
+
assert_kind_of(Tilia::VObject::Property::VCard::LanguageTag, result['LANG'])
|
12
|
+
assert_equal('nl', result['LANG'].value)
|
13
|
+
|
14
|
+
assert_equal(input, result.serialize)
|
15
|
+
end
|
16
|
+
|
17
|
+
def test_change_and_serialize
|
18
|
+
input = "BEGIN:VCARD\r\nVERSION:4.0\r\nLANG:nl\r\nEND:VCARD\r\n"
|
19
|
+
mime_dir = Tilia::VObject::Parser::MimeDir.new(input)
|
20
|
+
|
21
|
+
result = mime_dir.parse(input)
|
22
|
+
|
23
|
+
assert_kind_of(Tilia::VObject::Property::VCard::LanguageTag, result['LANG'])
|
24
|
+
# This replicates what the vcard converter does and triggered a bug in
|
25
|
+
# the past.
|
26
|
+
result['LANG'].value = ['de']
|
27
|
+
|
28
|
+
assert_equal('de', result['LANG'].value)
|
29
|
+
|
30
|
+
expected = "BEGIN:VCARD\r\nVERSION:4.0\r\nLANG:de\r\nEND:VCARD\r\n"
|
31
|
+
assert_equal(expected, result.serialize)
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
@@ -0,0 +1,338 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
module Tilia
|
4
|
+
module VObject
|
5
|
+
class PropertyTest < Minitest::Test
|
6
|
+
def test_to_string
|
7
|
+
cal = Tilia::VObject::Component::VCalendar.new
|
8
|
+
|
9
|
+
property = cal.create_property('propname', 'propvalue')
|
10
|
+
assert_equal('PROPNAME', property.name)
|
11
|
+
assert_equal('propvalue', property.to_s)
|
12
|
+
assert_equal('propvalue', property.to_s)
|
13
|
+
assert_equal('propvalue', property.value)
|
14
|
+
end
|
15
|
+
|
16
|
+
def test_create
|
17
|
+
cal = Tilia::VObject::Component::VCalendar.new
|
18
|
+
|
19
|
+
params = {
|
20
|
+
'param1' => 'value1',
|
21
|
+
'param2' => 'value2'
|
22
|
+
}
|
23
|
+
|
24
|
+
property = cal.create_property('propname', 'propvalue', params)
|
25
|
+
|
26
|
+
assert_equal('value1', property['param1'].value)
|
27
|
+
assert_equal('value2', property['param2'].value)
|
28
|
+
end
|
29
|
+
|
30
|
+
def test_set_value
|
31
|
+
cal = Tilia::VObject::Component::VCalendar.new
|
32
|
+
|
33
|
+
property = cal.create_property('propname', 'propvalue')
|
34
|
+
property.value = 'value2'
|
35
|
+
|
36
|
+
assert_equal('PROPNAME', property.name)
|
37
|
+
assert_equal('value2', property.to_s)
|
38
|
+
end
|
39
|
+
|
40
|
+
def test_parameter_exists
|
41
|
+
cal = Tilia::VObject::Component::VCalendar.new
|
42
|
+
property = cal.create_property('propname', 'propvalue')
|
43
|
+
property['paramname'] = 'paramvalue'
|
44
|
+
|
45
|
+
assert(property.key?('PARAMNAME'))
|
46
|
+
assert(property.key?('paramname'))
|
47
|
+
refute(property.key?('foo'))
|
48
|
+
end
|
49
|
+
|
50
|
+
def test_parameter_get
|
51
|
+
cal = Tilia::VObject::Component::VCalendar.new
|
52
|
+
property = cal.create_property('propname', 'propvalue')
|
53
|
+
property['paramname'] = 'paramvalue'
|
54
|
+
|
55
|
+
assert_kind_of(Tilia::VObject::Parameter, property['paramname'])
|
56
|
+
end
|
57
|
+
|
58
|
+
def test_parameter_not_exists
|
59
|
+
cal = Tilia::VObject::Component::VCalendar.new
|
60
|
+
property = cal.create_property('propname', 'propvalue')
|
61
|
+
property['paramname'] = 'paramvalue'
|
62
|
+
|
63
|
+
assert_nil(property['foo'])
|
64
|
+
end
|
65
|
+
|
66
|
+
def test_parameter_multiple
|
67
|
+
cal = Tilia::VObject::Component::VCalendar.new
|
68
|
+
property = cal.create_property('propname', 'propvalue')
|
69
|
+
property['paramname'] = 'paramvalue'
|
70
|
+
property.add('paramname', 'paramvalue')
|
71
|
+
|
72
|
+
assert_kind_of(Tilia::VObject::Parameter, property['paramname'])
|
73
|
+
assert_equal(2, property['paramname'].parts.size)
|
74
|
+
end
|
75
|
+
|
76
|
+
def test_set_parameter_as_string
|
77
|
+
cal = Tilia::VObject::Component::VCalendar.new
|
78
|
+
property = cal.create_property('propname', 'propvalue')
|
79
|
+
property['paramname'] = 'paramvalue'
|
80
|
+
|
81
|
+
assert_equal(1, property.parameters.size)
|
82
|
+
assert_kind_of(Tilia::VObject::Parameter, property.parameters['PARAMNAME'])
|
83
|
+
assert_equal('PARAMNAME', property.parameters['PARAMNAME'].name)
|
84
|
+
assert_equal('paramvalue', property.parameters['PARAMNAME'].value)
|
85
|
+
end
|
86
|
+
|
87
|
+
def test_unset_parameter
|
88
|
+
cal = Tilia::VObject::Component::VCalendar.new
|
89
|
+
property = cal.create_property('propname', 'propvalue')
|
90
|
+
property['paramname'] = 'paramvalue'
|
91
|
+
|
92
|
+
property.delete('PARAMNAME')
|
93
|
+
assert_equal(0, property.parameters.size)
|
94
|
+
end
|
95
|
+
|
96
|
+
def test_serialize
|
97
|
+
cal = Tilia::VObject::Component::VCalendar.new
|
98
|
+
property = cal.create_property('propname', 'propvalue')
|
99
|
+
|
100
|
+
assert_equal("PROPNAME:propvalue\r\n", property.serialize)
|
101
|
+
end
|
102
|
+
|
103
|
+
def test_serialize_param
|
104
|
+
cal = Tilia::VObject::Component::VCalendar.new
|
105
|
+
property = cal.create_property(
|
106
|
+
'propname',
|
107
|
+
'propvalue',
|
108
|
+
'paramname' => 'paramvalue',
|
109
|
+
'paramname2' => 'paramvalue2'
|
110
|
+
)
|
111
|
+
|
112
|
+
assert_equal("PROPNAME;PARAMNAME=paramvalue;PARAMNAME2=paramvalue2:propvalue\r\n", property.serialize)
|
113
|
+
end
|
114
|
+
|
115
|
+
def test_serialize_new_line
|
116
|
+
cal = Tilia::VObject::Component::VCalendar.new
|
117
|
+
property = cal.create_property('SUMMARY', "line1\nline2")
|
118
|
+
|
119
|
+
assert_equal("SUMMARY:line1\\nline2\r\n", property.serialize)
|
120
|
+
end
|
121
|
+
|
122
|
+
def test_serialize_long_line
|
123
|
+
cal = Tilia::VObject::Component::VCalendar.new
|
124
|
+
value = '!' * 200
|
125
|
+
property = cal.create_property('propname', value)
|
126
|
+
|
127
|
+
expected = 'PROPNAME:' + ('!' * 66) + "\r\n " + ('!' * 74) + "\r\n " + ('!' * 60) + "\r\n"
|
128
|
+
|
129
|
+
assert_equal(expected, property.serialize)
|
130
|
+
end
|
131
|
+
|
132
|
+
def test_serialize_utf8_line_fold
|
133
|
+
cal = Tilia::VObject::Component::VCalendar.new
|
134
|
+
value = ('!' * 65) + "\xc3\xa4bla" # inserted umlaut-a
|
135
|
+
property = cal.create_property('propname', value)
|
136
|
+
expected = 'PROPNAME:' + ('!' * 65) + "\r\n \xc3\xa4bla\r\n"
|
137
|
+
assert_equal(expected, property.serialize)
|
138
|
+
end
|
139
|
+
|
140
|
+
def test_get_iterator
|
141
|
+
cal = Tilia::VObject::Component::VCalendar.new
|
142
|
+
it = Tilia::VObject::ElementList.new([])
|
143
|
+
property = cal.create_property('propname', 'propvalue')
|
144
|
+
property.iterator = it
|
145
|
+
assert_equal(it, property.iterator)
|
146
|
+
end
|
147
|
+
|
148
|
+
def test_get_iterator_default
|
149
|
+
cal = Tilia::VObject::Component::VCalendar.new
|
150
|
+
property = cal.create_property('propname', 'propvalue')
|
151
|
+
it = property.iterator
|
152
|
+
assert_kind_of(Tilia::VObject::ElementList, it)
|
153
|
+
assert_equal(1, it.size)
|
154
|
+
end
|
155
|
+
|
156
|
+
def test_add_scalar
|
157
|
+
cal = Tilia::VObject::Component::VCalendar.new
|
158
|
+
property = cal.create_property('EMAIL')
|
159
|
+
|
160
|
+
property.add('myparam', 'value')
|
161
|
+
|
162
|
+
assert_equal(1, property.parameters.size)
|
163
|
+
|
164
|
+
assert_kind_of(Tilia::VObject::Parameter, property.parameters['MYPARAM'])
|
165
|
+
assert_equal('MYPARAM', property.parameters['MYPARAM'].name)
|
166
|
+
assert_equal('value', property.parameters['MYPARAM'].value)
|
167
|
+
end
|
168
|
+
|
169
|
+
def test_add_parameter
|
170
|
+
cal = Tilia::VObject::Component::VCalendar.new
|
171
|
+
prop = cal.create_property('EMAIL')
|
172
|
+
|
173
|
+
prop.add('MYPARAM', 'value')
|
174
|
+
|
175
|
+
assert_equal(1, prop.parameters.size)
|
176
|
+
assert_equal('MYPARAM', prop['myparam'].name)
|
177
|
+
end
|
178
|
+
|
179
|
+
def test_add_parameter_twice
|
180
|
+
cal = Tilia::VObject::Component::VCalendar.new
|
181
|
+
prop = cal.create_property('EMAIL')
|
182
|
+
|
183
|
+
prop.add('MYPARAM', 'value1')
|
184
|
+
prop.add('MYPARAM', 'value2')
|
185
|
+
|
186
|
+
assert_equal(1, prop.parameters.size)
|
187
|
+
assert_equal(2, prop.parameters['MYPARAM'].parts.size)
|
188
|
+
|
189
|
+
assert_equal('MYPARAM', prop['MYPARAM'].name)
|
190
|
+
end
|
191
|
+
|
192
|
+
def test_clone
|
193
|
+
cal = Tilia::VObject::Component::VCalendar.new
|
194
|
+
property = cal.create_property('EMAIL', 'value')
|
195
|
+
property['FOO'] = 'BAR'
|
196
|
+
|
197
|
+
property2 = property.clone
|
198
|
+
|
199
|
+
property['FOO'] = 'BAZ'
|
200
|
+
assert_equal('BAR', property2['FOO'].to_s)
|
201
|
+
end
|
202
|
+
|
203
|
+
def test_create_params
|
204
|
+
cal = Tilia::VObject::Component::VCalendar.new
|
205
|
+
property = cal.create_property(
|
206
|
+
'X-PROP',
|
207
|
+
'value',
|
208
|
+
'param1' => 'value1',
|
209
|
+
'param2' => ['value2', 'value3']
|
210
|
+
)
|
211
|
+
|
212
|
+
assert_equal(1, property['PARAM1'].parts.size)
|
213
|
+
assert_equal(2, property['PARAM2'].parts.size)
|
214
|
+
end
|
215
|
+
|
216
|
+
def test_validate_non_utf8
|
217
|
+
calendar = Tilia::VObject::Component::VCalendar.new
|
218
|
+
property = calendar.create_property('X-PROP', "Bla\x00")
|
219
|
+
result = property.validate(Tilia::VObject::Property::REPAIR)
|
220
|
+
|
221
|
+
assert_equal('Property contained a control character (0x00)', result[0]['message'])
|
222
|
+
assert_equal('Bla', property.value)
|
223
|
+
end
|
224
|
+
|
225
|
+
def test_validate_control_chars
|
226
|
+
s = 'chars['
|
227
|
+
[
|
228
|
+
0x7F, 0x5E, 0x5C, 0x3B, 0x3A, 0x2C, 0x22, 0x20,
|
229
|
+
0x1F, 0x1E, 0x1D, 0x1C, 0x1B, 0x1A, 0x19, 0x18,
|
230
|
+
0x17, 0x16, 0x15, 0x14, 0x13, 0x12, 0x11, 0x10,
|
231
|
+
0x0F, 0x0E, 0x0D, 0x0C, 0x0B, 0x0A, 0x09, 0x08,
|
232
|
+
0x07, 0x06, 0x05, 0x04, 0x03, 0x02, 0x01, 0x00
|
233
|
+
].each do |c|
|
234
|
+
s += format('%02X(%c)', c, c)
|
235
|
+
end
|
236
|
+
s += ']end'
|
237
|
+
|
238
|
+
calendar = Tilia::VObject::Component::VCalendar.new
|
239
|
+
property = calendar.create_property('X-PROP', s)
|
240
|
+
result = property.validate(Tilia::VObject::Property::REPAIR)
|
241
|
+
|
242
|
+
assert_equal('Property contained a control character (0x7f)', result[0]['message'])
|
243
|
+
assert_equal("chars[7F()5E(^)5C(\\\\)3B(\\;)3A(:)2C(\\,)22(\")20( )1F()1E()1D()1C()1B()1A()19()18()17()16()15()14()13()12()11()10()0F()0E()0D()0C()0B()0A(\\n)09(\t)08()07()06()05()04()03()02()01()00()]end", property.raw_mime_dir_value)
|
244
|
+
end
|
245
|
+
|
246
|
+
def test_validate_bad_property_name
|
247
|
+
calendar = Tilia::VObject::Component::VCalendar.new
|
248
|
+
property = calendar.create_property('X_*&PROP*', 'Bla')
|
249
|
+
result = property.validate(Tilia::VObject::Property::REPAIR)
|
250
|
+
|
251
|
+
assert_equal(result[0]['message'], 'The propertyname: X_*&PROP* contains invalid characters. Only A-Z, 0-9 and - are allowed')
|
252
|
+
assert_equal('X-PROP', property.name)
|
253
|
+
end
|
254
|
+
|
255
|
+
def test_get_value
|
256
|
+
calendar = Tilia::VObject::Component::VCalendar.new
|
257
|
+
property = calendar.create_property('SUMMARY', nil)
|
258
|
+
assert_equal([], property.parts)
|
259
|
+
assert_nil(property.value)
|
260
|
+
|
261
|
+
property.value = []
|
262
|
+
assert_equal([], property.parts)
|
263
|
+
assert_nil(property.value)
|
264
|
+
|
265
|
+
property.value = [1]
|
266
|
+
assert_equal([1], property.parts)
|
267
|
+
assert_equal(1, property.value)
|
268
|
+
|
269
|
+
property.value = [1, 2]
|
270
|
+
assert_equal([1, 2], property.parts)
|
271
|
+
assert_equal('1,2', property.value)
|
272
|
+
|
273
|
+
property.value = 'str'
|
274
|
+
assert_equal(['str'], property.parts)
|
275
|
+
assert_equal('str', property.value)
|
276
|
+
end
|
277
|
+
|
278
|
+
def test_array_access_set_int
|
279
|
+
calendar = Tilia::VObject::Component::VCalendar.new
|
280
|
+
property = calendar.create_property('X-PROP', nil)
|
281
|
+
|
282
|
+
calendar.add(property)
|
283
|
+
assert_raises(RuntimeError) { calendar['X-PROP'][0] = 'Something!' }
|
284
|
+
end
|
285
|
+
|
286
|
+
def test_array_access_unset_int
|
287
|
+
calendar = Tilia::VObject::Component::VCalendar.new
|
288
|
+
property = calendar.create_property('X-PROP', nil)
|
289
|
+
|
290
|
+
calendar.add(property)
|
291
|
+
assert_raises(RuntimeError) { calendar['X-PROP'].delete(0) }
|
292
|
+
end
|
293
|
+
|
294
|
+
def test_validate_bad_encoding
|
295
|
+
document = Tilia::VObject::Component::VCalendar.new
|
296
|
+
property = document.add('X-FOO', 'value')
|
297
|
+
property['ENCODING'] = 'invalid'
|
298
|
+
|
299
|
+
result = property.validate
|
300
|
+
assert_equal('ENCODING=INVALID is not valid for this document type.', result[0]['message'])
|
301
|
+
assert_equal(1, result[0]['level'])
|
302
|
+
end
|
303
|
+
|
304
|
+
def test_validate_bad_encoding_v_card4
|
305
|
+
document = Tilia::VObject::Component::VCard.new('VERSION' => '4.0')
|
306
|
+
property = document.add('X-FOO', 'value')
|
307
|
+
property['ENCODING'] = 'BASE64'
|
308
|
+
|
309
|
+
result = property.validate
|
310
|
+
|
311
|
+
assert_equal('ENCODING parameter is not valid in vCard 4.', result[0]['message'])
|
312
|
+
assert_equal(1, result[0]['level'])
|
313
|
+
end
|
314
|
+
|
315
|
+
def test_validate_bad_encoding_v_card3
|
316
|
+
document = Tilia::VObject::Component::VCard.new('VERSION' => '3.0')
|
317
|
+
property = document.add('X-FOO', 'value')
|
318
|
+
property['ENCODING'] = 'BASE64'
|
319
|
+
|
320
|
+
result = property.validate
|
321
|
+
|
322
|
+
assert_equal('ENCODING=BASE64 is not valid for this document type.', result[0]['message'])
|
323
|
+
assert_equal(1, result[0]['level'])
|
324
|
+
end
|
325
|
+
|
326
|
+
def test_validate_bad_encoding_v_card21
|
327
|
+
document = Tilia::VObject::Component::VCard.new('VERSION' => '2.1')
|
328
|
+
property = document.add('X-FOO', 'value')
|
329
|
+
property['ENCODING'] = 'B'
|
330
|
+
|
331
|
+
result = property.validate
|
332
|
+
|
333
|
+
assert_equal('ENCODING=B is not valid for this document type.', result[0]['message'])
|
334
|
+
assert_equal(1, result[0]['level'])
|
335
|
+
end
|
336
|
+
end
|
337
|
+
end
|
338
|
+
end
|