############################################################################## # # Copyright (c) 2001 Zope Corporation and Contributors. All Rights Reserved. # # This software is subject to the provisions of the Zope Public License, # Version 2.0 (ZPL). A copy of the ZPL should accompany this distribution. # THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED # WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED # WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS # FOR A PARTICULAR PURPOSE # ############################################################################## import os, sys, unittest from Products.PluginIndexes.PathIndex.PathIndexNG import PathIndexNG class Dummy: meta_type="foo" def __init__( self, path): self.path = path def getPhysicalPath(self): return self.path.split('/') def __str__( self ): return '' % self.path __repr__ = __str__ class TestCase( unittest.TestCase ): """ Test PathIndex objects """ def setUp(self): self._index = PathIndexNG( '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 _populateIndex(self): for k, v in self._values.items(): self._index.index_object( k, v ) 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({"suxpath":"xxx"}), None) def testUnIndex(self): self._populateIndex() self.assertEqual(self._index.numObjects(), 18) for k in self._values.keys(): self._index.unindex_object(k) self.assertEqual(self._index.numObjects(), 0) self.assertEqual(len(self._index._index), 0) self.assertEqual(len(self._index._unindex), 0) def testReindex(self): self._populateIndex() self.assertEqual(self._index.numObjects(), 18) 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) def testUnIndexError(self): self._populateIndex() # this should not raise an error self._index.unindex_object(-1) # nor should this self._index._unindex[1] = "/broken/thing" self._index.unindex_object(1) def test_suite(): return unittest.makeSuite( TestCase ) def main(): unittest.TextTestRunner().run(test_suite()) if __name__ == '__main__': main()