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()
Copyright (C) 2012-2017 Edgewall Software