#!/usr/bin/python3.4
# coding=utf-8
import unittest
import mwparserfromhell
import wrpylib.mwmarkup
class TestMwParserFromHell(unittest.TestCase):
def setUp(self):
self.maxDiff = None
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.'''
wikicode = mwparserfromhell.parse(wikitext)
rb = list(wikicode.filter_templates())[0]
self.assertEqual(rb.name.strip(), 'Rodelbahnbox')
self.assertEqual(rb.get('Aufstiegshilfe').value.strip(), 'Nein')
self.assertEqual(rb[:2], '{{')
self.assertEqual(rb[-2:], '}}')
def test_template_to_table(self):
wikitext = '{{Rodelbahnbox | Unbenannt | Position = 47.309820 N 9.986508 E | Aufstieg möglich = Ja }}'
wikicode = mwparserfromhell.parse(wikitext)
template = list(wikicode.filter_templates())[0]
self.assertEqual(template.name.strip(), 'Rodelbahnbox')
self.assertEqual(template.params[0].strip(), 'Unbenannt')
self.assertEqual(template.params[1].name.strip(), 'Position')
self.assertEqual(template.params[1].value.strip(), '47.309820 N 9.986508 E')
self.assertEqual(template.params[2].name.strip(), 'Aufstieg möglich')
self.assertEqual(template.params[2].value.strip(), 'Ja')
template = mwparserfromhell.nodes.template.Template('Rodelbahnbox')
template.add(1, 'Unbenannt')
template.add('Position', '47.309820 N 9.986508 E')
template.add('Aufstieg möglich', 'Ja')
self.assertEqual(template, '{{Rodelbahnbox|Unbenannt|Position=47.309820 N 9.986508 E|Aufstieg möglich=Ja}}')
wrpylib.mwmarkup.format_template_table(template)
self.assertEqual(template,
'{{Rodelbahnbox\n' +
'| Unbenannt\n' +
'| Position = 47.309820 N 9.986508 E\n' +
'| Aufstieg möglich = Ja\n' +
'}}')
wrpylib.mwmarkup.format_template_table(template, 18)
self.assertEqual(template,
'{{Rodelbahnbox\n' +
'| Unbenannt\n' +
'| Position = 47.309820 N 9.986508 E\n' +
'| Aufstieg möglich = Ja\n' +
'}}')
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.'''
wikicode = mwparserfromhell.parse(wikitext)
template = wikicode.filter_templates(matches='Rodelbahnbox')[0]
self.assertEqual(template.name.strip(), 'Rodelbahnbox')
self.assertEqual(len(template.params), 22)
self.assertEqual(template.get('Position').value.strip(), '47.309820 N 9.986508 E')
self.assertEqual(template.get('Telefonauskunft').value.strip(), '+43-664-1808482 (Bergkristallhütte)')
self.assertEqual(template.get('Schwierigkeit').value.strip(), '')
def test_create_template(self):
template = mwparserfromhell.nodes.template.Template('Rodelbahnbox')
template.add(1, 'Unbenannt')
template.add('Position', '47.309820 N 9.986508 E')
template.add('Aufstieg möglich', 'Ja')
self.assertEqual(template, '{{Rodelbahnbox|Unbenannt|Position=47.309820 N 9.986508 E|Aufstieg möglich=Ja}}')
wrpylib.mwmarkup.format_template_table(template)
self.assertEqual(template,
'{{Rodelbahnbox\n' +
'| Unbenannt\n' +
'| Position = 47.309820 N 9.986508 E\n' +
'| Aufstieg möglich = Ja\n' +
'}}')
def test_find_tag(self):
wikitext = 'This is my first tag and my second tag.'
wikicode = mwparserfromhell.parse(wikitext)
tag_iter = wikicode.ifilter_tags()
tag = next(tag_iter)
self.assertEqual(tag.tag.strip(), 'tag')
self.assertEqual(tag.contents.strip(), 'my first tag')
tag = next(tag_iter)
self.assertEqual(tag.tag.strip(), 'tag')
self.assertEqual(tag.contents.strip(), 'my second tag')
wikitext = 'This is .'
wikicode = mwparserfromhell.parse(wikitext)
tag = next(wikicode.ifilter_tags())
self.assertEqual('tag', tag.tag)