Moved dbkey_to_title from mwapi to mwmarkup.
[philipp/winterrodeln/wrpylib.git] / tests / test_mwmarkup.py
1 #!/usr/bin/python3.4
2 import unittest
3 import mwparserfromhell
4 import wrpylib.mwmarkup
5
6
7 class TestMwParserFromHell(unittest.TestCase):
8     def setUp(self):
9         self.maxDiff = None
10
11     def test_find_template(self):
12         wikitext = '''== Allgemeines ==
13         {{Rodelbahnbox
14         | Position             = 47.309820 N 9.986508 E
15         | Position oben        =
16         | Höhe oben            = 1244
17         | Position unten       =
18         | Höhe unten           = 806
19         | Länge                = 5045
20         | Schwierigkeit        =
21         | Lawinen              = gelegentlich
22         | Betreiber            =
23         | Öffentliche Anreise  = Ja
24         | Gehzeit              = 105
25         | Aufstieg getrennt    = Nein
26         | Aufstiegshilfe       = Nein
27         | Beleuchtungsanlage   = Nein
28         | Beleuchtungstage     =
29         | Rodelverleih         = Ja
30         | Gütesiegel           =
31         | Webauskunft          =
32         | Telefonauskunft      = +43-664-1808482 (Bergkristallhütte)
33         | Bild                 = Rodelbahn Bergkristallhütte 2009-03-03.jpg
34         | In Übersichtskarte   = Ja
35         | Forumid              = 72
36         }}
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:], '}}')
44
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')
55
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}}')
61
62         wrpylib.mwmarkup.format_template_table(template)
63         self.assertEqual(template,
64             '{{Rodelbahnbox\n' +
65             '| Unbenannt\n' +
66             '| Position         = 47.309820 N 9.986508 E\n' +
67             '| Aufstieg möglich = Ja\n' +
68             '}}')
69
70         wrpylib.mwmarkup.format_template_table(template, 18)
71         self.assertEqual(template,
72             '{{Rodelbahnbox\n' +
73             '| Unbenannt\n' +
74             '| Position           = 47.309820 N 9.986508 E\n' +
75             '| Aufstieg möglich   = Ja\n' +
76             '}}')
77
78     def test_split_template(self):
79         wikitext = '''== Allgemeines ==
80         {{Rodelbahnbox
81         | Position             = 47.309820 N 9.986508 E
82         | Position oben        =
83         | Höhe oben            = 1244
84         | Position unten       =
85         | Höhe unten           = 806
86         | Länge                = 5045
87         | Schwierigkeit        =
88         | Lawinen              = gelegentlich
89         | Betreiber            =
90         | Öffentliche Anreise  = Ja
91         | Gehzeit              = 105
92         | Aufstieg getrennt    = Nein
93         | Aufstiegshilfe       = Nein
94         | Beleuchtungsanlage   = Nein
95         | Beleuchtungstage     =
96         | Rodelverleih         = Ja
97         | Gütesiegel           =
98         | Webauskunft          =
99         | Telefonauskunft      = +43-664-1808482 (Bergkristallhütte)
100         | Bild                 = Rodelbahn Bergkristallhütte 2009-03-03.jpg
101         | In Übersichtskarte   = Ja
102         | Forumid              = 72
103         }}
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(), '')
112
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}}')
119
120         wrpylib.mwmarkup.format_template_table(template)
121         self.assertEqual(template,
122             '{{Rodelbahnbox\n' +
123             '| Unbenannt\n' +
124             '| Position         = 47.309820 N 9.986508 E\n' +
125             '| Aufstieg möglich = Ja\n' +
126             '}}')
127
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()
132         tag = next(tag_iter)
133         self.assertEqual(tag.tag.strip(), 'tag')
134         self.assertEqual(tag.contents.strip(), 'my first tag')
135         tag = next(tag_iter)
136         self.assertEqual(tag.tag.strip(), 'tag')
137         self.assertEqual(tag.contents.strip(), 'my second tag')
138
139         wikitext = 'This is <tag myattrib="4"/>.'
140         wikicode = mwparserfromhell.parse(wikitext)
141         tag = next(wikicode.ifilter_tags())
142         self.assertEqual('tag', tag.tag)
143
144
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)
150
151
152 class TestMwApi(unittest.TestCase):
153     def test_dbkey_to_title(self):
154         self.assertEqual(wrpylib.mwmarkup.dbkey_to_title('My_Title'), 'My Title')
155         self.assertEqual(wrpylib.mwmarkup.dbkey_to_title('My Title'), 'My Title') # should not happen
156         self.assertEqual(wrpylib.mwmarkup.dbkey_to_title('My_nice_Title'), 'My nice Title')