#!/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('