2 // System.Xml.XmlDeclarationTests.cs
4 // Author: Duncan Mak (duncan@ximian.com)
5 // Author: Martin Willemoes Hansen (mwh@sysrq.dk)
8 // (C) 2003 Martin Willemoes Hansen
15 using NUnit.Framework;
17 namespace MonoTests.System.Xml
20 public class XmlDeclarationTests : Assertion
23 XmlDeclaration declaration;
26 public void GetReady ()
28 document = new XmlDocument ();
29 document.LoadXml ("<foo><bar></bar></foo>");
30 declaration = document.CreateXmlDeclaration ("1.0", null, null);
34 public void InnerAndOuterXml ()
36 declaration = document.CreateXmlDeclaration ("1.0", null, null);
37 AssertEquals (String.Empty, declaration.InnerXml);
38 AssertEquals ("<?xml version=\"1.0\"?>", declaration.OuterXml);
40 declaration = document.CreateXmlDeclaration ("1.0", "doesn't check", null);
41 AssertEquals (String.Empty, declaration.InnerXml);
42 AssertEquals ("<?xml version=\"1.0\" encoding=\"doesn't check\"?>", declaration.OuterXml);
44 declaration = document.CreateXmlDeclaration ("1.0", null, "yes");
45 AssertEquals (String.Empty, declaration.InnerXml);
46 AssertEquals ("<?xml version=\"1.0\" standalone=\"yes\"?>", declaration.OuterXml);
48 declaration = document.CreateXmlDeclaration ("1.0", "foo", "no");
49 AssertEquals (String.Empty, declaration.InnerXml);
50 AssertEquals ("<?xml version=\"1.0\" encoding=\"foo\" standalone=\"no\"?>", declaration.OuterXml);
53 internal void XmlNodeBaseProperties (XmlNode original, XmlNode cloned)
55 // assertequals (original.nodetype + " was incorrectly cloned.",
56 // original.baseuri, cloned.baseuri);
57 AssertNull (cloned.ParentNode);
59 AssertEquals ("Value incorrectly cloned",
60 original.Value, cloned.Value);
62 Assert ("Copies, not pointers", !Object.ReferenceEquals (original,cloned));
66 public void Constructor ()
69 XmlDeclaration broken = document.CreateXmlDeclaration ("2.0", null, null);
70 } catch (ArgumentException) {
73 } catch (Exception e) {
74 Fail("first arg null, wrong exception: " + e.ToString());
79 public void NodeType ()
81 AssertEquals ("incorrect NodeType returned", XmlNodeType.XmlDeclaration, declaration.NodeType);
87 AssertEquals ("Name is incorrect", "xml", declaration.Name);
88 AssertEquals ("LocalName is incorrect", "xml", declaration.LocalName);
92 public void EncodingProperty ()
94 XmlDeclaration d1 = document.CreateXmlDeclaration ("1.0", "foo", null);
95 AssertEquals ("Encoding property", "foo", d1.Encoding);
97 XmlDeclaration d2 = document.CreateXmlDeclaration ("1.0", null, null);
98 AssertEquals ("null Encoding property", String.Empty, d2.Encoding);
102 public void ValidInnerText ()
104 declaration.InnerText = "version='1.0'";
106 declaration.InnerText = "version='1.0' encoding='euc-jp'";
108 declaration.InnerText = "version='1.0' standalone='no'";
110 declaration.InnerText = "version='1.0' encoding='iso-8859-1' standalone=\"yes\"";
112 declaration.InnerText = @"version = '1.0' encoding =
113 'euc-jp' standalone = 'yes' ";
115 declaration.InnerText = " version = '1.0'";
119 [ExpectedException (typeof (XmlException))]
120 public void InvalidInnerText ()
122 declaration.InnerText = "version='1.0a'";
126 [ExpectedException (typeof (XmlException))]
127 public void InvalidInnerText2 ()
129 declaration.InnerText = "version='1.0' encoding='euc-kr\"";
133 [ExpectedException (typeof (XmlException))]
134 public void InvalidInnerText3 ()
136 declaration.InnerText = "version='2.0'";
140 [ExpectedException (typeof (XmlException))]
141 public void InvalidInnerText4 ()
143 declaration.InnerText = "version='1.0' standalone='Yeah!!!!!'";
147 [ExpectedException (typeof (XmlException))]
148 public void InvalidInnerText5 ()
150 declaration.InnerText = "version='1.0'standalone='yes'";
154 [ExpectedException (typeof (XmlException))]
155 public void InvalidInnerText6 ()
157 declaration.InnerText = "version='1.0'standalone='yes' encoding='utf-8'";
161 public void StandaloneProperty ()
163 XmlDeclaration d1 = document.CreateXmlDeclaration ("1.0", null, "yes");
164 AssertEquals ("Yes standalone property", "yes", d1.Standalone);
166 XmlDeclaration d2 = document.CreateXmlDeclaration ("1.0", null, "no");
167 AssertEquals ("No standalone property", "no", d2.Standalone);
169 XmlDeclaration d3 = document.CreateXmlDeclaration ("1.0", null, null);
170 AssertEquals ("null Standalone property", String.Empty, d3.Standalone);
174 public void ValueProperty ()
176 string expected = "version=\"1.0\" encoding=\"ISO-8859-1\" standalone=\"yes\"" ;
178 XmlDeclaration d = document.CreateXmlDeclaration ("1.0", "ISO-8859-1", "yes");
179 AssertEquals ("Value property", expected, d.Value);
182 AssertEquals ("Value round-trip", expected, d.Value);
184 d.Value = " " + expected;
185 AssertEquals ("Value round-trip (padded)", expected, d.Value);
187 d.Value = "version=\"1.0\" encoding=\"ISO-8859-1\" standalone=\"yes\"" ;
188 AssertEquals ("Value round-trip (padded 2)", expected, d.Value);
190 d.Value = "version=\"1.0\"\tencoding=\"ISO-8859-1\" standalone=\"yes\"" ;
191 AssertEquals ("Value round-trip (\\t)", expected, d.Value);
193 d.Value = "version=\"1.0\"\n encoding=\"ISO-8859-1\" standalone=\"yes\"" ;
194 AssertEquals ("Value round-trip (\\n)", expected, d.Value);
196 d.Value = "version=\"1.0\" encoding = \"ISO-8859-1\" standalone = \"yes\"" ;
197 AssertEquals ("Value round-trip (spaces)", expected, d.Value);
199 d.Value = "version='1.0' encoding='ISO-8859-1' standalone='yes'" ;
200 AssertEquals ("Value round-trip ('s)", expected, d.Value);
204 public void Bug79496 ()
206 StringWriter sw = new StringWriter ();
207 XmlTextWriter xtw = new XmlTextWriter (sw);
208 xtw.WriteStartDocument (true);
209 xtw.WriteStartElement ("person");
210 xtw.WriteEndElement ();
213 XmlDocument doc = new XmlDocument ();
214 doc.LoadXml (sw.ToString ());
215 AssertEquals ("<?xml version=\"1.0\" encoding=\"utf-16\" standalone=\"yes\"?><person />", doc.OuterXml);
219 public void XmlCommentCloneNode ()
221 XmlNode original = declaration;
223 XmlNode shallow = declaration.CloneNode (false); // shallow
224 XmlNodeBaseProperties (original, shallow);
226 XmlNode deep = declaration.CloneNode (true); // deep
227 XmlNodeBaseProperties (original, deep);
229 AssertEquals ("deep cloning differs from shallow cloning",
230 deep.OuterXml, shallow.OuterXml);