Now the tests are using the unittest module.
[philipp/winterrodeln/wrpylib.git] / tests / test_wrvalidators.py
index ae21f2bf5947eca85fdb0f262ece1d65b167929d..eeb4a1cbf0c4fc28e70f909bad5e852600c08201 100644 (file)
 import collections
 import wrpylib.wrvalidators
 import formencode
+import unittest
 
 
-def test_OrderedSchema():
-    v = wrpylib.wrvalidators.OrderedSchema()
-    v.pre_validators = [formencode.Validator()]
-    v.chained_validators = [formencode.Validator()]
-    v.add_field(u'c', formencode.Validator())
-    v.add_field(u'b', formencode.Validator())
-    v.add_field(u'a', formencode.Validator())
-    v.add_field(u'd', formencode.Validator())
-    other = collections.OrderedDict([('d', 'd'), ('b', 'b'), ('a', 'a'), ('c', 'c')])
-    python = v.to_python(other)
-    assert python.keys() == other.keys()
-    assert python.values() == other.values()
-    other2 = v.from_python(python)
-    assert other.keys() == other2.keys()
-    assert other.values() == other2.values()
+class TestWrValidators(unittest.TestCase):
+    def test_OrderedSchema(self):
+        v = wrpylib.wrvalidators.OrderedSchema()
+        v.pre_validators = [formencode.Validator()]
+        v.chained_validators = [formencode.Validator()]
+        v.add_field(u'c', formencode.Validator())
+        v.add_field(u'b', formencode.Validator())
+        v.add_field(u'a', formencode.Validator())
+        v.add_field(u'd', formencode.Validator())
+        other = collections.OrderedDict([('d', 'd'), ('b', 'b'), ('a', 'a'), ('c', 'c')])
+        python = v.to_python(other)
+        assert python.keys() == other.keys()
+        assert python.values() == other.values()
+        other2 = v.from_python(python)
+        assert other.keys() == other2.keys()
+        assert other.values() == other2.values()
 
 
-def test_NoneValidator():
-    v =  wrpylib.wrvalidators.NoneValidator(wrpylib.wrvalidators.Unicode())
-    assert v.to_python(u'') == None
-    assert v.from_python(None) == u''
+    def test_NoneValidator(self):
+        v =  wrpylib.wrvalidators.NoneValidator(wrpylib.wrvalidators.Unicode())
+        assert v.to_python(u'') == None
+        assert v.from_python(None) == u''
 
 
-# test_NeinValidator
+    # test_NeinValidator
 
 
-# test_Unicode
+    # test_Unicode
 
 
-# test_UnicodeNone
+    # test_UnicodeNone
 
 
-# test_Unsigned
+    # test_Unsigned
 
 
-def test_UnsignedNone():
-    v = wrpylib.wrvalidators.UnsignedNone()
-    assert v.to_python(u'42') == 42
-    assert v.to_python(u'') == None
-    assert v.from_python(42) == u'42'
-    assert v.from_python(None) == u''
+    def test_UnsignedNone(self):
+        v = wrpylib.wrvalidators.UnsignedNone()
+        assert v.to_python(u'42') == 42
+        assert v.to_python(u'') == None
+        assert v.from_python(42) == u'42'
+        assert v.from_python(None) == u''
 
 
-# test_UnsignedNeinNone
+    # test_UnsignedNeinNone
 
 
-# test_Loop
+    # test_Loop
 
 
-# test_DictValidator
+    # test_DictValidator
 
 
-# test_GermanBoolNone
+    # test_GermanBoolNone
 
 
-def test_GermanTristateTuple():
-    v = wrpylib.wrvalidators.GermanTristateTuple()
-    assert v.to_python(u'') == (None, None)
-    assert v.to_python(u'Ja') == (True, False)
-    assert v.to_python(u'Nein') == (False, True)
-    assert v.to_python(u'Teilweise') == (True, True)
-    assert v.from_python((None, None)) == u''
-    assert v.from_python((False, True)) == u'Nein'
-    assert v.from_python((True, False)) == u'Ja'
-    assert v.from_python((True, True)) == u'Teilweise'
+    def test_GermanTristateTuple(self):
+        v = wrpylib.wrvalidators.GermanTristateTuple()
+        assert v.to_python(u'') == (None, None)
+        assert v.to_python(u'Ja') == (True, False)
+        assert v.to_python(u'Nein') == (False, True)
+        assert v.to_python(u'Teilweise') == (True, True)
+        assert v.from_python((None, None)) == u''
+        assert v.from_python((False, True)) == u'Nein'
+        assert v.from_python((True, False)) == u'Ja'
+        assert v.from_python((True, True)) == u'Teilweise'
 
 
-def test_GermanTristateFloat():
-    v = wrpylib.wrvalidators.GermanTristateFloat()
-    assert v.to_python(u'') == None
-    assert v.to_python(u'Ja') == 1.0
-    assert v.to_python(u'Nein') == 0.0
-    assert v.to_python(u'Teilweise') == 0.5
-    assert v.from_python(None) == u''
-    assert v.from_python(0.0) == u'Nein'
-    assert v.from_python(1.0) == u'Ja'
-    assert v.from_python(0.5) == u'Teilweise'
+    def test_GermanTristateFloat(self):
+        v = wrpylib.wrvalidators.GermanTristateFloat()
+        assert v.to_python(u'') == None
+        assert v.to_python(u'Ja') == 1.0
+        assert v.to_python(u'Nein') == 0.0
+        assert v.to_python(u'Teilweise') == 0.5
+        assert v.from_python(None) == u''
+        assert v.from_python(0.0) == u'Nein'
+        assert v.from_python(1.0) == u'Ja'
+        assert v.from_python(0.5) == u'Teilweise'
 
 
-# test_ValueComment
+    # test_ValueComment
 
 
-# test_SemicolonList
+    # test_SemicolonList
 
 
-def test_ValueCommentList():
-    v = wrpylib.wrvalidators.ValueCommentList()
-    assert v.to_python(u'abc') == [(u'abc', None)]
-    assert v.to_python(u'abc def') == [(u'abc def', None)]
-    assert v.to_python(u'value (comment)') == [(u'value', u'comment')]
-    assert v.to_python(u'value (comment)') == [(u'value', u'comment')]
-    assert v.to_python(u'value1 (comment); value2') == [(u'value1', u'comment'), (u'value2', None)]
-    assert v.to_python(u'value1 (comment1); value2; value3 (comment3)') == [(u'value1', u'comment1'), (u'value2', None), ('value3', 'comment3')]
-    assert v.to_python(u'value1 (comment1); [[link (linkcomment)]] (not easy)') == [(u'value1', u'comment1'), (u'[[link (linkcomment)]]', u'not easy')]
+    def test_ValueCommentList(self):
+        v = wrpylib.wrvalidators.ValueCommentList()
+        assert v.to_python(u'abc') == [(u'abc', None)]
+        assert v.to_python(u'abc def') == [(u'abc def', None)]
+        assert v.to_python(u'value (comment)') == [(u'value', u'comment')]
+        assert v.to_python(u'value (comment)') == [(u'value', u'comment')]
+        assert v.to_python(u'value1 (comment); value2') == [(u'value1', u'comment'), (u'value2', None)]
+        assert v.to_python(u'value1 (comment1); value2; value3 (comment3)') == [(u'value1', u'comment1'), (u'value2', None), ('value3', 'comment3')]
+        assert v.to_python(u'value1 (comment1); [[link (linkcomment)]] (not easy)') == [(u'value1', u'comment1'), (u'[[link (linkcomment)]]', u'not easy')]
 
 
-# test_GenericDateTime
+    # test_GenericDateTime
 
 
-# test_DateTimeNoSec
+    # test_DateTimeNoSec
 
 
-# test_DateNone
+    # test_DateNone
 
 
-# test_Geo
+    # test_Geo
 
 
-def test_GeoNone():
-    coord = u'47.076207 N 11.453553 E'
-    v = wrpylib.wrvalidators.GeoNone()
-    (lat, lon) = v.to_python(coord)
-    assert lat == 47.076207
-    assert lon == 11.453553
-    assert v.to_python(u'') == (None, None)
+    def test_GeoNone(self):
+        coord = u'47.076207 N 11.453553 E'
+        v = wrpylib.wrvalidators.GeoNone()
+        (lat, lon) = v.to_python(coord)
+        assert lat == 47.076207
+        assert lon == 11.453553
+        assert v.to_python(u'') == (None, None)
 
