示例#1
0
    def testNamespaces(self):
        xmlXPath = XmlXPath(['/a:aNode/b:bNode'],
                            fromKwarg='lxmlNode',
                            namespaces={
                                'a': 'aNamespace',
                                'b': 'bNamespace'
                            })
        lxmlNode = parse(
            StringIO(
                '<aNode xmlns="aNamespace"><bNode xmlns="bNamespace">ccc</bNode></aNode>'
            ))
        observer = CallTrace('Observer')
        observable = Observable()
        observable.addObserver(xmlXPath)
        xmlXPath.addObserver(observer)

        observable.do.message(lxmlNode=lxmlNode)

        message = observer.calledMethods[0]
        self.assertEqual('message', message.name)
        newNode = message.kwargs['lxmlNode']
        self.assertEqualsWS('<bNode xmlns="bNamespace">ccc</bNode>',
                            lxmltostring(newNode))

        newNamespaces = newNode.getroot().nsmap
        nameSpacesAfterParsing = parse(StringIO(
            lxmltostring(newNode))).getroot().nsmap
        self.assertEqual(nameSpacesAfterParsing, newNamespaces)
    def testXPathReturnsString(self):
        xpath = XmlXPath(['/a/t/text()'], fromKwarg="lxmlNode")
        inputNode = parse(StringIO('<a><t>some text &amp; some &lt;entities&gt;</t></a>'))

        observable = Observable()
        observer = CallTrace('observer')
        observable.addObserver(xpath)
        xpath.addObserver(observer)

        observable.do.aMethod(lxmlNode=inputNode)
        self.assertEquals(1, len(observer.calledMethods))
        result = observer.calledMethods[0].kwargs
        self.assertEquals({'lxmlNode': 'some text & some <entities>'}, result)
示例#3
0
    def testNamespaces(self):
        xmlXPath = XmlXPath(['/a:aNode/b:bNode'], fromKwarg='lxmlNode', namespaces={'a':'aNamespace', 'b':'bNamespace' })
        lxmlNode = parse(StringIO('<aNode xmlns="aNamespace"><bNode xmlns="bNamespace">ccc</bNode></aNode>'))
        observer = CallTrace('Observer')
        observable = Observable()
        observable.addObserver(xmlXPath)
        xmlXPath.addObserver(observer)

        observable.do.message(lxmlNode=lxmlNode)

        message = observer.calledMethods[0]
        self.assertEquals('message', message.name)
        newNode = message.kwargs['lxmlNode']
        self.assertEqualsWS('<bNode xmlns="bNamespace">ccc</bNode>', lxmltostring(newNode))

        newNamespaces = newNode.getroot().nsmap
        nameSpacesAfterParsing = parse(StringIO(lxmltostring(newNode))).getroot().nsmap
        self.assertEquals(nameSpacesAfterParsing, newNamespaces)