Added from_python to the TemplateValidator.
[philipp/winterrodeln/wrpylib.git] / tests / test_mwmarkup.py
1 #!/usr/bin/python2.7
2 # -*- coding: iso-8859-15 -*-
3 import wrpylib.mwmarkup
4
5
6 def test_find_template():
7     wikitext = u'''== Allgemeines ==
8     {{Rodelbahnbox
9     | Position             = 47.309820 N 9.986508 E
10     | Position oben        = 
11     | Höhe oben            = 1244
12     | Position unten       = 
13     | Höhe unten           = 806
14     | Länge                = 5045
15     | Schwierigkeit        = 
16     | Lawinen              = gelegentlich
17     | Betreiber            = 
18     | Öffentliche Anreise  = Ja
19     | Gehzeit              = 105
20     | Aufstieg getrennt    = Nein
21     | Aufstiegshilfe       = Nein
22     | Beleuchtungsanlage   = Nein
23     | Beleuchtungstage     = 
24     | Rodelverleih         = Ja
25     | Gütesiegel           = 
26     | Webauskunft          = 
27     | Telefonauskunft      = +43-664-1808482 (Bergkristallhütte)
28     | Bild                 = Rodelbahn Bergkristallhütte 2009-03-03.jpg
29     | In Übersichtskarte   = Ja
30     | Forumid              = 72
31     }}
32     Die Rodelbahn zur Bergkristallhütte ist durchaus abwechslungsreich.'''
33     start, end = wrpylib.mwmarkup.find_template(wikitext, u'Rodelbahnbox')
34     assert start == wikitext.find(u'{{')
35     assert end == wikitext.find(u'}}')+2
36
37
38 def test_TemplateValidator():
39     v = wrpylib.mwmarkup.TemplateValidator()
40     value = u'{{Rodelbahnbox | Unbenannt | Position = 47.309820 N 9.986508 E | Aufstieg möglich = Ja }}'
41     title, anonym_params, named_params = v.to_python(value)
42     assert title == u'Rodelbahnbox'
43     assert anonym_params == [u'Unbenannt']
44     assert named_params.keys() == [u'Position', u'Aufstieg möglich']
45     assert named_params.values() == ['47.309820 N 9.986508 E', 'Ja']
46     value2 = v.from_python((title, anonym_params, named_params))
47     assert value2 == u'{{Rodelbahnbox|Unbenannt|Position=47.309820 N 9.986508 E|Aufstieg möglich=Ja}}'
48     v = wrpylib.mwmarkup.TemplateValidator(as_table=True)
49     value3 = v.from_python((title, anonym_params, named_params))
50     print value3
51     assert value3 == \
52     u'{{Rodelbahnbox\n' + \
53     u'| Unbenannt\n' + \
54     u'| Position         = 47.309820 N 9.986508 E\n' + \
55     u'| Aufstieg möglich = Ja\n' + \
56     u'}}'
57     v = wrpylib.mwmarkup.TemplateValidator(strip=False)
58     title, anonym_params, named_params = v.to_python(value)
59     assert title == u'Rodelbahnbox '
60     assert anonym_params == [u' Unbenannt ']
61     assert named_params.keys() == [u' Position ', u' Aufstieg möglich ']
62     assert named_params.values() == [' 47.309820 N 9.986508 E ', ' Ja ']
63
64
65 def test_split_template():
66     wikitext = u'''== Allgemeines ==
67     {{Rodelbahnbox
68     | Position             = 47.309820 N 9.986508 E
69     | Position oben        = 
70     | Höhe oben            = 1244
71     | Position unten       = 
72     | Höhe unten           = 806
73     | Länge                = 5045
74     | Schwierigkeit        = 
75     | Lawinen              = gelegentlich
76     | Betreiber            = 
77     | Öffentliche Anreise  = Ja
78     | Gehzeit              = 105
79     | Aufstieg getrennt    = Nein
80     | Aufstiegshilfe       = Nein
81     | Beleuchtungsanlage   = Nein
82     | Beleuchtungstage     = 
83     | Rodelverleih         = Ja
84     | Gütesiegel           = 
85     | Webauskunft          = 
86     | Telefonauskunft      = +43-664-1808482 (Bergkristallhütte)
87     | Bild                 = Rodelbahn Bergkristallhütte 2009-03-03.jpg
88     | In Übersichtskarte   = Ja
89     | Forumid              = 72
90     }}
91     Die Rodelbahn zur Bergkristallhütte ist durchaus abwechslungsreich.'''
92     start, end = wrpylib.mwmarkup.find_template(wikitext, u'Rodelbahnbox')
93     template_title, parameters = wrpylib.mwmarkup.split_template(wikitext[start:end])
94     assert template_title == u'Rodelbahnbox'
95     assert len(parameters) == 22
96     assert parameters['Position'] == u'47.309820 N 9.986508 E'
97     assert parameters['Telefonauskunft'] == u'+43-664-1808482 (Bergkristallhütte)'
98     assert parameters['Schwierigkeit'] == u''
99
100
101 def test_create_template():
102     wikitext = u'''{{Nicetemplate|Red|Bold|Position=Top|Alignment=Right}}'''
103     template_title, parameters = wrpylib.mwmarkup.split_template(wikitext)
104     print parameters
105     keys = [u'1', u'2', u'Position', u'Alignment']
106     values = [parameters[k] for k in keys]
107     wikitext_generated = wrpylib.mwmarkup.create_template(template_title, values[:2], keys[2:], values[2:])
108     wikitext_table = wrpylib.mwmarkup.create_template(template_title, values[:2], keys[2:], values[2:], True)
109     assert wikitext_generated == wikitext
110
111
112 def test_find_tag():
113     wikitext = u'This is <tag>my first tag</tag> and <tag>my second tag</tag>.'
114     start, content, endtag, end = wrpylib.mwmarkup.find_tag(wikitext, u'tags')
115     assert (start, content, endtag, end) == (None, None, None, None)
116     start, content, endtag, end = wrpylib.mwmarkup.find_tag(wikitext, u'tag')
117     assert (start, content, endtag, end) == (8, 13, 25, 31)
118     start, content, endtag, end = wrpylib.mwmarkup.find_tag(wikitext, u'tag', end)
119     assert (start, content, endtag, end) == (36, 41, 54, 60)
120     wikitext = u'This is <tag myattrib="4"/>.'
121     start, content, endtag, end = wrpylib.mwmarkup.find_tag(wikitext, u'tag')
122     assert (start, content, endtag, end) == (8, None, None, 27)
123
124
125 def test_parse_googlemap():
126     wikitext = u'''
127     <googlemap version="0.9" lat="47.113291" lon="11.272337" zoom="15">
128     (Parkplatz)47.114958,11.266026
129     Erster Parkplatz
130     
131     (Gasthaus) 47.114715, 11.266262, Alt Bärnbad (Gasthaus)
132     6#FF014E9A
133     47.114715,11.266262
134     47.114135,11.268381
135     47.113421,11.269322
136     47.11277,11.269979
137     47.112408,11.271119
138     </googlemap>
139     '''
140     attributes, coords, paths = wrpylib.mwmarkup.parse_googlemap(wikitext)
141     assert attributes['lon'] == 11.272337
142     assert attributes['lat'] == 47.113291
143     assert attributes['zoom'] == 15
144     assert coords == [
145         (11.266026, 47.114958, 'Parkplatz', 'Erster Parkplatz'),
146         (11.266262, 47.114715, 'Gasthaus', u'Alt Bärnbad (Gasthaus)')]
147     assert paths == [
148         ('6#FF014E9A', [
149             (11.266262, 47.114715, None, None),
150             (11.268381, 47.114135, None, None),
151             (11.269322, 47.113421, None, None),
152             (11.269979, 47.11277, None, None),
153             (11.271119, 47.112408, None, None)])]
154     try:
155         result = wrpylib.mwmarkup.parse_googlemap(wikitext.replace('<googlemap', '|googlemap'))
156         assert False
157     except wrpylib.mwmarkup.ParseError:
158         pass
159