-    assert v.from_python((lat, lon)) == coord
-    assert v.from_python((None, None)) == u''
+        assert v.from_python((lat, lon)) == coord
+        assert v.from_python((None, None)) == u''
 
 
-# test_MultiGeo
+    # test_MultiGeo
 
 
-# test_AustrianPhoneNumber
+    # test_AustrianPhoneNumber
 
 
-# test_AustrianPhoneNumberNone
+    # test_AustrianPhoneNumberNone
 
 
-# test_AustrianPhoneNumberCommentLoop
+    # test_AustrianPhoneNumberCommentLoop
 
 
-# test_GermanDifficulty
+    # test_GermanDifficulty
 
 
-# test_GermanAvalanches
+    # test_GermanAvalanches
 
 
-def test_GermanPublicTransport():
-    v = wrpylib.wrvalidators.GermanPublicTransport()
-    assert v.to_python(u'') is None
-    assert v.to_python(u'Sehr gut') == 1
-    assert v.to_python(u'Gut') == 2
-    assert v.to_python(u'Mittelmäßig') == 3
-    assert v.to_python(u'Schlecht') == 4
-    assert v.to_python(u'Nein') == 5
-    assert v.to_python(u'Ja') == 6
+    def test_GermanPublicTransport(self):
+        v = wrpylib.wrvalidators.GermanPublicTransport()
+        assert v.to_python(u'') is None
+        assert v.to_python(u'Sehr gut') == 1
+        assert v.to_python(u'Gut') == 2
+        assert v.to_python(u'Mittelmäßig') == 3
+        assert v.to_python(u'Schlecht') == 4
+        assert v.to_python(u'Nein') == 5
+        assert v.to_python(u'Ja') == 6
 
