xref: /aosp_15_r20/external/antlr/runtime/Python/unittests/testdottreegen.py (revision 16467b971bd3e2009fad32dd79016f2c7e421deb)
1*16467b97STreehugger Robot# -*- coding: utf-8 -*-
2*16467b97STreehugger Robot
3*16467b97STreehugger Robotimport os
4*16467b97STreehugger Robotimport unittest
5*16467b97STreehugger Robotfrom StringIO import StringIO
6*16467b97STreehugger Robotimport textwrap
7*16467b97STreehugger Robot
8*16467b97STreehugger Robotimport stringtemplate3
9*16467b97STreehugger Robot
10*16467b97STreehugger Robotfrom antlr3.dottreegen import toDOT
11*16467b97STreehugger Robotfrom antlr3.treewizard import TreeWizard
12*16467b97STreehugger Robotfrom antlr3.tree import CommonTreeAdaptor
13*16467b97STreehugger Robot
14*16467b97STreehugger Robot
15*16467b97STreehugger Robotclass TestToDOT(unittest.TestCase):
16*16467b97STreehugger Robot    """Test case for the toDOT function."""
17*16467b97STreehugger Robot
18*16467b97STreehugger Robot    def setUp(self):
19*16467b97STreehugger Robot        self.adaptor = CommonTreeAdaptor()
20*16467b97STreehugger Robot        self.tokens = [
21*16467b97STreehugger Robot            "", "", "", "", "", "A", "B", "C", "D", "E", "ID", "VAR"
22*16467b97STreehugger Robot            ]
23*16467b97STreehugger Robot        self.wiz = TreeWizard(self.adaptor, self.tokens)
24*16467b97STreehugger Robot
25*16467b97STreehugger Robot
26*16467b97STreehugger Robot    def testNone(self):
27*16467b97STreehugger Robot        """toDOT()"""
28*16467b97STreehugger Robot
29*16467b97STreehugger Robot        treeST = stringtemplate3.StringTemplate(
30*16467b97STreehugger Robot            template=(
31*16467b97STreehugger Robot            "digraph {\n" +
32*16467b97STreehugger Robot            "  $nodes$\n" +
33*16467b97STreehugger Robot            "  $edges$\n" +
34*16467b97STreehugger Robot            "}\n")
35*16467b97STreehugger Robot            )
36*16467b97STreehugger Robot
37*16467b97STreehugger Robot        edgeST = stringtemplate3.StringTemplate(
38*16467b97STreehugger Robot            template="$parent$ -> $child$\n"
39*16467b97STreehugger Robot            )
40*16467b97STreehugger Robot
41*16467b97STreehugger Robot        tree = self.wiz.create("(A B (B C C) (B (C D D)))")
42*16467b97STreehugger Robot        st = toDOT(tree, self.adaptor, treeST, edgeST)
43*16467b97STreehugger Robot
44*16467b97STreehugger Robot        result = st.toString()
45*16467b97STreehugger Robot        expected = textwrap.dedent(
46*16467b97STreehugger Robot            '''\
47*16467b97STreehugger Robot            digraph {
48*16467b97STreehugger Robot              n0 [label="A"];
49*16467b97STreehugger Robot              n1 [label="B"];
50*16467b97STreehugger Robot              n2 [label="B"];
51*16467b97STreehugger Robot              n3 [label="C"];
52*16467b97STreehugger Robot              n4 [label="C"];
53*16467b97STreehugger Robot              n5 [label="B"];
54*16467b97STreehugger Robot              n6 [label="C"];
55*16467b97STreehugger Robot              n7 [label="D"];
56*16467b97STreehugger Robot              n8 [label="D"];
57*16467b97STreehugger Robot
58*16467b97STreehugger Robot              n0 -> n1
59*16467b97STreehugger Robot              n0 -> n2
60*16467b97STreehugger Robot              n2 -> n3
61*16467b97STreehugger Robot              n2 -> n4
62*16467b97STreehugger Robot              n0 -> n5
63*16467b97STreehugger Robot              n5 -> n6
64*16467b97STreehugger Robot              n6 -> n7
65*16467b97STreehugger Robot              n6 -> n8
66*16467b97STreehugger Robot
67*16467b97STreehugger Robot            }
68*16467b97STreehugger Robot            '''
69*16467b97STreehugger Robot            )
70*16467b97STreehugger Robot        self.assertEqual(result, expected)
71*16467b97STreehugger Robot
72*16467b97STreehugger Robot
73*16467b97STreehugger Robotif __name__ == "__main__":
74*16467b97STreehugger Robot    unittest.main(testRunner=unittest.TextTestRunner(verbosity=2))
75