ae21f2bf5947eca85fdb0f262ece1d65b167929d
[philipp/winterrodeln/wrpylib.git] / tests / test_wrvalidators.py
1 #!/usr/bin/python2.7
2 # -*- coding: iso-8859-15 -*-
3 import collections
4 import wrpylib.wrvalidators
5 import formencode
6
7
8 def test_OrderedSchema():
9     v = wrpylib.wrvalidators.OrderedSchema()
10     v.pre_validators = [formencode.Validator()]
11     v.chained_validators = [formencode.Validator()]
12     v.add_field(u'c', formencode.Validator())
13     v.add_field(u'b', formencode.Validator())
14     v.add_field(u'a', formencode.Validator())
15     v.add_field(u'd', formencode.Validator())
16     other = collections.OrderedDict([('d', 'd'), ('b', 'b'), ('a', 'a'), ('c', 'c')])
17     python = v.to_python(other)
18     assert python.keys() == other.keys()
19     assert python.values() == other.values()
20     other2 = v.from_python(python)
21     assert other.keys() == other2.keys()
22     assert other.values() == other2.values()
23
24
25 def test_NoneValidator():
26     v =  wrpylib.wrvalidators.NoneValidator(wrpylib.wrvalidators.Unicode())
27     assert v.to_python(u'') == None
28     assert v.from_python(None) == u''
29
30
31 # test_NeinValidator
32
33
34 # test_Unicode
35
36
37 # test_UnicodeNone
38
39
40 # test_Unsigned
41
42
43 def test_UnsignedNone():
44     v = wrpylib.wrvalidators.UnsignedNone()
45     assert v.to_python(u'42') == 42
46     assert v.to_python(u'') == None
47     assert v.from_python(42) == u'42'
48     assert v.from_python(None) == u''
49
50
51 # test_UnsignedNeinNone
52
53
54 # test_Loop
55
56
57 # test_DictValidator
58
59
60 # test_GermanBoolNone
61
62
63 def test_GermanTristateTuple():
64     v = wrpylib.wrvalidators.GermanTristateTuple()
65     assert v.to_python(u'') == (None, None)
66     assert v.to_python(u'Ja') == (True, False)
67     assert v.to_python(u'Nein') == (False, True)
68     assert v.to_python(u'Teilweise') == (True, True)
69     assert v.from_python((None, None)) == u''
70     assert v.from_python((False, True)) == u'Nein'
71     assert v.from_python((True, False)) == u'Ja'
72     assert v.from_python((True, True)) == u'Teilweise'
73
74
75 def test_GermanTristateFloat():
76     v = wrpylib.wrvalidators.GermanTristateFloat()
77     assert v.to_python(u'') == None
78     assert v.to_python(u'Ja') == 1.0
79     assert v.to_python(u'Nein') == 0.0
80     assert v.to_python(u'Teilweise') == 0.5
81     assert v.from_python(None) == u''
82     assert v.from_python(0.0) == u'Nein'
83     assert v.from_python(1.0) == u'Ja'
84     assert v.from_python(0.5) == u'Teilweise'
85
86
87 # test_ValueComment
88
89
90 # test_SemicolonList
91
92
93 def test_ValueCommentList():
94     v = wrpylib.wrvalidators.ValueCommentList()
95     assert v.to_python(u'abc') == [(u'abc', None)]
96     assert v.to_python(u'abc def') == [(u'abc def', None)]
97     assert v.to_python(u'value (comment)') == [(u'value', u'comment')]
98     assert v.to_python(u'value (comment)') == [(u'value', u'comment')]
99     assert v.to_python(u'value1 (comment); value2') == [(u'value1', u'comment'), (u'value2', None)]
100     assert v.to_python(u'value1 (comment1); value2; value3 (comment3)') == [(u'value1', u'comment1'), (u'value2', None), ('value3', 'comment3')]
101     assert v.to_python(u'value1 (comment1); [[link (linkcomment)]] (not easy)') == [(u'value1', u'comment1'), (u'[[link (linkcomment)]]', u'not easy')]
102
103
104 # test_GenericDateTime
105
106
107 # test_DateTimeNoSec
108
109
110 # test_DateNone
111
112
113 # test_Geo
114
115
116 def test_GeoNone():
117     coord = u'47.076207 N 11.453553 E'
118     v = wrpylib.wrvalidators.GeoNone()
119     (lat, lon) = v.to_python(coord)
120     assert lat == 47.076207
121     assert lon == 11.453553
122     assert v.to_python(u'') == (None, None)
123
124     assert v.from_python((lat, lon)) == coord
125     assert v.from_python((None, None)) == u''
126
127
128 # test_MultiGeo
129
130
131 # test_AustrianPhoneNumber
132
133
134 # test_AustrianPhoneNumberNone
135
136
137 # test_AustrianPhoneNumberCommentLoop
138
139
140 # test_GermanDifficulty
141
142
143 # test_GermanAvalanches
144
145
146 def test_GermanPublicTransport():
147     v = wrpylib.wrvalidators.GermanPublicTransport()
148     assert v.to_python(u'') is None
149     assert v.to_python(u'Sehr gut') == 1
150     assert v.to_python(u'Gut') == 2
151     assert v.to_python(u'Mittelmäßig') == 3
152     assert v.to_python(u'Schlecht') == 4
153     assert v.to_python(u'Nein') == 5
154     assert v.to_python(u'Ja') == 6
155
156     assert v.from_python(None) == u''
157     assert v.from_python(1) == u'Sehr gut'
158     assert v.from_python(2) == u'Gut'
159     assert v.from_python(3) == u'Mittelmäßig'
160     assert v.from_python(4) == u'Schlecht'
161     assert v.from_python(5) == u'Nein'
162     assert v.from_python(6) == u'Ja'
163     assert v.from_python(1l) == u'Sehr gut'
164
165
166 # test_GermanTristateFloatComment
167
168
169 # test_UnsignedCommentNone
170
171
172 # test_GermanCachet
173
174
175 # test_url
176
177
178 def test_UrlNeinNone():
179     v = wrpylib.wrvalidators.UrlNeinNone()
180     assert v.to_python(u'') == None
181     assert v.to_python(u'Nein') == u'Nein'
182     assert v.to_python(u'http://www.höttingeralm.at') == u'http://www.höttingeralm.at'
183     assert v.from_python(None) == u''
184     assert v.from_python(u'Nein') == u'Nein'
185     assert v.from_python(u'http://www.höttingeralm.at') == u'http://www.höttingeralm.at'
186
187
188 def test_ValueCommentListNeinLoopNone():
189     v = wrpylib.wrvalidators.ValueCommentListNeinLoopNone()
190     assert v.to_python(u'') == None
191     assert v.to_python(u'Nein') == u'Nein'
192     assert v.to_python(u'T-Mobile (gut); A1') == u'T-Mobile (gut); A1'
193     assert v.from_python(None) == u''
194     assert v.from_python(u'Nein') == u'Nein'
195     assert v.from_python(u'T-Mobile (gut); A1') == u'T-Mobile (gut); A1'
196
197
198 # test_PhoneNumber
199     
200
201 def test_PhoneCommentListNeinLoopNone():
202     v = wrpylib.wrvalidators.PhoneCommentListNeinLoopNone(comments_are_optional=True)
203     assert v.to_python(u'') == None
204     assert v.to_python(u'Nein') == u'Nein'
205     assert v.to_python(u'+43-699-1234567 (nicht nach 20:00 Uhr); +43-512-123456') == u'+43-699-1234567 (nicht nach 20:00 Uhr); +43-512-123456'
206     assert v.from_python(None) == u''
207     assert v.from_python(u'Nein') == u'Nein'
208     assert v.from_python(u'+43-699-1234567 (nicht nach 20:00 Uhr); +43-512-123456') == u'+43-699-1234567 (nicht nach 20:00 Uhr); +43-512-123456'
209
210
211 def test_MaskedEmail():
212     v = wrpylib.wrvalidators.MaskedEmail()
213     assert v.to_python(u'') == (None, None)
214     assert v.to_python(u'abc.def@example.com') == (u'abc.def@example.com', False)
215     assert v.to_python(u'abc.def(at)example.com') == (u'abc.def@example.com', True)
216     assert v.from_python((None, None)) == u''
217     assert v.from_python((u'abc.def@example.com', False)) == u'abc.def@example.com'
218     assert v.from_python((u'abc.def@example.com', True)) == u'abc.def(at)example.com'
219
220
221 def test_EmailCommentListNeinLoopNone():
222     v = wrpylib.wrvalidators.EmailCommentListNeinLoopNone()
223     assert v.to_python(u'') == None
224     assert v.to_python(u'Nein') == u'Nein'
225     assert v.to_python(u'first@example.com') == u'first@example.com'
226     assert v.to_python(u'first@example.com (Nur Winter); second@example.com') == u'first@example.com (Nur Winter); second@example.com'
227     assert v.from_python(None) == u''
228     assert v.from_python(u'Nein') == u'Nein'
229     assert v.from_python(u'first@example.com') == u'first@example.com'
230     assert v.from_python(u'first@example.com (Nur Winter); second@example.com') == u'first@example.com (Nur Winter); second@example.com'
231     testvalue = u'abc.def(at)example.com (comment)'
232     try:
233         v.to_python(testvalue)
234         assert False
235     except formencode.Invalid:
236         pass
237     try:
238         v.from_python(testvalue)
239         assert False
240     except formencode.Invalid:
241         pass
242     v = wrpylib.wrvalidators.EmailCommentListNeinLoopNone(allow_masked_email=True)
243     assert v.to_python(testvalue) == testvalue
244     assert v.from_python(testvalue) == testvalue
245
246
247 # test_WikiPage
248
249
250 # test_WikiPageList
251
252
253 def test_WikiPageListLoopNone():
254     v = wrpylib.wrvalidators.WikiPageListLoopNone()
255     assert v.to_python(u'') == None
256     assert v.to_python(u'[[Birgitzer Alm]]; [[Kemater Alm]]') == u'[[Birgitzer Alm]]; [[Kemater Alm]]'
257     assert v.from_python(None) == u''
258     assert v.from_python(u'[[Birgitzer Alm]]; [[Kemater Alm]]') == u'[[Birgitzer Alm]]; [[Kemater Alm]]'
259
260
261 # test_TupleSecondValidator
262
263
264 def test_BoolUnicodeTupleValidator():
265     v = wrpylib.wrvalidators.BoolUnicodeTupleValidator()
266     assert v.to_python(u'') == (None, None)
267     assert v.to_python(u'Nein') == (False, None)
268     assert v.to_python(u'any text') == (True, u'any text')
269     assert v.from_python((None, None)) == u''
270     assert v.from_python((False, None)) == u'Nein'
271     assert v.from_python((True, u'any text')) == u'any text'
272
273
274
275
276 def test_GermanLift():
277     v = wrpylib.wrvalidators.GermanLift()
278     assert v.to_python(u'') == (None, None)
279     assert v.to_python(u'Nein') == (False, None)
280     assert v.to_python(u'Sessellift (4 Euro)') == (True, u'Sessellift (4 Euro)')
281     assert v.from_python((None, None)) == u''
282     assert v.from_python((False, None)) == u'Nein'
283     assert v.from_python((True, u'Sessellift (4 Euro)')) == u'Sessellift (4 Euro)'
284
285
286 def test_SledRental():
287     v = wrpylib.wrvalidators.SledRental()
288     assert v.to_python(u'') == (None, None)
289     assert v.to_python(u'Nein') == (False, None)
290     assert v.to_python(u'Ja') == (True, u'Ja')
291     assert v.to_python(u'Talstation (nur mit Ticket); Schneealm') == (True, u'Talstation (nur mit Ticket); Schneealm')
292     assert v.from_python((None, None)) == u''
293     assert v.from_python((False, None)) == u'Nein'
294     assert v.from_python((True, u'Talstation (nur mit Ticket); Schneealm')) == u'Talstation (nur mit Ticket); Schneealm'
295     assert v.from_python((True, u'Ja')) == u'Ja'
296
297
298 def test_RodelbahnboxDictValidator():
299     v = wrpylib.wrvalidators.RodelbahnboxDictValidator()
300     other = collections.OrderedDict([
301         (u'Position', u'47.309820 N 9.986508 E'),
302         (u'Position oben', u''),
303         (u'Höhe oben', u'1244'),
304         (u'Position unten', u''),
305         (u'Höhe unten', u'806'),
306         (u'Länge', u'5045'),
307         (u'Schwierigkeit', u''),
308         (u'Lawinen', u'gelegentlich'),
309         (u'Betreiber', u''),
310         (u'Öffentliche Anreise', u'Ja'),
311         (u'Aufstieg möglich', u'Ja'),
312         (u'Aufstieg getrennt', u'Nein'),
313         (u'Gehzeit', u'105'),
314         (u'Aufstiegshilfe', u'Nein'),
315         (u'Beleuchtungsanlage', u'Nein'),
316         (u'Beleuchtungstage', u''),
317         (u'Rodelverleih', u'Ja'),
318         (u'Gütesiegel', u''),
319         (u'Webauskunft', u''),
320         (u'Telefonauskunft', u'+43-664-1808482 (Bergkristallhütte)'),
321         (u'Bild', u'Rodelbahn Bergkristallhütte 2009-03-03.jpg'),
322         (u'In Übersichtskarte', u'Ja'),
323         (u'Forumid', u'72')])
324     python = v.to_python(other, None)
325     other2 = v.from_python(python, None)
326     assert other == other2
327
328
329 def test_GasthausboxDictValidator():
330     v = wrpylib.wrvalidators.GasthausboxDictValidator()
331     other = collections.OrderedDict([
332         (u'Position', u'47.295549 N 9.986970 E'),
333         (u'Höhe', u'1250'),
334         (u'Betreiber', u''),
335         (u'Sitzplätze', u''),
336         (u'Übernachtung', u''),
337         (u'Rauchfrei', u'Nein'),
338         (u'Rodelverleih', u''),
339         (u'Handyempfang', u'A1; T-Mobile/Telering'),
340         (u'Homepage', u'http://www.bergkristallhuette.com/'),
341         (u'E-Mail', u'bergkristallhuette@gmx.at'),
342         (u'Telefon', u'+43-664-1808482'),
343         (u'Bild', u'Bergkritsallhütte 2009-02-07.JPG'),
344         (u'Rodelbahnen', u'[[Bergkristallhütte]]')])
345     python = v.to_python(other, None)
346     other2 = v.from_python(python, None)
347     assert other == other2
348