1324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver# -*- coding: utf-8 -*-
2324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
3324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverimport os
4324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverimport unittest
5324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverfrom StringIO import StringIO
6324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverimport textwrap
7324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
8324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverimport stringtemplate3
9324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
10324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverfrom antlr3.dottreegen import toDOT
11324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverfrom antlr3.treewizard import TreeWizard
12324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverfrom antlr3.tree import CommonTreeAdaptor
13324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
14324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
15324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverclass TestToDOT(unittest.TestCase):
16324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    """Test case for the toDOT function."""
17324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
18324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    def setUp(self):
19324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        self.adaptor = CommonTreeAdaptor()
20324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        self.tokens = [
21324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver            "", "", "", "", "", "A", "B", "C", "D", "E", "ID", "VAR"
22324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver            ]
23324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        self.wiz = TreeWizard(self.adaptor, self.tokens)
24324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
25324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
26324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    def testNone(self):
27324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        """toDOT()"""
28324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
29324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        treeST = stringtemplate3.StringTemplate(
30324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver            template=(
31324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver            "digraph {\n" +
32324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver            "  $nodes$\n" +
33324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver            "  $edges$\n" +
34324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver            "}\n")
35324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver            )
36324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
37324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        edgeST = stringtemplate3.StringTemplate(
38324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver            template="$parent$ -> $child$\n"
39324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver            )
40324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
41324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        tree = self.wiz.create("(A B (B C C) (B (C D D)))")
42324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        st = toDOT(tree, self.adaptor, treeST, edgeST)
43324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
44324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        result = st.toString()
45324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        expected = textwrap.dedent(
46324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver            '''\
47324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver            digraph {
48324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver              n0 [label="A"];
49324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver              n1 [label="B"];
50324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver              n2 [label="B"];
51324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver              n3 [label="C"];
52324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver              n4 [label="C"];
53324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver              n5 [label="B"];
54324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver              n6 [label="C"];
55324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver              n7 [label="D"];
56324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver              n8 [label="D"];
57324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
58324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver              n0 -> n1
59324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver              n0 -> n2
60324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver              n2 -> n3
61324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver              n2 -> n4
62324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver              n0 -> n5
63324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver              n5 -> n6
64324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver              n6 -> n7
65324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver              n6 -> n8
66324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
67324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver            }
68324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver            '''
69324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver            )
70324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        self.assertEqual(result, expected)
71324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
72324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
73324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverif __name__ == "__main__":
74324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    unittest.main(testRunner=unittest.TextTestRunner(verbosity=2))
75