ยปCore Development>Code coverage>Lib/bsddb/test/test_join.py

Python code coverage for Lib/bsddb/test/test_join.py

#countcontent
1n/a"""TestCases for using the DB.join and DBCursor.join_item methods.
2n/a"""
3n/a
4n/aimport os
5n/a
6n/aimport unittest
7n/a
8n/afrom test_all import db, dbshelve, test_support, verbose, \
9n/a get_new_environment_path, get_new_database_path
10n/a
11n/a#----------------------------------------------------------------------
12n/a
13n/aProductIndex = [
14n/a ('apple', "Convenience Store"),
15n/a ('blueberry', "Farmer's Market"),
16n/a ('shotgun', "S-Mart"), # Aisle 12
17n/a ('pear', "Farmer's Market"),
18n/a ('chainsaw', "S-Mart"), # "Shop smart. Shop S-Mart!"
19n/a ('strawberry', "Farmer's Market"),
20n/a]
21n/a
22n/aColorIndex = [
23n/a ('blue', "blueberry"),
24n/a ('red', "apple"),
25n/a ('red', "chainsaw"),
26n/a ('red', "strawberry"),
27n/a ('yellow', "peach"),
28n/a ('yellow', "pear"),
29n/a ('black', "shotgun"),
30n/a]
31n/a
32n/aclass JoinTestCase(unittest.TestCase):
33n/a keytype = ''
34n/a
35n/a def setUp(self):
36n/a self.filename = self.__class__.__name__ + '.db'
37n/a self.homeDir = get_new_environment_path()
38n/a self.env = db.DBEnv()
39n/a self.env.open(self.homeDir, db.DB_CREATE | db.DB_INIT_MPOOL | db.DB_INIT_LOCK )
40n/a
41n/a def tearDown(self):
42n/a self.env.close()
43n/a test_support.rmtree(self.homeDir)
44n/a
45n/a def test01_join(self):
46n/a if verbose:
47n/a print '\n', '-=' * 30
48n/a print "Running %s.test01_join..." % \
49n/a self.__class__.__name__
50n/a
51n/a # create and populate primary index
52n/a priDB = db.DB(self.env)
53n/a priDB.open(self.filename, "primary", db.DB_BTREE, db.DB_CREATE)
54n/a map(lambda t, priDB=priDB: priDB.put(*t), ProductIndex)
55n/a
56n/a # create and populate secondary index
57n/a secDB = db.DB(self.env)
58n/a secDB.set_flags(db.DB_DUP | db.DB_DUPSORT)
59n/a secDB.open(self.filename, "secondary", db.DB_BTREE, db.DB_CREATE)
60n/a map(lambda t, secDB=secDB: secDB.put(*t), ColorIndex)
61n/a
62n/a sCursor = None
63n/a jCursor = None
64n/a try:
65n/a # lets look up all of the red Products
66n/a sCursor = secDB.cursor()
67n/a # Don't do the .set() in an assert, or you can get a bogus failure
68n/a # when running python -O
69n/a tmp = sCursor.set('red')
70n/a self.assert_(tmp)
71n/a
72n/a # FIXME: jCursor doesn't properly hold a reference to its
73n/a # cursors, if they are closed before jcursor is used it
74n/a # can cause a crash.
75n/a jCursor = priDB.join([sCursor])
76n/a
77n/a if jCursor.get(0) != ('apple', "Convenience Store"):
78n/a self.fail("join cursor positioned wrong")
79n/a if jCursor.join_item() != 'chainsaw':
80n/a self.fail("DBCursor.join_item returned wrong item")
81n/a if jCursor.get(0)[0] != 'strawberry':
82n/a self.fail("join cursor returned wrong thing")
83n/a if jCursor.get(0): # there were only three red items to return
84n/a self.fail("join cursor returned too many items")
85n/a finally:
86n/a if jCursor:
87n/a jCursor.close()
88n/a if sCursor:
89n/a sCursor.close()
90n/a priDB.close()
91n/a secDB.close()
92n/a
93n/a
94n/adef test_suite():
95n/a suite = unittest.TestSuite()
96n/a
97n/a suite.addTest(unittest.makeSuite(JoinTestCase))
98n/a
99n/a return suite