2 import mwparserfromhell
3 import wrpylib.mwmarkup
6 class TestMwParserFromHell(unittest.TestCase):
10 def test_find_template(self):
11 wikitext = '''== Allgemeines ==
13 | Position = 47.309820 N 9.986508 E
20 | Lawinen = gelegentlich
22 | Öffentliche Anreise = Ja
24 | Aufstieg getrennt = Nein
25 | Aufstiegshilfe = Nein
26 | Beleuchtungsanlage = Nein
31 | Telefonauskunft = +43-664-1808482 (Bergkristallhütte)
32 | Bild = Rodelbahn Bergkristallhütte 2009-03-03.jpg
33 | In Übersichtskarte = Ja
36 Die Rodelbahn zur Bergkristallhütte ist durchaus abwechslungsreich.'''
37 wikicode = mwparserfromhell.parse(wikitext)
38 rb = list(wikicode.filter_templates())[0]
39 self.assertEqual(rb.name.strip(), 'Rodelbahnbox')
40 self.assertEqual(rb.get('Aufstiegshilfe').value.strip(), 'Nein')
41 self.assertEqual(str(rb)[:2], '{{')
42 self.assertEqual(str(rb)[-2:], '}}')
44 def test_template_to_table(self):
45 wikitext = '{{Rodelbahnbox | Unbenannt | Position = 47.309820 N 9.986508 E | Aufstieg möglich = Ja }}'
46 wikicode = mwparserfromhell.parse(wikitext)
47 template = list(wikicode.filter_templates())[0]
48 self.assertEqual(template.name.strip(), 'Rodelbahnbox')
49 self.assertEqual(template.params[0].strip(), 'Unbenannt')
50 self.assertEqual(template.params[1].name.strip(), 'Position')
51 self.assertEqual(template.params[1].value.strip(), '47.309820 N 9.986508 E')
52 self.assertEqual(template.params[2].name.strip(), 'Aufstieg möglich')
53 self.assertEqual(template.params[2].value.strip(), 'Ja')
55 template = mwparserfromhell.nodes.template.Template('Rodelbahnbox')
56 template.add(1, 'Unbenannt')
57 template.add('Position', '47.309820 N 9.986508 E')
58 template.add('Aufstieg möglich', 'Ja')
59 self.assertEqual(template, '{{Rodelbahnbox|Unbenannt|Position=47.309820 N 9.986508 E|Aufstieg möglich=Ja}}')
61 wrpylib.mwmarkup.format_template_table(template)
62 self.assertEqual(template,
65 '| Position = 47.309820 N 9.986508 E\n' +
66 '| Aufstieg möglich = Ja\n' +
69 wrpylib.mwmarkup.format_template_table(template, 18)
70 self.assertEqual(template,
73 '| Position = 47.309820 N 9.986508 E\n' +
74 '| Aufstieg möglich = Ja\n' +
77 def test_split_template(self):
78 wikitext = '''== Allgemeines ==
80 | Position = 47.309820 N 9.986508 E
87 | Lawinen = gelegentlich
89 | Öffentliche Anreise = Ja
91 | Aufstieg getrennt = Nein
92 | Aufstiegshilfe = Nein
93 | Beleuchtungsanlage = Nein
98 | Telefonauskunft = +43-664-1808482 (Bergkristallhütte)
99 | Bild = Rodelbahn Bergkristallhütte 2009-03-03.jpg
100 | In Übersichtskarte = Ja
103 Die Rodelbahn zur Bergkristallhütte ist durchaus abwechslungsreich.'''
104 wikicode = mwparserfromhell.parse(wikitext)
105 template = wikicode.filter_templates(matches='Rodelbahnbox')[0]
106 self.assertEqual(template.name.strip(), 'Rodelbahnbox')
107 self.assertEqual(len(template.params), 22)
108 self.assertEqual(template.get('Position').value.strip(), '47.309820 N 9.986508 E')
109 self.assertEqual(template.get('Telefonauskunft').value.strip(), '+43-664-1808482 (Bergkristallhütte)')
110 self.assertEqual(template.get('Schwierigkeit').value.strip(), '')
112 def test_create_template(self):
113 template = mwparserfromhell.nodes.template.Template('Rodelbahnbox')
114 template.add(1, 'Unbenannt')
115 template.add('Position', '47.309820 N 9.986508 E')
116 template.add('Aufstieg möglich', 'Ja')
117 self.assertEqual(template, '{{Rodelbahnbox|Unbenannt|Position=47.309820 N 9.986508 E|Aufstieg möglich=Ja}}')
119 wrpylib.mwmarkup.format_template_table(template)
120 self.assertEqual(template,
123 '| Position = 47.309820 N 9.986508 E\n' +
124 '| Aufstieg möglich = Ja\n' +
127 def test_find_tag(self):
128 wikitext = 'This is <tag>my first tag</tag> and <tag>my second tag</tag>.'
129 wikicode = mwparserfromhell.parse(wikitext)
130 tag_iter = wikicode.ifilter_tags()
132 self.assertEqual(tag.tag.strip(), 'tag')
133 self.assertEqual(tag.contents.strip(), 'my first tag')
135 self.assertEqual(tag.tag.strip(), 'tag')
136 self.assertEqual(tag.contents.strip(), 'my second tag')
138 wikitext = 'This is <tag myattrib="4"/>.'
139 wikicode = mwparserfromhell.parse(wikitext)
140 tag = next(wikicode.ifilter_tags())
141 self.assertEqual('tag', tag.tag)
144 class TestFormatTemplate(unittest.TestCase):
145 def test_format_template_oneline(self):
146 value = mwparserfromhell.parse('{{ my_template || | var = 7 }}').filter_templates()[0]
147 wrpylib.mwmarkup.format_template_oneline(value)
148 self.assertEqual('{{my_template| | |var=7}}', value)
151 class TestMwApi(unittest.TestCase):
152 def test_dbkey_to_title(self):
153 self.assertEqual(wrpylib.mwmarkup.dbkey_to_title('My_Title'), 'My Title')
154 self.assertEqual(wrpylib.mwmarkup.dbkey_to_title('My Title'), 'My Title') # should not happen
155 self.assertEqual(wrpylib.mwmarkup.dbkey_to_title('My_nice_Title'), 'My nice Title')