def test_namespace_nodes(self): context = self.context namespace = NamespaceNode('tns', 'http://xpath.test/ns') self.assertEqual( repr(namespace), "NamespaceNode(prefix='tns', uri='http://xpath.test/ns')") self.assertEqual(namespace.value, 'http://xpath.test/ns') self.assertNotEqual(namespace, NamespaceNode('tns', 'http://xpath.test/ns')) self.assertEqual(namespace.as_item(), ('tns', 'http://xpath.test/ns')) self.assertNotEqual( namespace, NamespaceNode('tns', 'http://xpath.test/ns', parent=context.root)) namespace = NamespaceNode('tns', 'http://xpath.test/ns', parent=context.root) self.assertEqual( repr(namespace), "NamespaceNode(prefix='tns', uri='http://xpath.test/ns')") self.assertNotEqual( namespace, NamespaceNode('tns', 'http://xpath.test/ns', parent=context.root)) self.assertEqual(namespace.as_item(), ('tns', 'http://xpath.test/ns')) self.assertNotEqual(namespace, NamespaceNode('tns', 'http://xpath.test/ns'))
def test_node_kind_function(self): document = ElementTree.parse(io.StringIO(u'<A/>')) element = ElementTree.Element('schema') attribute = AttributeNode('id', '0212349350') namespace = NamespaceNode('xs', 'http://www.w3.org/2001/XMLSchema') comment = ElementTree.Comment('nothing important') pi = ElementTree.ProcessingInstruction('action', 'nothing to do') text = TextNode('betelgeuse') self.assertEqual(node_kind(document), 'document-node') self.assertEqual(node_kind(element), 'element') self.assertEqual(node_kind(attribute), 'attribute') self.assertEqual(node_kind(namespace), 'namespace') self.assertEqual(node_kind(comment), 'comment') self.assertEqual(node_kind(pi), 'processing-instruction') self.assertEqual(node_kind(text), 'text') self.assertIsNone(node_kind(())) self.assertIsNone(node_kind(None)) self.assertIsNone(node_kind(10)) with patch.multiple(DummyXsdType, is_simple=lambda x: True): xsd_type = DummyXsdType() typed_attribute = TypedAttribute(attribute, xsd_type, '0212349350') self.assertEqual(node_kind(typed_attribute), 'attribute') typed_element = TypedElement(element, xsd_type, None) self.assertEqual(node_kind(typed_element), 'element')
def test_node_name_function(self): elem = ElementTree.Element('root') attr = AttributeNode('a1', '20') namespace = NamespaceNode('xs', 'http://www.w3.org/2001/XMLSchema') self.assertEqual(node_name(elem), 'root') self.assertEqual(node_name(attr), 'a1') self.assertEqual(node_name(namespace), 'xs')
def test_node_kind_property(self): document = DocumentNode(ElementTree.parse(io.StringIO(u'<A/>'))) element = ElementNode(ElementTree.Element('schema')) attribute = AttributeNode('id', '0212349350') namespace = NamespaceNode('xs', 'http://www.w3.org/2001/XMLSchema') comment = CommentNode(ElementTree.Comment('nothing important')) pi = ProcessingInstructionNode( self.context, ElementTree.ProcessingInstruction('action', 'nothing to do')) text = TextNode('betelgeuse') self.assertEqual(document.kind, 'document') self.assertEqual(element.kind, 'element') self.assertEqual(attribute.kind, 'attribute') self.assertEqual(namespace.kind, 'namespace') self.assertEqual(comment.kind, 'comment') self.assertEqual(pi.kind, 'processing-instruction') self.assertEqual(text.kind, 'text') with patch.multiple(DummyXsdType, is_simple=lambda x: True): xsd_type = DummyXsdType() attribute = AttributeNode('id', '0212349350', xsd_type=xsd_type) self.assertEqual(attribute.kind, 'attribute') typed_element = ElementNode(element.elem, xsd_type=xsd_type) self.assertEqual(typed_element.kind, 'element')
def test_string_value_function(self): token = self.parser.parse('true()') document = ElementTree.parse( io.StringIO(u'<A>123<B1>456</B1><B2>789</B2></A>')) element = ElementTree.Element('schema') comment = ElementTree.Comment('nothing important') pi = ElementTree.ProcessingInstruction('action', 'nothing to do') document_node = XPathContext(document).root context = XPathContext(element) element_node = context.root attribute_node = AttributeNode('id', '0212349350') namespace_node = NamespaceNode('xs', 'http://www.w3.org/2001/XMLSchema') comment_node = CommentNode(comment) pi_node = ProcessingInstructionNode(pi) text_node = TextNode('betelgeuse') self.assertEqual(token.string_value(document_node), '123456789') self.assertEqual(token.string_value(element_node), '') self.assertEqual(token.string_value(attribute_node), '0212349350') self.assertEqual(token.string_value(namespace_node), 'http://www.w3.org/2001/XMLSchema') self.assertEqual(token.string_value(comment_node), 'nothing important') self.assertEqual(token.string_value(pi_node), 'action nothing to do') self.assertEqual(token.string_value(text_node), 'betelgeuse') self.assertEqual(token.string_value(None), '') self.assertEqual(token.string_value(Decimal(+1999)), '1999') self.assertEqual(token.string_value(Decimal('+1999')), '1999') self.assertEqual(token.string_value(Decimal('+19.0010')), '19.001') self.assertEqual(token.string_value(10), '10') self.assertEqual(token.string_value(1e99), '1E99') self.assertEqual(token.string_value(1e-05), '1E-05') self.assertEqual(token.string_value(1.00), '1') self.assertEqual(token.string_value(+19.0010), '19.001') self.assertEqual(token.string_value(float('nan')), 'NaN') self.assertEqual(token.string_value(float('inf')), 'INF') self.assertEqual(token.string_value(float('-inf')), '-INF') self.assertEqual(token.string_value(()), '()') tagged_object = Tagged() self.assertEqual(token.string_value(tagged_object), "Tagged(tag='root')") with patch.multiple(DummyXsdType, is_simple=lambda x: True): xsd_type = DummyXsdType() element.text = '10' typed_elem = ElementNode(elem=element, xsd_type=xsd_type) self.assertEqual(token.string_value(typed_elem), '10') self.assertEqual(token.data_value(typed_elem), 10)
def test_node_kind_function(self): document = ElementTree.parse(io.StringIO(u'<A/>')) element = ElementTree.Element('schema') attribute = AttributeNode('id', '0212349350') namespace = NamespaceNode('xs', 'http://www.w3.org/2001/XMLSchema') comment = ElementTree.Comment('nothing important') pi = ElementTree.ProcessingInstruction('action', 'nothing to do') text = u'betelgeuse' self.assertEqual(node_kind(document), 'document') self.assertEqual(node_kind(element), 'element') self.assertEqual(node_kind(attribute), 'attribute') self.assertEqual(node_kind(namespace), 'namespace') self.assertEqual(node_kind(comment), 'comment') self.assertEqual(node_kind(pi), 'processing-instruction') self.assertEqual(node_kind(text), 'text') self.assertIsNone(node_kind(None)) self.assertIsNone(node_kind(10))
def test_name_property(self): root = self.context.root attr = AttributeNode('a1', '20') namespace = NamespaceNode('xs', 'http://www.w3.org/2001/XMLSchema') self.assertEqual(root.name, 'root') self.assertEqual(attr.name, 'a1') self.assertEqual(namespace.name, 'xs') with patch.multiple(DummyXsdType, is_simple=lambda x: True): xsd_type = DummyXsdType() typed_elem = ElementNode(elem=root.elem, xsd_type=xsd_type) self.assertEqual(typed_elem.name, 'root') typed_attr = AttributeNode('a1', value='20', xsd_type=xsd_type) self.assertEqual(typed_attr.name, 'a1')
def test_data_value_function(self): token = self.parser.parse('true()') if self.parser.version != '1.0': xsd_type = DummyXsdType() context = XPathContext(ElementTree.XML('<age>19</age>')) context.root.xsd_type = xsd_type self.assertEqual(token.data_value(context.root), 19) context = XPathContext(ElementTree.XML('<dummy/>')) obj = AttributeNode('age', '19') self.assertEqual(token.data_value(obj), UntypedAtomic('19')) obj = NamespaceNode('tns', 'http://xpath.test/ns') self.assertEqual(token.data_value(obj), 'http://xpath.test/ns') obj = TextNode('19') self.assertEqual(token.data_value(obj), UntypedAtomic('19')) obj = ElementTree.XML('<root>a<e1>b</e1>c<e2>d</e2>e</root>') element_node = ElementNode(obj) self.assertEqual(token.data_value(element_node), UntypedAtomic('abcde')) obj = ElementTree.parse( io.StringIO('<root>a<e1>b</e1>c<e2>d</e2>e</root>')) document_node = DocumentNode(obj) self.assertEqual(token.data_value(document_node), UntypedAtomic('abcde')) obj = ElementTree.Comment("foo bar") comment_node = CommentNode(obj) self.assertEqual(token.data_value(comment_node), 'foo bar') obj = ElementTree.ProcessingInstruction('action', 'nothing to do') pi_node = ProcessingInstructionNode(obj) self.assertEqual(token.data_value(pi_node), 'action nothing to do') self.assertIsNone(token.data_value(None)) self.assertEqual(token.data_value(19), 19) self.assertEqual(token.data_value('19'), '19') self.assertFalse(token.data_value(False)) # Does not check type of non nodes, simply returns the object. tagged_object = Tagged() self.assertIs(token.data_value(tagged_object), tagged_object)
def test_node_name_function(self): elem = ElementTree.Element('root') attr = AttributeNode('a1', '20') namespace = NamespaceNode('xs', 'http://www.w3.org/2001/XMLSchema') self.assertEqual(node_name(elem), 'root') self.assertEqual(node_name(attr), 'a1') self.assertEqual(node_name(namespace), 'xs') self.assertIsNone(node_name(())) self.assertIsNone(node_name(None)) with patch.multiple(DummyXsdType, is_simple=lambda x: True): xsd_type = DummyXsdType() typed_elem = TypedElement(elem=elem, xsd_type=xsd_type, value=10) self.assertEqual(node_name(typed_elem), 'root') typed_attr = TypedAttribute(attribute=attr, xsd_type=xsd_type, value=20) self.assertEqual(node_name(typed_attr), 'a1')
def test_string_value_function(self): token = self.parser.parse('true()') document = ElementTree.parse(io.StringIO(u'<A>123<B1>456</B1><B2>789</B2></A>')) element = ElementTree.Element('schema') attribute = AttributeNode('id', '0212349350') namespace = NamespaceNode('xs', 'http://www.w3.org/2001/XMLSchema') comment = ElementTree.Comment('nothing important') pi = ElementTree.ProcessingInstruction('action', 'nothing to do') text = u'betelgeuse' self.assertEqual(token.string_value(document), '123456789') self.assertEqual(token.string_value(element), '') self.assertEqual(token.string_value(attribute), '0212349350') self.assertEqual(token.string_value(namespace), 'http://www.w3.org/2001/XMLSchema') self.assertEqual(token.string_value(comment), 'nothing important') self.assertEqual(token.string_value(pi), 'action nothing to do') self.assertEqual(token.string_value(text), 'betelgeuse') self.assertEqual(token.string_value(None), '') self.assertEqual(token.string_value(10), '10')
def test_data_value_function(self): token = self.parser.parse('true()') if self.parser.version != '1.0': with patch.multiple(DummyXsdType(), is_simple=lambda x: False, has_simple_content=lambda x: True) as xsd_type: obj = TypedElement(ElementTree.XML('<age>19</age>'), xsd_type, 19) self.assertEqual(token.data_value(obj), 19) obj = AttributeNode('age', '19') self.assertEqual(token.data_value(obj), UntypedAtomic('19')) obj = NamespaceNode('tns', 'http://xpath.test/ns') self.assertEqual(token.data_value(obj), 'http://xpath.test/ns') obj = TextNode('19') self.assertEqual(token.data_value(obj), UntypedAtomic('19')) obj = ElementTree.XML('<root>a<e1>b</e1>c<e2>d</e2>e</root>') self.assertEqual(token.data_value(obj), UntypedAtomic('abcde')) obj = ElementTree.parse( io.StringIO('<root>a<e1>b</e1>c<e2>d</e2>e</root>')) self.assertEqual(token.data_value(obj), UntypedAtomic('abcde')) obj = ElementTree.Comment("foo bar") self.assertEqual(token.data_value(obj), 'foo bar') obj = ElementTree.ProcessingInstruction('action', 'nothing to do') self.assertEqual(token.data_value(obj), 'action nothing to do') self.assertIsNone(token.data_value(None)) self.assertEqual(token.data_value(19), 19) self.assertEqual(token.data_value('19'), '19') self.assertFalse(token.data_value(False)) tagged_object = Tagged() self.assertIsNone(token.data_value(tagged_object))
def test_namespace_nodes(self): parent = ElementTree.Element('element') namespace = NamespaceNode('tns', 'http://xpath.test/ns') self.assertEqual(repr(namespace), "NamespaceNode(prefix='tns', uri='http://xpath.test/ns')") self.assertEqual(namespace.value, 'http://xpath.test/ns') self.assertEqual(namespace, NamespaceNode('tns', 'http://xpath.test/ns')) self.assertEqual(namespace.as_item(), ('tns', 'http://xpath.test/ns')) self.assertNotEqual(namespace, NamespaceNode('tns', 'http://xpath.test/ns', parent)) namespace = NamespaceNode('tns', 'http://xpath.test/ns', parent) self.assertEqual(repr(namespace)[:81], "NamespaceNode(prefix='tns', uri='http://xpath.test/ns', " "parent=<Element 'element'") self.assertEqual(namespace, NamespaceNode('tns', 'http://xpath.test/ns', parent)) self.assertEqual(namespace.as_item(), ('tns', 'http://xpath.test/ns')) self.assertNotEqual(namespace, NamespaceNode('tns', 'http://xpath.test/ns')) self.assertNotEqual(namespace, NamespaceNode('tns', 'http://xpath.test/ns', parent=ElementTree.Element('element')))
def test_is_namespace_node_function(self): namespace = NamespaceNode('xs', 'http://www.w3.org/2001/XMLSchema') self.assertTrue(is_namespace_node(namespace)) self.assertFalse(is_namespace_node(self.elem))