-    assert v.from_python(None) == u''
-    assert v.from_python(1) == u'Sehr gut'
-    assert v.from_python(2) == u'Gut'
-    assert v.from_python(3) == u'Mittelmäßig'
-    assert v.from_python(4) == u'Schlecht'
-    assert v.from_python(5) == u'Nein'
-    assert v.from_python(6) == u'Ja'
-    assert v.from_python(1l) == u'Sehr gut'
+        assert v.from_python(None) == u''
+        assert v.from_python(1) == u'Sehr gut'
+        assert v.from_python(2) == u'Gut'
+        assert v.from_python(3) == u'Mittelmäßig'
+        assert v.from_python(4) == u'Schlecht'
+        assert v.from_python(5) == u'Nein'
+        assert v.from_python(6) == u'Ja'
+        assert v.from_python(1l) == u'Sehr gut'
 
 
-# test_GermanTristateFloatComment
+    # test_GermanTristateFloatComment
 
 
-# test_UnsignedCommentNone
+    # test_UnsignedCommentNone
 
 
-# test_GermanCachet
+    # test_GermanCachet
 
 
-# test_url
+    # test_url
 
 
-def test_UrlNeinNone():
-    v = wrpylib.wrvalidators.UrlNeinNone()
-    assert v.to_python(u'') == None
-    assert v.to_python(u'Nein') == u'Nein'
-    assert v.to_python(u'http://www.höttingeralm.at') == u'http://www.höttingeralm.at'
-    assert v.from_python(None) == u''
-    assert v.from_python(u'Nein') == u'Nein'
-    assert v.from_python(u'http://www.höttingeralm.at') == u'http://www.höttingeralm.at'
+    def test_UrlNeinNone(self):
+        v = wrpylib.wrvalidators.UrlNeinNone()
+        assert v.to_python(u'') == None
+        assert v.to_python(u'Nein') == u'Nein'
+        assert v.to_python(u'http://www.höttingeralm.at') == u'http://www.höttingeralm.at'
+        assert v.from_python(None) == u''
+        assert v.from_python(u'Nein') == u'Nein'
+        assert v.from_python(u'http://www.höttingeralm.at') == u'http://www.höttingeralm.at'
 
 
-def test_ValueCommentListNeinLoopNone():
-    v = wrpylib.wrvalidators.ValueCommentListNeinLoopNone()
-    assert v.to_python(u'') == None
-    assert v.to_python(u'Nein') == u'Nein'
-    assert v.to_python(u'T-Mobile (gut); A1') == u'T-Mobile (gut); A1'
-    assert v.from_python(None) == u''
-    assert v.from_python(u'Nein') == u'Nein'
-    assert v.from_python(u'T-Mobile (gut); A1') == u'T-Mobile (gut); A1'
+    def test_ValueCommentListNeinLoopNone(self):
+        v = wrpylib.wrvalidators.ValueCommentListNeinLoopNone()
+        assert v.to_python(u'') == None
+        assert v.to_python(u'Nein') == u'Nein'
+        assert v.to_python(u'T-Mobile (gut); A1') == u'T-Mobile (gut); A1'
+        assert v.from_python(None) == u''
+        assert v.from_python(u'Nein') == u'Nein'
+        assert v.from_python(u'T-Mobile (gut); A1') == u'T-Mobile (gut); A1'
 
 
-# test_PhoneNumber
-    
+    # test_PhoneNumber
 
