Beispiel #1
0
    def test_xpath_eval_context_clear(self):
        tree = self.parse('<root><a/><b><c/></b></root>')

        check_call = {}
        def check_context(ctxt):
            check_call["done"] = True
            # context must be empty for each new evaluation
            self.assertEquals(len(ctxt.eval_context), 0)
            ctxt.eval_context["test"] = True
            return True

        find = etree.XPath("//b[p:foo()]",
                           namespaces={'p' : 'ns'},
                           extensions=[{('ns', 'foo') : check_context}])
        result = find(tree)

        self.assertEquals(result, [tree.getroot()[1]])
        self.assertEquals(check_call["done"], True)

        check_call.clear()
        find = etree.XPath("//b[p:foo()]",
                           namespaces={'p' : 'ns'},
                           extensions=[{('ns', 'foo') : check_context}])
        result = find(tree)

        self.assertEquals(result, [tree.getroot()[1]])
        self.assertEquals(check_call["done"], True)
Beispiel #2
0
    def test_xpath_compile_element(self):
        x = self.parse('<a><b/><c/></a>')
        root = x.getroot()

        expr = etree.XPath("./b")
        r = expr(root)
        self.assertEquals(1, len(r))
        self.assertEquals('b', r[0].tag)

        expr = etree.XPath("./*")
        r = expr(root)
        self.assertEquals(2, len(r))
Beispiel #3
0
    def test_xpath_compile_doc(self):
        x = self.parse('<a attr="true"/>')

        expr = etree.XPath("/a[@attr != 'true']")
        r = expr(x)
        self.assertEquals(0, len(r))

        expr = etree.XPath("/a[@attr = 'true']")
        r = expr(x)
        self.assertEquals(1, len(r))

        expr = etree.XPath( expr.path )
        r = expr(x)
        self.assertEquals(1, len(r))
Beispiel #4
0
    def test_xpath_compile_vars(self):
        x = self.parse('<a attr="true"/>')

        expr = etree.XPath("/a[@attr=$aval]")
        r = expr(x, aval=False)
        self.assertEquals(0, len(r))

        r = expr(x, aval=True)
        self.assertEquals(1, len(r))
Beispiel #5
0
 def _validation_errors(self, validationReport):
     valid = etree.XPath(
         'count(//svrl:successful-report[@flag="critical"])=1',
         namespaces={'svrl': isoschematron.SVRL_NS})(
         validationReport)
     if valid:
         return []
     error = etree.Element('Error')
     error.text = 'missing critical condition report'
     return [error]
Beispiel #6
0
    def test_xpath_context_node(self):
        tree = self.parse('<root><a/><b><c/></b></root>')

        check_call = []
        def check_context(ctxt, nodes):
            self.assertEquals(len(nodes), 1)
            check_call.append(nodes[0].tag)
            self.assertEquals(ctxt.context_node, nodes[0])
            return True

        find = etree.XPath("//*[p:foo(.)]",
                           namespaces={'p' : 'ns'},
                           extensions=[{('ns', 'foo') : check_context}])
        find(tree)

        check_call.sort()
        self.assertEquals(check_call, ["a", "b", "c", "root"])
Beispiel #7
0
    def test_xpath_eval_context_propagation(self):
        tree = self.parse('<root><a/><b><c/></b></root>')

        check_call = {}
        def check_context(ctxt, nodes):
            self.assertEquals(len(nodes), 1)
            tag = nodes[0].tag
            # empty during the "b" call, a "b" during the "c" call
            check_call[tag] = ctxt.eval_context.get("b")
            ctxt.eval_context[tag] = tag
            return True

        find = etree.XPath("//b[p:foo(.)]/c[p:foo(.)]",
                           namespaces={'p' : 'ns'},
                           extensions=[{('ns', 'foo') : check_context}])
        result = find(tree)

        self.assertEquals(result, [tree.getroot()[1][0]])
        self.assertEquals(check_call, {'b':None, 'c':'b'})
Beispiel #8
0
 def test_xpath_elementtree_error(self):
     self.assertRaises(ValueError, etree.XPath('*'), etree.ElementTree())
Beispiel #9
0
 def test_xpath_class_prefix_error(self):
     tree = self.parse('<a/>')
     xpath = etree.XPath("/fa:d")
     self.assertRaises(etree.XPathEvalError, xpath, tree)