diff options
author | Atsushi Eno <atsushieno@gmail.com> | 2009-04-15 12:54:10 +0400 |
---|---|---|
committer | Atsushi Eno <atsushieno@gmail.com> | 2009-04-15 12:54:10 +0400 |
commit | d54e48a2c1c738b64bc35c93a07733fde224d652 (patch) | |
tree | dfcb5e76623d1cdc75603634882e17ada12bde25 /mcs/class/System.XML/Test | |
parent | a7cbc14542ed93afff61083d901f480e02bbfb96 (diff) |
2009-04-15 Atsushi Enomoto <atsushi@ximian.com>
* Expression.cs : extensions could return null and it should be
regarded as empty node-set, not an error.
svn path=/trunk/mcs/; revision=131738
Diffstat (limited to 'mcs/class/System.XML/Test')
-rw-r--r-- | mcs/class/System.XML/Test/System.Xml.Xsl/XslTransformTests.cs | 53 |
1 files changed, 53 insertions, 0 deletions
diff --git a/mcs/class/System.XML/Test/System.Xml.Xsl/XslTransformTests.cs b/mcs/class/System.XML/Test/System.Xml.Xsl/XslTransformTests.cs index 2c77adfd90b..aac0d89be94 100644 --- a/mcs/class/System.XML/Test/System.Xml.Xsl/XslTransformTests.cs +++ b/mcs/class/System.XML/Test/System.Xml.Xsl/XslTransformTests.cs @@ -2325,6 +2325,59 @@ World"; xslt.Transform (new XmlTextReader (new StringReader (@"<foo>bar</foo>")), null, sw); Assert.AreEqual (" ", sw.ToString ()); } + + [Test] + public void Bug487065 () + { + using (XmlReader input = GetInput ()) { + using (XmlWriter output = XmlWriter.Create (Path.Combine(Path.GetTempPath(), "out.xml"))) { + PreProcess (input, output); + Assert.IsTrue (valueHasBeenSet, "#1"); + } + } + } + + private static XmlReader GetInput () + { + return XmlReader.Create (new StringReader ("<cb:config-template xmlns:cb=\"urn:ccnet.config.builder\"><cb:define name=\"var1\">value1</cb:define></cb:config-template>")); + } + + private void PreProcess (XmlReader input, XmlWriter output) + { + var xsltsettings = new XsltSettings (true, true); + var xsltpreprocess = new XslCompiledTransform (true); + + var stream = + new StringReader (@" +<xsl:stylesheet version='1.0' xmlns:xsl='http://www.w3.org/1999/XSL/Transform' + xmlns:msxsl='urn:schemas-microsoft-com:xslt' + xmlns:cb='urn:ccnet.config.builder' + xmlns:env='environment' + xmlns:exsl='http://exslt.org/common' + exclude-result-prefixes='msxsl cb env exsl'> + <xsl:template match='cb:define[not(*) and @name]'> + <xsl:for-each select='env:define_text_constant(@name,.)'/> + </xsl:template> +</xsl:stylesheet>"); + + using (XmlReader xsltreader = XmlReader.Create (stream)) + xsltpreprocess.Load (xsltreader, xsltsettings, new XmlUrlResolver()); + + var xsltargs = new XsltArgumentList (); + + // The XSLT calls extension functions in _current_env. + xsltargs.AddExtensionObject ("environment", this); + xsltpreprocess.Transform (input, xsltargs, output, null); + } + + public void define_text_constant (string name, string value) + { + Assert.AreEqual("var1", name, "#a1"); + Assert.AreEqual("value1", value, "#a2"); + valueHasBeenSet = true; + } + + private bool valueHasBeenSet; #endif } } |