~ubuntu-branches/ubuntu/oneiric/lxml/oneiric

« back to all changes in this revision

Viewing changes to src/lxml/tests/test_xslt.py

  • Committer: Bazaar Package Importer
  • Author(s): Matthias Klose
  • Date: 2009-08-27 09:09:23 UTC
  • mfrom: (1.3.2 upstream)
  • Revision ID: james.westby@ubuntu.com-20090827090923-fwhvka191ir73s3x
Tags: 2.2.2-1
* New upstream version. Closes: #525961.
  - Includes html5parser. Closes: #521714.

Show diffs side-by-side

added added

removed removed

Lines of Context:
329
329
''',
330
330
                          str(res))
331
331
 
 
332
    def test_xslt_string_parameters(self):
 
333
        tree = self.parse('<a><b>B</b><c>C</c></a>')
 
334
        style = self.parse('''\
 
335
<xsl:stylesheet version="1.0"
 
336
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 
337
  <xsl:template match="/">
 
338
    <foo><xsl:value-of select="$bar" /></foo>
 
339
  </xsl:template>
 
340
</xsl:stylesheet>''')
 
341
 
 
342
        st = etree.XSLT(style)
 
343
        res = st(tree, bar=etree.XSLT.strparam('''it's me, "Bar"'''))
 
344
        self.assertEquals('''\
 
345
<?xml version="1.0"?>
 
346
<foo>it's me, "Bar"</foo>
 
347
''',
 
348
                          str(res))
 
349
 
332
350
    def test_xslt_parameter_invalid(self):
333
351
        tree = self.parse('<a><b>B</b><c>C</c></a>')
334
352
        style = self.parse('''\
647
665
        self.assertEquals(self._rootstring(result),
648
666
                          _bytes('<A>X</A>'))
649
667
 
 
668
    def test_variable_result_tree_fragment(self):
 
669
        tree = self.parse('<a><b>B</b><b/></a>')
 
670
        style = self.parse('''\
 
671
<xsl:stylesheet version="1.0"
 
672
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
 
673
    xmlns:myns="testns"
 
674
    exclude-result-prefixes="myns">
 
675
  <xsl:template match="a">
 
676
    <xsl:variable name="content">
 
677
       <xsl:apply-templates/>
 
678
    </xsl:variable>
 
679
    <A><xsl:value-of select="myns:mytext($content)"/></A>
 
680
  </xsl:template>
 
681
  <xsl:template match="b"><xsl:copy>BBB</xsl:copy></xsl:template>
 
682
</xsl:stylesheet>''')
 
683
 
 
684
        def mytext(ctxt, values):
 
685
            for value in values:
 
686
                self.assert_(hasattr(value, 'tag'),
 
687
                             "%s is not an Element" % type(value))
 
688
                self.assertEquals(value.tag, 'b')
 
689
                self.assertEquals(value.text, 'BBB')
 
690
            return 'X'.join([el.tag for el in values])
 
691
 
 
692
        namespace = etree.FunctionNamespace('testns')
 
693
        namespace['mytext'] = mytext
 
694
 
 
695
        result = tree.xslt(style)
 
696
        self.assertEquals(self._rootstring(result),
 
697
                          _bytes('<A>bXb</A>'))
 
698
 
650
699
    def test_extension_element(self):
651
700
        tree = self.parse('<a><b>B</b></a>')
652
701
        style = self.parse('''\
862
911
        self.assertEquals(root[3].get("value"),
863
912
                          'B')
864
913
 
 
914
    def test_xslt_resolver_url_building(self):
 
915
        assertEquals = self.assertEquals
 
916
        called = {'count' : 0}
 
917
        expected_url = None
 
918
        class TestResolver(etree.Resolver):
 
919
            def resolve(self, url, id, context):
 
920
                assertEquals(url, expected_url)
 
921
                called['count'] += 1
 
922
                return self.resolve_string('<CALLED/>', context)
 
923
 
 
924
        stylesheet_xml = _bytes("""\
 
925
<xsl:stylesheet version="1.0"
 
926
   xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
 
927
   xmlns:l="local">
 
928
  <xsl:template match="/">
 
929
    <xsl:copy-of select="document('test.xml')"/>
 
930
  </xsl:template>
 
931
</xsl:stylesheet>
 
932
""")
 
933
 
 
934
        parser = etree.XMLParser()
 
935
        parser.resolvers.add(TestResolver())
 
936
 
 
937
        # test without base_url => relative path only
 
938
        expected_url = 'test.xml'
 
939
        xslt = etree.XSLT(etree.XML(stylesheet_xml, parser))
 
940
 
 
941
        self.assertEquals(called['count'], 0)
 
942
        result = xslt(etree.XML('<a/>'))
 
943
        self.assertEquals(called['count'], 1)
 
944
 
 
945
        # now the same thing with a stylesheet base URL on the filesystem
 
946
        called['count'] = 0
 
947
        expected_url = os.path.join('MY', 'BASE', 'test.xml')
 
948
        xslt = etree.XSLT(etree.XML(stylesheet_xml, parser,
 
949
                                    base_url=os.path.join('MY', 'BASE', 'FILE')))
 
950
 
 
951
        self.assertEquals(called['count'], 0)
 
952
        result = xslt(etree.XML('<a/>'))
 
953
        self.assertEquals(called['count'], 1)
 
954
 
 
955
        # now the same thing with a stylesheet base URL
 
956
        called['count'] = 0
 
957
        expected_url = 'http://server.com/BASE/DIR/test.xml'
 
958
        xslt = etree.XSLT(etree.XML(stylesheet_xml, parser,
 
959
                                    base_url='http://server.com/BASE/DIR/FILE'))
 
960
 
 
961
        self.assertEquals(called['count'], 0)
 
962
        result = xslt(etree.XML('<a/>'))
 
963
        self.assertEquals(called['count'], 1)
 
964
 
865
965
    def test_xslt_document_parse_allow(self):
866
966
        access_control = etree.XSLTAccessControl(read_file=True)
867
967
        xslt = etree.XSLT(etree.parse(fileInTestDir("test-document.xslt")),