4 import mwparserfromhell
5 import wrpylib.mwmarkup
8 class TestMwParserFromHell(unittest.TestCase):
12 def test_find_template(self):
13 wikitext = '''== Allgemeines ==
15 | Position = 47.309820 N 9.986508 E
22 | Lawinen = gelegentlich
24 | Öffentliche Anreise = Ja
26 | Aufstieg getrennt = Nein
27 | Aufstiegshilfe = Nein
28 | Beleuchtungsanlage = Nein
33 | Telefonauskunft = +43-664-1808482 (Bergkristallhütte)
34 | Bild = Rodelbahn Bergkristallhütte 2009-03-03.jpg
35 | In Übersichtskarte = Ja
38 Die Rodelbahn zur Bergkristallhütte ist durchaus abwechslungsreich.'''
39 wikicode = mwparserfromhell.parse(wikitext)
40 rb = list(wikicode.filter_templates())[0]
41 self.assertEqual(rb.name.strip(), 'Rodelbahnbox')
42 self.assertEqual(rb.get('Aufstiegshilfe').value.strip(), 'Nein')
43 self.assertEqual(rb[:2], '{{')
44 self.assertEqual(rb[-2:], '}}')
46 def test_template_to_table(self):
47 wikitext = '{{Rodelbahnbox | Unbenannt | Position = 47.309820 N 9.986508 E | Aufstieg möglich = Ja }}'
48 wikicode = mwparserfromhell.parse(wikitext)
49 template = list(wikicode.filter_templates())[0]
50 self.assertEqual(template.name.strip(), 'Rodelbahnbox')
51 self.assertEqual(template.params[0].strip(), 'Unbenannt')
52 self.assertEqual(template.params[1].name.strip(), 'Position')
53 self.assertEqual(template.params[1].value.strip(), '47.309820 N 9.986508 E')
54 self.assertEqual(template.params[2].name.strip(), 'Aufstieg möglich')
55 self.assertEqual(template.params[2].value.strip(), 'Ja')
57 template = mwparserfromhell.nodes.template.Template('Rodelbahnbox')
58 template.add(1, 'Unbenannt')
59 template.add('Position', '47.309820 N 9.986508 E')
60 template.add('Aufstieg möglich', 'Ja')
61 self.assertEqual(template, '{{Rodelbahnbox|Unbenannt|Position=47.309820 N 9.986508 E|Aufstieg möglich=Ja}}')
63 wrpylib.mwmarkup.template_to_table(template)
64 self.assertEqual(template,
67 '| Position = 47.309820 N 9.986508 E\n' +
68 '| Aufstieg möglich = Ja\n' +
71 wrpylib.mwmarkup.template_to_table(template, 18)
72 self.assertEqual(template,
75 '| Position = 47.309820 N 9.986508 E\n' +
76 '| Aufstieg möglich = Ja\n' +
79 def test_split_template(self):
80 wikitext = '''== Allgemeines ==
82 | Position = 47.309820 N 9.986508 E
89 | Lawinen = gelegentlich
91 | Öffentliche Anreise = Ja
93 | Aufstieg getrennt = Nein
94 | Aufstiegshilfe = Nein
95 | Beleuchtungsanlage = Nein
100 | Telefonauskunft = +43-664-1808482 (Bergkristallhütte)
101 | Bild = Rodelbahn Bergkristallhütte 2009-03-03.jpg
102 | In Übersichtskarte = Ja
105 Die Rodelbahn zur Bergkristallhütte ist durchaus abwechslungsreich.'''
106 wikicode = mwparserfromhell.parse(wikitext)
107 template = wikicode.filter_templates(matches='Rodelbahnbox')[0]
108 self.assertEqual(template.name.strip(), 'Rodelbahnbox')
109 self.assertEqual(len(template.params), 22)
110 self.assertEqual(template.get('Position').value.strip(), '47.309820 N 9.986508 E')
111 self.assertEqual(template.get('Telefonauskunft').value.strip(), '+43-664-1808482 (Bergkristallhütte)')
112 self.assertEqual(template.get('Schwierigkeit').value.strip(), '')
114 def test_create_template(self):
115 template = mwparserfromhell.nodes.template.Template('Rodelbahnbox')
116 template.add(1, 'Unbenannt')
117 template.add('Position', '47.309820 N 9.986508 E')
118 template.add('Aufstieg möglich', 'Ja')
119 self.assertEqual(template, '{{Rodelbahnbox|Unbenannt|Position=47.309820 N 9.986508 E|Aufstieg möglich=Ja}}')
121 wrpylib.mwmarkup.template_to_table(template)
122 self.assertEqual(template,
125 '| Position = 47.309820 N 9.986508 E\n' +
126 '| Aufstieg möglich = Ja\n' +
129 def test_find_tag(self):
130 wikitext = 'This is <tag>my first tag</tag> and <tag>my second tag</tag>.'
131 wikicode = mwparserfromhell.parse(wikitext)
132 tag_iter = wikicode.ifilter_tags()
134 self.assertEqual(tag.tag.strip(), 'tag')
135 self.assertEqual(tag.contents.strip(), 'my first tag')
137 self.assertEqual(tag.tag.strip(), 'tag')
138 self.assertEqual(tag.contents.strip(), 'my second tag')
140 wikitext = 'This is <tag myattrib="4"/>.'
141 wikicode = mwparserfromhell.parse(wikitext)
142 tag = next(wikicode.ifilter_tags())
143 self.assertEqual('tag', tag.tag)