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