[Lxml-checkins] r52435 - in lxml/trunk: . src/lxml/tests

scoder at codespeak.net scoder at codespeak.net
Wed Mar 12 20:34:27 CET 2008


Author: scoder
Date: Wed Mar 12 20:34:26 2008
New Revision: 52435

Modified:
   lxml/trunk/   (props changed)
   lxml/trunk/src/lxml/tests/test_objectify.py
Log:
 r3780 at delle:  sbehnel | 2008-03-12 20:28:21 +0100
 extended test case on custom types in objectify


Modified: lxml/trunk/src/lxml/tests/test_objectify.py
==============================================================================
--- lxml/trunk/src/lxml/tests/test_objectify.py	(original)
+++ lxml/trunk/src/lxml/tests/test_objectify.py	Wed Mar 12 20:34:26 2008
@@ -84,13 +84,23 @@
         ns = self.lookup.get_namespace("otherNS")
         ns[None] = self.etree.ElementBase
 
+        self._orig_types = objectify.getRegisteredTypes()
+
     def tearDown(self):
         self.lookup.get_namespace("otherNS").clear()
         objectify.set_pytype_attribute_tag()
         del self.lookup
         del self.parser
+
+        for pytype in objectify.getRegisteredTypes():
+            pytype.unregister()
+        for pytype in self._orig_types:
+            pytype.register()
+        del self._orig_types
+
         super(ObjectifyTestCase, self).tearDown()
 
+
     def test_element_nsmap_default(self):
         elt = objectify.Element("test")
         self.assertEquals(elt.nsmap, DEFAULT_NSMAP)
@@ -1814,39 +1824,80 @@
 
     def test_registered_types(self):
         orig_types = objectify.getRegisteredTypes()
+        orig_types[0].unregister()
+        self.assertEquals(orig_types[1:], objectify.getRegisteredTypes())
 
-        try:
-            orig_types[0].unregister()
-            self.assertEquals(orig_types[1:], objectify.getRegisteredTypes())
-
-            class NewType(objectify.ObjectifiedDataElement):
-                pass
+        class NewType(objectify.ObjectifiedDataElement):
+            pass
 
-            def checkMyType(s):
-                return True
+        def checkMyType(s):
+            return True
 
-            pytype = objectify.PyType("mytype", checkMyType, NewType)
-            pytype.register()
-            self.assert_(pytype in objectify.getRegisteredTypes())
-            pytype.unregister()
+        pytype = objectify.PyType("mytype", checkMyType, NewType)
+        self.assert_(pytype not in objectify.getRegisteredTypes())
+        pytype.register()
+        self.assert_(pytype in objectify.getRegisteredTypes())
+        pytype.unregister()
+        self.assert_(pytype not in objectify.getRegisteredTypes())
+
+        pytype.register(before = [objectify.getRegisteredTypes()[0].name])
+        self.assertEquals(pytype, objectify.getRegisteredTypes()[0])
+        pytype.unregister()
+
+        pytype.register(after = [objectify.getRegisteredTypes()[0].name])
+        self.assertNotEqual(pytype, objectify.getRegisteredTypes()[0])
+        pytype.unregister()
+
+        self.assertRaises(ValueError, pytype.register,
+                          before = [objectify.getRegisteredTypes()[0].name],
+                          after  = [objectify.getRegisteredTypes()[1].name])
+
+    def test_registered_type_stringify(self):
+        from datetime import datetime
+        def parse_date(value):
+            if len(value) != 14:
+                raise ValueError(value)
+            Y = int(value[0:4])
+            M = int(value[4:6])
+            D = int(value[6:8])
+            h = int(value[8:10])
+            m = int(value[10:12])
+            s = int(value[12:14])
+            return datetime(Y, M, D, h, m, s)
+
+        def stringify_date(date):
+            return date.strftime("%Y%m%d%H%M%S")
+
+        class DatetimeElement(objectify.ObjectifiedDataElement):
+            @property
+            def pyval(self):
+                return parse_date(self.text)
+
+        datetime_type = objectify.PyType(
+            "datetime", parse_date, DatetimeElement, stringify_date)
+        datetime_type.xmlSchemaTypes = "dateTime"
+        datetime_type.register()
+
+        NAMESPACE = "http://foo.net/xmlns"
+        NAMESPACE_MAP = {'ns': NAMESPACE}
+
+        r = objectify.Element("{%s}root" % NAMESPACE, nsmap=NAMESPACE_MAP)
+        time = datetime.now()
+        r.date = time
+
+        self.assert_(isinstance(r.date, DatetimeElement))
+        self.assert_(isinstance(r.date.pyval, datetime))
+
+        self.assertEquals(r.date.pyval, parse_date(stringify_date(time)))
+        self.assertEquals(r.date.text, stringify_date(time))
 
-            pytype.register(before = [objectify.getRegisteredTypes()[0].name])
-            self.assertEquals(pytype, objectify.getRegisteredTypes()[0])
-            pytype.unregister()
+        r.date = objectify.E.date(time)
 
-            pytype.register(after = [objectify.getRegisteredTypes()[0].name])
-            self.assertNotEqual(pytype, objectify.getRegisteredTypes()[0])
-            pytype.unregister()
+        self.assert_(isinstance(r.date, DatetimeElement))
+        self.assert_(isinstance(r.date.pyval, datetime))
 
-            self.assertRaises(ValueError, pytype.register,
-                              before = [objectify.getRegisteredTypes()[0].name],
-                              after  = [objectify.getRegisteredTypes()[1].name])
-
-        finally:
-            for pytype in objectify.getRegisteredTypes():
-                pytype.unregister()
-            for pytype in orig_types:
-                pytype.register()
+        self.assertEquals(r.date.pyval, parse_date(stringify_date(time)))
+        self.assertEquals(r.date.text, stringify_date(time))
 
     def test_object_path(self):
         root = self.XML(xml_str)


More information about the lxml-checkins mailing list