Author: atsushi
Date: 2006-01-13 00:03:39 -0500 (Fri, 13 Jan 2006)
New Revision: 55487

Modified:
   trunk/mcs/class/System.XML/System.Xml/ChangeLog
   trunk/mcs/class/System.XML/System.Xml/XmlTextWriter.cs
   trunk/mcs/class/System.XML/Test/System.Xml.Xsl/ChangeLog
   trunk/mcs/class/System.XML/Test/System.Xml.Xsl/XslTransformTests.cs
   trunk/mcs/class/System.XML/Test/System.Xml/ChangeLog
   trunk/mcs/class/System.XML/Test/System.Xml/XmlTextWriterTests.cs
Log:
2006-01-13  Atsushi Enomoto <[EMAIL PROTECTED]>

        * XmlTextWriter.cs : Fixed bug #77082.
          When the state was Start, after WriteProcessingInstruction() and
          WriteWhitespace() change it to Prolog.
          After WriteDocType() set state to WriteState.Element.

        * XmlTextWriterTests.cs : added some tests for XMLdecl state check.

        * XslTransformTests.cs : Output_Indent_Xml_DocType() is working now.



Modified: trunk/mcs/class/System.XML/System.Xml/ChangeLog
===================================================================
--- trunk/mcs/class/System.XML/System.Xml/ChangeLog     2006-01-13 04:53:45 UTC 
(rev 55486)
+++ trunk/mcs/class/System.XML/System.Xml/ChangeLog     2006-01-13 05:03:39 UTC 
(rev 55487)
@@ -1,3 +1,10 @@
+2006-01-13  Atsushi Enomoto <[EMAIL PROTECTED]>
+
+       * XmlTextWriter.cs : Fixed bug #77082.
+         When the state was Start, after WriteProcessingInstruction() and
+         WriteWhitespace() change it to Prolog.
+         After WriteDocType() set state to WriteState.Element.
+
 2006-01-12  Atsushi Enomoto <[EMAIL PROTECTED]>
 
        * XmlTextWriter.cs : Do not local duplicate of automatically-created

Modified: trunk/mcs/class/System.XML/System.Xml/XmlTextWriter.cs
===================================================================
--- trunk/mcs/class/System.XML/System.Xml/XmlTextWriter.cs      2006-01-13 
04:53:45 UTC (rev 55486)
+++ trunk/mcs/class/System.XML/System.Xml/XmlTextWriter.cs      2006-01-13 
05:03:39 UTC (rev 55487)
@@ -518,7 +518,11 @@
                        if (name == null || name.Trim 
(XmlChar.WhitespaceChars).Length == 0)
                                throw ArgumentError ("Invalid DOCTYPE name", 
"name");
 
-                       if (ws == WriteState.Prolog && formatting == 
Formatting.Indented)
+                       CheckState ();
+                       if (ws != WriteState.Start && ws != WriteState.Prolog)
+                               throw new InvalidOperationException 
(String.Format ("Doctype is not allowed at '{0}' state.", ws));
+
+                       if (documentStarted && formatting == 
Formatting.Indented)
                                w.WriteLine ();
 
                        w.Write ("<!DOCTYPE ");
@@ -546,6 +550,8 @@
                        }
                        
                        w.Write('>');
+
+                       ws = WriteState.Element;
                }
 
                public override void WriteEndAttribute ()
@@ -701,7 +707,7 @@
                        if ((text.IndexOf("?>") > 0))
                                throw ArgumentError ("Processing instruction 
cannot contain \"?>\" as its value.");
 
-                       CheckState ();
+                       CheckOutputState ();
                        CloseStartElement ();
 
                        WriteIndent ();
@@ -710,6 +716,9 @@
                        w.Write (' ');
                        w.Write (text);
                        w.Write ("?>");
+
+                       if (ws == WriteState.Start)
+                               ws = WriteState.Prolog;
                }
 
                public override void WriteQualifiedName (string localName, 
string ns)
@@ -1150,13 +1159,13 @@
                        w.Write (';');
                }
 
