Пример #1
0
 def testFindTokenType(self):
     wiz = TreeWizard(self.adaptor, self.tokens)
     t = wiz.create("(A B C (A[foo] B[bar]) (D (A[big] B[dog])))")
     subtrees = wiz.find(t, wiz.getTokenType('A'))
     found = [str(node) for node in subtrees]
     expecting = ['A', 'foo', 'big']
     self.failUnlessEqual(expecting, found)
Пример #2
0
 def testParseWithText2(self):
     wiz = TreeWizard(self.adaptor, self.tokens)
     t = wiz.create("(A B[T__32] (C (D E[a])))")
     # C pattern has no text arg so despite [bar] in t, no need
     # to match text--check structure only.
     valid = wiz.parse(t, "(A B[foo] C)")
     self.assertEquals("(A T__32 (C (D a)))", t.toStringTree())
Пример #3
0
 def testParseWithText(self):
     wiz = TreeWizard(self.adaptor, self.tokens)
     t = wiz.create("(A B[foo] C[bar])")
     # C pattern has no text arg so despite [bar] in t, no need
     # to match text--check structure only.
     valid = wiz.parse(t, "(A B[foo] C)")
     self.failUnless(valid)
Пример #4
0
 def testNoRepeatsIndex(self):
     wiz = TreeWizard(self.adaptor, self.tokens)
     tree = wiz.create("(A B C D)")
     indexMap = wiz.index(tree)
     found = self.__simplifyIndexMap(indexMap)
     expecting = { 8:['D'], 6:['B'], 7:['C'], 5:['A'] }
     self.assertEqual(expecting, found)
Пример #5
0
 def testSingleNodeIndex(self):
     wiz = TreeWizard(self.adaptor, self.tokens)
     tree = wiz.create("ID")
     indexMap = wiz.index(tree)
     found = self.__simplifyIndexMap(indexMap)
     expecting = { 10: ["ID"] }
     self.failUnlessEqual(expecting, found)
Пример #6
0
 def testRepeatsIndex(self):
     wiz = TreeWizard(self.adaptor, self.tokens)
     tree = wiz.create("(A B (A C B) B D D)")
     indexMap = wiz.index(tree)
     found = self.__simplifyIndexMap(indexMap)
     expecting = { 8: ['D', 'D'], 6: ['B', 'B', 'B'], 7: ['C'], 5: ['A', 'A'] }
     self.failUnlessEqual(expecting, found)
Пример #7
0
 def testFindPattern(self):
     wiz = TreeWizard(self.adaptor, self.tokens)
     t = wiz.create("(A B C (A[foo] B[bar]) (D (A[big] B[dog])))")
     subtrees = wiz.find(t, "(A B)")
     found = [str(node) for node in subtrees]
     expecting = ['foo', 'big']
     self.assertEqual(expecting, found)
Пример #8
0
 def testVerticalList(self):
     adaptor = CommonTreeAdaptor()
     wiz = TreeWizard(adaptor, self.tokens)
     t = wiz.create("(A (B C))")
     it = TreeIterator(t)
     expecting = "A DOWN B DOWN C UP UP EOF"
     found = self.toString(it)
     self.assertEquals(expecting, found)
Пример #9
0
 def testNode(self):
     adaptor = CommonTreeAdaptor()
     wiz = TreeWizard(adaptor, self.tokens)
     t = wiz.create("A")
     it = TreeIterator(t)
     expecting = "A EOF"
     found = self.toString(it)
     self.assertEquals(expecting, found)
Пример #10
0
 def testFlatAB(self):
     adaptor = CommonTreeAdaptor()
     wiz = TreeWizard(adaptor, self.tokens)
     t = wiz.create("(nil A B)")
     it = TreeIterator(t)
     expecting = "nil DOWN A B UP EOF"
     found = self.toString(it)
     self.assertEquals(expecting, found)
Пример #11
0
 def testABC(self):
     adaptor = CommonTreeAdaptor()
     wiz = TreeWizard(adaptor, self.tokens)
     t = wiz.create("(A B C)")
     it = TreeIterator(t)
     expecting = "A DOWN B C UP EOF"
     found = self.toString(it)
     self.assertEqual(expecting, found)
Пример #12
0
 def testComplex(self):
     adaptor = CommonTreeAdaptor()
     wiz = TreeWizard(adaptor, self.tokens)
     t = wiz.create("(A (B (C D E) F) G)")
     it = TreeIterator(t)
     expecting = "A DOWN B DOWN C DOWN D E UP F UP G UP EOF"
     found = self.toString(it)
     self.assertEquals(expecting, found)
Пример #13
0
 def testParseWithWildcardLabels(self):
     wiz = TreeWizard(self.adaptor, self.tokens)
     t = wiz.create("(A B C)")
     labels = {}
     valid = wiz.parse(t, "(A %b:. %c:.)", labels)
     self.failUnless(valid)
     self.failUnlessEqual("B", str(labels["b"]))
     self.failUnlessEqual("C", str(labels["c"]))
