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