4 import mwparserfromhell
5 import wrpylib.mwmarkup
8 class TestMwParserFromHell(unittest.TestCase):
9 def test_find_template(self):
10 wikitext = '''== Allgemeines ==
12 | Position = 47.309820 N 9.986508 E
19 | Lawinen = gelegentlich
21 | Öffentliche Anreise = Ja
23 | Aufstieg getrennt = Nein
24 | Aufstiegshilfe = Nein
25 | Beleuchtungsanlage = Nein
30 | Telefonauskunft = +43-664-1808482 (Bergkristallhütte)
31 | Bild = Rodelbahn Bergkristallhütte 2009-03-03.jpg
32 | In Übersichtskarte = Ja
35 Die Rodelbahn zur Bergkristallhütte ist durchaus abwechslungsreich.'''
36 wikicode = mwparserfromhell.parse(wikitext)
37 rb = list(wikicode.filter_templates())[0]
38 self.assertEqual(rb.name.strip(), 'Rodelbahnbox')
39 self.assertEqual(rb.get('Aufstiegshilfe').value.strip(), 'Nein')
40 self.assertEqual(rb[:2], '{{')
41 self.assertEqual(rb[-2:], '}}')
43 def test_template_to_table(self):
44 wikitext = '{{Rodelbahnbox | Unbenannt | Position = 47.309820 N 9.986508 E | Aufstieg möglich = Ja }}'
45 wikicode = mwparserfromhell.parse(wikitext)
46 template = list(wikicode.filter_templates())[0]
47 self.assertEqual(template.name.strip(), 'Rodelbahnbox')
48 self.assertEqual(template.params[0].strip(), 'Unbenannt')
49 self.assertEqual(template.params[1].name.strip(), 'Position')
50 self.assertEqual(template.params[1].value.strip(), '47.309820 N 9.986508 E')
51 self.assertEqual(template.params[2].name.strip(), 'Aufstieg möglich')
52 self.assertEqual(template.params[2].value.strip(), 'Ja')
54 template = mwparserfromhell.nodes.template.Template('Rodelbahnbox')
55 template.add(1, 'Unbenannt')
56 template.add('Position', '47.309820 N 9.986508 E')
57 template.add('Aufstieg möglich', 'Ja')
58 self.assertEqual(template, '{{Rodelbahnbox|Unbenannt|Position=47.309820 N 9.986508 E|Aufstieg möglich=Ja}}')
60 wrpylib.mwmarkup.template_to_table(template)
61 self.assertEqual(template,
64 '| Position = 47.309820 N 9.986508 E\n' +
65 '| Aufstieg möglich = Ja\n' +
68 wrpylib.mwmarkup.template_to_table(template, 18)
69 self.assertEqual(template,
72 '| Position = 47.309820 N 9.986508 E\n' +
73 '| Aufstieg möglich = Ja\n' +
76 def test_split_template(self):
77 wikitext = '''== Allgemeines ==
79 | Position = 47.309820 N 9.986508 E
86 | Lawinen = gelegentlich
88 | Öffentliche Anreise = Ja
90 | Aufstieg getrennt = Nein
91 | Aufstiegshilfe = Nein
92 | Beleuchtungsanlage = Nein
97 | Telefonauskunft = +43-664-1808482 (Bergkristallhütte)
98 | Bild = Rodelbahn Bergkristallhütte 2009-03-03.jpg
99 | In Übersichtskarte = Ja
102 Die Rodelbahn zur Bergkristallhütte ist durchaus abwechslungsreich.'''
103 wikicode = mwparserfromhell.parse(wikitext)
104 template = wikicode.filter_templates(matches='Rodelbahnbox')[0]
105 self.assertEqual(template.name.strip(), 'Rodelbahnbox')
106 self.assertEqual(len(template.params), 22)
107 self.assertEqual(template.get('Position').value.strip(), '47.309820 N 9.986508 E')
108 self.assertEqual(template.get('Telefonauskunft').value.strip(), '+43-664-1808482 (Bergkristallhütte)')
109 self.assertEqual(template.get('Schwierigkeit').value.strip(), '')
111 def test_create_template(self):
112 template = mwparserfromhell.nodes.template.Template('Rodelbahnbox')
113 template.add(1, 'Unbenannt')
114 template.add('Position', '47.309820 N 9.986508 E')
115 template.add('Aufstieg möglich', 'Ja')
116 self.assertEqual(template, '{{Rodelbahnbox|Unbenannt|Position=47.309820 N 9.986508 E|Aufstieg möglich=Ja}}')
118 wrpylib.mwmarkup.template_to_table(template)
119 self.assertEqual(template,
122 '| Position = 47.309820 N 9.986508 E\n' +
123 '| Aufstieg möglich = Ja\n' +
126 def test_find_tag(self):
127 wikitext = 'This is <tag>my first tag</tag> and <tag>my second tag</tag>.'
128 wikicode = mwparserfromhell.parse(wikitext)
129 tag_iter = wikicode.ifilter_tags()
131 self.assertEqual(tag.tag.strip(), 'tag')
132 self.assertEqual(tag.contents.strip(), 'my first tag')
134 self.assertEqual(tag.tag.strip(), 'tag')
135 self.assertEqual(tag.contents.strip(), 'my second tag')
137 wikitext = 'This is <tag myattrib="4"/>.'
138 wikicode = mwparserfromhell.parse(wikitext)
139 tag = next(wikicode.ifilter_tags())
140 self.assertEqual('tag', tag.tag)