summaryrefslogtreecommitdiff
path: root/src/test/libical-glib/comprehensive.py
blob: 820b3472f52cc83f28b32dc69c1775ce5661bb6c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
#!/usr/bin/env python3
# GI_TYPELIB_PATH=$PREFIX/lib/girepository-1.0/ ./comprehensive.py

###############################################################################
#
# SPDX-FileCopyrightText: 2015 William Yu <williamyu@gnome.org>
#
# SPDX-License-Identifier: LGPL-2.1-only OR MPL-2.0
#
###############################################################################

''' Comprehensive testing for Python libical bindings '''

from gi.repository import ICalGLib
import gi

gi.require_version('ICalGLib', '3.0')


eventStr1 = \
    "BEGIN:VEVENT\n"                                \
    "UID:event-uid-123\n"                           \
    "SUMMARY;LANGUAGE=en-US:parent\n"               \
    "DTSTART;TZID=Europe/Prague:20140306T090000\n"  \
    "DTEND;TZID=Europe/Berlin:20140306T093000\n"    \
    "CLASS:PUBLIC\n"                                \
    "PRIORITY:5\n"                                  \
    "DTSTAMP:20140207T020756Z\n"                    \
    "TRANSP:OPAQUE\n"                               \
    "STATUS:CONFIRMED\n"                            \
    "SEQUENCE:0\n"                                  \
    "LOCATION;LANGUAGE=en-US:Location\n"            \
    "END:VEVENT\n"

eventStr2 = \
    "BEGIN:VEVENT\n"                                \
    "UID:event-uid-123\n"                           \
    "SUMMARY;LANGUAGE=en-US:childEvent1\n"          \
    "DTSTART;TZID=Europe/Prague:20140306T090000\n"  \
    "DTEND;TZID=Europe/Berlin:20140306T093000\n"    \
    "CLASS:PUBLIC\n"                                \
    "PRIORITY:5\n"                                  \
    "DTSTAMP:20140207T020756Z\n"                    \
    "TRANSP:OPAQUE\n"                               \
    "STATUS:CONFIRMED\n"                            \
    "SEQUENCE:0\n"                                  \
    "LOCATION;LANGUAGE=en-US:Location\n"            \
    "END:VEVENT\n"

eventStr3 = \
    "BEGIN:VEVENT\n"                                \
    "UID:event-uid-123\n"                           \
    "SUMMARY;LANGUAGE=en-US:childEvent2\n"          \
    "DTSTART;TZID=Europe/Prague:20140306T090000\n"  \
    "DTEND;TZID=Europe/Berlin:20140306T093000\n"    \
    "CLASS:PUBLIC\n"                                \
    "PRIORITY:5\n"                                  \
    "DTSTAMP:20140207T020756Z\n"                    \
    "TRANSP:OPAQUE\n"                               \
    "STATUS:CONFIRMED\n"                            \
    "SEQUENCE:0\n"                                  \
    "LOCATION;LANGUAGE=en-US:Location\n"            \
    "END:VEVENT\n"

eventStr4 = \
    "BEGIN:VEVENT\n"                                \
    "UID:event-uid-123\n"                           \
    "SUMMARY;LANGUAGE=en-US:childEvent3\n"          \
    "DTSTART;TZID=Europe/Prague:20140306T090000\n"  \
    "DTEND;TZID=Europe/Berlin:20140306T093000\n"    \
    "CLASS:PUBLIC\n"                                \
    "PRIORITY:5\n"                                  \
    "DTSTAMP:20140207T020756Z\n"                    \
    "TRANSP:OPAQUE\n"                               \
    "STATUS:CONFIRMED\n"                            \
    "SEQUENCE:0\n"                                  \
    "LOCATION;LANGUAGE=en-US:Location\n"            \
    "END:VCALENDAR\n"

