10a8c90248264a8b26970b4473770bcc3df8515fJosh Gao"""
20a8c90248264a8b26970b4473770bcc3df8515fJosh GaoTestCases for checking set_get_returns_none.
30a8c90248264a8b26970b4473770bcc3df8515fJosh Gao"""
40a8c90248264a8b26970b4473770bcc3df8515fJosh Gao
50a8c90248264a8b26970b4473770bcc3df8515fJosh Gaoimport os, string
60a8c90248264a8b26970b4473770bcc3df8515fJosh Gaoimport unittest
70a8c90248264a8b26970b4473770bcc3df8515fJosh Gao
80a8c90248264a8b26970b4473770bcc3df8515fJosh Gaofrom test_all import db, verbose, get_new_database_path
90a8c90248264a8b26970b4473770bcc3df8515fJosh Gao
100a8c90248264a8b26970b4473770bcc3df8515fJosh Gao
110a8c90248264a8b26970b4473770bcc3df8515fJosh Gao#----------------------------------------------------------------------
120a8c90248264a8b26970b4473770bcc3df8515fJosh Gao
130a8c90248264a8b26970b4473770bcc3df8515fJosh Gaoclass GetReturnsNoneTestCase(unittest.TestCase):
140a8c90248264a8b26970b4473770bcc3df8515fJosh Gao    def setUp(self):
150a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        self.filename = get_new_database_path()
160a8c90248264a8b26970b4473770bcc3df8515fJosh Gao
170a8c90248264a8b26970b4473770bcc3df8515fJosh Gao    def tearDown(self):
180a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        try:
190a8c90248264a8b26970b4473770bcc3df8515fJosh Gao            os.remove(self.filename)
200a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        except os.error:
210a8c90248264a8b26970b4473770bcc3df8515fJosh Gao            pass
220a8c90248264a8b26970b4473770bcc3df8515fJosh Gao
230a8c90248264a8b26970b4473770bcc3df8515fJosh Gao
240a8c90248264a8b26970b4473770bcc3df8515fJosh Gao    def test01_get_returns_none(self):
250a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        d = db.DB()
260a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        d.open(self.filename, db.DB_BTREE, db.DB_CREATE)
270a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        d.set_get_returns_none(1)
280a8c90248264a8b26970b4473770bcc3df8515fJosh Gao
290a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        for x in string.letters:
300a8c90248264a8b26970b4473770bcc3df8515fJosh Gao            d.put(x, x * 40)
310a8c90248264a8b26970b4473770bcc3df8515fJosh Gao
320a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        data = d.get('bad key')
330a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        self.assertEqual(data, None)
340a8c90248264a8b26970b4473770bcc3df8515fJosh Gao
350a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        data = d.get(string.letters[0])
360a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        self.assertEqual(data, string.letters[0]*40)
370a8c90248264a8b26970b4473770bcc3df8515fJosh Gao
380a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        count = 0
390a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        c = d.cursor()
400a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        rec = c.first()
410a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        while rec:
420a8c90248264a8b26970b4473770bcc3df8515fJosh Gao            count = count + 1
430a8c90248264a8b26970b4473770bcc3df8515fJosh Gao            rec = c.next()
440a8c90248264a8b26970b4473770bcc3df8515fJosh Gao
450a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        self.assertEqual(rec, None)
460a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        self.assertEqual(count, len(string.letters))
470a8c90248264a8b26970b4473770bcc3df8515fJosh Gao
480a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        c.close()
490a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        d.close()
500a8c90248264a8b26970b4473770bcc3df8515fJosh Gao
510a8c90248264a8b26970b4473770bcc3df8515fJosh Gao
520a8c90248264a8b26970b4473770bcc3df8515fJosh Gao    def test02_get_raises_exception(self):
530a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        d = db.DB()
540a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        d.open(self.filename, db.DB_BTREE, db.DB_CREATE)
550a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        d.set_get_returns_none(0)
560a8c90248264a8b26970b4473770bcc3df8515fJosh Gao
570a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        for x in string.letters:
580a8c90248264a8b26970b4473770bcc3df8515fJosh Gao            d.put(x, x * 40)
590a8c90248264a8b26970b4473770bcc3df8515fJosh Gao
600a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        self.assertRaises(db.DBNotFoundError, d.get, 'bad key')
610a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        self.assertRaises(KeyError, d.get, 'bad key')
620a8c90248264a8b26970b4473770bcc3df8515fJosh Gao
630a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        data = d.get(string.letters[0])
640a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        self.assertEqual(data, string.letters[0]*40)
650a8c90248264a8b26970b4473770bcc3df8515fJosh Gao
660a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        count = 0
670a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        exceptionHappened = 0
680a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        c = d.cursor()
690a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        rec = c.first()
700a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        while rec:
710a8c90248264a8b26970b4473770bcc3df8515fJosh Gao            count = count + 1
720a8c90248264a8b26970b4473770bcc3df8515fJosh Gao            try:
730a8c90248264a8b26970b4473770bcc3df8515fJosh Gao                rec = c.next()
740a8c90248264a8b26970b4473770bcc3df8515fJosh Gao            except db.DBNotFoundError:  # end of the records
750a8c90248264a8b26970b4473770bcc3df8515fJosh Gao                exceptionHappened = 1
760a8c90248264a8b26970b4473770bcc3df8515fJosh Gao                break
770a8c90248264a8b26970b4473770bcc3df8515fJosh Gao
780a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        self.assertNotEqual(rec, None)
790a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        self.assertTrue(exceptionHappened)
800a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        self.assertEqual(count, len(string.letters))
810a8c90248264a8b26970b4473770bcc3df8515fJosh Gao
820a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        c.close()
830a8c90248264a8b26970b4473770bcc3df8515fJosh Gao        d.close()
840a8c90248264a8b26970b4473770bcc3df8515fJosh Gao
850a8c90248264a8b26970b4473770bcc3df8515fJosh Gao#----------------------------------------------------------------------
860a8c90248264a8b26970b4473770bcc3df8515fJosh Gao
870a8c90248264a8b26970b4473770bcc3df8515fJosh Gaodef test_suite():
880a8c90248264a8b26970b4473770bcc3df8515fJosh Gao    return unittest.makeSuite(GetReturnsNoneTestCase)
890a8c90248264a8b26970b4473770bcc3df8515fJosh Gao
900a8c90248264a8b26970b4473770bcc3df8515fJosh Gao
910a8c90248264a8b26970b4473770bcc3df8515fJosh Gaoif __name__ == '__main__':
920a8c90248264a8b26970b4473770bcc3df8515fJosh Gao    unittest.main(defaultTest='test_suite')
93