-def test_PhoneCommentListNeinLoopNone():
-    v = wrpylib.wrvalidators.PhoneCommentListNeinLoopNone(comments_are_optional=True)
-    assert v.to_python(u'') == None
-    assert v.to_python(u'Nein') == u'Nein'
-    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'
-    assert v.from_python(None) == u''
-    assert v.from_python(u'Nein') == u'Nein'
-    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'
 
+    def test_PhoneCommentListNeinLoopNone(self):
+        v = wrpylib.wrvalidators.PhoneCommentListNeinLoopNone(comments_are_optional=True)
+        assert v.to_python(u'') == None
+        assert v.to_python(u'Nein') == u'Nein'
+        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'
+        assert v.from_python(None) == u''
+        assert v.from_python(u'Nein') == u'Nein'
+        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'
 
-def test_MaskedEmail():
-    v = wrpylib.wrvalidators.MaskedEmail()
-    assert v.to_python(u'') == (None, None)
-    assert v.to_python(u'abc.def@example.com') == (u'abc.def@example.com', False)
-    assert v.to_python(u'abc.def(at)example.com') == (u'abc.def@example.com', True)
-    assert v.from_python((None, None)) == u''
-    assert v.from_python((u'abc.def@example.com', False)) == u'abc.def@example.com'
-    assert v.from_python((u'abc.def@example.com', True)) == u'abc.def(at)example.com'
 
+    def test_MaskedEmail(self):
+        v = wrpylib.wrvalidators.MaskedEmail()
+        assert v.to_python(u'') == (None, None)
+        assert v.to_python(u'abc.def@example.com') == (u'abc.def@example.com', False)
+        assert v.to_python(u'abc.def(at)example.com') == (u'abc.def@example.com', True)
+        assert v.from_python((None, None)) == u''
+        assert v.from_python((u'abc.def@example.com', False)) == u'abc.def@example.com'
+        assert v.from_python((u'abc.def@example.com', True)) == u'abc.def(at)example.com'
 