Пример #14
0
 def testParseLabelsAndTestText(self):
     wiz = TreeWizard(self.adaptor, self.tokens)
     t = wiz.create("(A B[foo] C)")
     labels = {}
     valid = wiz.parse(t, "(%a:A %b:B[foo] %c:C)", labels)
     self.failUnless(valid)
     self.failUnlessEqual("A", str(labels["a"]))
     self.failUnlessEqual("foo", str(labels["b"]))
     self.failUnlessEqual("C", str(labels["c"]))
Пример #15
0
 def testParseLabels(self):
     wiz = TreeWizard(self.adaptor, self.tokens)
     t = wiz.create("(A B C)")
     labels = {}
     valid = wiz.parse(t, "(%a:A %b:B %c:C)", labels)
     self.assertTrue(valid)
     self.assertEqual("A", str(labels["a"]))
     self.assertEqual("B", str(labels["b"]))
     self.assertEqual("C", str(labels["c"]))
Пример #16
0
class TestToDOT(unittest.TestCase):
    """Test case for the toDOT function."""

    def setUp(self):
        self.adaptor = CommonTreeAdaptor()
        self.tokens = [
            "", "", "", "", "", "A", "B", "C", "D", "E", "ID", "VAR"
            ]
        self.wiz = TreeWizard(self.adaptor, self.tokens)


    def testNone(self):
        """toDOT()"""

        treeST = stringtemplate3.StringTemplate(
            template=(
            "digraph {\n" +
            "  $nodes$\n" +
            "  $edges$\n" +
            "}\n")
            )

        edgeST = stringtemplate3.StringTemplate(
            template="$parent$ -> $child$\n"
            )

        tree = self.wiz.create("(A B (B C C) (B (C D D)))")
        st = toDOT(tree, self.adaptor, treeST, edgeST)

        result = st.toString()
        expected = textwrap.dedent(
            '''\
            digraph {
              n0 [label="A"];
              n1 [label="B"];
              n2 [label="B"];
              n3 [label="C"];
              n4 [label="C"];
              n5 [label="B"];
              n6 [label="C"];
              n7 [label="D"];
              n8 [label="D"];

              n0 -> n1
              n0 -> n2
              n2 -> n3
              n2 -> n4
              n0 -> n5
              n5 -> n6
              n6 -> n7
              n6 -> n8

            }
            '''
            )
        self.assertEqual(result, expected)
Пример #17
0
 def testParseLabelsInNestedTree(self):
     wiz = TreeWizard(self.adaptor, self.tokens)
     t = wiz.create("(A (B C) (D E))")
     labels = {}
     valid = wiz.parse(t, "(%a:A (%b:B %c:C) (%d:D %e:E) )", labels)
     self.failUnless(valid)
     self.failUnlessEqual("A", str(labels["a"]))
     self.failUnlessEqual("B", str(labels["b"]))
     self.failUnlessEqual("C", str(labels["c"]))
     self.failUnlessEqual("D", str(labels["d"]))
     self.failUnlessEqual("E", str(labels["e"]))
Пример #18
0
    def testRepeatsVisit2(self):
        wiz = TreeWizard(self.adaptor, self.tokens)
        tree = wiz.create("(A B (A C B) B D D)")

        elements = []
        def visitor(node, parent, childIndex, labels):
            elements.append(str(node))

        wiz.visit(tree, wiz.getTokenType("A"), visitor)

        expecting = ['A', 'A']
        self.failUnlessEqual(expecting, elements)
Пример #19
0
    def testNoRepeatsVisit(self):
        wiz = TreeWizard(self.adaptor, self.tokens)
        tree = wiz.create("(A B C D)")

        elements = []
        def visitor(node, parent, childIndex, labels):
            elements.append(str(node))

        wiz.visit(tree, wiz.getTokenType("B"), visitor)

        expecting = ['B']
        self.assertEqual(expecting, elements)
Пример #20
0
    def testRepeatsVisitWithContext(self):
        wiz = TreeWizard(self.adaptor, self.tokens)
        tree = wiz.create("(A B (A C B) B D D)")

        elements = []
        def visitor(node, parent, childIndex, labels):
            elements.append('%s@%s[%d]' % (node, parent, childIndex))

        wiz.visit(tree, wiz.getTokenType("B"), visitor)

        expecting = ['B@A[0]', 'B@A[1]', 'B@A[2]']
        self.failUnlessEqual(expecting, elements)
Пример #21
0
    def testLotsOfWildcards(self):
        tree = "(nil (ASSIGN ID[x] INT[3]) (PRINT (MULT ID[x] (VEC INT[1] INT[2] INT[3]))))"
        adaptor = CommonTreeAdaptor()
        wiz = TreeWizard(adaptor, self.tokenNames)
        t = wiz.create(tree)

        labels = {}
        valid = wiz.parse(t, "(nil (ASSIGN ID[x] INT[3]) (PRINT (MULT ID (VEC INT %x:INT INT))))", labels)
        self.assertTrue(valid)
        node = labels.get("x")

        expecting = True
        found = TreeParser._inContext(adaptor, self.tokenNames, node, "... PRINT ... VEC ...")
        self.assertEquals(expecting, found)