-               public override void WriteWhitespace (string ws)
+               public override void WriteWhitespace (string value)
                {
-                       if (ws == null || ws.Length == 0) {
+                       if (value == null || value.Length == 0) {
                                throw ArgumentError ("Only white space 
characters should be used.");
                        }
 
-                       if (!XmlChar.IsWhitespace (ws))
+                       if (!XmlChar.IsWhitespace (value))
                                throw ArgumentError ("Invalid Whitespace");
 
                        CheckState ();
@@ -1166,7 +1175,10 @@
                                CloseStartElement ();
                        }
 
-                       w.Write (ws);
+                       w.Write (value);
+
+                       if (ws == WriteState.Start)
+                               ws = WriteState.Prolog;
                }
 
                private Exception ArgumentError (string message)

Modified: trunk/mcs/class/System.XML/Test/System.Xml/ChangeLog
===================================================================
--- trunk/mcs/class/System.XML/Test/System.Xml/ChangeLog        2006-01-13 
04:53:45 UTC (rev 55486)
+++ trunk/mcs/class/System.XML/Test/System.Xml/ChangeLog        2006-01-13 
05:03:39 UTC (rev 55487)
@@ -1,3 +1,7 @@
+2006-01-13  Atsushi Enomoto  <[EMAIL PROTECTED]>
+
+       * XmlTextWriterTests.cs : added some tests for XMLdecl state check.
+
 2006-01-12  Atsushi Enomoto  <[EMAIL PROTECTED]>
 
        * XmlTextWriterTests.cs : Split AutoCreatePrefixes() and marked as

Modified: trunk/mcs/class/System.XML/Test/System.Xml/XmlTextWriterTests.cs
===================================================================
--- trunk/mcs/class/System.XML/Test/System.Xml/XmlTextWriterTests.cs    
2006-01-13 04:53:45 UTC (rev 55486)
+++ trunk/mcs/class/System.XML/Test/System.Xml/XmlTextWriterTests.cs    
2006-01-13 05:03:39 UTC (rev 55487)
@@ -2096,6 +2096,51 @@
                        NUnit.Framework.Assert.AreEqual (referent, ms.ToArray 
());
                }
 
+               [Test] // see also bug #77082
+               public void WriteDocTypeIndent ()
+               {
+                       string expected = String.Format (@"<?xml 
version='1.0'?>{0}<!DOCTYPE root PUBLIC '' 'urn:foo'[]>{0}<root />", 
Environment.NewLine);
+                       xtw.Formatting = Formatting.Indented;
+                       xtw.WriteProcessingInstruction ("xml", "version='1.0'");
+                       xtw.WriteDocType ("root", "", "urn:foo", "");
+                       xtw.WriteStartElement ("root");
+                       xtw.WriteEndElement ();
+                       xtw.Close ();
+                       Assert.AreEqual (expected, StringWriterText);
+               }
+
+               [Test]
+               [ExpectedException (typeof (InvalidOperationException))]
+               public void WriteDocTypeTwice ()
+               {
+                       xtw.WriteDocType ("root", "", "urn:foo", "");
+                       xtw.WriteDocType ("root", "", "urn:foo", "");
+               }
+
+               [Test]
+               [ExpectedException (typeof (InvalidOperationException))]
+               public void XmlDeclAfterDocType ()
+               {
+                       xtw.WriteDocType ("root", "", "urn:foo", "");
+                       xtw.WriteStartDocument ();
+               }
+
+               [Test]
+               [ExpectedException (typeof (InvalidOperationException))]
+               public void XmlDeclAfterWhitespace ()
+               {
+                       xtw.WriteWhitespace ("   ");
+                       xtw.WriteStartDocument ();
+               }
+
+               [Test]
+               [ExpectedException (typeof (InvalidOperationException))]
+               public void XmlDeclAfterPI ()
+               {
+                       xtw.WriteProcessingInstruction ("pi", "");
+                       xtw.WriteStartDocument ();
+               }
+
 #if NET_2_0
                [Test]
                [ExpectedException (typeof (InvalidOperationException))]

Modified: trunk/mcs/class/System.XML/Test/System.Xml.Xsl/ChangeLog
===================================================================
--- trunk/mcs/class/System.XML/Test/System.Xml.Xsl/ChangeLog    2006-01-13 
04:53:45 UTC (rev 55486)
+++ trunk/mcs/class/System.XML/Test/System.Xml.Xsl/ChangeLog    2006-01-13 
05:03:39 UTC (rev 55487)
@@ -1,3 +1,7 @@
+2006-01-13  Atsushi Enomoto  <[EMAIL PROTECTED]>
+
+       * XslTransformTests.cs : Output_Indent_Xml_DocType() is working now.
+
 2005-12-27  Gert Driesen  <[EMAIL PROTECTED]>
 
        * XslTransformTests.cs: Extended html indentation test (and marked

Modified: trunk/mcs/class/System.XML/Test/System.Xml.Xsl/XslTransformTests.cs
===================================================================
--- trunk/mcs/class/System.XML/Test/System.Xml.Xsl/XslTransformTests.cs 
2006-01-13 04:53:45 UTC (rev 55486)
+++ trunk/mcs/class/System.XML/Test/System.Xml.Xsl/XslTransformTests.cs 
2006-01-13 05:03:39 UTC (rev 55487)
@@ -963,7 +963,6 @@
                }
 
                [Test]
-               [Category ("NotWorking")] // bug #77082: mono does not output 
newline after xml declaration
                public void Output_Indent_Xml_DocType ()
                {
                        XsltArgumentList xsltArgs = new XsltArgumentList ();

_______________________________________________
Mono-patches maillist  -  [email protected]
http://lists.ximian.com/mailman/listinfo/mono-patches

Reply via email to