Now the tests are using the unittest module.
[philipp/winterrodeln/wrpylib.git] / tests / test_mwmarkup.py
1 #!/usr/bin/python2.7
2 # -*- coding: iso-8859-15 -*-
3 import wrpylib.mwmarkup
4 import unittest
5
6
7 class TestMwMarkup(unittest.TestCase):
8     def test_find_template(self):
9         wikitext = u'''== Allgemeines ==
10         {{Rodelbahnbox
11         | Position             = 47.309820 N 9.986508 E
12         | Position oben        =
13         | Höhe oben            = 1244
14         | Position unten       =
15         | Höhe unten           = 806
16         | Länge                = 5045
17         | Schwierigkeit        =
18         | Lawinen              = gelegentlich
19         | Betreiber            =
20         | Öffentliche Anreise  = Ja
21         | Gehzeit              = 105
22         | Aufstieg getrennt    = Nein
23         | Aufstiegshilfe       = Nein
24         | Beleuchtungsanlage   = Nein
25         | Beleuchtungstage     =
26         | Rodelverleih         = Ja
27         | Gütesiegel           =
28         | Webauskunft          =
29         | Telefonauskunft      = +43-664-1808482 (Bergkristallhütte)
30         | Bild                 = Rodelbahn Bergkristallhütte 2009-03-03.jpg
31         | In Übersichtskarte   = Ja
32         | Forumid              = 72
33         }}
34         Die Rodelbahn zur Bergkristallhütte ist durchaus abwechslungsreich.'''
35         start, end = wrpylib.mwmarkup.find_template(wikitext, u'Rodelbahnbox')
36         assert start == wikitext.find(u'{{')
37         assert end == wikitext.find(u'}}')+2
38
39
40     def test_TemplateValidator(self):
41         v = wrpylib.mwmarkup.TemplateValidator()
42         value = u'{{Rodelbahnbox | Unbenannt | Position = 47.309820 N 9.986508 E | Aufstieg möglich = Ja }}'
43         title, anonym_params, named_params = v.to_python(value)
44         assert title == u'Rodelbahnbox'
45         assert anonym_params == [u'Unbenannt']
46         assert named_params.keys() == [u'Position', u'Aufstieg möglich']
47         assert named_params.values() == ['47.309820 N 9.986508 E', 'Ja']
48         value2 = v.from_python((title, anonym_params, named_params))
49         assert value2 == u'{{Rodelbahnbox|Unbenannt|Position=47.309820 N 9.986508 E|Aufstieg möglich=Ja}}'
50         v = wrpylib.mwmarkup.TemplateValidator(as_table=True)
51         value3 = v.from_python((title, anonym_params, named_params))
52         assert value3 == \
53         u'{{Rodelbahnbox\n' + \
54         u'| Unbenannt\n' + \
55         u'| Position         = 47.309820 N 9.986508 E\n' + \
56         u'| Aufstieg möglich = Ja\n' + \
57         u'}}'
58         v = wrpylib.mwmarkup.TemplateValidator(strip=False)
59         title, anonym_params, named_params = v.to_python(value)
60         assert title == u'Rodelbahnbox '
61         assert anonym_params == [u' Unbenannt ']
62         assert named_params.keys() == [u' Position ', u' Aufstieg möglich ']
63         assert named_params.values() == [' 47.309820 N 9.986508 E ', ' Ja ']
64
65
66     def test_split_template(self):
67         wikitext = u'''== Allgemeines ==
68         {{Rodelbahnbox
69         | Position             = 47.309820 N 9.986508 E
70         | Position oben        =
71         | Höhe oben            = 1244
72         | Position unten       =
73         | Höhe unten           = 806
74         | Länge                = 5045
75         | Schwierigkeit        =
76         | Lawinen              = gelegentlich
77         | Betreiber            =
78         | Öffentliche Anreise  = Ja
79         | Gehzeit              = 105
80         | Aufstieg getrennt    = Nein
81         | Aufstiegshilfe       = Nein
82         | Beleuchtungsanlage   = Nein
83         | Beleuchtungstage     =
84         | Rodelverleih         = Ja
85         | Gütesiegel           =
86         | Webauskunft          =
87         | Telefonauskunft      = +43-664-1808482 (Bergkristallhütte)
88         | Bild                 = Rodelbahn Bergkristallhütte 2009-03-03.jpg
89         | In Übersichtskarte   = Ja
90         | Forumid              = 72
91         }}
92         Die Rodelbahn zur Bergkristallhütte ist durchaus abwechslungsreich.'''
93         start, end = wrpylib.mwmarkup.find_template(wikitext, u'Rodelbahnbox')
94         template_title, parameters = wrpylib.mwmarkup.split_template(wikitext[start:end])
95         assert template_title == u'Rodelbahnbox'
96         assert len(parameters) == 22
97         assert parameters['Position'] == u'47.309820 N 9.986508 E'
98         assert parameters['Telefonauskunft'] == u'+43-664-1808482 (Bergkristallhütte)'
99         assert parameters['Schwierigkeit'] == u''
100
101
102     def test_create_template(self):
103         wikitext = u'''{{Nicetemplate|Red|Bold|Position=Top|Alignment=Right}}'''
104         template_title, parameters = wrpylib.mwmarkup.split_template(wikitext)
105         keys = [u'1', u'2', u'Position', u'Alignment']
106         values = [parameters[k] for k in keys]
107         wikitext_generated = wrpylib.mwmarkup.create_template(template_title, values[:2], keys[2:], values[2:])
108         wikitext_table = wrpylib.mwmarkup.create_template(template_title, values[:2], keys[2:], values[2:], True)
109         assert wikitext_generated == wikitext
110
111
112     def test_find_tag(self):
113         wikitext = u'This is <tag>my first tag</tag> and <tag>my second tag</tag>.'
114         start, content, endtag, end = wrpylib.mwmarkup.find_tag(wikitext, u'tags')
115         assert (start, content, endtag, end) == (None, None, None, None)
116         start, content, endtag, end = wrpylib.mwmarkup.find_tag(wikitext, u'tag')
117         assert (start, content, endtag, end) == (8, 13, 25, 31)
118         start, content, endtag, end = wrpylib.mwmarkup.find_tag(wikitext, u'tag', end)
119         assert (start, content, endtag, end) == (36, 41, 54, 60)
120         wikitext = u'This is <tag myattrib="4"/>.'
121         start, content, endtag, end = wrpylib.mwmarkup.find_tag(wikitext, u'tag')
122         assert (start, content, endtag, end) == (8, None, None, 27)
123
124
125     def test_parse_googlemap(self):
126         wikitext = u'''
127         <googlemap version="0.9" lat="47.113291" lon="11.272337" zoom="15">
128         (Parkplatz)47.114958,11.266026
129         Erster Parkplatz
130
131         (Gasthaus) 47.114715, 11.266262, Alt Bärnbad (Gasthaus)
132         6#FF014E9A
133         47.114715,11.266262
134         47.114135,11.268381
135         47.113421,11.269322
136         47.11277,11.269979
137         47.112408,11.271119
138         </googlemap>
139         '''
140         attributes, coords, paths = wrpylib.mwmarkup.parse_googlemap(wikitext)
141         assert attributes['lon'] == 11.272337
142         assert attributes['lat'] == 47.113291
143         assert attributes['zoom'] == 15
144         assert coords == [
145             (11.266026, 47.114958, 'Parkplatz', 'Erster Parkplatz'),
146             (11.266262, 47.114715, 'Gasthaus', u'Alt Bärnbad (Gasthaus)')]
147         assert paths == [
148             ('6#FF014E9A', [
149                 (11.266262, 47.114715, None, None),
150                 (11.268381, 47.114135, None, None),
151                 (11.269322, 47.113421, None, None),
152                 (11.269979, 47.11277, None, None),
153                 (11.271119, 47.112408, None, None)])]
154         try:
155             result = wrpylib.mwmarkup.parse_googlemap(wikitext.replace('<googlemap', '|googlemap'))
156             assert False
157         except wrpylib.mwmarkup.ParseError:
158             pass
159