-def test_EmailCommentListNeinLoopNone():
-    v = wrpylib.wrvalidators.EmailCommentListNeinLoopNone()
-    assert v.to_python(u'') == None
-    assert v.to_python(u'Nein') == u'Nein'
-    assert v.to_python(u'first@example.com') == u'first@example.com'
-    assert v.to_python(u'first@example.com (Nur Winter); second@example.com') == u'first@example.com (Nur Winter); second@example.com'
-    assert v.from_python(None) == u''
-    assert v.from_python(u'Nein') == u'Nein'
-    assert v.from_python(u'first@example.com') == u'first@example.com'
-    assert v.from_python(u'first@example.com (Nur Winter); second@example.com') == u'first@example.com (Nur Winter); second@example.com'
-    testvalue = u'abc.def(at)example.com (comment)'
-    try:
-        v.to_python(testvalue)
-        assert False
-    except formencode.Invalid:
-        pass
-    try:
-        v.from_python(testvalue)
-        assert False
-    except formencode.Invalid:
-        pass
-    v = wrpylib.wrvalidators.EmailCommentListNeinLoopNone(allow_masked_email=True)
-    assert v.to_python(testvalue) == testvalue
-    assert v.from_python(testvalue) == testvalue
-
-
-# test_WikiPage
-
-
-# test_WikiPageList
-
-
-def test_WikiPageListLoopNone():
-    v = wrpylib.wrvalidators.WikiPageListLoopNone()
-    assert v.to_python(u'') == None
-    assert v.to_python(u'[[Birgitzer Alm]]; [[Kemater Alm]]') == u'[[Birgitzer Alm]]; [[Kemater Alm]]'
-    assert v.from_python(None) == u''
-    assert v.from_python(u'[[Birgitzer Alm]]; [[Kemater Alm]]') == u'[[Birgitzer Alm]]; [[Kemater Alm]]'
-
-
-# test_TupleSecondValidator
-
-
-def test_BoolUnicodeTupleValidator():
-    v = wrpylib.wrvalidators.BoolUnicodeTupleValidator()
-    assert v.to_python(u'') == (None, None)
-    assert v.to_python(u'Nein') == (False, None)
-    assert v.to_python(u'any text') == (True, u'any text')
-    assert v.from_python((None, None)) == u''
-    assert v.from_python((False, None)) == u'Nein'
-    assert v.from_python((True, u'any text')) == u'any text'
-
-
-
-
-def test_GermanLift():
-    v = wrpylib.wrvalidators.GermanLift()
-    assert v.to_python(u'') == (None, None)
-    assert v.to_python(u'Nein') == (False, None)
-    assert v.to_python(u'Sessellift (4 Euro)') == (True, u'Sessellift (4 Euro)')
-    assert v.from_python((None, None)) == u''
-    assert v.from_python((False, None)) == u'Nein'
-    assert v.from_python((True, u'Sessellift (4 Euro)')) == u'Sessellift (4 Euro)'
-
-
-def test_SledRental():
-    v = wrpylib.wrvalidators.SledRental()
-    assert v.to_python(u'') == (None, None)
-    assert v.to_python(u'Nein') == (False, None)
-    assert v.to_python(u'Ja') == (True, u'Ja')
-    assert v.to_python(u'Talstation (nur mit Ticket); Schneealm') == (True, u'Talstation (nur mit Ticket); Schneealm')
-    assert v.from_python((None, None)) == u''
-    assert v.from_python((False, None)) == u'Nein'
-    assert v.from_python((True, u'Talstation (nur mit Ticket); Schneealm')) == u'Talstation (nur mit Ticket); Schneealm'
-    assert v.from_python((True, u'Ja')) == u'Ja'
-
-
-def test_RodelbahnboxDictValidator():
-    v = wrpylib.wrvalidators.RodelbahnboxDictValidator()
-    other = collections.OrderedDict([
-        (u'Position', u'47.309820 N 9.986508 E'),
-        (u'Position oben', u''),
-        (u'Höhe oben', u'1244'),
-        (u'Position unten', u''),
-        (u'Höhe unten', u'806'),
-        (u'Länge', u'5045'),
-        (u'Schwierigkeit', u''),
-        (u'Lawinen', u'gelegentlich'),
-        (u'Betreiber', u''),
-        (u'Öffentliche Anreise', u'Ja'),
-        (u'Aufstieg möglich', u'Ja'),
-        (u'Aufstieg getrennt', u'Nein'),
-        (u'Gehzeit', u'105'),
-        (u'Aufstiegshilfe', u'Nein'),
-        (u'Beleuchtungsanlage', u'Nein'),
-        (u'Beleuchtungstage', u''),
-        (u'Rodelverleih', u'Ja'),
-        (u'Gütesiegel', u''),
-        (u'Webauskunft', u''),
-        (u'Telefonauskunft', u'+43-664-1808482 (Bergkristallhütte)'),
-        (u'Bild', u'Rodelbahn Bergkristallhütte 2009-03-03.jpg'),
-        (u'In Übersichtskarte', u'Ja'),
-        (u'Forumid', u'72')])
-    python = v.to_python(other, None)
-    other2 = v.from_python(python, None)
-    assert other == other2
-
-
-def test_GasthausboxDictValidator():
-    v = wrpylib.wrvalidators.GasthausboxDictValidator()
-    other = collections.OrderedDict([
-        (u'Position', u'47.295549 N 9.986970 E'),
-        (u'Höhe', u'1250'),
-        (u'Betreiber', u''),
-        (u'Sitzplätze', u''),
-        (u'Übernachtung', u''),
-        (u'Rauchfrei', u'Nein'),
-        (u'Rodelverleih', u''),
-        (u'Handyempfang', u'A1; T-Mobile/Telering'),
-        (u'Homepage', u'http://www.bergkristallhuette.com/'),
-        (u'E-Mail', u'bergkristallhuette@gmx.at'),
-        (u'Telefon', u'+43-664-1808482'),
-        (u'Bild', u'Bergkritsallhütte 2009-02-07.JPG'),
-        (u'Rodelbahnen', u'[[Bergkristallhütte]]')])
-    python = v.to_python(other, None)
-    other2 = v.from_python(python, None)
-    assert other == other2
 
