Commit 6bfb801b authored by Tres Seaver's avatar Tres Seaver

Backported fix for timezone issues in date index tests from trunk.

parent b5ab9d1c
...@@ -18,6 +18,8 @@ Features Added ...@@ -18,6 +18,8 @@ Features Added
Bugs Fixed Bugs Fixed
++++++++++ ++++++++++
- Backported fix for timezone issues in date index tests from trunk.
- LP #414757 (backported from Zope trunk): don't emit a IEndRequestEvent when - LP #414757 (backported from Zope trunk): don't emit a IEndRequestEvent when
clearing a cloned request. clearing a cloned request.
......
...@@ -16,14 +16,6 @@ $Id$ ...@@ -16,14 +16,6 @@ $Id$
""" """
import unittest import unittest
import Testing
import Zope2
Zope2.startup()
import sys
from Products.PluginIndexes.DateRangeIndex.DateRangeIndex import DateRangeIndex
class Dummy: class Dummy:
...@@ -74,11 +66,22 @@ def matchingDummies( value ): ...@@ -74,11 +66,22 @@ def matchingDummies( value ):
class DRI_Tests( unittest.TestCase ): class DRI_Tests( unittest.TestCase ):
def setUp( self ):
pass
def tearDown( self ): def _getTargetClass(self):
pass from Products.PluginIndexes.DateRangeIndex.DateRangeIndex \
import DateRangeIndex
return DateRangeIndex
def _makeOne(self,
id,
since_field=None,
until_field=None,
caller=None,
extra=None,
):
klass = self._getTargetClass()
return klass(id, since_field, until_field, caller, extra)
def test_z3interfaces(self): def test_z3interfaces(self):
from Products.PluginIndexes.interfaces import IDateRangeIndex from Products.PluginIndexes.interfaces import IDateRangeIndex
...@@ -87,14 +90,14 @@ class DRI_Tests( unittest.TestCase ): ...@@ -87,14 +90,14 @@ class DRI_Tests( unittest.TestCase ):
from Products.PluginIndexes.interfaces import IUniqueValueIndex from Products.PluginIndexes.interfaces import IUniqueValueIndex
from zope.interface.verify import verifyClass from zope.interface.verify import verifyClass
verifyClass(IDateRangeIndex, DateRangeIndex) verifyClass(IDateRangeIndex, self._getTargetClass())
verifyClass(IPluggableIndex, DateRangeIndex) verifyClass(IPluggableIndex, self._getTargetClass())
verifyClass(ISortIndex, DateRangeIndex) verifyClass(ISortIndex, self._getTargetClass())
verifyClass(IUniqueValueIndex, DateRangeIndex) verifyClass(IUniqueValueIndex, self._getTargetClass())
def test_empty( self ): def test_empty( self ):
empty = DateRangeIndex( 'empty' ) empty = self._makeOne( 'empty' )
assert empty.getEntryForObject( 1234 ) is None assert empty.getEntryForObject( 1234 ) is None
empty.unindex_object( 1234 ) # shouldn't throw empty.unindex_object( 1234 ) # shouldn't throw
...@@ -111,18 +114,18 @@ class DRI_Tests( unittest.TestCase ): ...@@ -111,18 +114,18 @@ class DRI_Tests( unittest.TestCase ):
def test_retrieval( self ): def test_retrieval( self ):
work = DateRangeIndex( 'work', 'start', 'stop' ) index = self._makeOne( 'work', 'start', 'stop' )
for i in range( len( dummies ) ): for i in range( len( dummies ) ):
work.index_object( i, dummies[i] ) index.index_object( i, dummies[i] )
for i in range( len( dummies ) ): for i in range( len( dummies ) ):
assert work.getEntryForObject( i ) == dummies[i].datum() self.assertEqual(index.getEntryForObject( i ), dummies[i].datum())
for value in range( -1, 15 ): for value in range( -1, 15 ):
matches = matchingDummies( value ) matches = matchingDummies( value )
results, used = work._apply_index( { 'work' : value } ) results, used = index._apply_index( { 'work' : value } )
assert used == ( 'start', 'stop' ) assert used == ( 'start', 'stop' )
assert len( matches ) == len( results ), ( '%s: %s == %s' assert len( matches ) == len( results ), ( '%s: %s == %s'
...@@ -131,44 +134,85 @@ class DRI_Tests( unittest.TestCase ): ...@@ -131,44 +134,85 @@ class DRI_Tests( unittest.TestCase ):
matches.sort( lambda x, y: cmp( x.name(), y.name() ) ) matches.sort( lambda x, y: cmp( x.name(), y.name() ) )
for result, match in map( None, results, matches ): for result, match in map( None, results, matches ):
assert work.getEntryForObject( result ) == match.datum() self.assertEqual(index.getEntryForObject(result), match.datum())
def test_longdates( self ): def test_longdates( self ):
self.assertRaises(OverflowError, self._badlong ) self.assertRaises(OverflowError, self._badlong )
def _badlong(self): def _badlong(self):
work = DateRangeIndex ('work', 'start', 'stop' ) import sys
index = self._makeOne ('work', 'start', 'stop' )
bad = Dummy( 'bad', long(sys.maxint) + 1, long(sys.maxint) + 1 ) bad = Dummy( 'bad', long(sys.maxint) + 1, long(sys.maxint) + 1 )
work.index_object( 0, bad ) index.index_object( 0, bad )
def test_datetime(self): def test_datetime(self):
from datetime import datetime from datetime import datetime
before = datetime(2009, 7, 11, 0, 0) from DateTime.DateTime import DateTime
start = datetime(2009, 7, 13, 5, 15) from Products.PluginIndexes.DateIndex.tests.test_DateIndex \
between = datetime(2009, 7, 13, 5, 45) import _getEastern
stop = datetime(2009, 7, 13, 6, 30) before = datetime(2009, 7, 11, 0, 0, tzinfo=_getEastern())
after = datetime(2009, 7, 14, 0, 0) start = datetime(2009, 7, 13, 5, 15, tzinfo=_getEastern())
between = datetime(2009, 7, 13, 5, 45, tzinfo=_getEastern())
stop = datetime(2009, 7, 13, 6, 30, tzinfo=_getEastern())
after = datetime(2009, 7, 14, 0, 0, tzinfo=_getEastern())
dummy = Dummy('test', start, stop) dummy = Dummy('test', start, stop)
work = DateRangeIndex( 'work', 'start', 'stop' ) index = self._makeOne( 'work', 'start', 'stop' )
work.index_object(0, dummy) index.index_object(0, dummy)
assert work.getEntryForObject(0) == (20790915, 20790990) self.assertEqual(index.getEntryForObject(0),
(DateTime(start).millis() / 60000,
DateTime(stop).millis() / 60000))
results, used = work._apply_index( { 'work' : before } ) results, used = index._apply_index( { 'work' : before } )
assert len(results) == 0 self.assertEqual(len(results), 0)
results, used = work._apply_index( { 'work' : start } ) results, used = index._apply_index( { 'work' : start } )
assert len(results) == 1 self.assertEqual(len(results), 1)
results, used = work._apply_index( { 'work' : between } ) results, used = index._apply_index( { 'work' : between } )
assert len(results) == 1 self.assertEqual(len(results), 1)
results, used = work._apply_index( { 'work' : stop } ) results, used = index._apply_index( { 'work' : stop } )
assert len(results) == 1 self.assertEqual(len(results), 1)
results, used = work._apply_index( { 'work' : after } ) results, used = index._apply_index( { 'work' : after } )
assert len(results) == 0 self.assertEqual(len(results), 0)
def test_datetime_naive_timezone(self):
from datetime import datetime
from DateTime.DateTime import DateTime
from Products.PluginIndexes.DateIndex.DateIndex import Local
before = datetime(2009, 7, 11, 0, 0)
start = datetime(2009, 7, 13, 5, 15)
start_local = datetime(2009, 7, 13, 5, 15, tzinfo=Local)
between = datetime(2009, 7, 13, 5, 45)
stop = datetime(2009, 7, 13, 6, 30)
stop_local = datetime(2009, 7, 13, 6, 30, tzinfo=Local)
after = datetime(2009, 7, 14, 0, 0)
dummy = Dummy('test', start, stop)
index = self._makeOne( 'work', 'start', 'stop' )
index.index_object(0, dummy)
self.assertEqual(index.getEntryForObject(0),
(DateTime(start_local).millis() / 60000,
DateTime(stop_local).millis() / 60000))
results, used = index._apply_index( { 'work' : before } )
self.assertEqual(len(results), 0)
results, used = index._apply_index( { 'work' : start } )
self.assertEqual(len(results), 1)
results, used = index._apply_index( { 'work' : between } )
self.assertEqual(len(results), 1)
results, used = index._apply_index( { 'work' : stop } )
self.assertEqual(len(results), 1)
results, used = index._apply_index( { 'work' : after } )
self.assertEqual(len(results), 0)
def test_suite(): def test_suite():
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment