* XslTransformTests.cs: Added working XML/HTML indentation tests.
authorGert Driesen <drieseng@users.sourceforge.net>
Fri, 23 Dec 2005 20:42:46 +0000 (20:42 -0000)
committerGert Driesen <drieseng@users.sourceforge.net>
Fri, 23 Dec 2005 20:42:46 +0000 (20:42 -0000)
svn path=/trunk/mcs/; revision=54803

mcs/class/System.XML/Test/System.Xml.Xsl/ChangeLog
mcs/class/System.XML/Test/System.Xml.Xsl/XslTransformTests.cs

index 8b7a9f8d25f5ddc0fac9ac2fd04703211e79a601..a87e54670e36776dd2d3120cab645882ef79395d 100644 (file)
@@ -1,3 +1,7 @@
+2005-12-23  Gert Driesen  <drieseng@users.sourceforge.net>
+
+       * XslTransformTests.cs: Added working XML/HTML indentation tests.
+
 2005-12-23  Gert Driesen  <drieseng@users.sourceforge.net>
 
        * XslTransformTests.cs: Added bug numbers to test cases.
index 1e8f9dacf5882229861f5e9c727fb075990a606f..02d58c65d81fe5ab9d8b8512b26a895780692bdd 100644 (file)
@@ -886,7 +886,7 @@ xmlns:xsl='http://www.w3.org/1999/XSL/Transform' xmlns:msxsl='urn:schemas-micros
 
                [Test]
                [Category ("NotWorking")] // bug #77082: mono does not output newline after xml declaration
-               public void Output_Indent_Xml ()
+               public void Output_Indent_Xml_DocType ()
                {
                        XsltArgumentList xsltArgs = new XsltArgumentList ();
                        XslTransform xsltProcessor = new XslTransform ();
@@ -954,7 +954,7 @@ xmlns:xsl='http://www.w3.org/1999/XSL/Transform' xmlns:msxsl='urn:schemas-micros
 
                [Test]
                [Category ("NotWorking")] // bug #77081: mono does not output newline and indentation for non-html elements
-               public void Output_Indent_Html ()
+               public void Output_Indent_Html_DocType ()
                {
                        XsltArgumentList xsltArgs = new XsltArgumentList ();
                        XslTransform xsltProcessor = new XslTransform ();
@@ -1023,6 +1023,131 @@ xmlns:xsl='http://www.w3.org/1999/XSL/Transform' xmlns:msxsl='urn:schemas-micros
                                "</test>", Environment.NewLine), sw.ToString (), "#3");
                }
 
