forked from varia/varia.website
94 lines
3.2 KiB
Python
94 lines
3.2 KiB
Python
|
# -*- coding: utf-8 -*-
|
||
|
from __future__ import unicode_literals
|
||
|
|
||
|
import unittest
|
||
|
|
||
|
import datetime
|
||
|
import icalendar
|
||
|
import os
|
||
|
import pytz
|
||
|
|
||
|
|
||
|
class TestEncoding(unittest.TestCase):
|
||
|
|
||
|
def test_create_from_ical(self):
|
||
|
directory = os.path.dirname(__file__)
|
||
|
with open(os.path.join(directory, 'encoding.ics'), 'rb') as fp:
|
||
|
data = fp.read()
|
||
|
cal = icalendar.Calendar.from_ical(data)
|
||
|
|
||
|
self.assertEqual(cal['prodid'].to_ical().decode('utf-8'),
|
||
|
"-//Plönë.org//NONSGML plone.app.event//EN")
|
||
|
self.assertEqual(cal['X-WR-CALDESC'].to_ical().decode('utf-8'),
|
||
|
"test non ascii: äöü ÄÖÜ €")
|
||
|
|
||
|
event = cal.walk('VEVENT')[0]
|
||
|
self.assertEqual(event['SUMMARY'].to_ical().decode('utf-8'),
|
||
|
'Non-ASCII Test: ÄÖÜ äöü €')
|
||
|
self.assertEqual(
|
||
|
event['DESCRIPTION'].to_ical().decode('utf-8'),
|
||
|
'icalendar should be able to handle non-ascii: €äüöÄÜÖ.'
|
||
|
)
|
||
|
self.assertEqual(event['LOCATION'].to_ical().decode('utf-8'),
|
||
|
'Tribstrül')
|
||
|
|
||
|
def test_create_to_ical(self):
|
||
|
cal = icalendar.Calendar()
|
||
|
|
||
|
cal.add('prodid', "-//Plönë.org//NONSGML plone.app.event//EN")
|
||
|
cal.add('version', "2.0")
|
||
|
cal.add('x-wr-calname', "äöü ÄÖÜ €")
|
||
|
cal.add('x-wr-caldesc', "test non ascii: äöü ÄÖÜ €")
|
||
|
cal.add('x-wr-relcalid', "12345")
|
||
|
|
||
|
event = icalendar.Event()
|
||
|
event.add(
|
||
|
'dtstart',
|
||
|
pytz.utc.localize(datetime.datetime(2010, 10, 10, 10, 0, 0))
|
||
|
)
|
||
|
event.add(
|
||
|
'dtend',
|
||
|
pytz.utc.localize(datetime.datetime(2010, 10, 10, 12, 0, 0))
|
||
|
)
|
||
|
event.add(
|
||
|
'created',
|
||
|
pytz.utc.localize(datetime.datetime(2010, 10, 10, 0, 0, 0))
|
||
|
)
|
||
|
event.add('uid', '123456')
|
||
|
event.add('summary', 'Non-ASCII Test: ÄÖÜ äöü €')
|
||
|
event.add(
|
||
|
'description',
|
||
|
'icalendar should be able to de/serialize non-ascii.'
|
||
|
)
|
||
|
event.add('location', 'Tribstrül')
|
||
|
cal.add_component(event)
|
||
|
|
||
|
ical_lines = cal.to_ical().splitlines()
|
||
|
cmp = b'PRODID:-//Pl\xc3\xb6n\xc3\xab.org//NONSGML plone.app.event//EN'
|
||
|
self.assertTrue(cmp in ical_lines)
|
||
|
|
||
|
def test_create_event_simple(self):
|
||
|
event = icalendar.Event()
|
||
|
event.add(
|
||
|
"dtstart",
|
||
|
pytz.utc.localize(datetime.datetime(2010, 10, 10, 0, 0, 0))
|
||
|
)
|
||
|
event.add("summary", "åäö")
|
||
|
out = event.to_ical()
|
||
|
summary = b'SUMMARY:\xc3\xa5\xc3\xa4\xc3\xb6'
|
||
|
self.assertTrue(summary in out.splitlines())
|
||
|
|
||
|
def test_unicode_parameter_name(self):
|
||
|
# Test for issue #80
|
||
|
cal = icalendar.Calendar()
|
||
|
event = icalendar.Event()
|
||
|
event.add('DESCRIPTION', 'äöüßÄÖÜ')
|
||
|
cal.add_component(event)
|
||
|
c = cal.to_ical()
|
||
|
self.assertEqual(
|
||
|
c,
|
||
|
b'BEGIN:VCALENDAR\r\nBEGIN:VEVENT\r\nDESCRIPTION:'
|
||
|
+ b'\xc3\xa4\xc3\xb6\xc3\xbc\xc3\x9f\xc3\x84\xc3\x96\xc3\x9c\r\n'
|
||
|
+ b'END:VEVENT\r\nEND:VCALENDAR\r\n'
|
||
|
)
|