[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