1"""
2Test suite for vdirsyncer.
3"""
4import hypothesis.strategies as st
5import urllib3.exceptions
6
7from vdirsyncer.vobject import normalize_item
8
9urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)
10
11
12def blow_up(*a, **kw):
13    raise AssertionError("Did not expect to be called.")
14
15
16def assert_item_equals(a, b):
17    assert normalize_item(a) == normalize_item(b)
18
19
20VCARD_TEMPLATE = """BEGIN:VCARD
21VERSION:3.0
22FN:Cyrus Daboo
23N:Daboo;Cyrus;;;
24ADR;TYPE=POSTAL:;2822 Email HQ;Suite 2821;RFCVille;PA;15213;USA
25EMAIL;TYPE=PREF:cyrus@example.com
26NICKNAME:me
27NOTE:Example VCard.
28ORG:Self Employed
29TEL;TYPE=VOICE:412 605 0499
30TEL;TYPE=FAX:412 605 0705
31URL;VALUE=URI:http://www.example.com
32X-SOMETHING:{r}
33UID:{uid}
34END:VCARD"""
35
36TASK_TEMPLATE = """BEGIN:VCALENDAR
37VERSION:2.0
38PRODID:-//dmfs.org//mimedir.icalendar//EN
39BEGIN:VTODO
40CREATED:20130721T142233Z
41DTSTAMP:20130730T074543Z
42LAST-MODIFIED;VALUE=DATE-TIME:20140122T151338Z
43SEQUENCE:2
44SUMMARY:Book: Kowlani - Tödlicher Staub
45X-SOMETHING:{r}
46UID:{uid}
47END:VTODO
48END:VCALENDAR"""
49
50
51BARE_EVENT_TEMPLATE = """BEGIN:VEVENT
52DTSTART:19970714T170000Z
53DTEND:19970715T035959Z
54SUMMARY:Bastille Day Party
55X-SOMETHING:{r}
56UID:{uid}
57END:VEVENT"""
58
59
60EVENT_TEMPLATE = (
61    """BEGIN:VCALENDAR
62VERSION:2.0
63PRODID:-//hacksw/handcal//NONSGML v1.0//EN
64"""
65    + BARE_EVENT_TEMPLATE
66    + """
67END:VCALENDAR"""
68)
69
70EVENT_WITH_TIMEZONE_TEMPLATE = (
71    """BEGIN:VCALENDAR
72BEGIN:VTIMEZONE
73TZID:Europe/Rome
74X-LIC-LOCATION:Europe/Rome
75BEGIN:DAYLIGHT
76TZOFFSETFROM:+0100
77TZOFFSETTO:+0200
78TZNAME:CEST
79DTSTART:19700329T020000
80RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=3
81END:DAYLIGHT
82BEGIN:STANDARD
83TZOFFSETFROM:+0200
84TZOFFSETTO:+0100
85TZNAME:CET
86DTSTART:19701025T030000
87RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10
88END:STANDARD
89END:VTIMEZONE
90"""
91    + BARE_EVENT_TEMPLATE
92    + """
93END:VCALENDAR"""
94)
95
96
97SIMPLE_TEMPLATE = """BEGIN:FOO
98UID:{uid}
99X-SOMETHING:{r}
100HAHA:YES
101END:FOO"""
102
103printable_characters_strategy = st.text(
104    st.characters(blacklist_categories=("Cc", "Cs"))
105)
106
107uid_strategy = st.text(
108    st.characters(blacklist_categories=("Zs", "Zl", "Zp", "Cc", "Cs")), min_size=1
109).filter(lambda x: x.strip() == x)
110