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.
14 def setUp(self
, serverInfo
=None, dbname
='test.sqlsequence_test'):
15 if not testutil
.mysql_enabled():
16 raise SkipTest
, "no MySQL installed"
20 (primary_id INTEGER PRIMARY KEY %%(AUTO_INCREMENT)s, sequence TEXT)
23 self
.db
= sqlgraph
.SQLTable(dbname
, serverInfo
=serverInfo
,
25 createTable
=createTable
,
26 attrAlias
=dict(seq
='sequence'))
28 self
.db
.cursor
.execute("""\
29 INSERT INTO %s (sequence)
30 VALUES ('CACCCTGCCCCATCTCCCCAGCCTGGCCCCTCGTGTCTCAGAACCCTCGGGGGGAGGCACAGAAGCCTTCGGGG')
33 self
.db
.cursor
.execute("""\
34 INSERT INTO %s (sequence)
35 VALUES ('GAAAGAAAGAAAGAAAGAAAGAAAGAGAGAGAGAGAGACAGAAG')
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
50 self
.db
.cursor
.execute('drop table if exists test.sqlsequence_test')
54 self
.EQ(str(self
.row2
), 'GAAAGAAAGAAAGAAAGAAAGAAAGAGAGAGAGAGAGACAGAAG')
55 self
.EQ(repr(self
.row2
), '2[0:44]')
59 self
.EQ(len(self
.row2
), 44)
61 def test_strslice(self
):
63 self
.EQ(self
.row2
.strslice(3,10), 'AGAAAGA')
65 def init_subclass_test(self
):
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')
74 "Returns the testsuite"
78 if testutil
.mysql_enabled():
79 tests
.append(SQLSequence_Test
)
81 testutil
.info('*** skipping SQLSequence_Test')
82 if testutil
.sqlite_enabled():
83 tests
.append(SQLiteSequence_Test
)
85 testutil
.info('*** skipping SQLSequence_Test')
87 return testutil
.make_suite(tests
)
89 if __name__
== '__main__':
90 PygrTestProgram(verbosity
=2)