[Lxml-checkins] r54363 - in lxml/trunk: . src/lxml/tests

scoder at codespeak.net scoder at codespeak.net
Sat May 3 15:42:16 CEST 2008


Author: scoder
Date: Sat May  3 15:42:14 2008
New Revision: 54363

Modified:
   lxml/trunk/   (props changed)
   lxml/trunk/src/lxml/tests/test_threading.py
Log:
 r4144 at delle:  sbehnel | 2008-05-03 14:50:08 +0200
 extended threading test cases


Modified: lxml/trunk/src/lxml/tests/test_threading.py
==============================================================================
--- lxml/trunk/src/lxml/tests/test_threading.py	(original)
+++ lxml/trunk/src/lxml/tests/test_threading.py	Sat May  3 15:42:14 2008
@@ -6,13 +6,18 @@
 
 import unittest, threading
 
-from common_imports import etree, HelperTestCase
+from common_imports import etree, HelperTestCase, StringIO
 
 class ThreadingTestCase(HelperTestCase):
     """Threading tests"""
     etree = etree
 
-    def test_subtree_copy(self):
+    def _run_thread(self, func):
+        thread = threading.Thread(target=func)
+        thread.start()
+        thread.join()
+
+    def test_subtree_copy_thread(self):
         tostring = self.etree.tostring
         XML = self.etree.XML
         xml = "<root><threadtag/></root>"
@@ -23,12 +28,113 @@
             main_root.append(thread_root[0])
             del thread_root
 
-        thread = threading.Thread(target=run_thread)
-        thread.start()
-        thread.join()
-
+        self._run_thread(run_thread)
         self.assertEquals(xml, tostring(main_root))
 
+    def test_main_xslt_in_thread(self):
+        XML = self.etree.XML
+        style = XML('''\
+<xsl:stylesheet version="1.0"
+    xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
+  <xsl:template match="*">
+    <foo><xsl:copy><xsl:value-of select="/a/b/text()" /></xsl:copy></foo>
+  </xsl:template>
+</xsl:stylesheet>''')
+        st = etree.XSLT(style)
+
+        result = []
+
+        def run_thread():
+            root = XML('<a><b>B</b><c>C</c></a>')
+            result.append( st(root) )
+
+        self._run_thread(run_thread)
+        self.assertEquals('''\
+<?xml version="1.0"?>
+<foo><a>B</a></foo>
+''',
+                          str(result[0]))
+
+    def test_thread_xslt(self):
+        XML = self.etree.XML
+        tostring = self.etree.tostring
+        root = XML('<a><b>B</b><c>C</c></a>')
+
+        def run_thread():
+            style = XML('''\
+    <xsl:stylesheet version="1.0"
+        xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
+      <xsl:template match="*">
+        <foo><xsl:copy><xsl:value-of select="/a/b/text()" /></xsl:copy></foo>
+      </xsl:template>
+    </xsl:stylesheet>''')
+            st = etree.XSLT(style)
+            root.append( st(root).getroot() )
+
+        self._run_thread(run_thread)
+        self.assertEquals('<a><b>B</b><c>C</c><foo><a>B</a></foo></a>',
+                          tostring(root))
+
+    def test_thread_mix(self):
+        XML = self.etree.XML
+        Element = self.etree.Element
+        SubElement = self.etree.SubElement
+        tostring = self.etree.tostring
+        xml = '<a><b>B</b><c xmlns="test">C</c></a>'
+        root = XML(xml)
+
+        result = self.etree.Element("{myns}root", att = "someval")
+
+        def run_XML():
+            thread_root = XML(xml)
+            result.append(thread_root[0])
+            result.append(thread_root[-1])
+
+        def run_parse():
+            thread_root = self.etree.parse(StringIO(xml)).getroot()
+            result.append(thread_root[0])
+            result.append(thread_root[-1])
+
+        def run_foreign_XML():
+            thread_root = XML("<other><tags/></other>")
+            result.append(thread_root[0])
+
+        def run_build():
+            result.append(
+                Element("{myns}foo", attrib={'{test}attr':'val'}))
+            SubElement(result, "{otherns}tasty")
+
+        def run_xslt():
+            style = XML('''\
+    <xsl:stylesheet version="1.0"
+        xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
+      <xsl:template match="*">
+        <foo><xsl:copy><xsl:value-of select="/a/b/text()" /></xsl:copy></foo>
+      </xsl:template>
+    </xsl:stylesheet>''')
+            st = etree.XSLT(style)
+            result.append( st(root).getroot()[0] )
+
+        for test in (run_XML, run_parse, run_foreign_XML, run_xslt):
+            tostring(result)
+            self._run_thread(test)
+
+        self.assertEquals(
+            '<ns0:root xmlns:ns0="myns" att="someval"><b>B</b><c xmlns="test">C</c><b>B</b><c xmlns="test">C</c><tags/><a>B</a></ns0:root>',
+            tostring(result))
+
+        def strip_first():
+            root = Element("newroot")
+            root.append(result[0])
+
+        while len(result):
+            self._run_thread(strip_first)
+
+        self.assertEquals(
+            '<ns0:root xmlns:ns0="myns" att="someval"/>',
+            tostring(result))
+
+
 def test_suite():
     suite = unittest.TestSuite()
     suite.addTests([unittest.makeSuite(ThreadingTestCase)])


More information about the lxml-checkins mailing list