[Lxml-checkins] r49401 - lxml/trunk/src/lxml/tests

scoder at codespeak.net scoder at codespeak.net
Wed Dec 5 19:31:25 CET 2007


Author: scoder
Date: Wed Dec  5 19:31:25 2007
New Revision: 49401

Modified:
   lxml/trunk/src/lxml/tests/test_xslt.py
Log:
additional XSLT doc resolver test case

Modified: lxml/trunk/src/lxml/tests/test_xslt.py
==============================================================================
--- lxml/trunk/src/lxml/tests/test_xslt.py	(original)
+++ lxml/trunk/src/lxml/tests/test_xslt.py	Wed Dec  5 19:31:25 2007
@@ -622,7 +622,6 @@
                           '{http://www.w3.org/1999/XSL/Transform}stylesheet')
 
     def test_xslt_document_error(self):
-        # make sure document('') works from parsed strings
         xslt = etree.XSLT(etree.XML("""\
 <xsl:stylesheet version="1.0"
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
@@ -633,6 +632,68 @@
 """))
         self.assertRaises(etree.XSLTApplyError, xslt, etree.XML('<a/>'))
 
+    def test_xslt_document_XML_resolver(self):
+        # make sure document('') works when custom resolvers are in use
+        assertEquals = self.assertEquals
+        called = {'count' : 0}
+        class TestResolver(etree.Resolver):
+            def resolve(self, url, id, context):
+                assertEquals(url, 'file://ANYTHING')
+                called['count'] += 1
+                return self.resolve_string('<CALLED/>', context)
+
+        parser = etree.XMLParser()
+        parser.resolvers.add(TestResolver())
+
+        xslt = etree.XSLT(etree.XML("""\
+<xsl:stylesheet version="1.0"
+   xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+   xmlns:l="local">
+  <xsl:template match="/">
+    <test>
+      <xsl:for-each select="document('')//l:data/l:entry">
+        <xsl:copy-of select="document('file://ANYTHING')"/>
+        <xsl:copy>
+          <xsl:attribute name="value">
+            <xsl:value-of select="."/>
+          </xsl:attribute>
+        </xsl:copy>
+      </xsl:for-each>
+    </test>
+  </xsl:template>
+  <l:data>
+    <l:entry>A</l:entry>
+    <l:entry>B</l:entry>
+  </l:data>
+</xsl:stylesheet>
+""", parser))
+
+        self.assertEquals(called['count'], 0)
+        result = xslt(etree.XML('<a/>'))
+        self.assertEquals(called['count'], 1)
+
+        root = result.getroot()
+        self.assertEquals(root.tag,
+                          'test')
+        self.assertEquals(len(root), 4)
+
+        self.assertEquals(root[0].tag,
+                          'CALLED')
+        self.assertEquals(root[1].tag,
+                          '{local}entry')
+        self.assertEquals(root[1].text,
+                          None)
+        self.assertEquals(root[1].get("value"),
+                          'A')
+        self.assertEquals(root[2].tag,
+                          'CALLED')
+        self.assertEquals(root[3].tag,
+                          '{local}entry')
+        self.assertEquals(root[3].text,
+                          None)
+        self.assertEquals(root[3].get("value"),
+                          'B')
+
     def test_xslt_move_result(self):
         root = etree.XML('''\
         <transform>


More information about the lxml-checkins mailing list