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