Mercurial > genshi > mirror
changeset 389:ccf00b09972c stable-0.3.x
0.3.x branch: ported [461] and [469].
author | cmlenz |
---|---|
date | Mon, 11 Dec 2006 12:08:10 +0000 |
parents | 31dc3d18b39e |
children | 84f9f5618a70 |
files | ChangeLog genshi/builder.py genshi/tests/builder.py |
diffstat | 3 files changed, 22 insertions(+), 2 deletions(-) [+] |
line wrap: on
line diff
--- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,12 @@ +Version 0.3.6 +http://svn.edgewall.org/repos/genshi/tags/0.3.6/ +(Dec 11 2006, from branches/stable/0.3.x) + + * The builder API now accepts streams as children of elements and fragments. + + Version 0.3.5 -http://svn.edgewall.org/repos/genshi/tags/0.3.4/ +http://svn.edgewall.org/repos/genshi/tags/0.3.5/ (Nov 22 2006, from branches/stable/0.3.x) * Fix XPath traversal in match templates. Previously, `div/p` would be treated
--- a/genshi/builder.py +++ b/genshi/builder.py @@ -46,7 +46,7 @@ def append(self, node): """Append an element or string as child node.""" - if isinstance(node, (Element, basestring, int, float, long)): + if isinstance(node, (Stream, Element, basestring, int, float, long)): # For objects of a known/primitive type, we avoid the check for # whether it is iterable for better performance self.children.append(node) @@ -63,6 +63,9 @@ if isinstance(child, Fragment): for event in child._generate(): yield event + elif isinstance(child, Stream): + for event in child: + yield event else: if not isinstance(child, basestring): child = unicode(child)
--- a/genshi/tests/builder.py +++ b/genshi/tests/builder.py @@ -17,6 +17,7 @@ from genshi.builder import Element, tag from genshi.core import Stream +from genshi.input import XML class ElementFactoryTestCase(unittest.TestCase): @@ -39,6 +40,15 @@ self.assertEqual((Stream.START, ('foo', [('id', '3')]), (None, -1, -1)), event) + def test_stream_as_child(self): + xml = list(tag.span(XML('<b>Foo</b>')).generate()) + self.assertEqual(5, len(xml)) + self.assertEqual((Stream.START, ('span', ()), (None, -1, -1)), xml[0]) + self.assertEqual((Stream.START, ('b', ()), (None, 1, 0)), xml[1]) + self.assertEqual((Stream.TEXT, 'Foo', (None, 1, 3)), xml[2]) + self.assertEqual((Stream.END, 'b', (None, 1, 6)), xml[3]) + self.assertEqual((Stream.END, 'span', (None, -1, -1)), xml[4]) + def suite(): suite = unittest.TestSuite()