4 using System.Xml.XPath;
7 namespace MonoTests.System.Xml.Xsl
10 public class XslCompiledTransformTests
13 public void GlobalVariableReferencesAnotherGlobalVariable ()
15 string xsl = @"<xsl:stylesheet version='1.0'
16 xmlns:xsl='http://www.w3.org/1999/XSL/Transform'>
17 <xsl:variable name='global2'><xsl:value-of select='root/@attr' /></xsl:variable>
18 <xsl:variable name='global1'>
19 <xsl:for-each select='//foo'>
20 <xsl:if test='@attr = $global2'>
21 <xsl:value-of select='name(.)' />: <xsl:value-of select='@attr' />
25 <xsl:template match='/'>
27 <xsl:value-of select='$global1' />
31 StringWriter sw = new StringWriter ();
32 XslCompiledTransform t = new XslCompiledTransform ();
33 t.Load (new XPathDocument (new StringReader (xsl)));
34 t.Transform (new XPathDocument (new XmlTextReader (new StringReader ("<root attr='B'><foo attr='A'/><foo attr='B'/><foo attr='C'/></root>"))), null, sw);
35 Assert.AreEqual ("<?xml version=\"1.0\" encoding=\"utf-16\"?><root>foo: B</root>", sw.ToString ());
39 [Category ("MobileNotWorking")]
40 public void MSXslNodeSetAcceptsNodeSet ()
42 string xsl = @"<xsl:stylesheet version='1.0'
43 xmlns:xsl='http://www.w3.org/1999/XSL/Transform' xmlns:msxsl='urn:schemas-microsoft-com:xslt'>
44 <xsl:template match='/'>
46 <!-- msxsl:node-set() accepts a node set -->
47 <xsl:for-each select='msxsl:node-set(root/foo)'>
48 <xsl:value-of select='name(.)' />: <xsl:value-of select='@attr' />
53 StringWriter sw = new StringWriter ();
54 XslCompiledTransform t = new XslCompiledTransform ();
55 t.Load (new XPathDocument (new StringReader (xsl)));
56 // should transform without an exception
57 t.Transform (new XPathDocument (new XmlTextReader (new StringReader ("<root><foo attr='A'/><foo attr='B'/><foo attr='C'/></root>"))), null, sw);
61 [Category ("MobileNotWorking")]
62 public void MSXslNodeSetAcceptsEmptyString ()
64 string xsl = @"<xsl:stylesheet version='1.0'
65 xmlns:xsl='http://www.w3.org/1999/XSL/Transform' xmlns:msxsl='urn:schemas-microsoft-com:xslt'>
66 <xsl:template match='/'>
68 <!-- msxsl:node-set() accepts an empty string -->
69 <xsl:variable name='empty'></xsl:variable>
70 <xsl:for-each select='msxsl:node-set($empty)'>
71 <xsl:value-of select='name(.)' />: <xsl:value-of select='@attr' />
76 StringWriter sw = new StringWriter ();
77 XslCompiledTransform t = new XslCompiledTransform ();
78 t.Load (new XPathDocument (new StringReader (xsl)));
79 // should transform without an exception
80 t.Transform (new XPathDocument (new XmlTextReader (new StringReader ("<root><foo attr='A'/><foo attr='B'/><foo attr='C'/></root>"))), null, sw);
84 public void ValueOfElementWithInsignificantWhitespace ()
86 string xsl = @"<?xml version='1.0' encoding='utf-8'?>
87 <xsl:stylesheet version='1.0' xmlns:xsl='http://www.w3.org/1999/XSL/Transform'>
88 <xsl:template match='/'>
91 <xsl:if test='root/@attr'>
92 <xsl:value-of select='root/@attr'>
97 <xsl:for-each select='root/foo'>
98 <xsl:if test='position() != 1'>
99 <xsl:text>,</xsl:text>
101 <xsl:value-of select='name(.)' />: <xsl:value-of select='@attr' />
107 StringWriter sw = new StringWriter ();
108 XslCompiledTransform t = new XslCompiledTransform ();
109 t.Load (new XmlTextReader(new StringReader(xsl)));
110 t.Transform (new XPathDocument (new XmlTextReader (new StringReader ("<root attr='D'><foo attr='A'/><foo attr='B'/><foo attr='C'/></root>"))), null, sw);
111 Assert.AreEqual ("<?xml version=\"1.0\" encoding=\"utf-16\"?><root><bar>D</bar><baz>foo: A,foo: B,foo: C</baz></root>", sw.ToString ());
115 public void ElementToAttribute ()
117 var xsl = @"<?xml version='1.0' encoding='utf-8'?>
118 <xsl:stylesheet version='1.0' xmlns:xsl='http://www.w3.org/1999/XSL/Transform'>
119 <xsl:output method='xml'/>
120 <xsl:template match='/'>
122 <xsl:attribute name='name'>
123 <xsl:call-template name='makeName'>
124 <xsl:with-param name='Name' select='Node/Name' />
130 <xsl:template name='makeName'>
131 <xsl:param name='Name' />
132 <xsl:value-of select='$Name' />
136 var t = new XslCompiledTransform ();
137 t.Load (new XmlTextReader (new StringReader (xsl)));
139 var source = "<?xml version='1.0' encoding='utf-8' ?><Node><Name>123</Name></Node>";
141 var expected = "<?xml version=\"1.0\" encoding=\"utf-16\"?><Node name=\"123\"></Node>";
143 var expected = "<?xml version=\"1.0\" encoding=\"utf-16\"?><Node name=\"123\" />";
145 StringWriter sw = new StringWriter ();
146 var xp = new XPathDocument (new XmlTextReader (new StringReader (source)));
147 t.Transform (xp, null, sw);
148 Assert.AreEqual (expected, sw.ToString ());
152 [Category ("MobileNotWorking")]
153 public void XslOutputSettings ()
155 XslCompiledTransform xslCompiledTransform = new XslCompiledTransform();
158 @"<?xml version=""1.0"" encoding=""UTF-8"" ?>
159 <xsl:stylesheet version=""1.0"" xmlns:xsl=""http://www.w3.org/1999/XSL/Transform"" xmlns:extensions=""urn:extensions"" exclude-result-prefixes=""extensions"">
160 <xsl:output method=""xml"" indent=""yes""/>
161 <xsl:template match="" / ""></xsl:template>
165 var xmlReader = XmlReader.Create(new StringReader(xsl));
166 xslCompiledTransform.Load(xmlReader);
168 // Returns true on .NET and False on mono 2.10.2
169 Assert.IsTrue (xslCompiledTransform.OutputSettings.Indent, "#1");