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