+    def test_EmailCommentListNeinLoopNone(self):
+        v = wrpylib.wrvalidators.EmailCommentListNeinLoopNone()
+        assert v.to_python(u'') == None
+        assert v.to_python(u'Nein') == u'Nein'
+        assert v.to_python(u'first@example.com') == u'first@example.com'
+        assert v.to_python(u'first@example.com (Nur Winter); second@example.com') == u'first@example.com (Nur Winter); second@example.com'
+        assert v.from_python(None) == u''
+        assert v.from_python(u'Nein') == u'Nein'
+        assert v.from_python(u'first@example.com') == u'first@example.com'
+        assert v.from_python(u'first@example.com (Nur Winter); second@example.com') == u'first@example.com (Nur Winter); second@example.com'
+        testvalue = u'abc.def(at)example.com (comment)'
+        try:
+            v.to_python(testvalue)
+            assert False
+        except formencode.Invalid:
+            pass
+        try:
+            v.from_python(testvalue)
+            assert False
+        except formencode.Invalid:
+            pass
+        v = wrpylib.wrvalidators.EmailCommentListNeinLoopNone(allow_masked_email=True)
+        assert v.to_python(testvalue) == testvalue
+        assert v.from_python(testvalue) == testvalue
+
+
+    # test_WikiPage
+
+
+    # test_WikiPageList
+
+
+    def test_WikiPageListLoopNone(self):
+        v = wrpylib.wrvalidators.WikiPageListLoopNone()
+        assert v.to_python(u'') == None
+        assert v.to_python(u'[[Birgitzer Alm]]; [[Kemater Alm]]') == u'[[Birgitzer Alm]]; [[Kemater Alm]]'
+        assert v.from_python(None) == u''
+        assert v.from_python(u'[[Birgitzer Alm]]; [[Kemater Alm]]') == u'[[Birgitzer Alm]]; [[Kemater Alm]]'
+
+
+    # test_TupleSecondValidator
+
+
+    def test_BoolUnicodeTupleValidator(self):
+        v = wrpylib.wrvalidators.BoolUnicodeTupleValidator()
+        assert v.to_python(u'') == (None, None)
+        assert v.to_python(u'Nein') == (False, None)
+        assert v.to_python(u'any text') == (True, u'any text')
+        assert v.from_python((None, None)) == u''
+        assert v.from_python((False, None)) == u'Nein'
+        assert v.from_python((True, u'any text')) == u'any text'
+
+
+
+
+    def test_GermanLift(self):
+        v = wrpylib.wrvalidators.GermanLift()
+        assert v.to_python(u'') == (None, None)
+        assert v.to_python(u'Nein') == (False, None)
+        assert v.to_python(u'Sessellift (4 Euro)') == (True, u'Sessellift (4 Euro)')
+        assert v.from_python((None, None)) == u''
+        assert v.from_python((False, None)) == u'Nein'
+        assert v.from_python((True, u'Sessellift (4 Euro)')) == u'Sessellift (4 Euro)'
+
+
+    def test_SledRental(self):
+        v = wrpylib.wrvalidators.SledRental()
+        assert v.to_python(u'') == (None, None)
+        assert v.to_python(u'Nein') == (False, None)
+        assert v.to_python(u'Ja') == (True, u'Ja')
+        assert v.to_python(u'Talstation (nur mit Ticket); Schneealm') == (True, u'Talstation (nur mit Ticket); Schneealm')
+        assert v.from_python((None, None)) == u''
+        assert v.from_python((False, None)) == u'Nein'
+        assert v.from_python((True, u'Talstation (nur mit Ticket); Schneealm')) == u'Talstation (nur mit Ticket); Schneealm'
+        assert v.from_python((True, u'Ja')) == u'Ja'
+
+
+    def test_RodelbahnboxDictValidator(self):
+        v = wrpylib.wrvalidators.RodelbahnboxDictValidator()
+        other = collections.OrderedDict([
+            (u'Position', u'47.309820 N 9.986508 E'),
+            (u'Position oben', u''),
+            (u'Höhe oben', u'1244'),
+            (u'Position unten', u''),
+            (u'Höhe unten', u'806'),
+            (u'Länge', u'5045'),
+            (u'Schwierigkeit', u''),
+            (u'Lawinen', u'gelegentlich'),
+            (u'Betreiber', u''),
+            (u'Öffentliche Anreise', u'Ja'),
+            (u'Aufstieg möglich', u'Ja'),
+            (u'Aufstieg getrennt', u'Nein'),
+            (u'Gehzeit', u'105'),
+            (u'Aufstiegshilfe', u'Nein'),
+            (u'Beleuchtungsanlage', u'Nein'),
+            (u'Beleuchtungstage', u''),
+            (u'Rodelverleih', u'Ja'),
+            (u'Gütesiegel', u''),
+            (u'Webauskunft', u''),
+            (u'Telefonauskunft', u'+43-664-1808482 (Bergkristallhütte)'),
+            (u'Bild', u'Rodelbahn Bergkristallhütte 2009-03-03.jpg'),
+            (u'In Übersichtskarte', u'Ja'),
+            (u'Forumid', u'72')])
+        python = v.to_python(other, None)
+        other2 = v.from_python(python, None)
+        assert other == other2
+
+
+    def test_GasthausboxDictValidator(self):
+        v = wrpylib.wrvalidators.GasthausboxDictValidator()
+        other = collections.OrderedDict([
+            (u'Position', u'47.295549 N 9.986970 E'),
+            (u'Höhe', u'1250'),
+            (u'Betreiber', u''),
+            (u'Sitzplätze', u''),
+            (u'Übernachtung', u''),
+            (u'Rauchfrei', u'Nein'),
+            (u'Rodelverleih', u''),
+            (u'Handyempfang', u'A1; T-Mobile/Telering'),
+            (u'Homepage', u'http://www.bergkristallhuette.com/'),
+            (u'E-Mail', u'bergkristallhuette@gmx.at'),
+            (u'Telefon', u'+43-664-1808482'),
+            (u'Bild', u'Bergkritsallhütte 2009-02-07.JPG'),
+            (u'Rodelbahnen', u'[[Bergkristallhütte]]')])
+        python = v.to_python(other, None)
+        other2 = v.from_python(python, None)
+        assert other == other2