bbbca5c70950dd0dab1702a4c67ee5deda6b8dae
[philipp/winterrodeln/wrpylib.git] / tests / test_wrmwmarkup.py
1 #!/usr/bin/python3.4
2 # -*- coding: iso-8859-15 -*-
3 import collections
4 import wrpylib.wrmwmarkup
5 import wrpylib.mwmarkup
6 import textwrap
7 import unittest
8
9
10 class TestWrMwMarkup(unittest.TestCase):
11     def test_rodelbahnbox_to_sledrun(self):
12         wikitext = '''== Allgemeines ==
13         {{Rodelbahnbox
14         | Position             = 47.309820 N 9.986508 E
15         | Position oben        =
16         | Höhe oben            = 1244
17         | Position unten       =
18         | Höhe unten           = 806
19         | Länge                = 5045
20         | Schwierigkeit        =
21         | Lawinen              = gelegentlich
22         | Betreiber            =
23         | Öffentliche Anreise  = Ja
24         | Gehzeit              = 105
25         | Aufstieg möglich     = Nein
26         | Aufstieg getrennt    = Nein
27         | Aufstiegshilfe       = Nein
28         | Beleuchtungsanlage   = Nein
29         | Beleuchtungstage     =
30         | Rodelverleih         = Ja
31         | Gütesiegel           =
32         | Webauskunft          =
33         | Telefonauskunft      = +43-664-1808482 (Bergkristallhütte)
34         | Bild                 = Rodelbahn Bergkristallhütte 2009-03-03.jpg
35         | In Übersichtskarte   = Ja
36         | Forumid              = 72
37         }}
38         Die Rodelbahn zur Bergkristallhütte ist durchaus abwechslungsreich.'''
39         start, end, sledrun = wrpylib.wrmwmarkup.rodelbahnbox_to_sledrun(wikitext)
40         wrpylib.wrmwmarkup.sledrun_to_rodelbahnbox(sledrun)
41
42
43     def test_RodelbahnboxDictConverter(self):
44         v = wrpylib.wrmwmarkup.RodelbahnboxDictConverter()
45         other = collections.OrderedDict([
46             ('Position', (47.30982, 9.986508)),
47             ('Position oben', (None, None)),
48             ('Höhe oben', 1244),
49             ('Position unten', (None, None)),
50             ('Höhe unten', 806),
51             ('Länge', 5045),
52             ('Schwierigkeit', None),
53             ('Lawinen', 3),
54             ('Betreiber', None),
55             ('Öffentliche Anreise', 6),
56             ('Aufstieg möglich', True),
57             ('Aufstieg getrennt', (0.0, None)),
58             ('Gehzeit', 105),
59             ('Aufstiegshilfe', (False, None)),
60             ('Beleuchtungsanlage', (0.0, None)),
61             ('Beleuchtungstage', (None, None)),
62             ('Rodelverleih', (True, 'Ja')),
63             ('Gütesiegel', None),
64             ('Webauskunft', None),
65             ('Telefonauskunft', '+43-664-1808482 (Bergkristallhütte)'),
66             ('Bild', 'Rodelbahn Bergkristallhütte 2009-03-03.jpg'),
67             ('In Übersichtskarte', True),
68             ('Forumid', 72)])
69         sledrun = v.to_python(other)
70         assert sledrun.forum_id == 72
71         other2 = v.from_python(sledrun)
72         assert other == other2
73
74
75     def test_RodelbahnboxValidator(self):
76         v = wrpylib.wrmwmarkup.RodelbahnboxValidator()
77         wikitext = textwrap.dedent('''\
78         {{Rodelbahnbox
79         | Position             = 47.309820 N 9.986508 E
80         | Position oben        =
81         | Höhe oben            = 1244
82         | Position unten       =
83         | Höhe unten           = 806
84         | Länge                = 5045
85         | Schwierigkeit        =
86         | Lawinen              = gelegentlich
87         | Betreiber            =
88         | Öffentliche Anreise  = Ja
89         | Aufstieg möglich     = Nein
90         | Aufstieg getrennt    = Nein
91         | Gehzeit              = 105
92         | Aufstiegshilfe       = Nein
93         | Beleuchtungsanlage   = Nein
94         | Beleuchtungstage     =
95         | Rodelverleih         = Ja
96         | Gütesiegel           =
97         | Webauskunft          =
98         | Telefonauskunft      = +43-664-1808482 (Bergkristallhütte)
99         | Bild                 = Rodelbahn Bergkristallhütte 2009-03-03.jpg
100         | In Übersichtskarte   = Ja
101         | Forumid              = 72
102         }}''')
103         sledrun = v.to_python(wikitext)
104         wikitext2 = v.from_python(sledrun)
105         assert wikitext == wikitext2
106         wikitext = textwrap.dedent('''\
107         {{Rodelbahnbox
108         | Position             =
109         | Position oben        =
110         | Höhe oben            =
111         | Position unten       =
112         | Höhe unten           =
113         | Länge                =
114         | Schwierigkeit        =
115         | Lawinen              =
116         | Betreiber            =
117         | Öffentliche Anreise  =
118         | Aufstieg möglich     =
119         | Aufstieg getrennt    =
120         | Gehzeit              =
121         | Aufstiegshilfe       =
122         | Beleuchtungsanlage   =
123         | Beleuchtungstage     =
124         | Rodelverleih         =
125         | Gütesiegel           =
126         | Webauskunft          =
127         | Telefonauskunft      =
128         | Bild                 =
129         | In Übersichtskarte   =
130         | Forumid              =
131         }}''')
132         sledrun = v.to_python(wikitext)
133         wikitext2 = v.from_python(sledrun)
134         assert wikitext == wikitext2
135
136
137     def test_gasthausbox_to_inn(self):
138         wikitext = '''{{Gasthausbox
139         | Position          = 47.295549 N 9.986970 E
140         | Höhe              = 1250
141         | Betreiber         =
142         | Sitzplätze        =
143         | Übernachtung      =
144         | Rauchfrei         = Nein
145         | Rodelverleih      =
146         | Handyempfang      = A1; T-Mobile/Telering
147         | Homepage          = http://www.bergkristallhuette.com/
148         | E-Mail            = bergkristallhuette@gmx.at
149         | Telefon           = +43-664-1808482
150         | Bild              = Bergkritsallhütte 2009-02-07.JPG
151         | Rodelbahnen       = [[Bergkristallhütte]]
152         }}
153         Die Bergkristallhütte ist Teil des Boden-Vorsäß.'''
154         start, end, inn = wrpylib.wrmwmarkup.gasthausbox_to_inn(wikitext)
155         wrpylib.wrmwmarkup.inn_to_gasthausbox(inn)
156
157
158     def test_GasthausboxDictConverter(self):
159         v = wrpylib.wrmwmarkup.GasthausboxDictConverter()
160         other = collections.OrderedDict([
161         ('Position', (47.295549, 9.986970)),
162         ('Höhe', 1250),
163         ('Betreiber', None),
164         ('Sitzplätze', None),
165         ('Übernachtung', (None, None)),
166         ('Rauchfrei', (True, False)),
167         ('Rodelverleih', (None, None)),
168         ('Handyempfang', 'A1; T-Mobile/Telering'),
169         ('Homepage', 'http://www.bergkristallhuette.com/'),
170         ('E-Mail', 'bergkristallhuette@gmx.at'),
171         ('Telefon', '+43-664-1808482'),
172         ('Bild', 'Bergkritsallhütte 2009-02-07.JPG'),
173         ('Rodelbahnen', '[[Bergkristallhütte]]')])
174         inn = v.to_python(other)
175         assert inn.homepage == 'http://www.bergkristallhuette.com/'
176         other2 = v.from_python(inn)
177         assert other == other2
178
179
180     def test_GasthausboxValidator(self):
181         v = wrpylib.wrmwmarkup.GasthausboxValidator()
182         wikitext = textwrap.dedent('''\
183         {{Gasthausbox
184         | Position          = 47.295549 N 9.986970 E
185         | Höhe              = 1250
186         | Betreiber         =
187         | Sitzplätze        =
188         | Übernachtung      =
189         | Rauchfrei         = Nein
190         | Rodelverleih      =
191         | Handyempfang      = A1; T-Mobile/Telering
192         | Homepage          = http://www.bergkristallhuette.com/
193         | E-Mail            = bergkristallhuette@gmx.at
194         | Telefon           = +43-664-1808482
195         | Bild              = Bergkritsallhütte 2009-02-07.JPG
196         | Rodelbahnen       = [[Bergkristallhütte]]
197         }}''')
198         inn = v.to_python(wikitext)
199         wikitext2 = v.from_python(inn)
200         assert wikitext == wikitext2
201
202
203     def test_googlemap_to_wrmap(self):
204         wikitext = '''
205         <googlemap version="0.9" lat="47.113291" lon="11.272337" zoom="15" height="450">
206         (Parkplatz)47.114958,11.266026
207         Erster Parkplatz
208
209         (Gasthaus) 47.114715, 11.266262, Alt Bärnbad (Gasthaus)
210         6#FF014E9A
211         47.114715,11.266262
212         47.114135,11.268381
213         47.113421,11.269322
214         47.11277,11.269979
215         47.112408,11.271119
216         </googlemap>
217         '''
218         attributes, coords, paths = wrpylib.mwmarkup.parse_googlemap(wikitext)
219         json = wrpylib.wrmwmarkup.googlemap_to_wrmap(attributes, coords, paths)
220         assert json['properties']['lon'] == 11.272337
221         assert json['properties']['lat'] == 47.113291
222         assert json['properties']['zoom'] == 15
223         assert json['properties']['height'] == 450
224         assert json['features'][0]['properties']['type'] == 'parkplatz'
225         assert json['features'][0]['properties']['name'] == 'Erster Parkplatz'
226         assert json['features'][0]['geometry']['coordinates'] == [11.266026, 47.114958]
227         assert json['features'][1]['properties']['type'] == 'gasthaus'
228         assert json['features'][1]['properties']['name'] == 'Alt Bärnbad (Gasthaus)'
229         assert json['features'][1]['geometry']['coordinates'] == [11.266262, 47.114715]
230         assert json['features'][2]['properties']['type'] == 'rodelbahn'
231         assert json['features'][2]['geometry']['coordinates'] == [
232             [11.266262, 47.114715],
233             [11.268381, 47.114135],
234             [11.269322, 47.113421],
235             [11.269979, 47.11277],
236             [11.271119, 47.112408]]
237
238
239     def test_parse_wrmap(self):
240         wikitext = '''
241         <wrmap lat="47.2417134" lon="11.21408895" zoom="14" width="700" height="400">
242         <gasthaus name="Rosskogelhütte" wiki="Rosskogelhütte">47.240689 11.190454</gasthaus>
243         <parkplatz>47.245789 11.238971</parkplatz>
244         <haltestelle name="Oberperfuss Rangger Köpfl Lift">47.245711 11.238283</haltestelle>
245         <rodelbahn>
246             47.238587 11.203360
247             47.244951 11.230868
248             47.245470 11.237853
249         </rodelbahn>
250         </wrmap>
251         '''
252         json = wrpylib.wrmwmarkup.parse_wrmap(wikitext)
253         assert json['properties']['lon'] == 11.21408895
254         assert json['properties']['lat'] == 47.2417134
255         assert json['properties']['zoom'] == 14
256         assert json['properties']['width'] == 700
257         assert json['properties']['height'] == 400
258         assert json['features'][0]['properties']['type'] == 'gasthaus'
259         assert json['features'][0]['properties']['name'] == 'Rosskogelhütte'
260         assert json['features'][0]['properties']['wiki'] == 'Rosskogelhütte'
261         assert json['features'][0]['geometry']['coordinates'] == [11.190454, 47.240689]
262         assert json['features'][1]['properties']['type'] == 'parkplatz'
263         assert json['features'][1]['geometry']['coordinates'] == [11.238971, 47.245789]
264         assert json['features'][2]['properties']['type'] == 'haltestelle'
265         assert json['features'][2]['properties']['name'] == 'Oberperfuss Rangger Köpfl Lift'
266         assert json['features'][2]['geometry']['coordinates'] == [11.238283, 47.245711]
267         assert json['features'][3]['properties']['type'] == 'rodelbahn'
268         assert json['features'][3]['geometry']['coordinates'] == [
269             [11.203360, 47.238587],
270             [11.230868, 47.244951],
271             [11.237853, 47.245470]]
272
273
274     def test_create_wrmap(self):
275         geojson = {
276             'type': 'FeatureCollection',
277             'features':
278                 [{
279                     'type': 'Feature',
280                     'geometry': {
281                         'type': 'Point',
282                         'coordinates': [11.190454, 47.240689]},
283                     'properties': {'type': 'gasthaus', 'name': 'Rosskogelhütte', 'wiki': 'Rosskogelhütte'}
284                 }, {
285                     'type': 'Feature',
286                     'geometry': {
287                         'type': 'Point',
288                         'coordinates': [11.238971, 47.245789]},
289                     'properties': {'type': 'parkplatz'}
290                 }, {
291                     'type': 'Feature',
292                     'geometry': {
293                         'type': 'Point',
294                         'coordinates': [11.238283, 47.245711]},
295                     'properties': {'type': 'haltestelle', 'name': 'Oberperfuss Rangger Köpfl Lift'}
296                 }, {
297                     'type': 'Feature',
298                     'geometry': {
299                         'type': 'LineString',
300                         'coordinates': [
301                             [11.203360, 47.238587],
302                             [11.230868, 47.244951],
303                             [11.237853, 47.245470]]},
304                     'properties': {'type': 'rodelbahn'}
305                 }],
306             'properties': {
307                 'lon': 11.21408895,
308                 'lat': 47.2417134,
309                 'zoom': 14,
310                 'width': 700,
311                 'height': 400}
312         }
313
314         wikitext = wrpylib.wrmwmarkup.create_wrmap(geojson)
315         assert wikitext == textwrap.dedent('''\
316         <wrmap height="400" lat="47.241713" lon="11.214089" width="700" zoom="14">
317
318         <gasthaus name="Rosskogelhütte" wiki="Rosskogelhütte">47.240689 N 11.190454 E</gasthaus>
319         <parkplatz>47.245789 N 11.238971 E</parkplatz>
320         <haltestelle name="Oberperfuss Rangger Köpfl Lift">47.245711 N 11.238283 E</haltestelle>
321
322         <rodelbahn>
323         47.238587 N 11.203360 E
324         47.244951 N 11.230868 E
325         47.245470 N 11.237853 E
326         </rodelbahn>
327
328         </wrmap>''')
329