Added documentation and made things easier to run.
[xmltvtotgd.git] / test_icetotgd.py
blob0fd3c15bd43f9c6c747b0c5fea2818e7701332ce
1 #!/usr/bin/env python
2 import unittest
3 import icetotgd
4 import datetime
6 class T(unittest.TestCase):
8 fake_files = {
9 'trivial.xml': '''<?xml version="1.0" encoding="ISO-8859-1"?>
10 <!DOCTYPE tv SYSTEM "http://iceguide.icetv.com.au/iceguide/iceguide.dtd">
11 <tv>
12 <channel id="2300">
13 <display-name>TwentyThree</display-name>
14 <region-name>Melbourne</region-name>
15 <lcn>23</lcn>
16 </channel>
17 <programme start="20091030110000 +0000" stop="20091030113000 +0000" channel="2300">
18 <title lang="en">Spiderman</title>
19 <sub-title lang="en">The One Where Spiderman Eats Salad</sub-title>
20 <desc lang="en">Action is his reward.</desc>
21 <category lang="en">News</category>
22 <category lang="en">Sport</category>
23 <episode-num system="icetv">169-0</episode-num>
24 </programme>
25 <programme start="20091104093500 +0000" stop="20091104110500 +0000" channel="32">
26 <title lang="en">Soccer: UEFA Champions League</title>
27 <sub-title lang="en">TBA</sub-title>
28 <category lang="en">Football</category>
29 <category lang="en">Soccer</category>
30 <category lang="en">Sport</category>
31 <episode-num system="icetv">14328-72386</episode-num>
32 <previously-shown start="20090917"/>
33 </programme>
35 </tv>
36 '''}
38 programme = \
39 {'title': 'Spiderman',
40 'subtitle': 'The One Where Spiderman Eats Salad',
41 'desc': 'Action is his reward.',
42 'categories': ['News', 'Sport'],
43 'channel': '2300',
44 'start': datetime.datetime(2009, 10, 30, 11, 0),
45 'stop': datetime.datetime(2009, 10, 30, 11, 30)}
47 def open_fake(self, filename):
48 from StringIO import StringIO
49 return StringIO(self.fake_files[filename])
51 def setUp(self):
52 self.parser = icetotgd.IceToTgd()
53 self.parser.use_xml_file(self.open_fake('trivial.xml'))
55 def test_can_load_channels(self):
56 self.assertEqual(self.parser.channels,
57 {'2300': {'lcn': '23',
58 'display-name': 'TwentyThree'}})
60 def test_can_load_one_programme(self):
61 p = self.parser.programmes[0]
62 self.assertEqual(p['title'], 'Spiderman')
63 self.assertEqual(p['subtitle'], 'The One Where Spiderman Eats Salad')
64 self.assertEqual(p['desc'], 'Action is his reward.')
65 self.assertEqual(p['categories'], ['News', 'Sport'])
66 self.assertEqual(p['channel'], '2300')
67 self.assertEqual(p['rating'], None)
68 self.assertEqual(p['start'], datetime.datetime(2009, 10, 30, 11, 0))
69 self.assertEqual(p['stop'], datetime.datetime(2009, 10, 30, 11, 30))
71 def test_time_to_tgd(self):
72 start = datetime.datetime(2009, 10, 30, 11, 30)
73 tgd_start = icetotgd.tgd_time_from_timestamp(start)
74 self.assertEqual(tgd_start, '2009/10/30 22:30')
76 def test_duration_to_tgd(self):
77 start = datetime.datetime(2009, 10, 30, 11, 00)
78 stop = datetime.datetime(2009, 10, 30, 11, 30)
79 duration = stop - start
80 tgd_duration = icetotgd.tgd_duration_from_timedelta(duration)
81 self.assertEqual(tgd_duration, '30')
83 def test_programme_to_tgd(self):
84 tgd_line = self.parser.programme_to_tgd(self.programme)
85 self.assertEqual(tgd_line,
86 '23\t2009/10/30 22:00\t30\tSpiderman\tThe One Where Spiderman Eats Salad [News/Sport]\tAction is his reward.\tX\tN')
88 def test_programme_xml_without_desc(self):
89 p = self.parser.programmes[1]
90 self.assertEqual(p['desc'], None)
92 def test_programme_xml_without_desc(self):
93 p = self.programme.copy()
94 p['desc'] = None
95 tgd_line = self.parser.programme_to_tgd(p)
96 self.assertEqual(tgd_line,
97 '23\t2009/10/30 22:00\t30\tSpiderman\tThe One Where Spiderman Eats Salad [News/Sport]\t\tX\tN')
99 def test_str_or_empty(self):
100 from icetotgd import str_or_empty
101 self.assertEqual('', str_or_empty(None))
102 self.assertEqual('', str_or_empty(''))
103 self.assertEqual('foo', str_or_empty('foo'))
105 def test_filename_from_programme(self):
106 filename = icetotgd.tgd_filename_from_programme(self.programme)
107 self.assertEqual(filename, '20091030.tgd')
109 if __name__=='__main__':
110 unittest.main()