[Zope-Checkins] CVS: Zope3/lib/python/Zope/App/Traversing/tests - testConvenienceFunctions.py:1.3

Steve Alexander steve@cat-box.net
Tue, 25 Jun 2002 08:38:13 -0400


Update of /cvs-repository/Zope3/lib/python/Zope/App/Traversing/tests
In directory cvs.zope.org:/tmp/cvs-serv21908/lib/python/Zope/App/Traversing/tests

Modified Files:
	testConvenienceFunctions.py 
Log Message:
Added convenience functions to Zope.App.Traversing to get a canonical
location from a tuple of strings or a string.
A canonical location is a slash-delimited unicode string, or a
tuple of unicode strings.

Location strings must not end in a slash (except the root), nor contain
more than one consecutive slashes, nor be of zero length.
Location tuples must not end with an empty string (except the root), nor
contain more than one consecutive empty string, nor be of zero length.

The root location is given as u'/' or (u'',)



=== Zope3/lib/python/Zope/App/Traversing/tests/testConvenienceFunctions.py 1.2 => 1.3 ===
             )
 
+    def testLocationAsTuple(self):
+        # TODO: put these assertions in a less random order
+        from Zope.App.Traversing import locationAsTuple as lat
+        loc = (u'xx',u'yy',u'zz')
+        self.assertEqual(lat((u'xx',u'yy',u'zz')), loc)
+        self.assertEqual(lat((u'', u'xx',u'yy',u'zz')), (u'',)+loc)
+        self.assertEqual(lat(('xx','yy','zz')), loc)
+        self.assertRaises(ValueError, lat, ())
+        self.assertEqual(lat(('xx',)), (u'xx',))
+        self.assertRaises(ValueError, lat, 23)
+        self.assertRaises(UnicodeError, lat, ('', u'123', '£23'))
+        self.assertRaises(UnicodeError, lat, '£23')
+        self.assertEqual(lat(u'xx/yy/zz'), loc)
+        self.assertEqual(lat(u'/xx/yy/zz'), (u'',)+loc)
+        self.assertEqual(lat('xx/yy/zz'), loc)
+        self.assertRaises(ValueError, lat, '')
+        self.assertEqual(lat('/'), (u'',))
+        self.assertEqual(lat('xx'), (u'xx',))
+        self.assertRaises(ValueError, lat, '//')
+        self.assertRaises(AssertionError, lat, '/foo//bar')
+        # having a trailing slash on a location is undefined.
+        # we might want to give it a particular meaning for zope3 later
+        # for now, it is an invalid location identifier
+        self.assertRaises(ValueError, lat, '/foo/bar/')
+        self.assertRaises(ValueError, lat, 'foo/bar/')
+        self.assertRaises(ValueError, lat, ('','foo','bar',''))
+        self.assertRaises(ValueError, lat, ('foo','bar',''))
+        
+    def testLocationAsUnicode(self):
+        from Zope.App.Traversing import locationAsUnicode as lau
+        loc = u'xx/yy/zz'
+        self.assertEqual(lau((u'xx',u'yy',u'zz')), loc)
+        self.assertEqual(lau((u'', u'xx',u'yy',u'zz')), '/'+loc)
+        self.assertEqual(lau(('xx','yy','zz')), loc)
+        self.assertRaises(ValueError, lau, ())
+        self.assertEqual(lau(('xx',)), u'xx')
+        self.assertRaises(ValueError, lau, 23)
+        self.assertRaises(UnicodeError, lau, ('', u'123', '£23'))
+        self.assertRaises(UnicodeError, lau, '£23')
+        self.assertEqual(lau(u'xx/yy/zz'), loc)
+        self.assertEqual(lau(u'/xx/yy/zz'), u'/'+loc)
+        self.assertEqual(lau('xx/yy/zz'), loc)
+        self.assertRaises(ValueError, lau, '')
+        self.assertEqual(lau('/'), u'/')
+        self.assertEqual(lau('xx'), u'xx')
+        self.assertRaises(ValueError, lau, '//')
+        self.assertRaises(AssertionError, lau, '/foo//bar')
+        # having a trailing slash on a location is undefined.
+        # we might want to give it a particular meaning for zope3 later
+        # for now, it is an invalid location identifier
+        self.assertRaises(ValueError, lau, '/foo/bar/')
+        self.assertRaises(ValueError, lau, 'foo/bar/')
+        self.assertRaises(ValueError, lau, ('','foo','bar',''))
+        self.assertRaises(ValueError, lau, ('foo','bar',''))
+
 def test_suite():
     return TestSuite((
         makeSuite(Test),