| Index: third_party/libxslt/python/tests/extelem.py
|
| diff --git a/third_party/libxslt/python/tests/extelem.py b/third_party/libxslt/python/tests/extelem.py
|
| new file mode 100755
|
| index 0000000000000000000000000000000000000000..3364d01a4f6fdab3f254bca9427f9c05e804f1c9
|
| --- /dev/null
|
| +++ b/third_party/libxslt/python/tests/extelem.py
|
| @@ -0,0 +1,89 @@
|
| +#!/usr/bin/python -u
|
| +import sys
|
| +import string
|
| +import StringIO
|
| +import libxml2
|
| +# Memory debug specific
|
| +libxml2.debugMemory(1)
|
| +import libxslt
|
| +
|
| +EXT_URL="http://example.com/foo"
|
| +
|
| +insertNodeName = None
|
| +transformNodeName = None
|
| +
|
| +def compile_test(style, inst, func):
|
| + pass
|
| +
|
| +def transform_test(ctx, node, inst, comp):
|
| + global insertNodeName
|
| +
|
| + #
|
| + # Small check to verify the context is correcly accessed
|
| + #
|
| + try:
|
| + #
|
| + # FIXME add some more sanity checks
|
| + #
|
| + tctxt = libxslt.transformCtxt(_obj=ctx)
|
| + insertNodeName = tctxt.insertNode().name
|
| +
|
| + # FIXME find and confirm the note being replaced is called 'test'
|
| + # transformNodeName = libxml2.xmlNode(inst).name
|
| + except:
|
| + pass
|
| +
|
| + tctxt.insertNode().addContent('SUCCESS')
|
| +
|
| +
|
| +
|
| +styledoc = libxml2.parseDoc("""
|
| +<xsl:stylesheet version='1.0'
|
| + xmlns:xsl='http://www.w3.org/1999/XSL/Transform'
|
| + xmlns:foo='%s'
|
| + extension-element-prefixes='foo'>
|
| +
|
| + <xsl:template match='/'>
|
| + <article><foo:test>FAILURE</foo:test></article>
|
| + <deeper><article><foo:test>something<foo:test>nested</foo:test>even</foo:test></article></deeper>
|
| + </xsl:template>
|
| +</xsl:stylesheet>
|
| +""" % EXT_URL)
|
| +
|
| +style = libxslt.parseStylesheetDoc(styledoc)
|
| +libxslt.registerExtModuleElement("test", EXT_URL, compile_test, transform_test)
|
| +doc = libxml2.parseDoc("<doc/>")
|
| +result = style.applyStylesheet(doc, None)
|
| +style.freeStylesheet()
|
| +doc.freeDoc()
|
| +
|
| +
|
| +extensions = StringIO.StringIO()
|
| +libxslt.debugDumpExtensions(extensions)
|
| +
|
| +if 0 and extensions.buf.find(EXT_URL) < 0:
|
| + print "Element extension not registered (or dumping broken)"
|
| + sys.exit(1)
|
| +
|
| +root = result.children
|
| +
|
| +if root.name != "article":
|
| + print "Unexpected root node name"
|
| + sys.exit(1)
|
| +if root.content != "SUCCESS":
|
| + print "Unexpected root node content, extension function failed"
|
| + sys.exit(1)
|
| +if insertNodeName != 'article':
|
| + print "The function callback failed to access its context"
|
| + sys.exit(1)
|
| +
|
| +result.dump(sys.stdout)
|
| +result.freeDoc()
|
| +
|
| +# Memory debug specific
|
| +libxslt.cleanup()
|
| +if libxml2.debugMemory(1) == 0:
|
| + print "OK"
|
| +else:
|
| + print "Memory leak %d bytes" % (libxml2.debugMemory(1))
|
| + libxml2.dumpMemory()
|
|
|