2 // System.Xml.XmlWriterSettingsTests.cs
5 // Atsushi Enomoto <atsushi@ximian.com>
15 using System.Xml.Schema;
16 using NUnit.Framework;
18 namespace MonoTests.System.Xml
21 public class XmlWriterSettingsTests : Assertion
24 public void DefaultValue ()
26 XmlWriterSettings s = new XmlWriterSettings ();
32 private void DefaultValue (XmlWriterSettings s)
34 AssertEquals (true, s.CheckCharacters);
35 AssertEquals (false, s.CloseOutput);
36 AssertEquals (ConformanceLevel.Document, s.ConformanceLevel);
37 AssertEquals (Encoding.UTF8, s.Encoding);
38 AssertEquals (false, s.Indent);
39 AssertEquals (" ", s.IndentChars);
40 AssertEquals (Environment.NewLine, s.NewLineChars);
41 AssertEquals (false, s.NewLineOnAttributes);
42 AssertEquals (false, s.OmitXmlDeclaration);
46 public void EncodingTest ()
48 // For Stream it makes sense
49 XmlWriterSettings s = new XmlWriterSettings ();
50 s.Encoding = Encoding.GetEncoding ("shift_jis");
51 MemoryStream ms = new MemoryStream ();
52 XmlWriter w = XmlWriter.Create (ms, s);
53 w.WriteStartElement ("root");
56 byte [] data = ms.ToArray ();
57 Assert (data.Length != 0);
58 string str = s.Encoding.GetString (data);
59 AssertEquals ("<?xml version=\"1.0\" encoding=\"shift_jis\"?><root />", str);
61 // For TextWriter it does not make sense
62 StringWriter sw = new StringWriter ();
63 w = XmlWriter.Create (sw, s);
64 w.WriteStartElement ("root");
67 AssertEquals ("<?xml version=\"1.0\" encoding=\"utf-16\"?><root />", sw.ToString ());
71 [ExpectedException (typeof (ArgumentException))]
72 public void CheckCharactersTest ()
74 XmlWriterSettings s = new XmlWriterSettings ();
75 StringWriter sw = new StringWriter ();
76 XmlWriter w = XmlWriter.Create (sw, s);
77 w.WriteStartElement ("root");
78 w.WriteString ("\0"); // invalid
84 public void CheckCharactersFalseTest ()
86 XmlWriterSettings s = new XmlWriterSettings ();
87 s.CheckCharacters = false;
88 StringWriter sw = new StringWriter ();
89 XmlWriter w = XmlWriter.Create (sw, s);
90 w.WriteStartElement ("root");
91 w.WriteString ("\0"); // invalid
96 [ExpectedException (typeof (ObjectDisposedException))]
97 public void CloseOutputTest ()
99 XmlWriterSettings s = new XmlWriterSettings ();
100 s.CloseOutput = true;
101 StringWriter sw = new StringWriter ();
102 XmlWriter w = XmlWriter.Create (sw, s);
103 w.WriteStartElement ("root");
104 w.WriteEndElement ();
106 sw.Write ("more"); // not allowed
110 [ExpectedException (typeof (InvalidOperationException))]
111 public void ConformanceLevelFragmentAndWriteStartDocument ()
113 XmlWriterSettings s = new XmlWriterSettings ();
114 s.ConformanceLevel = ConformanceLevel.Fragment;
115 s.OmitXmlDeclaration = true;
116 XmlWriter w = XmlWriter.Create (Console.Out, s);
117 w.WriteStartDocument ();
121 public void ConformanceLevelAuto ()
123 XmlWriterSettings s = new XmlWriterSettings ();
124 s.ConformanceLevel = ConformanceLevel.Auto;
125 StringWriter sw = new StringWriter ();
126 XmlWriter w = XmlWriter.Create (sw, s);
127 w.WriteElementString ("foo", "");
129 AssertEquals ("<foo />", sw.ToString ());
133 public void ConformanceLevelAuto_WriteStartDocument ()
135 XmlWriterSettings s = new XmlWriterSettings ();
136 s.ConformanceLevel = ConformanceLevel.Auto;
137 StringWriter sw = new StringWriter ();
138 XmlWriter w = XmlWriter.Create (sw, s);
139 w.WriteStartDocument ();
140 w.WriteElementString ("foo", "");
142 AssertEquals ("<?xml version=\"1.0\" encoding=\"utf-16\"?><foo />", sw.ToString ());
146 public void ConformanceLevelAuto_OmitXmlDecl_WriteStartDocument ()
148 XmlWriterSettings s = new XmlWriterSettings ();
149 s.ConformanceLevel = ConformanceLevel.Auto;
150 s.OmitXmlDeclaration = true;
151 StringWriter sw = new StringWriter ();
152 XmlWriter w = XmlWriter.Create (sw, s);
153 w.WriteStartDocument ();
154 w.WriteElementString ("foo", "");
156 AssertEquals ("<foo />", sw.ToString ());
160 public void ConformanceLevelDocument_OmitXmlDeclDeclaration ()
162 XmlWriterSettings s = new XmlWriterSettings ();
163 s.ConformanceLevel = ConformanceLevel.Document;
165 // On MSDN, XmlWriterSettings.OmitXmlDeclaration is documented as:
166 // "The XML declaration is always written if
167 // ConformanceLevel is set to Document, even
168 // if OmitXmlDeclaration is set to true. "
169 // but it is incorrect. It does consider
170 // OmitXmlDeclaration property.
171 s.OmitXmlDeclaration = true;
172 StringWriter sw = new StringWriter ();
173 XmlWriter w = XmlWriter.Create (sw, s);
174 w.WriteElementString ("foo", "");
176 AssertEquals ("<foo />", sw.ToString ());
180 public void IndentationAndFormatting ()
182 // Test for Indent, IndentChars, NewLineOnAttributes,
183 // NewLineChars and OmitXmlDeclaration.
184 string output = "<root\n attr=\"value\"\n attr2=\"value\">\n <child>test</child>\n</root>";
185 XmlWriterSettings s = new XmlWriterSettings ();
186 s.OmitXmlDeclaration = true;
189 s.NewLineChars = "\n";
190 s.NewLineOnAttributes = true;
191 StringWriter sw = new StringWriter ();
192 XmlWriter w = XmlWriter.Create (sw, s);
193 w.WriteStartElement ("root");
194 w.WriteAttributeString ("attr", "value");
195 w.WriteAttributeString ("attr2", "value");
196 w.WriteStartElement ("child");
197 w.WriteString ("test");
198 w.WriteEndElement ();
199 w.WriteEndElement ();
201 AssertEquals (output, sw.ToString ());
205 public void SetEncodingNull ()
208 new XmlWriterSettings ().Encoding = null;
212 [ExpectedException (typeof (ArgumentNullException))]
213 public void NewLineCharsNull ()
215 new XmlWriterSettings ().NewLineChars = null;
219 public void CreateOmitXmlDeclaration ()
221 StringBuilder sb = new StringBuilder ();
222 // Even if XmlWriter is allowed to write fragment,
223 // DataContractSerializer never allows it to write
224 // content in contentOnly mode.
225 XmlWriterSettings settings = new XmlWriterSettings ();
226 settings.OmitXmlDeclaration = true;
227 //settings.ConformanceLevel = ConformanceLevel.Fragment;
228 XmlWriter w = XmlWriter.Create (sb, settings);
229 w.WriteStartElement ("root");
230 w.WriteEndElement ();
232 AssertEquals ("<root />", sb.ToString ());
236 public void NewLineOnAttributesMixedContent ()
238 StringWriter sw = new StringWriter ();
239 XmlWriterSettings s = new XmlWriterSettings ();
240 s.NewLineOnAttributes = true;
241 s.OmitXmlDeclaration = true;
242 XmlWriter w = XmlWriter.Create (sw, s);
243 w.WriteStartElement ("root");
244 w.WriteAttributeString ("a", "v");
245 w.WriteAttributeString ("b", "x");
246 w.WriteString ("some string");
247 w.WriteEndElement ();
249 AssertEquals ("#1", "<root a=\"v\" b=\"x\">some string</root>", sw.ToString ());
251 // mixed content: bug #81770
252 string expected = "<root>some string<mixed\n a=\"v\"\n b=\"x\">some string</mixed></root>";
254 sw = new StringWriter ();
255 w = XmlWriter.Create (sw, s);
256 w.WriteStartElement ("root");
257 w.WriteString ("some string");
258 w.WriteStartElement ("mixed");
259 w.WriteAttributeString ("a", "v");
260 w.WriteAttributeString ("b", "x");
261 w.WriteString ("some string");
262 w.WriteEndElement ();
263 w.WriteEndElement ();
265 AssertEquals ("#2", expected, sw.ToString ().Replace ("\r\n", "\n"));
269 public void OmitXmlDeclarationAndNewLine ()
271 XmlDocument doc = new XmlDocument ();
272 doc.LoadXml ("<root/>");
273 XmlWriterSettings settings = new XmlWriterSettings ();
274 settings.OmitXmlDeclaration = true;
275 settings.NewLineChars = "\r\n";
276 settings.NewLineHandling = NewLineHandling.Replace;
277 settings.Encoding = Encoding.UTF8;
278 settings.Indent = true;
280 StringWriter sw = new StringWriter ();
281 using (XmlWriter xw = XmlWriter.Create (sw, settings)) {
284 // no heading newline.
285 AssertEquals ("<root />", sw.ToString ());