Modifications done by "2to3-3.4 -w -n".
[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 = '''== 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, 'Rodelbahnbox')
36         assert start == wikitext.find('{{')
37         assert end == wikitext.find('}}')+2
38
39
40     def test_TemplateValidator(self):
41         v = wrpylib.mwmarkup.TemplateValidator()
42         value = '{{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 == 'Rodelbahnbox'
45         assert anonym_params == ['Unbenannt']
46         assert list(named_params.keys()) == ['Position', 'Aufstieg möglich']
47         assert list(named_params.values()) == ['47.309820 N 9.986508 E', 'Ja']
48         value2 = v.from_python((title, anonym_params, named_params))
49         assert value2 == '{{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         '{{Rodelbahnbox\n' + \
54         '| Unbenannt\n' + \
55         '| Position         = 47.309820 N 9.986508 E\n' + \
56         '| Aufstieg möglich = Ja\n' + \
57         '}}'
58         v = wrpylib.mwmarkup.TemplateValidator(strip=False)
59         title, anonym_params, named_params = v.to_python(value)
60         assert title == 'Rodelbahnbox '
61         assert anonym_params == [' Unbenannt ']
62         assert list(named_params.keys()) == [' Position ', ' Aufstieg möglich ']
63         assert list(named_params.values()) == [' 47.309820 N 9.986508 E ', ' Ja ']
64
65
66     def test_split_template(self):
67         wikitext = '''== 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, 'Rodelbahnbox')
94         template_title, parameters = wrpylib.mwmarkup.split_template(wikitext[start:end])
95         assert template_title == 'Rodelbahnbox'
96         assert len(parameters) == 22
97         assert parameters['Position'] == '47.309820 N 9.986508 E'
98         assert parameters['Telefonauskunft'] == '+43-664-1808482 (Bergkristallhütte)'
99         assert parameters['Schwierigkeit'] == ''
100
101
102     def test_create_template(self):
103         wikitext = '''{{Nicetemplate|Red|Bold|Position=Top|Alignment=Right}}'''
104         template_title, parameters = wrpylib.mwmarkup.split_template(wikitext)
105         keys = ['1', '2', 'Position', '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 = 'This is <tag>my first tag</tag> and <tag>my second tag</tag>.'
114         start, content, endtag, end = wrpylib.mwmarkup.find_tag(wikitext, 'tags')
115         assert (start, content, endtag, end) == (None, None, None, None)
116         start, content, endtag, end = wrpylib.mwmarkup.find_tag(wikitext, 'tag')
117         assert (start, content, endtag, end) == (8, 13, 25, 31)
118         start, content, endtag, end = wrpylib.mwmarkup.find_tag(wikitext, 'tag', end)
119         assert (start, content, endtag, end) == (36, 41, 54, 60)
120         wikitext = 'This is <tag myattrib="4"/>.'
121         start, content, endtag, end = wrpylib.mwmarkup.find_tag(wikitext, 'tag')
122         assert (start, content, endtag, end) == (8, None, None, 27)
123
124
125     def test_parse_googlemap(self):
126         wikitext = '''
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', '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