attach annotations property to seq_span
[mussa.git] / py / test / TestSeqSpan.py
1 import os
2 import sys
3 import unittest
4
5 # kinda hackish but it makes it possible to runi under ctest 
6 sys.path.append(os.getcwd())
7
8 import mussa
9
10 class TestSeqSpan(unittest.TestCase):
11   def testSimple(self):
12     seq_text = "AGCT"
13     s = mussa.SeqSpan(seq_text)
14     self.failUnlessEqual(str(s), seq_text)
15
16   def testIter(self):
17     seq_text = "AAAAAAGGGGGGG"
18     s = mussa.SeqSpan(seq_text)
19     new_seq_text = "".join( [ x for x in s ] )
20     print "len", len(s)
21     self.failUnlessEqual(len(seq_text), len(s))
22     self.failUnlessEqual(seq_text, new_seq_text)
23
24   def testSettingStrand(self):
25     seq_text = "AAAAG"
26     complement_text = "CTTTT"
27     splus = mussa.SeqSpan(seq_text, mussa.alphabet.dna_alphabet, mussa.strand.plus)
28     sminus = splus.subseq(0, len(seq_text), mussa.strand.minus)
29     self.failUnlessEqual(str(sminus), complement_text)
30
31   # Doesn't work because I keep getting new python objects created
32   # for calls to SeqSpan::parent
33   #def testParentEquality(self):
34   #  seq_text = "AAAAAAGGG"
35   #  sparent = mussa.SeqSpan(seq_text)
36   #  s1 = sparent.subseq(4,4, mussa.strand.minus)
37   #y  s2 = s1.subseq(0,2, mussa.strand.opposite)
38   #  print "s2 parent call 1",s2.parent()
39   #  print "s2 parent call 2", s2.parent()
40   #  self.failUnless(s1 is s2.parent())
41   #  self.failUnlessEqual(s1, s2.parent())
42   #  self.failUnless(sparent is s1.parent())
43   #  self.failUnlessEqual(sparent == s1.parent())
44
45   def testAnnotations(self):
46     seq_text = "AAAAAG"
47     name = "As"
48     s = mussa.SeqSpan(seq_text)
49     s.annotations = mussa.Annotations(name)
50     self.failUnlessEqual(s.annotations.name, name)
51     self.failUnlessEqual(s.annotations['name'], name)
52
53     term_key = 'GO term'
54     term = "term"
55     s.annotations[term_key] = term
56     self.failUnlessEqual(s.annotations[term_key], term)
57
58 def suite():
59   return unittest.makeSuite(TestSeqSpan, 'test')
60
61 if __name__ == "__main__":
62   sys.exit(unittest.main(defaultTest='suite'))