[Zope-Checkins] SVN: Zope/branches/2.12/src/Products/PluginIndexes/PathIndex/tests/testPathIndex.py Simplify / normalize test suite.
Tres Seaver
tseaver at palladion.com
Mon Apr 12 10:40:21 EDT 2010
Log message for revision 110747:
Simplify / normalize test suite.
Changed:
U Zope/branches/2.12/src/Products/PluginIndexes/PathIndex/tests/testPathIndex.py
-=-
Modified: Zope/branches/2.12/src/Products/PluginIndexes/PathIndex/tests/testPathIndex.py
===================================================================
--- Zope/branches/2.12/src/Products/PluginIndexes/PathIndex/tests/testPathIndex.py 2010-04-12 14:08:59 UTC (rev 110746)
+++ Zope/branches/2.12/src/Products/PluginIndexes/PathIndex/tests/testPathIndex.py 2010-04-12 14:40:20 UTC (rev 110747)
@@ -11,15 +11,10 @@
#
##############################################################################
"""PathIndex unit tests.
-
-$Id$
"""
import unittest
-import Testing
-import Zope2
-from Products.PluginIndexes.PathIndex.PathIndex import PathIndex
class Dummy:
@@ -29,94 +24,141 @@
def getPhysicalPath(self):
return self.path.split('/')
+DUMMIES = {
+ 1 : Dummy("/aa/aa/aa/1.html"),
+ 2 : Dummy("/aa/aa/bb/2.html"),
+ 3 : Dummy("/aa/aa/cc/3.html"),
+ 4 : Dummy("/aa/bb/aa/4.html"),
+ 5 : Dummy("/aa/bb/bb/5.html"),
+ 6 : Dummy("/aa/bb/cc/6.html"),
+ 7 : Dummy("/aa/cc/aa/7.html"),
+ 8 : Dummy("/aa/cc/bb/8.html"),
+ 9 : Dummy("/aa/cc/cc/9.html"),
+ 10 : Dummy("/bb/aa/aa/10.html"),
+ 11 : Dummy("/bb/aa/bb/11.html"),
+ 12 : Dummy("/bb/aa/cc/12.html"),
+ 13 : Dummy("/bb/bb/aa/13.html"),
+ 14 : Dummy("/bb/bb/bb/14.html"),
+ 15 : Dummy("/bb/bb/cc/15.html"),
+ 16 : Dummy("/bb/cc/aa/16.html"),
+ 17 : Dummy("/bb/cc/bb/17.html"),
+ 18 : Dummy("/bb/cc/cc/18.html")
+}
+def _populateIndex(index):
+ for k, v in DUMMIES.items():
+ index.index_object(k, v)
+
+_marker = object()
+
class PathIndexTests(unittest.TestCase):
""" Test PathIndex objects """
- def setUp(self):
- self._index = PathIndex( 'path' )
- self._values = {
- 1 : Dummy("/aa/aa/aa/1.html"),
- 2 : Dummy("/aa/aa/bb/2.html"),
- 3 : Dummy("/aa/aa/cc/3.html"),
- 4 : Dummy("/aa/bb/aa/4.html"),
- 5 : Dummy("/aa/bb/bb/5.html"),
- 6 : Dummy("/aa/bb/cc/6.html"),
- 7 : Dummy("/aa/cc/aa/7.html"),
- 8 : Dummy("/aa/cc/bb/8.html"),
- 9 : Dummy("/aa/cc/cc/9.html"),
- 10 : Dummy("/bb/aa/aa/10.html"),
- 11 : Dummy("/bb/aa/bb/11.html"),
- 12 : Dummy("/bb/aa/cc/12.html"),
- 13 : Dummy("/bb/bb/aa/13.html"),
- 14 : Dummy("/bb/bb/bb/14.html"),
- 15 : Dummy("/bb/bb/cc/15.html"),
- 16 : Dummy("/bb/cc/aa/16.html"),
- 17 : Dummy("/bb/cc/bb/17.html"),
- 18 : Dummy("/bb/cc/cc/18.html")
- }
+ def _getTargetClass(self):
+ from Products.PluginIndexes.PathIndex.PathIndex import PathIndex
+ return PathIndex
- def _populateIndex(self):
- for k, v in self._values.items():
- self._index.index_object( k, v )
+ def _makeOne(self, id='path', caller=_marker):
+ if caller is not _marker:
+ return self._getTargetClass()(id, caller)
+ return self._getTargetClass()(id)
- def test_z3interfaces(self):
+ def test_class_conforms_to_IPathIndex(self):
from Products.PluginIndexes.interfaces import IPathIndex
+ from zope.interface.verify import verifyClass
+ verifyClass(IPathIndex, self._getTargetClass())
+
+ def test_instance_conforms_to_IPathIndex(self):
+ from Products.PluginIndexes.interfaces import IPathIndex
+ from zope.interface.verify import verifyObject
+ verifyObject(IPathIndex, self._makeOne())
+
+ def test_class_conforms_to_IUniqueValueIndex(self):
from Products.PluginIndexes.interfaces import IUniqueValueIndex
from zope.interface.verify import verifyClass
+ verifyClass(IUniqueValueIndex, self._getTargetClass())
- verifyClass(IPathIndex, PathIndex)
- verifyClass(IUniqueValueIndex, PathIndex)
+ def test_instance_conforms_to_IUniqueValueIndex(self):
+ from Products.PluginIndexes.interfaces import IUniqueValueIndex
+ from zope.interface.verify import verifyObject
+ verifyObject(IUniqueValueIndex, self._makeOne())
- def testEmpty(self):
- self.assertEqual(self._index.numObjects() ,0)
- self.assertEqual(self._index.getEntryForObject(1234), None)
- self._index.unindex_object( 1234 ) # nothrow
- self.assertEqual(self._index._apply_index(dict(suxpath="xxx")), None)
+ def test_numObjects_empty(self):
+ index = self._makeOne()
+ self.assertEqual(index.numObjects(), 0)
- def testUnIndex(self):
- self._populateIndex()
- self.assertEqual(self._index.numObjects(), 18)
+ def test_numObjects_filled(self):
+ index = self._makeOne()
+ _populateIndex(index)
+ self.assertEqual(index.numObjects(), len(DUMMIES))
- for k in self._values.keys():
- self._index.unindex_object(k)
+ def test_getEntryForObject_miss(self):
+ index = self._makeOne()
+ self.assertEqual(index.getEntryForObject(1234), None)
- self.assertEqual(self._index.numObjects(), 0)
- self.assertEqual(len(self._index._index), 0)
- self.assertEqual(len(self._index._unindex), 0)
+ def test_getEntryForObject_hit(self):
+ index = self._makeOne()
+ _populateIndex(index)
+ self.assertEqual(index.getEntryForObject(1), DUMMIES[1].path)
- def testReindex(self):
- self._populateIndex()
- self.assertEqual(self._index.numObjects(), 18)
+ def test_unindex_object_nonesuch(self):
+ index = self._makeOne()
+ index.unindex_object( 1234 ) # nothrow
+ def test_unindex_object_broken_path(self):
+ index = self._makeOne()
+ _populateIndex(index)
+ index._unindex[1] = "/broken/thing"
+ index.unindex_object(1) # nothrow
+
+ def test_unindex_object_found(self):
+ index = self._makeOne()
+ _populateIndex(index)
+
+ for k in DUMMIES.keys():
+ index.unindex_object(k)
+
+ self.assertEqual(index.numObjects(), 0)
+ self.assertEqual(len(index._index), 0)
+ self.assertEqual(len(index._unindex), 0)
+
+ def test_index_object_again(self):
+ index = self._makeOne()
+ _populateIndex(index)
+ before = index.numObjects()
o = Dummy('/foo/bar')
- self._index.index_object(19, o)
- self.assertEqual(self._index.numObjects(), 19)
- self._index.index_object(19, o)
- self.assertEqual(self._index.numObjects(), 19)
+ index.index_object(1234, o)
+ self.assertEqual(index.numObjects(), before + 1)
+ index.index_object(1234, o)
+ self.assertEqual(index.numObjects(), before + 1)
- def testUnIndexError(self):
- self._populateIndex()
- # this should not raise an error
- self._index.unindex_object(-1)
+ def test__apply_index_no_match_in_query(self):
+ index = self._makeOne()
+ self.assertEqual(index._apply_index({'foo': 'xxx'}), None)
- # nor should this
- self._index._unindex[1] = "/broken/thing"
- self._index.unindex_object(1)
+ def test__apply_index_nonesuch(self):
+ index = self._makeOne()
+ res = index._apply_index({'path': 'xxx'})
+ self.assertEqual(len(res[0]), 0)
+ self.assertEqual(res[1], ('path',))
- def testRoot(self):
- self._populateIndex()
+ def test___apply_index_root_levelO_dict(self):
+ index = self._makeOne()
+ _populateIndex(index)
+ query = {'path': {'query': '/', 'level': 0}}
+ res = index._apply_index(query)
+ self.assertEqual(list(res[0].keys()), range(1,19))
- queries = (
- dict(path=dict(query='/', level=0)),
- dict(path=(('/', 0),)),
- )
- for q in queries:
- res = self._index._apply_index(q)
- self.assertEqual(list(res[0].keys()), range(1,19))
+ def test___apply_index_root_levelO_tuple(self):
+ index = self._makeOne()
+ _populateIndex(index)
+ query = {'path': (('/', 0),)}
+ res = index._apply_index(query)
+ self.assertEqual(list(res[0].keys()), range(1,19))
- def testSimpleTests(self):
- self._populateIndex()
+ def test__apply_index_simple(self):
+ index = self._makeOne()
+ _populateIndex(index)
tests = [
# component, level, expected results
("aa", 0, [1,2,3,4,5,6,7,8,9]),
@@ -135,34 +177,36 @@
("cc/18.html", 2, [18]),
]
- for comp, level, results in tests:
+ for comp, level, expected in tests:
for path in [comp, "/"+comp, "/"+comp+"/"]:
# Test with the level passed in as separate parameter
- res = self._index._apply_index(dict(path=
- dict(query=path, level=level)))
- self.assertEqual(list(res[0].keys()), results)
+ query = {'path': {'query':path, 'level': level}}
+ res = index._apply_index(query)
+ self.assertEqual(list(res[0].keys()), expected)
# Test with the level passed in as part of the path parameter
- res = self._index._apply_index(dict(path=
- dict(query=((path, level),))))
- self.assertEqual(list(res[0].keys()), results)
+ query = {'path': ((path, level),)}
+ res = index._apply_index(query)
+ self.assertEqual(list(res[0].keys()), expected)
- def testComplexOrTests(self):
- self._populateIndex()
+ def test__apply_index_ComplexOrTests(self):
+ index = self._makeOne()
+ _populateIndex(index)
tests = [
(['aa','bb'],1,[1,2,3,4,5,6,10,11,12,13,14,15]),
(['aa','bb','xx'],1,[1,2,3,4,5,6,10,11,12,13,14,15]),
([('cc',1),('cc',2)],0,[3,6,7,8,9,12,15,16,17,18]),
]
- for lst, level, results in tests:
- res = self._index._apply_index(dict(path=
- dict(query=lst, level=level, operator='or')))
+ for lst, level, expected in tests:
+ query = {'path': {'query': lst, 'level': level, 'operator': 'or'}}
+ res = index._apply_index(query)
lst = list(res[0].keys())
- self.assertEqual(lst, results)
+ self.assertEqual(lst, expected)
- def testComplexANDTests(self):
- self._populateIndex()
+ def test__apply_index_ComplexANDTests(self):
+ index = self._makeOne()
+ _populateIndex(index)
tests = [
# Path query (as list or (path, level) tuple), level, expected
(['aa','bb'], 1, []),
@@ -170,27 +214,24 @@
([('aa',0), ('cc',2)], 0, [3,6,9]),
]
- for lst, level, results in tests:
- res = self._index._apply_index(dict(path=
- dict(query=lst, level=level, operator='and')))
+ for lst, level, expected in tests:
+ query = {'path': {'query': lst, 'level': level, 'operator': 'and'}}
+ res = index._apply_index(query)
lst = list(res[0].keys())
- self.assertEqual(lst, results)
+ self.assertEqual(lst, expected)
- def testQueryPathReturnedInResult(self):
- index = self._index
+ def test__apply_index_QueryPathReturnedInResult(self):
+ index = self._makeOne()
index.index_object(1, Dummy("/ff"))
index.index_object(2, Dummy("/ff/gg"))
index.index_object(3, Dummy("/ff/gg/3.html"))
index.index_object(4, Dummy("/ff/gg/4.html"))
- res = index._apply_index(dict(path=dict(query='/ff/gg')))
+ res = index._apply_index({'path': {'query': '/ff/gg'}})
lst = list(res[0].keys())
self.assertEqual(lst, [2, 3, 4])
def test_suite():
return unittest.TestSuite((
- unittest.makeSuite(PathIndexTests),
+ unittest.makeSuite(PathIndexTests),
))
-
-if __name__ == '__main__':
- unittest.main(defaultTest='test_suite')
More information about the Zope-Checkins
mailing list