added SQLTable_Test.test_orderBy()
[pygr.git] / tests / sqlsequence_test.py
blob0405104a4ff4e6103a578fac986ec1fc54d6b946
1 # test will be skipped if MySqlDB is unavailable
3 import unittest, string
4 from testlib import testutil, SkipTest, PygrTestProgram
5 from pygr import sqlgraph, seqdb, classutil, logger
7 class SQLSequence_Test(unittest.TestCase):
8 '''Basic SQL sequence class tests
10 This test setup uses the common (?) method of having the
11 SQLSequence objects created by a SQLTable object rather than
12 instantiating the SQLSequence objects directly.
13 '''
14 def setUp(self, serverInfo=None, dbname='test.sqlsequence_test'):
15 if not testutil.mysql_enabled():
16 raise SkipTest, "no MySQL installed"
18 createTable = """\
19 CREATE TABLE %s
20 (primary_id INTEGER PRIMARY KEY %%(AUTO_INCREMENT)s, sequence TEXT)
21 """ % dbname
23 self.db = sqlgraph.SQLTable(dbname, serverInfo=serverInfo,
24 dropIfExists=True,
25 createTable=createTable,
26 attrAlias=dict(seq='sequence'))
28 self.db.cursor.execute("""\
29 INSERT INTO %s (sequence)
30 VALUES ('CACCCTGCCCCATCTCCCCAGCCTGGCCCCTCGTGTCTCAGAACCCTCGGGGGGAGGCACAGAAGCCTTCGGGG')
31 """ % dbname)
33 self.db.cursor.execute("""\
34 INSERT INTO %s (sequence)
35 VALUES ('GAAAGAAAGAAAGAAAGAAAGAAAGAGAGAGAGAGAGACAGAAG')
36 """ % dbname)
38 class DNASeqRow(seqdb.DNASQLSequence):
39 def __len__(self): # just speed optimization
40 return self._select('length(sequence)') # SQL SELECT expression
42 # force the table object to return DNASeqRow objects
43 self.db.objclass(DNASeqRow)
45 self.row1 = self.db[1]
46 self.row2 = self.db[2]
47 self.EQ = self.assertEqual
49 def tearDown(self):
50 self.db.cursor.execute('drop table if exists test.sqlsequence_test')
52 def test_print(self):
53 "Testing identities"
54 self.EQ(str(self.row2), 'GAAAGAAAGAAAGAAAGAAAGAAAGAGAGAGAGAGAGACAGAAG')
55 self.EQ(repr(self.row2), '2[0:44]')
57 def test_len(self):
58 "Testing lengths"
59 self.EQ(len(self.row2), 44)
61 def test_strslice(self):
62 "Testing slices"
63 self.EQ(self.row2.strslice(3,10), 'AGAAAGA')
65 def init_subclass_test(self):
66 "Testing subclassing"
67 self.row2._init_subclass(self.db)
69 class SQLiteSequence_Test(testutil.SQLite_Mixin, SQLSequence_Test):
70 def sqlite_load(self):
71 SQLSequence_Test.setUp(self, self.serverInfo, 'sqlsequence_test')
73 def get_suite():
74 "Returns the testsuite"
75 tests = []
77 # detect mysql
78 if testutil.mysql_enabled():
79 tests.append(SQLSequence_Test)
80 else:
81 testutil.info('*** skipping SQLSequence_Test')
82 if testutil.sqlite_enabled():
83 tests.append(SQLiteSequence_Test)
84 else:
85 testutil.info('*** skipping SQLSequence_Test')
87 return testutil.make_suite(tests)
89 if __name__ == '__main__':
90 PygrTestProgram(verbosity=2)