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