def testPurge(self):
        timedDict = TimedDictionary(TWO_HOURS)
        timedDict[1] = SomeObject('id1')
        timedDict[2] = SomeObject('id2')
        timedDict._now = lambda : time() + ONE_HOUR
        self.assertEquals([1, 2], timedDict._expirationOrder)

        timedDict[3] = SomeObject('id3')
        timedDict.touch(2)
        timedDict._now = lambda : time() + TWO_HOURS
        timedDict.purge()
        self.assertEquals([3, 2], timedDict._expirationOrder)
        timedDict._now = lambda : time() + TWO_HOURS + TWO_HOURS
        timedDict.purge()
        self.assertEquals([], timedDict._expirationOrder)
    def testPurge(self):
        timedDict = TimedDictionary(TWO_HOURS)
        timedDict[1] = SomeObject('id1')
        timedDict[2] = SomeObject('id2')
        timedDict._now = lambda: time() + ONE_HOUR
        self.assertEqual([1, 2], timedDict._expirationOrder)

        timedDict[3] = SomeObject('id3')
        timedDict.touch(2)
        timedDict._now = lambda: time() + TWO_HOURS
        timedDict.purge()
        self.assertEqual([3, 2], timedDict._expirationOrder)
        timedDict._now = lambda: time() + TWO_HOURS + TWO_HOURS
        timedDict.purge()
        self.assertEqual([], timedDict._expirationOrder)
    def testDeleteExpiredOnGetItem(self):
        timedDict = TimedDictionary(TWO_HOURS)
        timedDict[1] = SomeObject('id1')
        timedDict._now = lambda : time() + TWO_HOURS

        self.assertRaises(KeyError, timedDict.__getitem__, 1)
        self.assertEquals([], timedDict._expirationOrder)
    def testPeek(self):
        timedDict = TimedDictionary(TWO_HOURS)
        timedDict[1] = "Now you see me, now you don't."
        timedDict._now = lambda : time() + TWO_HOURS

        self.assertEquals("Now you see me, now you don't.", timedDict.peek(1))
        self.assertRaises(KeyError, timedDict.__getitem__, 1)
    def testPurgeOnSetItem(self):
        timedDict = TimedDictionary(TWO_HOURS)
        timedDict[1] = SomeObject('id1')
        timedDict._now = lambda: time() + TWO_HOURS
        timedDict[2] = SomeObject('id2')

        self.assertEqual([2], timedDict._expirationOrder)
    def testPurgeOnSetItem(self):
        timedDict = TimedDictionary(TWO_HOURS)
        timedDict[1] = SomeObject('id1')
        timedDict._now = lambda : time() + TWO_HOURS
        timedDict[2] = SomeObject('id2')

        self.assertEquals([2], timedDict._expirationOrder)
    def testPeek(self):
        timedDict = TimedDictionary(TWO_HOURS)
        timedDict[1] = "Now you see me, now you don't."
        timedDict._now = lambda: time() + TWO_HOURS

        self.assertEqual("Now you see me, now you don't.", timedDict.peek(1))
        self.assertRaises(KeyError, timedDict.__getitem__, 1)
    def testDeleteExpiredOnGetItem(self):
        timedDict = TimedDictionary(TWO_HOURS)
        timedDict[1] = SomeObject('id1')
        timedDict._now = lambda: time() + TWO_HOURS

        self.assertRaises(KeyError, timedDict.__getitem__, 1)
        self.assertEqual([], timedDict._expirationOrder)
    def testExpiredOnInShouldReturnDefaultOnGetWithoutAnException(self):
        timedDict = TimedDictionary(TWO_HOURS)
        setTime = time()
        timedDict._now = lambda : setTime
        timedDict[1] = SomeObject('id1')

        timedDict._now = lambda : setTime + TWO_HOURS
        try:
            1 in timedDict
        except KeyError:
            self.fail("Key shouldn't have expired yet.")
        except:
            self.fail("This should not happen.")

        timedDict._now = lambda : setTime + TWO_HOURS + 0.000001

        self.assertEquals(None, timedDict.get(1))
        self.assertEquals('a default', timedDict.get(1, 'a default'))
        self.assertEquals([], timedDict._expirationOrder)
    def testExpiredOnInShouldReturnDefaultOnGetWithoutAnException(self):
        timedDict = TimedDictionary(TWO_HOURS)
        setTime = time()
        timedDict._now = lambda: setTime
        timedDict[1] = SomeObject('id1')

        timedDict._now = lambda: setTime + TWO_HOURS
        try:
            1 in timedDict
        except KeyError:
            self.fail("Key shouldn't have expired yet.")
        except:
            self.fail("This should not happen.")

        timedDict._now = lambda: setTime + TWO_HOURS + 0.000001

        self.assertEqual(None, timedDict.get(1))
        self.assertEqual('a default', timedDict.get(1, 'a default'))
        self.assertEqual([], timedDict._expirationOrder)
 def testSize(self):
     timedDict = TimedDictionary(TWO_HOURS)
     self.assertEqual(0, timedDict.size())
     timedDict['key'] = 'five'
     self.assertEqual(1, timedDict.size())
     timedDict['key'] = 'six'
     self.assertEqual(1, timedDict.size())
     timedDict['key2'] = 'six'
     self.assertEqual(2, timedDict.size())
     timedDict._now = lambda : time() + TWO_HOURS
     self.assertEqual(0, timedDict.size())
 def testSize(self):
     timedDict = TimedDictionary(TWO_HOURS)
     self.assertEqual(0, timedDict.size())
     timedDict['key'] = 'five'
     self.assertEqual(1, timedDict.size())
     timedDict['key'] = 'six'
     self.assertEqual(1, timedDict.size())
     timedDict['key2'] = 'six'
     self.assertEqual(2, timedDict.size())
     timedDict._now = lambda: time() + TWO_HOURS
     self.assertEqual(0, timedDict.size())
 def testPop(self):
     timedDict = TimedDictionary(TWO_HOURS)
     setTime = time()
     timedDict[1] = "Now you see me, now you don't."
     self.assertEqual("Now you see me, now you don't.", timedDict.pop(1))
     self.assertRaises(KeyError, lambda: timedDict.pop(1))
     self.assertEqual("default", timedDict.pop(1, 'default'))
     self.assertEqual(None, timedDict.pop(1, None))
     self.assertEqual("default", timedDict.pop(1, default='default'))
     self.assertEqual(None, timedDict.pop(1, default=None))
     timedDict[1] = "Now you see me, now you don't."
     setTime = time()
     timedDict._now = lambda : setTime + TWO_HOURS + 0.000001
     self.assertRaises(KeyError, lambda: timedDict.pop(1))
 def testPop(self):
     timedDict = TimedDictionary(TWO_HOURS)
     setTime = time()
     timedDict[1] = "Now you see me, now you don't."
     self.assertEqual("Now you see me, now you don't.", timedDict.pop(1))
     self.assertRaises(KeyError, lambda: timedDict.pop(1))
     self.assertEqual("default", timedDict.pop(1, 'default'))
     self.assertEqual(None, timedDict.pop(1, None))
     self.assertEqual("default", timedDict.pop(1, default='default'))
     self.assertEqual(None, timedDict.pop(1, default=None))
     timedDict[1] = "Now you see me, now you don't."
     setTime = time()
     timedDict._now = lambda: setTime + TWO_HOURS + 0.000001
     self.assertRaises(KeyError, lambda: timedDict.pop(1))
 def testExpiredLeastRecentlyUsedGracefullyDealtWith(self):
     timedDict = TimedDictionary(TWO_HOURS, lruMaxSize=2)
     timedDict['key1'] = 'five'
     timedDict['key2'] = 'six'
     timedDict['key3'] = 'seven'
     self.assertEquals(set(['key2', 'key3']), set(timedDict.keys()), set(timedDict.keys()))
     self.assertEquals(3, len(timedDict._times))
     self.assertEquals(3, len(timedDict._expirationOrder))
     timedDict.purge()
     self.assertEquals(2, len(timedDict._times))
     self.assertEquals(2, len(timedDict._expirationOrder))
     timedDict._now = lambda : time() + TWO_HOURS
     timedDict.purge()
     self.assertEquals([], list(timedDict.keys()))
     self.assertEquals(0, len(timedDict._times))
     self.assertEquals(0, len(timedDict._expirationOrder))
 def testExpiredLeastRecentlyUsedGracefullyDealtWith(self):
     timedDict = TimedDictionary(TWO_HOURS, lruMaxSize=2)
     timedDict['key1'] = 'five'
     timedDict['key2'] = 'six'
     timedDict['key3'] = 'seven'
     self.assertEqual(set(['key2', 'key3']), set(timedDict.keys()),
                      set(timedDict.keys()))
     self.assertEqual(3, len(timedDict._times))
     self.assertEqual(3, len(timedDict._expirationOrder))
     timedDict.purge()
     self.assertEqual(2, len(timedDict._times))
     self.assertEqual(2, len(timedDict._expirationOrder))
     timedDict._now = lambda: time() + TWO_HOURS
     timedDict.purge()
     self.assertEqual([], list(timedDict.keys()))
     self.assertEqual(0, len(timedDict._times))
     self.assertEqual(0, len(timedDict._expirationOrder))
 def testUpdateTimeout(self):
     timedDict = TimedDictionary(TWO_HOURS)
     timedDict['key'] = 'five'
     timedDict._now = lambda : time() + TWO_HOURS
     timedDict.setTimeout(TWO_HOURS + 1)
     self.assertEquals("five", timedDict["key"])
 def testUpdateTimeout(self):
     timedDict = TimedDictionary(TWO_HOURS)
     timedDict['key'] = 'five'
     timedDict._now = lambda: time() + TWO_HOURS
     timedDict.setTimeout(TWO_HOURS + 1)
     self.assertEqual("five", timedDict["key"])