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