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