[Zope-Checkins] CVS: Zope/lib/python/Products/PluginIndexes/DateIndex/tests - test_DateIndex.py:1.1.2.3
Martijn Pieters
mj@zope.com
Fri, 10 May 2002 18:30:43 -0400
Update of /cvs-repository/Zope/lib/python/Products/PluginIndexes/DateIndex/tests
In directory cvs.zope.org:/tmp/cvs-serv13148/tests
Modified Files:
Tag: mj-dateindexes_integration-branch
test_DateIndex.py
Log Message:
Checkpoint. Potential bugfix, remove duplicate override in index class, extend
tests. There is a bug triggered by the tests I have to squash.
=== Zope/lib/python/Products/PluginIndexes/DateIndex/tests/test_DateIndex.py 1.1.2.2 => 1.1.2.3 ===
return self._date
-dummies = (Dummy('a', None), Dummy('b', DateTime(0)), Dummy('c',
-DateTime('2002-05-08 15:16:17')))
-
-def matchingDummies(value):
- return [d for d in dummies if d.date() == value]
+ def __str__(self):
+ return "<Dummy %s, date %s>" % (self._name, str(self._date))
class DI_Tests(unittest.TestCase):
+ def setUp(self):
+ self._values = (
+ (0, Dummy('a', None)),
+ (1, Dummy('b', DateTime(0))),
+ (2, Dummy('c', DateTime('2002-05-08 15:16:17'))),
+ (3, Dummy('d', DateTime('2032-05-08 15:16:17'))),
+ (4, Dummy('e', DateTime('2062-05-08 15:16:17'))),
+ (5, Dummy('e', DateTime('2062-05-08 15:16:17')))
+ )
+ self._index = DateIndex('date')
+ self._noop_req = {'bar': 123}
+ self._request = {'date': DateTime(0)}
+ self._min_req = {'date': DateTime('2032-05-08 15:16:17'),
+ 'date_usage': 'range:min'}
+ self._max_req = {'date': DateTime('2032-05-08 15:16:17'),
+ 'date_usage': 'range:max'}
+ self._range_req = {'date': (DateTime('2002-05-08 15:16:17'),
+ DateTime('2062-05-08 15:16:17')),
+ 'date_usage': 'range:min:max'}
+ self._zero_req = {'date': 0}
+ self._none_req = {'date': None}
+
+ def _populateIndex( self ):
+ for k, v in self._values:
+ self._index.index_object(k, v)
+
+ def _checkApply(self, req, expectedValues):
+ result, used = self._index._apply_index(req)
+ if hasattr(result, 'keys'):
+ result = result.keys()
+ self.failUnlessEqual(used, ('date',))
+ self.failUnlessEqual(len(result), len(expectedValues),
+ '%s | %s' % (map(None, result), expectedValues))
+ for k, v in expectedValues:
+ self.failUnless(k in result)
+
+ def _convert(self, date):
+ yr, mo, dy, hr, mn = date.parts()[:5]
+ return (((yr * 12 + mo) * 31 + dy) * 24 + hr) * 60 + mn
+
def test_empty(self):
-
- empty = DateIndex('empty')
+ empty = self._index
- self.assert_(empty.getEntryForObject(1234) is None)
+ self.failUnlessEqual(len(empty), 0)
+ self.failUnlessEqual(len(empty.referencedObjects()), 0)
+
+ self.failUnless(empty.getEntryForObject(1234) is None)
+ marker = []
+ self.failUnless(empty.getEntryForObject(1234, marker) is marker)
empty.unindex_object(1234) # shouldn't throw
- assert not empty.uniqueValues('foo')
- assert not empty.uniqueValues('foo', 1)
-
- assert empty._apply_index({'zed' : 12345}) is None
-
- result, used = empty._apply_index({'empty': 12345})
-
- assert not result
- assert used == ( None )
+ self.failUnless(empty.hasUniqueValuesFor('date'))
+ self.failIf(empty.hasUniqueValuesFor('foo'))
+ self.failUnlessEqual(len(empty.uniqueValues('date')), 0)
+
+ self.failUnless(empty._apply_index({'zed': 12345}) is None)
+
+ self._checkApply(self._request, [])
+ self._checkApply(self._min_req, [])
+ self._checkApply(self._max_req, [])
+ self._checkApply(self._range_req, [])
def test_retrieval( self ):
-
- work = DateIndex( 'work', 'date' )
-
- for i in range( len( dummies ) ):
- work.index_object( i, dummies[i] )
-
- for i in range( len( dummies ) ):
- assert work.getEntryForObject( i ) == dummies[i].date()
+ self._populateIndex()
+ values = self._values
+ index = self._index
+
+ self.failUnlessEqual(len(index), len(values) - 2) # One dupe, one empty
+ self.failUnlessEqual(len(index.referencedObjects()), len(values) - 1)
+ # One empty
+
+ self.failUnless(index.getEntryForObject(1234) is None)
+ marker = []
+ self.failUnless(index.getEntryForObject(1234, marker) is marker)
+ index.unindex_object(1234) # shouldn't throw
+
+ for k, v in values:
+ if v.date():
+ self.failUnlessEqual(self._index.getEntryForObject(k),
+ self._convert(v.date()))
+
+ self.failUnlessEqual(len(index.uniqueValues('date')), len(values) - 2)
+ self.failUnless(index._apply_index(self._noop_req) is None)
+
+ self._checkApply(self._request, values[1:2])
+ self._checkApply(self._min_req, values[3:])
+ self._checkApply(self._max_req, values[1:3])
+ self._checkApply(self._range_req, values[2:4] )
def test_suite():
suite = unittest.TestSuite()