eventStr5 = \
    "BEGIN:VCALENDAR\n"                             \
    "UID:event-uid-123\n"                           \
    "SUMMARY;LANGUAGE=en-US:childCalendar1\n"       \
    "DTSTART;TZID=Europe/Prague:20140306T090000\n"  \
    "DTEND;TZID=Europe/Berlin:20140306T093000\n"    \
    "CLASS:PUBLIC\n"                                \
    "PRIORITY:5\n"                                  \
    "DTSTAMP:20140207T020756Z\n"                    \
    "TRANSP:OPAQUE\n"                               \
    "STATUS:CONFIRMED\n"                            \
    "SEQUENCE:0\n"                                  \
    "LOCATION;LANGUAGE=en-US:Location\n"            \
    "END:VCALENDAR\n"

combinedString = \
    "BEGIN:VEVENT\r\n"                              \
    "UID:event-uid-123\r\n"                         \
    "SUMMARY;LANGUAGE=en-US:parent\r\n"             \
    "DTSTART;TZID=Europe/Prague:20140306T090000\r\n"\
    "DTEND;TZID=Europe/Berlin:20140306T093000\r\n"  \
    "CLASS:PUBLIC\r\n"                              \
    "PRIORITY:5\r\n"                                \
    "DTSTAMP:20140207T020756Z\r\n"                  \
    "TRANSP:OPAQUE\r\n"                             \
    "STATUS:CONFIRMED\r\n"                          \
    "SEQUENCE:0\r\n"                                \
    "LOCATION;LANGUAGE=en-US:Location\r\n"          \
    "BEGIN:VEVENT\r\n"                              \
    "UID:event-uid-123\r\n"                         \
    "SUMMARY;LANGUAGE=en-US:childEvent1\r\n"        \
    "DTSTART;TZID=Europe/Prague:20140306T090000\r\n" \
    "DTEND;TZID=Europe/Berlin:20140306T093000\r\n"  \
    "CLASS:PUBLIC\r\n"                              \
    "PRIORITY:5\r\n"                                \
    "DTSTAMP:20140207T020756Z\r\n"                  \
    "TRANSP:OPAQUE\r\n"                             \
    "STATUS:CONFIRMED\r\n"                          \
    "SEQUENCE:0\r\n"                                \
    "LOCATION;LANGUAGE=en-US:Location\r\n"          \
    "END:VEVENT\r\n"                                \
    "BEGIN:VEVENT\r\n"                              \
    "UID:event-uid-123\r\n"                         \
    "SUMMARY;LANGUAGE=en-US:childEvent2\r\n"        \
    "DTSTART;TZID=Europe/Prague:20140306T090000\r\n" \
    "DTEND;TZID=Europe/Berlin:20140306T093000\r\n"  \
    "CLASS:PUBLIC\r\n"                              \
    "PRIORITY:5\r\n"                                \
    "DTSTAMP:20140207T020756Z\r\n"                  \
    "TRANSP:OPAQUE\r\n"                             \
    "STATUS:CONFIRMED\r\n"                          \
    "SEQUENCE:0\r\n"                                \
    "LOCATION;LANGUAGE=en-US:Location\r\n"          \
    "END:VEVENT\r\n"                                \
    "BEGIN:VEVENT\r\n"                              \
    "UID:event-uid-123\r\n"                         \
    "SUMMARY;LANGUAGE=en-US:childEvent3\r\n"        \
    "DTSTART;TZID=Europe/Prague:20140306T090000\r\n" \
    "DTEND;TZID=Europe/Berlin:20140306T093000\r\n"  \
    "CLASS:PUBLIC\r\n"                              \
    "PRIORITY:5\r\n"                                \
    "DTSTAMP:20140207T020756Z\r\n"                  \
    "TRANSP:OPAQUE\r\n"                             \
    "STATUS:CONFIRMED\r\n"                          \
    "SEQUENCE:0\r\n"                                \
    "LOCATION;LANGUAGE=en-US:Location\r\n"          \
    "END:VEVENT\r\n"                                \
    "BEGIN:VCALENDAR\r\n"                           \
    "UID:event-uid-123\r\n"                         \
    "SUMMARY;LANGUAGE=en-US:childCalendar1\r\n"     \
    "DTSTART;TZID=Europe/Prague:20140306T090000\r\n" \
    "DTEND;TZID=Europe/Berlin:20140306T093000\r\n"  \
    "CLASS:PUBLIC\r\n"                              \
    "PRIORITY:5\r\n"                                \
    "DTSTAMP:20140207T020756Z\r\n"                  \
    "TRANSP:OPAQUE\r\n"                             \
    "STATUS:CONFIRMED\r\n"                          \
    "SEQUENCE:0\r\n"                                \
    "LOCATION;LANGUAGE=en-US:Location\r\n"          \
    "END:VCALENDAR\r\n"                             \
    "END:VEVENT\r\n"


