#!/usr/bin/python3.4 # -*- coding: iso-8859-15 -*- import collections import textwrap import unittest import mwparserfromhell import wrpylib.mwmarkup from wrpylib.wrmwmarkup import * class TestSledrun(unittest.TestCase): def test_sledrun_from_rodelbahnbox(self): class Sledrun: pass rodelbahnbox = collections.OrderedDict([ ('Position', LonLat(9.986508, 47.30982)), ('Position oben', LonLat(None, None)), ('Höhe oben', 1244), ('Position unten', LonLat(8.506047, 46.20210)), ('Höhe unten', None), ('Länge', 5045), ('Schwierigkeit', 3), ('Lawinen', 2), ('Betreiber', 'SchneeFunFit'), ('Öffentliche Anreise', 2), ('Aufstieg möglich', True), ('Aufstieg getrennt', (0.0, None)), ('Gehzeit', 105), ('Aufstiegshilfe', [('Sessellift', 'gratis'), ('Bus', None)]), ('Beleuchtungsanlage', (0.0, 'in Planung für 2020')), ('Beleuchtungstage', (None, None)), ('Rodelverleih', []), ('Gütesiegel', []), ('Webauskunft', (True, 'http://example.com/schneelage')), ('Telefonauskunft', [('+43-664-1808482', 'Bergkristallhütte')]), ('Bild', 'Rodelbahn Bergkristallhütte 2009-03-03.jpg'), ('In Übersichtskarte', True), ('Forumid', 72)]) sledrun = Sledrun() sledrun_from_rodelbahnbox(rodelbahnbox, sledrun) self.assertEqual(47.30982, sledrun.position_latitude) self.assertEqual(9.986508, sledrun.position_longitude) self.assertEqual(None, sledrun.top_latitude) self.assertEqual(None, sledrun.top_longitude) self.assertEqual(1244, sledrun.top_elevation) self.assertEqual(46.20210, sledrun.bottom_latitude) self.assertEqual(8.506047, sledrun.bottom_longitude) self.assertEqual(None, sledrun.bottom_elevation) self.assertEqual(5045, sledrun.length) self.assertEqual(3, sledrun.difficulty) self.assertEqual(2, sledrun.avalanches) self.assertEqual('SchneeFunFit', sledrun.operator) self.assertEqual(2, sledrun.public_transport) self.assertEqual(True, sledrun.walkup_possible) self.assertEqual(105, sledrun.walkup_time) self.assertEqual(0.0, sledrun.walkup_separate) self.assertEqual(None, sledrun.walkup_separate_comment) self.assertEqual(True, sledrun.lift) self.assertEqual('Sessellift (gratis); Bus', sledrun.lift_details) self.assertEqual(0.0, sledrun.night_light) self.assertEqual('in Planung für 2020', sledrun.night_light_comment) self.assertEqual(None, sledrun.night_light_days) self.assertEqual(None, sledrun.night_light_days_comment) self.assertEqual(False, sledrun.sled_rental) self.assertEqual('Nein', sledrun.sled_rental_comment) self.assertEqual('Nein', sledrun.cachet) self.assertEqual('http://example.com/schneelage', sledrun.information_web) self.assertEqual('+43-664-1808482 (Bergkristallhütte)', sledrun.information_phone) self.assertEqual('Rodelbahn Bergkristallhütte 2009-03-03.jpg', sledrun.image) self.assertEqual(True, sledrun.show_in_overview) self.assertEqual(72, sledrun.forum_id) def test_sledrun_to_rodelbahnbox(self): class Sledrun: pass sledrun = Sledrun() sledrun.position_longitude = 13.5 sledrun.position_latitude = 50.7 sledrun.top_longitude = 12.2 sledrun.top_latitude = 49.8 sledrun.top_elevation = 3456 sledrun.bottom_longitude = 9.89 sledrun.bottom_latitude = 51.2 sledrun.bottom_elevation = 2075 sledrun.length = 9644 sledrun.difficulty = 3 sledrun.avalanches = 2 sledrun.operator = 'McRodel' sledrun.public_transport = 3 sledrun.walkup_possible = True sledrun.walkup_time = 77 sledrun.walkup_separate = 0.5 sledrun.walkup_separate_comment = 'Nur unterer Teil' sledrun.lift = True sledrun.lift_details = 'Sessellift' sledrun.night_light = 1.0 sledrun.night_light_comment = 'Schlecht beleuchtet' sledrun.night_light_days = 6 sledrun.night_light_days_comment = 'Mo-Sa' sledrun.sled_rental = True sledrun.sled_rental_comment = 'In der Hütte' sledrun.cachet = 'Tiroler Rodelbahngütesielgel mittelschwer 2010' sledrun.information_web = 'http://example.com' sledrun.information_phone = '+4364412345678' sledrun.image = 'Sicht_von_unten.jpg' sledrun.show_in_overview = True sledrun.forum_id = 65 rodelbahnbox = sledrun_to_rodelbahnbox(sledrun) self.assertEqual(rodelbahnbox['Position'], LonLat(lon=13.5, lat=50.7)) self.assertEqual(rodelbahnbox['Position oben'], LonLat(12.2, 49.8)) self.assertEqual(rodelbahnbox['Höhe oben'], 3456) self.assertEqual(rodelbahnbox['Position unten'], LonLat(9.89, 51.2)) self.assertEqual(rodelbahnbox['Höhe unten'], 2075) self.assertEqual(rodelbahnbox['Länge'], 9644) self.assertEqual(rodelbahnbox['Schwierigkeit'], 3) self.assertEqual(rodelbahnbox['Lawinen'], 2) self.assertEqual(rodelbahnbox['Betreiber'], 'McRodel') self.assertEqual(rodelbahnbox['Öffentliche Anreise'], 3) self.assertEqual(rodelbahnbox['Aufstieg möglich'], True) self.assertEqual(rodelbahnbox['Aufstieg getrennt'], (0.5, 'Nur unterer Teil')) self.assertEqual(rodelbahnbox['Gehzeit'], 77) self.assertEqual(rodelbahnbox['Aufstiegshilfe'], [('Sessellift', None)]) self.assertEqual(rodelbahnbox['Beleuchtungsanlage'], (1.0, 'Schlecht beleuchtet')) self.assertEqual(rodelbahnbox['Beleuchtungstage'], (6, 'Mo-Sa')) self.assertEqual(rodelbahnbox['Rodelverleih'], (True, 'In der Hütte')) self.assertEqual(rodelbahnbox['Gütesiegel'], 'Tiroler Rodelbahngütesielgel mittelschwer 2010') self.assertEqual(rodelbahnbox['Webauskunft'], 'http://example.com') self.assertEqual(rodelbahnbox['Bild'], 'Sicht_von_unten.jpg') self.assertEqual(rodelbahnbox['In Übersichtskarte'], True) self.assertEqual(rodelbahnbox['Forumid'], 65) class TestInn(unittest.TestCase): def test_inn_from_gasthausbox(self): class Inn: pass gasthausbox = [] # TODO: populate for test inn = Inn() inn_from_gasthausbox(gasthausbox, inn) # TODO: check result def test_inn_to_gasthausbox(self): class Inn: pass inn = Inn() # TODO: populate for test gasthausbox = inn_to_gasthausbox(inn) # TODO: check result class TestLonlatEle(unittest.TestCase): def test_lonlat_ele_from_template(self): template = mwparserfromhell.parse('{{Position oben|46.942239 N 11.468819 E|1866}}').filter_templates()[0] lonlat, ele = lonlat_ele_from_template(template) self.assertEqual(LonLat(11.468819, 46.942239), lonlat) self.assertEqual(1866, ele) def test_latlon_ele_to_template(self): template = latlon_ele_to_template((LonLat(11.468819, 46.942239), 1866), 'Position oben') self.assertEqual('{{Position oben|46.942239 N 11.468819 E|1866}}', template) class TestWrMwMarkup(unittest.TestCase): def test_rodelbahnbox_to_sledrun(self): wikitext = '''== Allgemeines == {{Rodelbahnbox | Position = 47.309820 N 9.986508 E | Position oben = | Höhe oben = 1244 | Position unten = | Höhe unten = 806 | Länge = 5045 | Schwierigkeit = | Lawinen = gelegentlich | Betreiber = | Öffentliche Anreise = Ja | Gehzeit = 105 | Aufstieg möglich = Nein | Aufstieg getrennt = Nein | Aufstiegshilfe = Nein | Beleuchtungsanlage = Nein | Beleuchtungstage = | Rodelverleih = Ja | Gütesiegel = | Webauskunft = | Telefonauskunft = +43-664-1808482 (Bergkristallhütte) | Bild = Rodelbahn Bergkristallhütte 2009-03-03.jpg | In Übersichtskarte = Ja | Forumid = 72 }} Die Rodelbahn zur Bergkristallhütte ist durchaus abwechslungsreich.''' start, end, sledrun = wrpylib.wrmwmarkup.rodelbahnbox_to_sledrun(wikitext) wrpylib.wrmwmarkup.sledrun_to_rodelbahnbox(sledrun) def test_RodelbahnboxDictConverter(self): v = wrpylib.wrmwmarkup.RodelbahnboxDictConverter() sledrun = v.to_python(other) assert sledrun.forum_id == 72 other2 = v.from_python(sledrun) assert other == other2 def test_RodelbahnboxValidator(self): v = wrpylib.wrmwmarkup.RodelbahnboxValidator() wikitext = textwrap.dedent('''\ {{Rodelbahnbox | Position = 47.309820 N 9.986508 E | Position oben = | Höhe oben = 1244 | Position unten = | Höhe unten = 806 | Länge = 5045 | Schwierigkeit = | Lawinen = gelegentlich | Betreiber = | Öffentliche Anreise = Ja | Aufstieg möglich = Nein | Aufstieg getrennt = Nein | Gehzeit = 105 | Aufstiegshilfe = Nein | Beleuchtungsanlage = Nein | Beleuchtungstage = | Rodelverleih = Ja | Gütesiegel = | Webauskunft = | Telefonauskunft = +43-664-1808482 (Bergkristallhütte) | Bild = Rodelbahn Bergkristallhütte 2009-03-03.jpg | In Übersichtskarte = Ja | Forumid = 72 }}''') sledrun = v.to_python(wikitext) wikitext2 = v.from_python(sledrun) assert wikitext == wikitext2 wikitext = textwrap.dedent('''\ {{Rodelbahnbox | Position = | Position oben = | Höhe oben = | Position unten = | Höhe unten = | Länge = | Schwierigkeit = | Lawinen = | Betreiber = | Öffentliche Anreise = | Aufstieg möglich = | Aufstieg getrennt = | Gehzeit = | Aufstiegshilfe = | Beleuchtungsanlage = | Beleuchtungstage = | Rodelverleih = | Gütesiegel = | Webauskunft = | Telefonauskunft = | Bild = | In Übersichtskarte = | Forumid = }}''') sledrun = v.to_python(wikitext) wikitext2 = v.from_python(sledrun) assert wikitext == wikitext2 def test_gasthausbox_to_inn(self): wikitext = '''{{Gasthausbox | Position = 47.295549 N 9.986970 E | Höhe = 1250 | Betreiber = | Sitzplätze = | Übernachtung = | Rauchfrei = Nein | Rodelverleih = | Handyempfang = A1; T-Mobile/Telering | Homepage = http://www.bergkristallhuette.com/ | E-Mail = bergkristallhuette@gmx.at | Telefon = +43-664-1808482 | Bild = Bergkritsallhütte 2009-02-07.JPG | Rodelbahnen = [[Bergkristallhütte]] }} Die Bergkristallhütte ist Teil des Boden-Vorsäß.''' start, end, inn = wrpylib.wrmwmarkup.gasthausbox_to_inn(wikitext) wrpylib.wrmwmarkup.inn_to_gasthausbox(inn) def test_GasthausboxDictConverter(self): v = wrpylib.wrmwmarkup.GasthausboxDictConverter() other = collections.OrderedDict([ ('Position', (47.295549, 9.986970)), ('Höhe', 1250), ('Betreiber', None), ('Sitzplätze', None), ('Übernachtung', (None, None)), ('Rauchfrei', (True, False)), ('Rodelverleih', (None, None)), ('Handyempfang', 'A1; T-Mobile/Telering'), ('Homepage', 'http://www.bergkristallhuette.com/'), ('E-Mail', 'bergkristallhuette@gmx.at'), ('Telefon', '+43-664-1808482'), ('Bild', 'Bergkritsallhütte 2009-02-07.JPG'), ('Rodelbahnen', '[[Bergkristallhütte]]')]) inn = v.to_python(other) assert inn.homepage == 'http://www.bergkristallhuette.com/' other2 = v.from_python(inn) assert other == other2 def test_GasthausboxValidator(self): v = wrpylib.wrmwmarkup.GasthausboxValidator() wikitext = textwrap.dedent('''\ {{Gasthausbox | Position = 47.295549 N 9.986970 E | Höhe = 1250 | Betreiber = | Sitzplätze = | Übernachtung = | Rauchfrei = Nein | Rodelverleih = | Handyempfang = A1; T-Mobile/Telering | Homepage = http://www.bergkristallhuette.com/ | E-Mail = bergkristallhuette@gmx.at | Telefon = +43-664-1808482 | Bild = Bergkritsallhütte 2009-02-07.JPG | Rodelbahnen = [[Bergkristallhütte]] }}''') inn = v.to_python(wikitext) wikitext2 = v.from_python(inn) assert wikitext == wikitext2 def test_googlemap_to_wrmap(self): wikitext = ''' (Parkplatz)47.114958,11.266026 Erster Parkplatz (Gasthaus) 47.114715, 11.266262, Alt Bärnbad (Gasthaus) 6#FF014E9A 47.114715,11.266262 47.114135,11.268381 47.113421,11.269322 47.11277,11.269979 47.112408,11.271119 ''' attributes, coords, paths = wrpylib.mwmarkup.parse_googlemap(wikitext) json = wrpylib.wrmwmarkup.googlemap_to_wrmap(attributes, coords, paths) assert json['properties']['lon'] == 11.272337 assert json['properties']['lat'] == 47.113291 assert json['properties']['zoom'] == 15 assert json['properties']['height'] == 450 assert json['features'][0]['properties']['type'] == 'parkplatz' assert json['features'][0]['properties']['name'] == 'Erster Parkplatz' assert json['features'][0]['geometry']['coordinates'] == [11.266026, 47.114958] assert json['features'][1]['properties']['type'] == 'gasthaus' assert json['features'][1]['properties']['name'] == 'Alt Bärnbad (Gasthaus)' assert json['features'][1]['geometry']['coordinates'] == [11.266262, 47.114715] assert json['features'][2]['properties']['type'] == 'rodelbahn' assert json['features'][2]['geometry']['coordinates'] == [ [11.266262, 47.114715], [11.268381, 47.114135], [11.269322, 47.113421], [11.269979, 47.11277], [11.271119, 47.112408]] def test_parse_wrmap(self): wikitext = ''' 47.240689 11.190454 47.245789 11.238971 47.245711 11.238283 47.238587 11.203360 47.244951 11.230868 47.245470 11.237853 ''' json = wrpylib.wrmwmarkup.parse_wrmap(wikitext) assert json['properties']['lon'] == 11.21408895 assert json['properties']['lat'] == 47.2417134 assert json['properties']['zoom'] == 14 assert json['properties']['width'] == 700 assert json['properties']['height'] == 400 assert json['features'][0]['properties']['type'] == 'gasthaus' assert json['features'][0]['properties']['name'] == 'Rosskogelhütte' assert json['features'][0]['properties']['wiki'] == 'Rosskogelhütte' assert json['features'][0]['geometry']['coordinates'] == [11.190454, 47.240689] assert json['features'][1]['properties']['type'] == 'parkplatz' assert json['features'][1]['geometry']['coordinates'] == [11.238971, 47.245789] assert json['features'][2]['properties']['type'] == 'haltestelle' assert json['features'][2]['properties']['name'] == 'Oberperfuss Rangger Köpfl Lift' assert json['features'][2]['geometry']['coordinates'] == [11.238283, 47.245711] assert json['features'][3]['properties']['type'] == 'rodelbahn' assert json['features'][3]['geometry']['coordinates'] == [ [11.203360, 47.238587], [11.230868, 47.244951], [11.237853, 47.245470]] def test_create_wrmap(self): geojson = { 'type': 'FeatureCollection', 'features': [{ 'type': 'Feature', 'geometry': { 'type': 'Point', 'coordinates': [11.190454, 47.240689]}, 'properties': {'type': 'gasthaus', 'name': 'Rosskogelhütte', 'wiki': 'Rosskogelhütte'} }, { 'type': 'Feature', 'geometry': { 'type': 'Point', 'coordinates': [11.238971, 47.245789]}, 'properties': {'type': 'parkplatz'} }, { 'type': 'Feature', 'geometry': { 'type': 'Point', 'coordinates': [11.238283, 47.245711]}, 'properties': {'type': 'haltestelle', 'name': 'Oberperfuss Rangger Köpfl Lift'} }, { 'type': 'Feature', 'geometry': { 'type': 'LineString', 'coordinates': [ [11.203360, 47.238587], [11.230868, 47.244951], [11.237853, 47.245470]]}, 'properties': {'type': 'rodelbahn'} }], 'properties': { 'lon': 11.21408895, 'lat': 47.2417134, 'zoom': 14, 'width': 700, 'height': 400} } wikitext = wrpylib.wrmwmarkup.create_wrmap(geojson) assert wikitext == textwrap.dedent('''\ 47.240689 N 11.190454 E 47.245789 N 11.238971 E 47.245711 N 11.238283 E 47.238587 N 11.203360 E 47.244951 N 11.230868 E 47.245470 N 11.237853 E ''')