#!/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)