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