File: test_customvisitor.py

package info (click to toggle)
genometools 1.6.6%2Bds-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 50,576 kB
  • sloc: ansic: 271,876; ruby: 29,930; python: 5,106; sh: 3,083; makefile: 1,213; perl: 219; pascal: 159; haskell: 37; sed: 5
file content (103 lines) | stat: -rw-r--r-- 2,860 bytes parent folder | download | duplicates (8)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
#!/usr/bin/python
# -*- coding: utf-8 -*-

import unittest
from gt import FeatureNode, CommentNode, SequenceNode, RegionNode, \
    CustomVisitor, MetaNode, EOFNode, FeatureNodeIteratorDepthFirst, \
    GTError


class TestVisitor(CustomVisitor):

    def __init__(self):
        CustomVisitor.__init__(self)
        self.sn = None
        self.rn = None
        self.cn = None
        self.en = None
        self.mn = None

    def visit_feature_node(self, fn):
        new_child = FeatureNode.create_new(
            fn.get_seqid(), "bar", 100, 1000, "+")
        fn.add_child(new_child)

    def visit_region_node(self, rn):
        self.rn = rn

    def visit_comment_node(self, cn):
        self.cn = cn

    def visit_sequence_node(self, sn):
        self.sn = sn

    def visit_meta_node(self, mn):
        self.mn = mn

    def visit_eof_node(self, en):
        self.en = en


class ErrorTestVisitor(CustomVisitor):

    def __init__(self):
        CustomVisitor.__init__(self)

    def visit_feature_node(self, fn):
        raise GTError


class CustomVisitorTestCase(unittest.TestCase):

    def setUp(self):
        self.fn = FeatureNode.create_new("foo", "gene", 100, 10000, "+")
        self.cn = CommentNode.create_new("comment")
        self.rn = RegionNode.create_new("foo", 100, 2000)
        self.sn = SequenceNode.create_new("foo", "AGATATAGA")
        self.en = EOFNode.create_new()
        self.mn = MetaNode.create_new("foo", "bar")
        self.tv = TestVisitor()
        self.etv = ErrorTestVisitor()

    def test_accept_feature_node(self):
        self.fn.accept(self.tv)
        dfi = FeatureNodeIteratorDepthFirst(self.fn)
        f = dfi.next()
        nodes = []
        while f:
            nodes.append(f)
            f = dfi.next()
        self.assertEqual(nodes[1].get_type(), "bar")

        self.assertRaises(GTError, self.fn.accept, self.etv)
        self.cn.accept(self.etv)
        self.sn.accept(self.etv)
        self.rn.accept(self.etv)

    def test_accept_sequence_node(self):
        self.assertNotEqual(self.tv.sn, self.sn)
        self.sn.accept(self.tv)
        self.assertEqual(self.tv.sn, self.sn)

    def test_accept_region_node(self):
        self.assertNotEqual(self.tv.rn, self.rn)
        self.rn.accept(self.tv)
        self.assertEqual(self.tv.rn, self.rn)

    def test_accept_comment_node(self):
        self.assertNotEqual(self.tv.cn, self.cn)
        self.cn.accept(self.tv)
        self.assertEqual(self.tv.cn, self.cn)

    def test_accept_eof_node(self):
        self.assertNotEqual(self.tv.en, self.en)
        self.en.accept(self.tv)
        self.assertEqual(self.tv.en, self.en)

    def test_accept_meta_node(self):
        self.assertNotEqual(self.tv.mn, self.mn)
        self.mn.accept(self.tv)
        self.assertEqual(self.tv.mn, self.mn)

if __name__ == "__main__":
    unittest.main()