[CalendarServer-changes] [8898] CalendarServer/trunk/txdav/xml
source_changes at macosforge.org
source_changes at macosforge.org
Fri Mar 16 14:30:02 PDT 2012
Revision: 8898
http://trac.macosforge.org/projects/calendarserver/changeset/8898
Author: wsanchez at apple.com
Date: 2012-03-16 14:30:00 -0700 (Fri, 16 Mar 2012)
Log Message:
-----------
Flush out XML name encoding, add tests.
Modified Paths:
--------------
CalendarServer/trunk/txdav/xml/base.py
CalendarServer/trunk/txdav/xml/test/test_base.py
Modified: CalendarServer/trunk/txdav/xml/base.py
===================================================================
--- CalendarServer/trunk/txdav/xml/base.py 2012-03-16 20:42:15 UTC (rev 8897)
+++ CalendarServer/trunk/txdav/xml/base.py 2012-03-16 21:30:00 UTC (rev 8898)
@@ -1,6 +1,6 @@
##
+# Copyright (c) 2005-2012 Apple Computer, Inc. All rights reserved.
# Copyright (c) 2007 Twisted Matrix Laboratories.
-# Copyright (c) 2005-2012 Apple Computer, Inc. All rights reserved.
#
# Permission is hereby granted, free of charge, to any person obtaining a copy
# of this software and associated documentation files (the "Software"), to deal
@@ -70,25 +70,49 @@
If namespace is None, returns "name", otherwise, returns
"{namespace}name".
"""
- if namespace is None: return name.encode("utf-8")
- return (u"{%s}%s" % (namespace, name)).encode("utf-8")
+ if not namespace:
+ sname = name
+ else:
+ sname = u"{%s}%s" % (namespace, name)
+ return sname.encode("utf-8")
+
def decodeXMLName(name):
"""
Decodes an XML (namespace, name) pair from an ASCII string as
encoded by encodeXMLName().
"""
- if name[0] is not "{": return (None, name.decode("utf-8"))
+ def invalid():
+ raise ValueError("Invalid encoded name: %r" % (name,))
- index = name.find("}")
+ if not name:
+ invalid()
- if (index is -1 or not len(name) > index):
- raise ValueError("Invalid encoded name: %r" % (name,))
+ if name[0] is "{":
+ index = name.find("}")
+ if (index is -1 or not len(name) > index):
+ invalid()
- return (name[1:index].decode("utf-8"), name[index+1:].decode("utf-8"))
+ namespace = name[1:index].decode("utf-8")
+ localname = name[index+1:].decode("utf-8")
+ if not namespace:
+ namespace = None
+ if not localname:
+ invalid()
+
+ else:
+ namespace = None
+ localname = name.decode("utf-8")
+
+ if "{" in localname or "}" in localname:
+ invalid()
+
+ return (namespace, localname)
+
+
class WebDAVElement (object):
"""
WebDAV XML element. (RFC 2518, section 12)
Modified: CalendarServer/trunk/txdav/xml/test/test_base.py
===================================================================
--- CalendarServer/trunk/txdav/xml/test/test_base.py 2012-03-16 20:42:15 UTC (rev 8897)
+++ CalendarServer/trunk/txdav/xml/test/test_base.py 2012-03-16 21:30:00 UTC (rev 8898)
@@ -1,8 +1,6 @@
-# Copyright (c) 2009 Twisted Matrix Laboratories.
-# See LICENSE for details.
-
##
# Copyright (c) 2005-2012 Apple Computer, Inc. All rights reserved.
+# Copyright (c) 2009 Twisted Matrix Laboratories.
#
# Permission is hereby granted, free of charge, to any person obtaining a copy
# of this software and associated documentation files (the "Software"), to deal
@@ -28,9 +26,47 @@
"""
from twisted.trial.unittest import TestCase
+from txdav.xml.base import decodeXMLName, encodeXMLName
from twext.web2.dav.davxml import WebDAVDocument, WebDAVUnknownElement
+class NameEncodeTests(TestCase):
+ """
+ Name encoding tests.
+ """
+ def test_decodeXMLName(self):
+ # Empty name
+ self.assertRaises(ValueError, decodeXMLName, "")
+ self.assertRaises(ValueError, decodeXMLName, "{}")
+ self.assertRaises(ValueError, decodeXMLName, "{x}")
+
+ # Weird bracket cases
+ self.assertRaises(ValueError, decodeXMLName, "{")
+ self.assertRaises(ValueError, decodeXMLName, "x{")
+ self.assertRaises(ValueError, decodeXMLName, "{x")
+ self.assertRaises(ValueError, decodeXMLName, "}")
+ self.assertRaises(ValueError, decodeXMLName, "x}")
+ self.assertRaises(ValueError, decodeXMLName, "}x")
+ self.assertRaises(ValueError, decodeXMLName, "{{}")
+ self.assertRaises(ValueError, decodeXMLName, "{{}}")
+ self.assertRaises(ValueError, decodeXMLName, "x{}")
+
+ # Empty namespace is OK
+ self.assertEquals(decodeXMLName( "x"), (None, "x"))
+ self.assertEquals(decodeXMLName("{}x"), (None, "x"))
+
+ # Normal case
+ self.assertEquals(decodeXMLName("{namespace}name"), ("namespace", "name"))
+
+ def test_encodeXMLName(self):
+ # No namespace
+ self.assertEquals(encodeXMLName(None, "name"), "name")
+ self.assertEquals(encodeXMLName("" , "name"), "name")
+
+ # Normal case
+ self.assertEquals(encodeXMLName("namespace", "name"), "{namespace}name")
+
+
class WebDAVElementTestsMixin:
"""
Mixin for L{TestCase}s which test a L{WebDAVElement} subclass.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.macosforge.org/pipermail/calendarserver-changes/attachments/20120316/80a7d2fc/attachment-0001.html>
More information about the calendarserver-changes
mailing list