cmlenz@1: # -*- coding: utf-8 -*- cmlenz@1: # cmlenz@66: # Copyright (C) 2006 Edgewall Software cmlenz@1: # All rights reserved. cmlenz@1: # cmlenz@1: # This software is licensed as described in the file COPYING, which cmlenz@1: # you should have received as part of this distribution. The terms cmlenz@66: # are also available at http://markup.edgewall.org/wiki/License. cmlenz@1: # cmlenz@1: # This software consists of voluntary contributions made by many cmlenz@1: # individuals. For the exact contribution history, see the revision cmlenz@66: # history and logs, available at http://markup.edgewall.org/log/. cmlenz@1: cmlenz@1: import doctest cmlenz@1: import unittest cmlenz@1: cmlenz@26: from markup.input import XML cmlenz@111: from markup.path import Path, PathSyntaxError cmlenz@26: cmlenz@26: cmlenz@26: class PathTestCase(unittest.TestCase): cmlenz@26: cmlenz@111: def test_error_no_absolute_path(self): cmlenz@111: self.assertRaises(PathSyntaxError, Path, '/root') cmlenz@111: cmlenz@111: def test_error_unsupported_axis(self): cmlenz@137: self.assertRaises(PathSyntaxError, Path, '..') cmlenz@111: self.assertRaises(PathSyntaxError, Path, 'parent::ma') cmlenz@111: cmlenz@26: def test_1step(self): cmlenz@38: xml = XML('') cmlenz@137: cmlenz@137: path = Path('elem') cmlenz@137: self.assertEqual('', repr(path)) cmlenz@137: self.assertEqual('', path.select(xml).render()) cmlenz@137: cmlenz@137: path = Path('child::elem') cmlenz@137: self.assertEqual('', repr(path)) cmlenz@137: self.assertEqual('', path.select(xml).render()) cmlenz@137: cmlenz@137: path = Path('//elem') cmlenz@137: self.assertEqual('', cmlenz@137: repr(path)) cmlenz@137: self.assertEqual('', path.select(xml).render()) cmlenz@137: cmlenz@137: path = Path('descendant::elem') cmlenz@137: self.assertEqual('', repr(path)) cmlenz@137: self.assertEqual('', path.select(xml).render()) cmlenz@106: cmlenz@106: def test_1step_self(self): cmlenz@106: xml = XML('') cmlenz@137: cmlenz@137: path = Path('.') cmlenz@137: self.assertEqual('', repr(path)) cmlenz@137: self.assertEqual('', path.select(xml).render()) cmlenz@137: cmlenz@137: path = Path('self::node()') cmlenz@137: self.assertEqual('', repr(path)) cmlenz@137: self.assertEqual('', path.select(xml).render()) cmlenz@106: cmlenz@26: def test_1step_wildcard(self): cmlenz@38: xml = XML('') cmlenz@137: cmlenz@137: path = Path('*') cmlenz@137: self.assertEqual('', repr(path)) cmlenz@137: self.assertEqual('', path.select(xml).render()) cmlenz@137: cmlenz@137: path = Path('child::*') cmlenz@137: self.assertEqual('', repr(path)) cmlenz@137: self.assertEqual('', path.select(xml).render()) cmlenz@137: cmlenz@137: path = Path('child::node()') cmlenz@137: self.assertEqual('', repr(path)) cmlenz@111: self.assertEqual('', Path('child::node()').select(xml).render()) cmlenz@137: cmlenz@137: path = Path('//*') cmlenz@137: self.assertEqual('', cmlenz@137: repr(path)) cmlenz@137: self.assertEqual('', path.select(xml).render()) cmlenz@106: cmlenz@26: def test_1step_attribute(self): cmlenz@138: path = Path('@foo') cmlenz@138: self.assertEqual('', repr(path)) cmlenz@138: self.assertEqual('', path.select(XML('')).render()) cmlenz@138: cmlenz@111: xml = XML('') cmlenz@138: self.assertEqual('bar', path.select(xml).render()) cmlenz@138: cmlenz@138: path = Path('./@foo') cmlenz@138: self.assertEqual('', repr(path)) cmlenz@111: self.assertEqual('bar', Path('./@foo').select(xml).render()) cmlenz@26: cmlenz@111: def test_1step_text(self): cmlenz@111: xml = XML('Hey') cmlenz@138: cmlenz@138: path = Path('text()') cmlenz@138: self.assertEqual('', repr(path)) cmlenz@138: self.assertEqual('Hey', path.select(xml).render()) cmlenz@138: cmlenz@138: path = Path('./text()') cmlenz@138: self.assertEqual('', repr(path)) cmlenz@138: self.assertEqual('Hey', path.select(xml).render()) cmlenz@138: cmlenz@138: path = Path('//text()') cmlenz@138: self.assertEqual('', cmlenz@138: repr(path)) cmlenz@138: self.assertEqual('Hey', path.select(xml).render()) cmlenz@138: cmlenz@138: path = Path('.//text()') cmlenz@138: self.assertEqual('', repr(path)) cmlenz@138: self.assertEqual('Hey', path.select(xml).render()) cmlenz@26: cmlenz@26: def test_2step(self): cmlenz@26: xml = XML('') cmlenz@111: self.assertEqual('', Path('*').select(xml).render()) cmlenz@111: self.assertEqual('', Path('bar').select(xml).render()) cmlenz@111: self.assertEqual('', Path('baz').select(xml).render()) cmlenz@26: cmlenz@26: def test_2step_complex(self): cmlenz@26: xml = XML('') cmlenz@138: cmlenz@138: path = Path('foo/bar') cmlenz@138: self.assertEqual('', repr(path)) cmlenz@138: self.assertEqual('', path.select(xml).render()) cmlenz@138: cmlenz@138: path = Path('foo/*') cmlenz@138: self.assertEqual('', repr(path)) cmlenz@138: self.assertEqual('', path.select(xml).render()) cmlenz@26: cmlenz@26: xml = XML('') cmlenz@137: self.assertEqual('', cmlenz@137: Path('bar').select(xml).render()) cmlenz@26: cmlenz@26: def test_2step_text(self): cmlenz@26: xml = XML('Foo') cmlenz@138: cmlenz@138: path = Path('item/text()') cmlenz@138: self.assertEqual('', repr(path)) cmlenz@138: self.assertEqual('Foo', path.select(xml).render()) cmlenz@138: cmlenz@138: path = Path('*/text()') cmlenz@138: self.assertEqual('', repr(path)) cmlenz@138: self.assertEqual('Foo', path.select(xml).render()) cmlenz@138: cmlenz@138: path = Path('//text()') cmlenz@138: self.assertEqual('', cmlenz@138: repr(path)) cmlenz@138: self.assertEqual('Foo', path.select(xml).render()) cmlenz@138: cmlenz@26: xml = XML('FooBar') cmlenz@26: self.assertEqual('FooBar', Path('item/text()').select(xml).render()) cmlenz@26: cmlenz@26: def test_3step(self): cmlenz@26: xml = XML('') cmlenz@138: path = Path('root/foo/*') cmlenz@138: self.assertEqual('', cmlenz@138: repr(path)) cmlenz@138: self.assertEqual('', path.select(xml).render()) cmlenz@26: cmlenz@26: def test_3step_complex(self): cmlenz@26: xml = XML('') cmlenz@138: path = Path('*/bar') cmlenz@138: self.assertEqual('', repr(path)) cmlenz@138: self.assertEqual('', path.select(xml).render()) cmlenz@138: cmlenz@26: xml = XML('') cmlenz@138: path = Path('//bar') cmlenz@138: self.assertEqual('', cmlenz@138: repr(path)) cmlenz@26: self.assertEqual('', cmlenz@138: path.select(xml).render()) cmlenz@106: cmlenz@106: def test_node_type_comment(self): cmlenz@106: xml = XML('') cmlenz@138: path = Path('comment()') cmlenz@138: self.assertEqual('', repr(path)) cmlenz@138: self.assertEqual('', path.select(xml).render()) cmlenz@106: cmlenz@106: def test_node_type_text(self): cmlenz@106: xml = XML('Some text
in here.
') cmlenz@138: path = Path('text()') cmlenz@138: self.assertEqual('', repr(path)) cmlenz@138: self.assertEqual('Some text in here.', path.select(xml).render()) cmlenz@106: cmlenz@106: def test_node_type_node(self): cmlenz@106: xml = XML('Some text
in here.
') cmlenz@138: path = Path('node()') cmlenz@138: self.assertEqual('', repr(path)) cmlenz@138: self.assertEqual('Some text
in here.', path.select(xml).render()) cmlenz@106: cmlenz@106: def test_node_type_processing_instruction(self): cmlenz@106: xml = XML('') cmlenz@138: cmlenz@138: path = Path('processing-instruction()') cmlenz@138: self.assertEqual('', cmlenz@138: repr(path)) cmlenz@106: self.assertEqual('', cmlenz@138: path.select(xml).render()) cmlenz@138: cmlenz@138: path = Path('processing-instruction("php")') cmlenz@138: self.assertEqual('', cmlenz@138: repr(path)) cmlenz@138: self.assertEqual('', path.select(xml).render()) cmlenz@106: cmlenz@106: def test_simple_union(self): cmlenz@106: xml = XML('Oh my') cmlenz@138: path = Path('*|text()') cmlenz@138: self.assertEqual('', cmlenz@138: repr(path)) cmlenz@138: self.assertEqual('Oh my', path.select(xml).render()) cmlenz@26: cmlenz@121: def test_predicate_name(self): cmlenz@121: xml = XML('') cmlenz@121: self.assertEqual('', cmlenz@121: Path('*[name()="foo"]').select(xml).render()) cmlenz@121: cmlenz@121: def test_predicate_localname(self): cmlenz@121: xml = XML('') cmlenz@121: self.assertEqual('', cmlenz@121: Path('*[local-name()="foo"]').select(xml).render()) cmlenz@121: cmlenz@121: def test_predicate_namespace(self): cmlenz@121: xml = XML('') cmlenz@121: self.assertEqual('', cmlenz@121: Path('*[namespace-uri()="NS"]').select(xml).render()) cmlenz@121: cmlenz@121: def test_predicate_not_name(self): cmlenz@121: xml = XML('') cmlenz@121: self.assertEqual('', cmlenz@121: Path('*[not(name()="foo")]').select(xml).render()) cmlenz@121: cmlenz@26: def test_predicate_attr(self): cmlenz@26: xml = XML('') cmlenz@26: self.assertEqual('', cmlenz@26: Path('root/item[@important]').select(xml).render()) cmlenz@26: self.assertEqual('', cmlenz@26: Path('root/item[@important="very"]').select(xml).render()) cmlenz@26: cmlenz@106: def test_predicate_attr_equality(self): cmlenz@26: xml = XML('') cmlenz@26: self.assertEqual('', cmlenz@26: Path('root/item[@important="very"]').select(xml).render()) cmlenz@26: self.assertEqual('', cmlenz@26: Path('root/item[@important!="very"]').select(xml).render()) cmlenz@1: cmlenz@106: def test_predicate_attr_and(self): cmlenz@106: xml = XML('') cmlenz@106: path = Path('root/item[@important and @important="very"]') cmlenz@106: self.assertEqual('', path.select(xml).render()) cmlenz@106: path = Path('root/item[@important and @important="notso"]') cmlenz@106: self.assertEqual('', path.select(xml).render()) cmlenz@106: cmlenz@106: def test_predicate_attr_or(self): cmlenz@106: xml = XML('') cmlenz@106: path = Path('root/item[@urgent or @important]') cmlenz@106: self.assertEqual('', path.select(xml).render()) cmlenz@106: path = Path('root/item[@urgent or @notso]') cmlenz@106: self.assertEqual('', path.select(xml).render()) cmlenz@106: cmlenz@1: cmlenz@1: def suite(): cmlenz@1: suite = unittest.TestSuite() cmlenz@111: suite.addTest(doctest.DocTestSuite(Path.__module__)) cmlenz@26: suite.addTest(unittest.makeSuite(PathTestCase, 'test')) cmlenz@1: return suite cmlenz@1: cmlenz@1: if __name__ == '__main__': cmlenz@1: unittest.main(defaultTest='suite')