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('- Foo
- Bar
')
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')