Пример #22
0
    def testNotParent(self):
        tree = "(PRINT (MULT ID[x] (VEC (MULT INT[9] INT[1]) INT[2] INT[3])))"
        adaptor = CommonTreeAdaptor()
        wiz = TreeWizard(adaptor, self.tokenNames)
        t = wiz.create(tree)

        labels = {}
        valid = wiz.parse(t, "(PRINT (MULT ID (VEC (MULT INT %x:INT) INT INT)))", labels)
        self.assertTrue(valid)
        node = labels.get("x")

        expecting = False
        found = TreeParser._inContext(adaptor, self.tokenNames, node, "VEC")
        self.assertEquals(expecting, found)
Пример #23
0
    def testVisitPatternMultiple(self):
        wiz = TreeWizard(self.adaptor, self.tokens)
        tree = wiz.create("(A B C (A B) (D (A B)))")

        elements = []
        def visitor(node, parent, childIndex, labels):
            elements.append(
                '{}@{}[{}]'.format(node, parent or 'nil', childIndex)
                )

        wiz.visit(tree, '(A B)', visitor)

        expecting = ['A@A[2]', 'A@D[0]']
        self.assertEqual(expecting, elements)
Пример #24
0
    def testVisitPattern(self):
        wiz = TreeWizard(self.adaptor, self.tokens)
        tree = wiz.create("(A B C (A B) D)")

        elements = []
        def visitor(node, parent, childIndex, labels):
            elements.append(
                str(node)
                )

        wiz.visit(tree, '(A B)', visitor)

        expecting = ['A'] # shouldn't match overall root, just (A B)
        self.failUnlessEqual(expecting, elements)
Пример #25
0
    def testRepeatsVisitWithNullParentAndContext(self):
        wiz = TreeWizard(self.adaptor, self.tokens)
        tree = wiz.create("(A B (A C B) B D D)")

        elements = []
        def visitor(node, parent, childIndex, labels):
            elements.append(
                '{}@{}[{}]'.format(
                    node, parent or 'nil', childIndex)
                )

        wiz.visit(tree, wiz.getTokenType("A"), visitor)

        expecting = ['A@nil[0]', 'A@A[1]']
        self.assertEqual(expecting, elements)
Пример #26
0
    def testRepeatsVisitWithNullParentAndContext(self):
        wiz = TreeWizard(self.adaptor, self.tokens)
        tree = wiz.create("(A B (A C B) B D D)")

        elements = []
        def visitor(node, parent, childIndex, labels):
            elements.append(
                '%s@%s[%d]'
                % (node, ['nil', parent][parent is not None], childIndex)
                )

        wiz.visit(tree, wiz.getTokenType("A"), visitor)

        expecting = ['A@nil[0]', 'A@A[1]']
        self.failUnlessEqual(expecting, elements)
Пример #27
0
    def testVisitPatternMultiple(self):
        wiz = TreeWizard(self.adaptor, self.tokens)
        tree = wiz.create("(A B C (A B) (D (A B)))")

        elements = []
        def visitor(node, parent, childIndex, labels):
            elements.append(
                '%s@%s[%d]'
                % (node, ['nil', parent][parent is not None], childIndex)
                )

        wiz.visit(tree, '(A B)', visitor)

        expecting = ['A@A[2]', 'A@D[0]']
        self.failUnlessEqual(expecting, elements)
Пример #28
0
 def testSingleNodeTree(self):
     wiz = TreeWizard(self.adaptor, self.tokens)
     t = wiz.create("(A)")
     found = t.toStringTree()
     expecting = "A"
     self.assertEqual(expecting, found)
Пример #29
0
 def testListTree(self):
     wiz = TreeWizard(self.adaptor, self.tokens)
     t = wiz.create("(nil A B C)")
     found = t.toStringTree()
     expecting = "A B C"
     self.assertEqual(expecting, found)
Пример #30
0
 def testInvalidListTree(self):
     wiz = TreeWizard(self.adaptor, self.tokens)
     t = wiz.create("A B C")
     self.assertIsNone(t)
Пример #31
0
 def testDoubleLevelTree(self):
     wiz = TreeWizard(self.adaptor, self.tokens)
     t = wiz.create("(A (B C) (B D) E)")
     found = t.toStringTree()
     expecting = "(A (B C) (B D) E)"
     self.assertEqual(expecting, found)
Пример #32
0
 def testParse(self):
     wiz = TreeWizard(self.adaptor, self.tokens)
     t = wiz.create("(A B C)")
     valid = wiz.parse(t, "(A B C)")
     self.assertTrue(valid)
Пример #33
0
 def testSingleNodeWithArg(self):
     wiz = TreeWizard(self.adaptor, self.tokens)
     t = wiz.create("ID[foo]")
     found = t.toStringTree()
     expecting = "foo"
     self.assertEqual(expecting, found)