**** Merged from MCS ****
[mono-project.git] / mcs / class / System.XML / Test / System.Xml / XmlWriterTests.cs
blobf3d81cb817806732b25d9f7f6c52deb2a0cccbad
1 //
2 // System.Xml.XmlTextWriterTests
3 //
4 // Authors:
5 // Atsushi Enomoto <ginga@kit.hi-ho.ne.jp>
6 // Martin Willemoes Hansen <mwh@sysrq.dk>
7 //
8 // (C) 2003 Atsushi Enomoto
9 // (C) 2003 Martin Willemoes Hansen
12 // This class mainly checks inheritance and behaviors of XmlWriter.
15 using System;
16 using System.IO;
17 using System.Text;
18 using System.Xml;
20 using NUnit.Framework;
22 namespace MonoTests.System.Xml
24 [TestFixture]
25 public class XmlWriterTests : Assertion
27 StringWriter writer;
28 XmlTextWriter xtw;
30 [SetUp]
31 public void SetUp ()
33 writer = new StringWriter ();
34 xtw = new XmlTextWriter (writer);
37 private void setupWriter ()
39 writer.GetStringBuilder ().Length = 0;
42 [Test]
43 public void WriteNodeFullDocument ()
45 setupWriter ();
46 string xml = "<?xml version='1.0'?><root />";
47 XmlTextReader xtr = new XmlTextReader (xml, XmlNodeType.Document, null);
48 xtw.WriteNode (xtr, false);
49 AssertEquals (xml, writer.ToString ());
51 // With encoding
52 setupWriter ();
53 xml = "<?xml version='1.0' encoding='iso-2022-jp'?><root />";
54 xtr = new XmlTextReader (xml, XmlNodeType.Document, null);
55 xtw.WriteNode (xtr, false);
56 AssertEquals (xml, writer.ToString ());
57 xtr.Close ();
60 [Test]
61 public void WriteNodeXmlDecl ()
63 setupWriter ();
64 string xml = "<?xml version='1.0'?><root />";
65 StringReader sr = new StringReader (xml);
66 XmlTextReader xtr = new XmlTextReader (sr);
67 xtr.Read ();
68 xtw.WriteNode (xtr, false);
69 AssertEquals ("<?xml version='1.0'?>",
70 writer.ToString ());
71 xtr.Close ();
74 [Test]
75 public void WriteNodeEmptyElement ()
77 setupWriter ();
78 string xml = "<root attr='value' attr2='value' />";
79 StringReader sr = new StringReader (xml);
80 XmlTextReader xtr = new XmlTextReader (sr);
81 xtw.WriteNode (xtr, false);
82 AssertEquals (xml.Replace ("'", "\""),
83 writer.ToString ());
84 xtr.Close ();
87 [Test]
88 public void WriteNodeNonEmptyElement ()
90 setupWriter ();
91 string xml = @"<foo><bar></bar></foo>";
92 xtw.WriteNode (new XmlTextReader (xml, XmlNodeType.Document, null), false);
93 AssertEquals (xml, writer.ToString ());
96 [Test]
97 public void WriteNodeSingleContentElement ()
99 setupWriter ();
100 string xml = "<root attr='value' attr2='value'><foo /></root>";
101 StringReader sr = new StringReader (xml);
102 XmlTextReader xtr = new XmlTextReader (sr);
103 xtw.WriteNode (xtr, false);
104 AssertEquals (xml.Replace ("'", "\""),
105 writer.ToString ());
106 xtr.Close ();
109 [Test]
110 public void WriteNodeNone ()
112 setupWriter ();
113 XmlTextReader xtr = new XmlTextReader ("", XmlNodeType.Element, null);
114 xtr.Read ();
115 xtw.WriteNode (xtr, false); // does not report any errors
116 xtr.Close ();
119 [Test]
120 [ExpectedException (typeof (XmlException))]
121 public void WriteNodeError ()
123 XmlTextReader xtr = new XmlTextReader ("<root>", XmlNodeType.Document, null);
124 xtr.Read ();
125 try {
126 xtr.Read ();
127 } catch (XmlException ex) {
129 XmlTextWriter xtw = new XmlTextWriter (new StringWriter ());
130 xtw.WriteNode (xtr, false);
133 [Test]
134 public void WriteSurrogateCharEntity ()
136 setupWriter ();
137 xtw.WriteSurrogateCharEntity ('\udfff', '\udb00');
138 AssertEquals ("&#xD03FF;", writer.ToString ());
140 try {
141 xtw.WriteSurrogateCharEntity ('\ud800', '\udc00');
142 Fail ();
143 } catch {
145 try {
146 xtw.WriteSurrogateCharEntity ('\udbff', '\ud800');
147 Fail ();
148 } catch {
150 try {
151 xtw.WriteSurrogateCharEntity ('\ue000', '\ud800');
152 Fail ();
153 } catch {
155 try {
156 xtw.WriteSurrogateCharEntity ('\udfff', '\udc00');
157 Fail ();
158 } catch {
162 // MS.NET's not-overriden XmlWriter.WriteStartElement(name)
163 // invokes WriteStartElement(null, name, null).
164 // WriteStartElement(name, ns) invokes (null, name, ns), too.
165 [Test]
166 public void StartElement ()
168 StartElementTestWriter xw = new StartElementTestWriter ();
169 xw.WriteStartDocument ();
170 xw.WriteStartElement ("test");
171 AssertEquals ("StartElementOverride.NS", null, xw.NS);
172 AssertEquals ("StartElementOverride.Prefix", null, xw.Prefix);
173 xw.NS = String.Empty;
174 xw.Prefix = String.Empty;
175 xw.WriteStartElement ("test", "urn:hoge");
176 AssertEquals ("StartElementOverride.NS", "urn:hoge", xw.NS);
177 AssertEquals ("StartElementOverride.Prefix", null, xw.Prefix);
180 class StartElementTestWriter : DefaultXmlWriter
182 public StartElementTestWriter () : base () {}
183 public string NS = String.Empty;
184 public string Prefix = String.Empty;
186 public override void WriteStartElement (string prefix, string localName, string ns)
188 this.NS = ns;
189 this.Prefix = prefix;
194 internal class DefaultXmlWriter : XmlWriter
196 public DefaultXmlWriter () : base ()
200 public override void Close ()
204 public override void Flush ()
208 public override string LookupPrefix (string ns)
210 return null;
213 public override void WriteBase64 (byte [] buffer, int index, int count)
217 public override void WriteBinHex (byte [] buffer, int index, int count)
221 public override void WriteCData (string text)
225 public override void WriteCharEntity (char ch)
229 public override void WriteChars (char [] buffer, int index, int count)
233 public override void WriteComment (string text)
237 public override void WriteDocType (string name, string pubid, string sysid, string subset)
241 public override void WriteEndAttribute ()
245 public override void WriteEndDocument ()
249 public override void WriteEndElement ()
253 public override void WriteEntityRef (string name)
257 public override void WriteFullEndElement ()
261 public override void WriteName (string name)
265 public override void WriteNmToken (string name)
269 public override void WriteNode (XmlReader reader, bool defattr)
273 public override void WriteProcessingInstruction (string name, string text)
277 public override void WriteQualifiedName (string localName, string ns)
281 public override void WriteRaw (string data)
285 public override void WriteRaw (char [] buffer, int index, int count)
289 public override void WriteStartAttribute (string prefix, string localName, string ns)
293 public override void WriteStartDocument (bool standalone)
297 public override void WriteStartDocument ()
301 public override void WriteStartElement (string prefix, string localName, string ns)
305 public override void WriteString (string text)
309 public override void WriteSurrogateCharEntity (char lowChar, char highChar)
313 public override void WriteWhitespace (string ws)
317 public override WriteState WriteState {
318 get {
319 return WriteState.Start;
323 public override string XmlLang {
324 get {
325 return null;
329 public override XmlSpace XmlSpace {
330 get {
331 return XmlSpace.None;