def main():  # pylint: disable=too-many-locals
    ''' Test child component manipulation '''
    parent = ICalGLib.Component.new_from_string(eventStr1)
    comp1 = ICalGLib.Component.new_from_string(eventStr2)
    comp2 = ICalGLib.Component.new_from_string(eventStr3)
    comp3 = ICalGLib.Component.new_from_string(eventStr4)
    comp4 = ICalGLib.Component.new_from_string(eventStr5)

    parent.add_component(comp1)
    parent.add_component(comp2)
    parent.add_component(comp3)
    parent.add_component(comp4)

    assert parent.as_ical_string() == combinedString

    count = parent.count_components(ICalGLib.ComponentKind.VEVENT_COMPONENT)
    childComponent = parent.get_first_component(ICalGLib.ComponentKind.VEVENT_COMPONENT)
    for i in range(0, count):
        if childComponent.get_summary() == "childEvent2":
            childComponent.set_summary("childEventTwo")

            start = ICalGLib.Time.new_from_string("20141115T211923")
            end = ICalGLib.Time.new_from_string("20141115T221923")
            childComponent.set_dtstart(start)
            childComponent.set_dtend(end)

            childComponent.set_dtstamp(start)
            childComponent.set_location("East Lansing, MI, US")

            childComponent.set_relcalid("relcalid for childEventTwo")
            recurString = "RRULE:FREQ=DAILY;INTERVAL=10;COUNT=5"
            recurProperty = ICalGLib.Property.new_from_string(recurString)
            childComponent.add_property(recurProperty)
        if i != count-1:
            childComponent = parent.get_next_component(ICalGLib.ComponentKind.VEVENT_COMPONENT)

    modifiedCombinedString = parent.as_ical_string()
    ICalGLib.Component.new_from_string(modifiedCombinedString)

    count = parent.count_components(ICalGLib.ComponentKind.VEVENT_COMPONENT)
    childComponent = parent.get_first_component(ICalGLib.ComponentKind.VEVENT_COMPONENT)
    for i in range(0, count):
        if childComponent.get_summary() == "childEventTwo":
            childComponent.set_summary("childEventTwo")

            dtstart = childComponent.get_dtstart()
            startString = ICalGLib.Time.as_ical_string(dtstart)
            assert startString == "20141115T211923"
            dtend = childComponent.get_dtend()
            endString = ICalGLib.Time.as_ical_string(dtend)
            assert endString == "20141115T221923"

            timestamp = childComponent.get_dtstamp()
            assert ICalGLib.Time.as_ical_string(timestamp) == "20141115T211923"
            assert childComponent.get_location() == "East Lansing, MI, US"
            assert childComponent.get_relcalid() == "relcalid for childEventTwo"

            recurProperty = childComponent.get_first_property(ICalGLib.PropertyKind.RRULE_PROPERTY)
            assert recurProperty.as_ical_string() == "RRULE:FREQ=DAILY;INTERVAL=10;COUNT=5\r\n"
        if i != count-1:
            childComponent = parent.get_next_component(ICalGLib.ComponentKind.VEVENT_COMPONENT)


if __name__ == "__main__":
    main()