XmlWriterSettingsTests.cs 8.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289
  1. //
  2. // System.Xml.XmlWriterSettingsTests.cs
  3. //
  4. // Authors:
  5. // Atsushi Enomoto <[email protected]>
  6. //
  7. // (C)2004 Novell Inc.
  8. //
  9. #if NET_2_0
  10. using System;
  11. using System.IO;
  12. using System.Text;
  13. using System.Xml;
  14. using System.Xml.Schema;
  15. using NUnit.Framework;
  16. namespace MonoTests.System.Xml
  17. {
  18. [TestFixture]
  19. public class XmlWriterSettingsTests
  20. {
  21. [Test]
  22. public void DefaultValue ()
  23. {
  24. XmlWriterSettings s = new XmlWriterSettings ();
  25. DefaultValue (s);
  26. s.Reset ();
  27. DefaultValue (s);
  28. }
  29. private void DefaultValue (XmlWriterSettings s)
  30. {
  31. Assert.AreEqual (true, s.CheckCharacters);
  32. Assert.AreEqual (false, s.CloseOutput);
  33. Assert.AreEqual (ConformanceLevel.Document, s.ConformanceLevel);
  34. Assert.AreEqual (Encoding.UTF8, s.Encoding);
  35. Assert.AreEqual (false, s.Indent);
  36. Assert.AreEqual (" ", s.IndentChars);
  37. Assert.AreEqual (Environment.NewLine, s.NewLineChars);
  38. Assert.AreEqual (false, s.NewLineOnAttributes);
  39. Assert.AreEqual (false, s.OmitXmlDeclaration);
  40. }
  41. [Test]
  42. public void EncodingTest ()
  43. {
  44. // For Stream it makes sense
  45. XmlWriterSettings s = new XmlWriterSettings ();
  46. s.Encoding = Encoding.GetEncoding ("shift_jis");
  47. MemoryStream ms = new MemoryStream ();
  48. XmlWriter w = XmlWriter.Create (ms, s);
  49. w.WriteStartElement ("root");
  50. w.WriteEndElement ();
  51. w.Close ();
  52. byte [] data = ms.ToArray ();
  53. Assert.IsTrue (data.Length != 0);
  54. string str = s.Encoding.GetString (data);
  55. Assert.AreEqual ("<?xml version=\"1.0\" encoding=\"shift_jis\"?><root />", str);
  56. // For TextWriter it does not make sense
  57. StringWriter sw = new StringWriter ();
  58. w = XmlWriter.Create (sw, s);
  59. w.WriteStartElement ("root");
  60. w.WriteEndElement ();
  61. w.Close ();
  62. Assert.AreEqual ("<?xml version=\"1.0\" encoding=\"utf-16\"?><root />", sw.ToString ());
  63. }
  64. [Test]
  65. [ExpectedException (typeof (ArgumentException))]
  66. public void CheckCharactersTest ()
  67. {
  68. XmlWriterSettings s = new XmlWriterSettings ();
  69. StringWriter sw = new StringWriter ();
  70. XmlWriter w = XmlWriter.Create (sw, s);
  71. w.WriteStartElement ("root");
  72. w.WriteString ("\0"); // invalid
  73. w.WriteEndElement ();
  74. w.Close ();
  75. }
  76. [Test]
  77. public void CheckCharactersFalseTest ()
  78. {
  79. XmlWriterSettings s = new XmlWriterSettings ();
  80. s.CheckCharacters = false;
  81. StringWriter sw = new StringWriter ();
  82. XmlWriter w = XmlWriter.Create (sw, s);
  83. w.WriteStartElement ("root");
  84. w.WriteString ("\0"); // invalid
  85. w.WriteEndElement ();
  86. }
  87. [Test]
  88. [ExpectedException (typeof (ObjectDisposedException))]
  89. public void CloseOutputTest ()
  90. {
  91. XmlWriterSettings s = new XmlWriterSettings ();
  92. s.CloseOutput = true;
  93. StringWriter sw = new StringWriter ();
  94. XmlWriter w = XmlWriter.Create (sw, s);
  95. w.WriteStartElement ("root");
  96. w.WriteEndElement ();
  97. w.Close ();
  98. sw.Write ("more"); // not allowed
  99. }
  100. [Test]
  101. [ExpectedException (typeof (InvalidOperationException))]
  102. public void ConformanceLevelFragmentAndWriteStartDocument ()
  103. {
  104. XmlWriterSettings s = new XmlWriterSettings ();
  105. s.ConformanceLevel = ConformanceLevel.Fragment;
  106. s.OmitXmlDeclaration = true;
  107. XmlWriter w = XmlWriter.Create (Console.Out, s);
  108. w.WriteStartDocument ();
  109. }
  110. [Test]
  111. public void ConformanceLevelAuto ()
  112. {
  113. XmlWriterSettings s = new XmlWriterSettings ();
  114. s.ConformanceLevel = ConformanceLevel.Auto;
  115. StringWriter sw = new StringWriter ();
  116. XmlWriter w = XmlWriter.Create (sw, s);
  117. w.WriteElementString ("foo", "");
  118. w.Close ();
  119. Assert.AreEqual ("<foo />", sw.ToString ());
  120. }
  121. [Test]
  122. public void ConformanceLevelAuto_WriteStartDocument ()
  123. {
  124. XmlWriterSettings s = new XmlWriterSettings ();
  125. s.ConformanceLevel = ConformanceLevel.Auto;
  126. StringWriter sw = new StringWriter ();
  127. XmlWriter w = XmlWriter.Create (sw, s);
  128. w.WriteStartDocument ();
  129. w.WriteElementString ("foo", "");
  130. w.Close ();
  131. Assert.AreEqual ("<?xml version=\"1.0\" encoding=\"utf-16\"?><foo />", sw.ToString ());
  132. }
  133. [Test]
  134. public void ConformanceLevelAuto_OmitXmlDecl_WriteStartDocument ()
  135. {
  136. XmlWriterSettings s = new XmlWriterSettings ();
  137. s.ConformanceLevel = ConformanceLevel.Auto;
  138. s.OmitXmlDeclaration = true;
  139. StringWriter sw = new StringWriter ();
  140. XmlWriter w = XmlWriter.Create (sw, s);
  141. w.WriteStartDocument ();
  142. w.WriteElementString ("foo", "");
  143. w.Close ();
  144. Assert.AreEqual ("<foo />", sw.ToString ());
  145. }
  146. [Test]
  147. public void ConformanceLevelDocument_OmitXmlDeclDeclaration ()
  148. {
  149. XmlWriterSettings s = new XmlWriterSettings ();
  150. s.ConformanceLevel = ConformanceLevel.Document;
  151. // LAMESPEC:
  152. // On MSDN, XmlWriterSettings.OmitXmlDeclaration is documented as:
  153. // "The XML declaration is always written if
  154. // ConformanceLevel is set to Document, even
  155. // if OmitXmlDeclaration is set to true. "
  156. // but it is incorrect. It does consider
  157. // OmitXmlDeclaration property.
  158. s.OmitXmlDeclaration = true;
  159. StringWriter sw = new StringWriter ();
  160. XmlWriter w = XmlWriter.Create (sw, s);
  161. w.WriteElementString ("foo", "");
  162. w.Close ();
  163. Assert.AreEqual ("<foo />", sw.ToString ());
  164. }
  165. [Test]
  166. public void IndentationAndFormatting ()
  167. {
  168. // Test for Indent, IndentChars, NewLineOnAttributes,
  169. // NewLineChars and OmitXmlDeclaration.
  170. string output = "<root\n attr=\"value\"\n attr2=\"value\">\n <child>test</child>\n</root>";
  171. XmlWriterSettings s = new XmlWriterSettings ();
  172. s.OmitXmlDeclaration = true;
  173. s.Indent = true;
  174. s.IndentChars = " ";
  175. s.NewLineChars = "\n";
  176. s.NewLineOnAttributes = true;
  177. StringWriter sw = new StringWriter ();
  178. XmlWriter w = XmlWriter.Create (sw, s);
  179. w.WriteStartElement ("root");
  180. w.WriteAttributeString ("attr", "value");
  181. w.WriteAttributeString ("attr2", "value");
  182. w.WriteStartElement ("child");
  183. w.WriteString ("test");
  184. w.WriteEndElement ();
  185. w.WriteEndElement ();
  186. w.Close ();
  187. Assert.AreEqual (output, sw.ToString ());
  188. }
  189. [Test]
  190. public void SetEncodingNull ()
  191. {
  192. // null is allowed.
  193. new XmlWriterSettings ().Encoding = null;
  194. }
  195. [Test]
  196. [ExpectedException (typeof (ArgumentNullException))]
  197. public void NewLineCharsNull ()
  198. {
  199. new XmlWriterSettings ().NewLineChars = null;
  200. }
  201. [Test]
  202. public void CreateOmitXmlDeclaration ()
  203. {
  204. StringBuilder sb = new StringBuilder ();
  205. // Even if XmlWriter is allowed to write fragment,
  206. // DataContractSerializer never allows it to write
  207. // content in contentOnly mode.
  208. XmlWriterSettings settings = new XmlWriterSettings ();
  209. settings.OmitXmlDeclaration = true;
  210. //settings.ConformanceLevel = ConformanceLevel.Fragment;
  211. XmlWriter w = XmlWriter.Create (sb, settings);
  212. w.WriteStartElement ("root");
  213. w.WriteEndElement ();
  214. w.Flush ();
  215. Assert.AreEqual ("<root />", sb.ToString ());
  216. }
  217. [Test]
  218. public void NewLineOnAttributesMixedContent ()
  219. {
  220. StringWriter sw = new StringWriter ();
  221. XmlWriterSettings s = new XmlWriterSettings ();
  222. s.NewLineOnAttributes = true;
  223. s.OmitXmlDeclaration = true;
  224. XmlWriter w = XmlWriter.Create (sw, s);
  225. w.WriteStartElement ("root");
  226. w.WriteAttributeString ("a", "v");
  227. w.WriteAttributeString ("b", "x");
  228. w.WriteString ("some string");
  229. w.WriteEndElement ();
  230. w.Close ();
  231. Assert.AreEqual ("<root a=\"v\" b=\"x\">some string</root>", sw.ToString (), "#1");
  232. // mixed content: bug #81770
  233. string expected = "<root>some string<mixed\n a=\"v\"\n b=\"x\">some string</mixed></root>";
  234. s.Indent = true;
  235. sw = new StringWriter ();
  236. w = XmlWriter.Create (sw, s);
  237. w.WriteStartElement ("root");
  238. w.WriteString ("some string");
  239. w.WriteStartElement ("mixed");
  240. w.WriteAttributeString ("a", "v");
  241. w.WriteAttributeString ("b", "x");
  242. w.WriteString ("some string");
  243. w.WriteEndElement ();
  244. w.WriteEndElement ();
  245. w.Close ();
  246. Assert.AreEqual (expected, sw.ToString ().Replace ("\r\n", "\n"), "#2");
  247. }
  248. [Test]
  249. public void OmitXmlDeclarationAndNewLine ()
  250. {
  251. XmlDocument doc = new XmlDocument ();
  252. doc.LoadXml ("<root/>");
  253. XmlWriterSettings settings = new XmlWriterSettings ();
  254. settings.OmitXmlDeclaration = true;
  255. settings.NewLineChars = "\r\n";
  256. settings.NewLineHandling = NewLineHandling.Replace;
  257. settings.Encoding = Encoding.UTF8;
  258. settings.Indent = true;
  259. StringWriter sw = new StringWriter ();
  260. using (XmlWriter xw = XmlWriter.Create (sw, settings)) {
  261. doc.Save (xw);
  262. }
  263. // no heading newline.
  264. Assert.AreEqual ("<root />", sw.ToString ());
  265. }
  266. }
  267. }
  268. #endif