3 import mwparserfromhell
4 import wrpylib.mwmarkup
7 class TestMwParserFromHell(unittest.TestCase):
11 def test_find_template(self):
12 wikitext = '''== Allgemeines ==
14 | Position = 47.309820 N 9.986508 E
21 | Lawinen = gelegentlich
23 | Öffentliche Anreise = Ja
25 | Aufstieg getrennt = Nein
26 | Aufstiegshilfe = Nein
27 | Beleuchtungsanlage = Nein
32 | Telefonauskunft = +43-664-1808482 (Bergkristallhütte)
33 | Bild = Rodelbahn Bergkristallhütte 2009-03-03.jpg
34 | In Übersichtskarte = Ja
37 Die Rodelbahn zur Bergkristallhütte ist durchaus abwechslungsreich.'''
38 wikicode = mwparserfromhell.parse(wikitext)
39 rb = list(wikicode.filter_templates())[0]
40 self.assertEqual(rb.name.strip(), 'Rodelbahnbox')
41 self.assertEqual(rb.get('Aufstiegshilfe').value.strip(), 'Nein')
42 self.assertEqual(rb[:2], '{{')
43 self.assertEqual(rb[-2:], '}}')
45 def test_template_to_table(self):
46 wikitext = '{{Rodelbahnbox | Unbenannt | Position = 47.309820 N 9.986508 E | Aufstieg möglich = Ja }}'
47 wikicode = mwparserfromhell.parse(wikitext)
48 template = list(wikicode.filter_templates())[0]
49 self.assertEqual(template.name.strip(), 'Rodelbahnbox')
50 self.assertEqual(template.params[0].strip(), 'Unbenannt')
51 self.assertEqual(template.params[1].name.strip(), 'Position')
52 self.assertEqual(template.params[1].value.strip(), '47.309820 N 9.986508 E')
53 self.assertEqual(template.params[2].name.strip(), 'Aufstieg möglich')
54 self.assertEqual(template.params[2].value.strip(), 'Ja')
56 template = mwparserfromhell.nodes.template.Template('Rodelbahnbox')
57 template.add(1, 'Unbenannt')
58 template.add('Position', '47.309820 N 9.986508 E')
59 template.add('Aufstieg möglich', 'Ja')
60 self.assertEqual(template, '{{Rodelbahnbox|Unbenannt|Position=47.309820 N 9.986508 E|Aufstieg möglich=Ja}}')
62 wrpylib.mwmarkup.format_template_table(template)
63 self.assertEqual(template,
66 '| Position = 47.309820 N 9.986508 E\n' +
67 '| Aufstieg möglich = Ja\n' +
70 wrpylib.mwmarkup.format_template_table(template, 18)
71 self.assertEqual(template,
74 '| Position = 47.309820 N 9.986508 E\n' +
75 '| Aufstieg möglich = Ja\n' +
78 def test_split_template(self):
79 wikitext = '''== Allgemeines ==
81 | Position = 47.309820 N 9.986508 E
88 | Lawinen = gelegentlich
90 | Öffentliche Anreise = Ja
92 | Aufstieg getrennt = Nein
93 | Aufstiegshilfe = Nein
94 | Beleuchtungsanlage = Nein
99 | Telefonauskunft = +43-664-1808482 (Bergkristallhütte)
100 | Bild = Rodelbahn Bergkristallhütte 2009-03-03.jpg
101 | In Übersichtskarte = Ja
104 Die Rodelbahn zur Bergkristallhütte ist durchaus abwechslungsreich.'''
105 wikicode = mwparserfromhell.parse(wikitext)
106 template = wikicode.filter_templates(matches='Rodelbahnbox')[0]
107 self.assertEqual(template.name.strip(), 'Rodelbahnbox')
108 self.assertEqual(len(template.params), 22)
109 self.assertEqual(template.get('Position').value.strip(), '47.309820 N 9.986508 E')
110 self.assertEqual(template.get('Telefonauskunft').value.strip(), '+43-664-1808482 (Bergkristallhütte)')
111 self.assertEqual(template.get('Schwierigkeit').value.strip(), '')
113 def test_create_template(self):
114 template = mwparserfromhell.nodes.template.Template('Rodelbahnbox')
115 template.add(1, 'Unbenannt')
116 template.add('Position', '47.309820 N 9.986508 E')
117 template.add('Aufstieg möglich', 'Ja')
118 self.assertEqual(template, '{{Rodelbahnbox|Unbenannt|Position=47.309820 N 9.986508 E|Aufstieg möglich=Ja}}')
120 wrpylib.mwmarkup.format_template_table(template)
121 self.assertEqual(template,
124 '| Position = 47.309820 N 9.986508 E\n' +
125 '| Aufstieg möglich = Ja\n' +
128 def test_find_tag(self):
129 wikitext = 'This is <tag>my first tag</tag> and <tag>my second tag</tag>.'
130 wikicode = mwparserfromhell.parse(wikitext)
131 tag_iter = wikicode.ifilter_tags()
133 self.assertEqual(tag.tag.strip(), 'tag')
134 self.assertEqual(tag.contents.strip(), 'my first tag')
136 self.assertEqual(tag.tag.strip(), 'tag')
137 self.assertEqual(tag.contents.strip(), 'my second tag')
139 wikitext = 'This is <tag myattrib="4"/>.'
140 wikicode = mwparserfromhell.parse(wikitext)
141 tag = next(wikicode.ifilter_tags())
142 self.assertEqual('tag', tag.tag)
145 class TestFormatTemplate(unittest.TestCase):
146 def test_format_template_oneline(self):
147 value = mwparserfromhell.parse('{{ my_template || | var = 7 }}').filter_templates()[0]
148 wrpylib.mwmarkup.format_template_oneline(value)
149 self.assertEqual('{{my_template| | |var=7}}', value)