+               [Test]
+               public void Output_Indent_Xml ()
+               {
+                       XsltArgumentList xsltArgs = new XsltArgumentList ();
+                       XslTransform xsltProcessor = new XslTransform ();
+
+                       string xsltFragment = @"<?xml version=""1.0"" encoding=""UTF-8"" ?>
+                               <xsl:stylesheet xmlns:xsl=""http://www.w3.org/1999/XSL/Transform"" version=""1.0"">
+                                       <xsl:output
+                                               {0} />
+                                       <xsl:template match=""/"">
+                                               <xsl:element name=""test"">
+                                                       <xsl:element name=""something"">
+                                                               <xsl:element name=""else"" />
+                                                       </xsl:element>
+                                               </xsl:element>
+                                       </xsl:template>
+                               </xsl:stylesheet>";
+
+                       XmlDocument xmlDoc = new XmlDocument ();
+                       xmlDoc.LoadXml ("<dummy />");
+
+                       // set indent to yes
+                       StringWriter sw = new StringWriter ();
+                       xsltProcessor.Load (new XmlTextReader (new StringReader (
+                               string.Format (xsltFragment, "indent=\"yes\""))),
+                               new XmlUrlResolver (), AppDomain.CurrentDomain.Evidence);
+                       xsltProcessor.Transform (xmlDoc, xsltArgs, sw, new XmlUrlResolver ());
+
+                       Assert.AreEqual (string.Format (CultureInfo.InvariantCulture,
+                               "<?xml version=\"1.0\" encoding=\"utf-16\"?>{0}" +
+                               "<test>{0}" +
+                               "  <something>{0}" +
+                               "    <else />{0}" +
+                               "  </something>{0}" +
+                               "</test>", Environment.NewLine), sw.ToString (), "#1");
+
+                       // set indent to no
+                       sw.GetStringBuilder ().Length = 0;
+                       xsltProcessor.Load (new XmlTextReader (new StringReader (
+                               string.Format (xsltFragment, "indent=\"no\""))),
+                               new XmlUrlResolver (), AppDomain.CurrentDomain.Evidence);
+                       xsltProcessor.Transform (xmlDoc, xsltArgs, sw, new XmlUrlResolver ());
+
+                       Assert.AreEqual (
+                               "<?xml version=\"1.0\" encoding=\"utf-16\"?>" +
+                               "<test><something><else /></something></test>", sw.ToString (),
+                               "#2");
+
+                       // indent not set
+                       sw.GetStringBuilder ().Length = 0;
+                       xsltProcessor.Load (new XmlTextReader (new StringReader (
+                               string.Format (xsltFragment, ""))),
+                               new XmlUrlResolver (), AppDomain.CurrentDomain.Evidence);
+                       xsltProcessor.Transform (xmlDoc, xsltArgs, sw, new XmlUrlResolver ());
+
+                       Assert.AreEqual (
+                               "<?xml version=\"1.0\" encoding=\"utf-16\"?>" +
+                               "<test><something><else /></something></test>", sw.ToString (),
+                               "#3");
+               }
+
+               [Test]
+               public void Output_Indent_Html ()
+               {
+                       XsltArgumentList xsltArgs = new XsltArgumentList ();
+                       XslTransform xsltProcessor = new XslTransform ();
+
+                       string xsltFragment = @"<?xml version=""1.0"" encoding=""UTF-8"" ?>
+                               <xsl:stylesheet xmlns:xsl=""http://www.w3.org/1999/XSL/Transform"" version=""1.0"">
+                                       <xsl:output
+                                               method=""html""
+                                               {0} />
+                                       <xsl:template match=""/"">
+                                               <xsl:element name=""html"">
+                                                       <xsl:element name=""body"">
+                                                               <xsl:element name=""p"" />
+                                                       </xsl:element>
+                                               </xsl:element>
+                                       </xsl:template>
+                               </xsl:stylesheet>";
+
+                       XmlDocument xmlDoc = new XmlDocument ();
+                       xmlDoc.LoadXml ("<dummy />");
+
+                       // set indent to yes
+                       StringWriter sw = new StringWriter ();
+                       xsltProcessor.Load (new XmlTextReader (new StringReader (
+                               string.Format (xsltFragment, "indent=\"yes\""))),
+                               new XmlUrlResolver (), AppDomain.CurrentDomain.Evidence);
+                       xsltProcessor.Transform (xmlDoc, xsltArgs, sw, new XmlUrlResolver ());
+
+                       Assert.AreEqual (string.Format (CultureInfo.InvariantCulture,
+                               "<html>{0}" +
+                               "  <body>{0}" +
+                               "    <p></p>{0}" +
+                               "  </body>{0}" +
+                               "</html>", Environment.NewLine), sw.ToString (), "#1");
+
+                       // set indent to no
+                       sw.GetStringBuilder ().Length = 0;
+                       xsltProcessor.Load (new XmlTextReader (new StringReader (
+                               string.Format (xsltFragment, "indent=\"no\""))),
+                               new XmlUrlResolver (), AppDomain.CurrentDomain.Evidence);
+                       xsltProcessor.Transform (xmlDoc, xsltArgs, sw, new XmlUrlResolver ());
+
+                       Assert.AreEqual (string.Format (CultureInfo.InvariantCulture,
+                               "<html><body><p></p></body></html>",
+                               Environment.NewLine), sw.ToString (), "#2");
+
+                       // indent not set
+                       sw.GetStringBuilder ().Length = 0;
+                       xsltProcessor.Load (new XmlTextReader (new StringReader (
+                               string.Format (xsltFragment, ""))),
+                               new XmlUrlResolver (), AppDomain.CurrentDomain.Evidence);
+                       xsltProcessor.Transform (xmlDoc, xsltArgs, sw, new XmlUrlResolver ());
+
+                       Assert.AreEqual (string.Format (CultureInfo.InvariantCulture,
+                               "<html>{0}" +
+                               "  <body>{0}" +
+                               "    <p></p>{0}" +
+                               "  </body>{0}" +
+                               "</html>", Environment.NewLine), sw.ToString (), "#3");
+               }
+
                [Test]
                [ExpectedException (typeof (XsltCompileException))]
                public void Output_Indent_Invalid ()