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@111: self.assertRaises(PathSyntaxError, Path, 'parent::ma') cmlenz@111: cmlenz@26: def test_1step(self): cmlenz@38: xml = XML('') cmlenz@38: self.assertEqual('', Path('elem').select(xml).render()) cmlenz@111: self.assertEqual('', Path('child::elem').select(xml).render()) cmlenz@38: self.assertEqual('', Path('//elem').select(xml).render()) cmlenz@111: self.assertEqual('', Path('descendant::elem').select(xml).render()) cmlenz@106: cmlenz@106: def test_1step_self(self): cmlenz@106: xml = XML('') cmlenz@106: self.assertEqual('', Path('.').select(xml).render()) cmlenz@111: #self.assertEqual('', Path('self::node()').select(xml).render()) cmlenz@106: cmlenz@26: def test_1step_wildcard(self): cmlenz@38: xml = XML('') cmlenz@38: self.assertEqual('', Path('*').select(xml).render()) cmlenz@111: self.assertEqual('', Path('child::node()').select(xml).render()) cmlenz@38: self.assertEqual('', Path('//*').select(xml).render()) cmlenz@106: cmlenz@26: def test_1step_attribute(self): cmlenz@111: self.assertEqual('', Path('@foo').select(XML('')).render()) cmlenz@111: xml = XML('') cmlenz@111: self.assertEqual('bar', Path('@foo').select(xml).render()) 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@111: self.assertEqual('Hey', Path('text()').select(xml).render()) cmlenz@111: self.assertEqual('Hey', Path('./text()').select(xml).render()) cmlenz@111: self.assertEqual('Hey', Path('//text()').select(xml).render()) cmlenz@111: self.assertEqual('Hey', Path('.//text()').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@26: self.assertEqual('', Path('foo/bar').select(xml).render()) cmlenz@26: self.assertEqual('', Path('foo/*').select(xml).render()) cmlenz@26: cmlenz@26: xml = XML('') cmlenz@111: self.assertEqual('', cmlenz@111: Path('bar').select(xml).render()) cmlenz@26: cmlenz@26: def test_2step_text(self): cmlenz@26: xml = XML('Foo') cmlenz@26: self.assertEqual('Foo', Path('item/text()').select(xml).render()) cmlenz@111: self.assertEqual('Foo', Path('*/text()').select(xml).render()) cmlenz@111: self.assertEqual('Foo', Path('//text()').select(xml).render()) 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@26: self.assertEqual('', Path('root/foo/*').select(xml).render()) cmlenz@26: cmlenz@26: def test_3step_complex(self): cmlenz@26: xml = XML('') cmlenz@106: self.assertEqual('', Path('*/bar').select(xml).render()) cmlenz@26: xml = XML('') cmlenz@26: self.assertEqual('', cmlenz@106: Path('//bar').select(xml).render()) cmlenz@106: cmlenz@106: def test_node_type_comment(self): cmlenz@106: xml = XML('') cmlenz@106: self.assertEqual('', cmlenz@106: Path('comment()').select(xml).render()) cmlenz@106: cmlenz@106: def test_node_type_text(self): cmlenz@106: xml = XML('Some text
in here.
') cmlenz@106: self.assertEqual('Some text in here.', cmlenz@106: Path('text()').select(xml).render()) cmlenz@106: cmlenz@106: def test_node_type_node(self): cmlenz@106: xml = XML('Some text
in here.
') cmlenz@111: self.assertEqual('Some text
in here.', cmlenz@106: Path('node()').select(xml).render()) cmlenz@106: cmlenz@106: def test_node_type_processing_instruction(self): cmlenz@106: xml = XML('') cmlenz@106: self.assertEqual('', cmlenz@106: Path('processing-instruction()').select(xml).render()) cmlenz@106: self.assertEqual('', cmlenz@106: Path('processing-instruction("php")').select(xml).render()) cmlenz@106: cmlenz@106: def test_simple_union(self): cmlenz@106: xml = XML('Oh my') cmlenz@106: self.assertEqual('Oh my', cmlenz@106: Path('*|text()').select(xml).render()) cmlenz@26: 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')