#!/usr/bin/python3.4 # coding=utf-8 import unittest import mwparserfromhell import wrpylib.mwmarkup class TestMwMarkup(unittest.TestCase): def test_find_template(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 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 = wrpylib.mwmarkup.find_template(wikitext, 'Rodelbahnbox') self.assertEqual(start, wikitext.find('{{')) self.assertEqual(end, wikitext.find('}}')+2) def test_TemplateValidator(self): v = wrpylib.mwmarkup.TemplateValidator() value = '{{Rodelbahnbox | Unbenannt | Position = 47.309820 N 9.986508 E | Aufstieg möglich = Ja }}' title, anonym_params, named_params = v.to_python(value) self.assertEqual(title, 'Rodelbahnbox') self.assertEqual(anonym_params, ['Unbenannt']) self.assertEqual(list(named_params.keys()), ['Position', 'Aufstieg möglich']) self.assertEqual(list(named_params.values()), ['47.309820 N 9.986508 E', 'Ja']) value2 = v.from_python((title, anonym_params, named_params)) self.assertEqual(value2, '{{Rodelbahnbox|Unbenannt|Position=47.309820 N 9.986508 E|Aufstieg möglich=Ja}}') v = wrpylib.mwmarkup.TemplateValidator(as_table=True) value3 = v.from_python((title, anonym_params, named_params)) self.assertEqual(value3, '{{Rodelbahnbox\n' + '| Unbenannt\n' + '| Position = 47.309820 N 9.986508 E\n' + '| Aufstieg möglich = Ja\n' + '}}') v = wrpylib.mwmarkup.TemplateValidator(strip=False) title, anonym_params, named_params = v.to_python(value) self.assertEqual(title, 'Rodelbahnbox ') self.assertEqual(anonym_params, [' Unbenannt ']) self.assertEqual(list(named_params.keys()), [' Position ', ' Aufstieg möglich ']) self.assertEqual(list(named_params.values()), [' 47.309820 N 9.986508 E ', ' Ja ']) def test_split_template(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 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 = wrpylib.mwmarkup.find_template(wikitext, 'Rodelbahnbox') template_title, parameters = wrpylib.mwmarkup.split_template(wikitext[start:end]) assert template_title == 'Rodelbahnbox' assert len(parameters) == 22 assert parameters['Position'] == '47.309820 N 9.986508 E' assert parameters['Telefonauskunft'] == '+43-664-1808482 (Bergkristallhütte)' assert parameters['Schwierigkeit'] == '' def test_create_template(self): wikitext = '''{{Nicetemplate|Red|Bold|Position=Top|Alignment=Right}}''' template_title, parameters = wrpylib.mwmarkup.split_template(wikitext) keys = ['1', '2', 'Position', 'Alignment'] values = [parameters[k] for k in keys] wikitext_generated = wrpylib.mwmarkup.create_template(template_title, values[:2], keys[2:], values[2:]) wikitext_table = wrpylib.mwmarkup.create_template(template_title, values[:2], keys[2:], values[2:], True) assert wikitext_generated == wikitext def test_find_tag(self): wikitext = 'This is my first tag and my second tag.' start, content, endtag, end = wrpylib.mwmarkup.find_tag(wikitext, 'tags') assert (start, content, endtag, end) == (None, None, None, None) start, content, endtag, end = wrpylib.mwmarkup.find_tag(wikitext, 'tag') assert (start, content, endtag, end) == (8, 13, 25, 31) start, content, endtag, end = wrpylib.mwmarkup.find_tag(wikitext, 'tag', end) assert (start, content, endtag, end) == (36, 41, 54, 60) wikitext = 'This is .' start, content, endtag, end = wrpylib.mwmarkup.find_tag(wikitext, 'tag') assert (start, content, endtag, end) == (8, None, None, 27) def test_parse_googlemap(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) assert attributes['lon'] == 11.272337 assert attributes['lat'] == 47.113291 assert attributes['zoom'] == 15 assert coords == [ (11.266026, 47.114958, 'Parkplatz', 'Erster Parkplatz'), (11.266262, 47.114715, 'Gasthaus', 'Alt Bärnbad (Gasthaus)')] assert paths == [ ('6#FF014E9A', [ (11.266262, 47.114715, None, None), (11.268381, 47.114135, None, None), (11.269322, 47.113421, None, None), (11.269979, 47.11277, None, None), (11.271119, 47.112408, None, None)])] try: result = wrpylib.mwmarkup.parse_googlemap(wikitext.replace(' (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) self.assertEqual(attributes['lon'], 11.272337) self.assertEqual(attributes['lat'], 47.113291) self.assertEqual(attributes['zoom'], 15) self.assertEqual(coords, [ (11.266026, 47.114958, 'Parkplatz', 'Erster Parkplatz'), (11.266262, 47.114715, 'Gasthaus', 'Alt Bärnbad (Gasthaus)')]) self.assertEqual(paths, [ ('6#FF014E9A', [ (11.266262, 47.114715, None, None), (11.268381, 47.114135, None, None), (11.269322, 47.113421, None, None), (11.269979, 47.11277, None, None), (11.271119, 47.112408, None, None)])]) with self.assertRaises(wrpylib.mwmarkup.ParseError): wrpylib.mwmarkup.parse_googlemap(wikitext.replace('