2009-06-12 Bill Holmes <billholmes54@gmail.com>
[mono.git] / mcs / class / System.XML / Test / System.Xml / XmlDeclarationTests.cs
1 //
2 // System.Xml.XmlDeclarationTests.cs
3 //
4 // Author: Duncan Mak  (duncan@ximian.com)
5 // Author: Martin Willemoes Hansen (mwh@sysrq.dk)
6 //
7 // (C) Ximian, Inc.
8 // (C) 2003 Martin Willemoes Hansen
9 //
10
11 using System;
12 using System.IO;
13 using System.Xml;
14
15 using NUnit.Framework;
16
17 namespace MonoTests.System.Xml
18 {
19         [TestFixture]
20         public class XmlDeclarationTests : Assertion
21         {
22                 XmlDocument document;
23                 XmlDeclaration declaration;
24                 
25                 [SetUp]
26                 public void GetReady ()
27                 {
28                         document = new XmlDocument ();
29                         document.LoadXml ("<foo><bar></bar></foo>");
30                         declaration = document.CreateXmlDeclaration ("1.0", null, null);
31                 }
32
33                 [Test]
34                 public void InnerAndOuterXml ()
35                 {
36                         declaration = document.CreateXmlDeclaration ("1.0", null, null);
37                         AssertEquals (String.Empty, declaration.InnerXml);
38                         AssertEquals ("<?xml version=\"1.0\"?>", declaration.OuterXml);
39
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);
43
44                         declaration = document.CreateXmlDeclaration ("1.0", null, "yes");
45                         AssertEquals (String.Empty, declaration.InnerXml);
46                         AssertEquals ("<?xml version=\"1.0\" standalone=\"yes\"?>", declaration.OuterXml);
47
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);
51                 }
52
53                 internal void XmlNodeBaseProperties (XmlNode original, XmlNode cloned)
54                 {
55 //                      assertequals (original.nodetype + " was incorrectly cloned.",
56 //                                    original.baseuri, cloned.baseuri);                        
57                         AssertNull (cloned.ParentNode);
58
59                         AssertEquals ("Value incorrectly cloned",
60                                       original.Value, cloned.Value);
61                         
62                         Assert ("Copies, not pointers", !Object.ReferenceEquals (original,cloned));
63                 }
64
65                 [Test]
66                 public void Constructor ()
67                 {
68                         try {
69                                 XmlDeclaration broken = document.CreateXmlDeclaration ("2.0", null, null);
70                         } catch (ArgumentException) {
71                                 return;
72
73                         } catch (Exception e) {
74                                 Fail("first arg null, wrong exception: " + e.ToString());
75                         }
76                 }
77
78                 [Test]
79                 public void NodeType ()
80                 {
81                         AssertEquals ("incorrect NodeType returned", XmlNodeType.XmlDeclaration, declaration.NodeType);
82                 }
83
84                 [Test]
85                 public void Names ()
86                 {
87                         AssertEquals ("Name is incorrect", "xml", declaration.Name);
88                         AssertEquals ("LocalName is incorrect", "xml", declaration.LocalName);
89                 }
90
91                 [Test]
92                 public void EncodingProperty ()
93                 {
94                         XmlDeclaration d1 = document.CreateXmlDeclaration ("1.0", "foo", null);
95                         AssertEquals ("Encoding property", "foo", d1.Encoding);
96
97                         XmlDeclaration d2 = document.CreateXmlDeclaration ("1.0", null, null);
98                         AssertEquals ("null Encoding property", String.Empty, d2.Encoding);
99                 }
100
101                 [Test]
102                 public void ValidInnerText ()
103                 {
104                         declaration.InnerText = "version='1.0'";
105
106                         declaration.InnerText = "version='1.0' encoding='euc-jp'";
107
108                         declaration.InnerText = "version='1.0'   standalone='no'";
109
110                         declaration.InnerText = "version='1.0' encoding='iso-8859-1' standalone=\"yes\"";
111
112                         declaration.InnerText = @"version = '1.0' encoding      =
113                                 'euc-jp'  standalone     =      'yes'    ";
114
115                         declaration.InnerText = "  version = '1.0'";
116                 }
117
118                 [Test]
119                 [ExpectedException (typeof (XmlException))]
120                 public void InvalidInnerText ()
121                 {
122                         declaration.InnerText = "version='1.0a'";
123                 }
124
125                 [Test]
126                 [ExpectedException (typeof (XmlException))]
127                 public void InvalidInnerText2 ()
128                 {
129                         declaration.InnerText = "version='1.0'  encoding='euc-kr\"";
130                 }
131
132                 [Test]
133                 [ExpectedException (typeof (XmlException))]
134                 public void InvalidInnerText3 ()
135                 {
136                         declaration.InnerText = "version='2.0'";
137                 }
138
139                 [Test]
140                 [ExpectedException (typeof (XmlException))]
141                 public void InvalidInnerText4 ()
142                 {
143                         declaration.InnerText = "version='1.0' standalone='Yeah!!!!!'";
144                 }
145
146                 [Test]
147                 [ExpectedException (typeof (XmlException))]
148                 public void InvalidInnerText5 ()
149                 {
150                         declaration.InnerText = "version='1.0'standalone='yes'";
151                 }
152
153                 [Test]
154                 [ExpectedException (typeof (XmlException))]
155                 public void InvalidInnerText6 ()
156                 {
157                         declaration.InnerText = "version='1.0'standalone='yes' encoding='utf-8'";
158                 }
159
160                 [Test]
161                 public void StandaloneProperty ()
162                 {
163                         XmlDeclaration d1 = document.CreateXmlDeclaration ("1.0", null, "yes");
164                         AssertEquals ("Yes standalone property", "yes", d1.Standalone);
165
166                         XmlDeclaration d2 = document.CreateXmlDeclaration ("1.0", null, "no");
167                         AssertEquals ("No standalone property", "no", d2.Standalone);
168
169                         XmlDeclaration d3 = document.CreateXmlDeclaration ("1.0", null, null);
170                         AssertEquals ("null Standalone property", String.Empty, d3.Standalone);
171                 }
172
173                 [Test]
174                 public void ValueProperty ()
175                 {
176                         string expected = "version=\"1.0\" encoding=\"ISO-8859-1\" standalone=\"yes\"" ;
177
178                         XmlDeclaration d = document.CreateXmlDeclaration ("1.0", "ISO-8859-1", "yes");
179                         AssertEquals ("Value property", expected, d.Value);
180
181                         d.Value = expected;
182                         AssertEquals ("Value round-trip", expected, d.Value);
183
184                         d.Value = "   " + expected;
185                         AssertEquals ("Value round-trip (padded)", expected, d.Value);
186
187                         d.Value = "version=\"1.0\"     encoding=\"ISO-8859-1\" standalone=\"yes\"" ;
188                         AssertEquals ("Value round-trip (padded 2)", expected, d.Value);
189
190                         d.Value = "version=\"1.0\"\tencoding=\"ISO-8859-1\" standalone=\"yes\"" ;
191                         AssertEquals ("Value round-trip (\\t)", expected, d.Value);
192
193                         d.Value = "version=\"1.0\"\n    encoding=\"ISO-8859-1\" standalone=\"yes\"" ;
194                         AssertEquals ("Value round-trip (\\n)", expected, d.Value);
195
196                         d.Value = "version=\"1.0\"    encoding  =   \"ISO-8859-1\" standalone = \"yes\"" ;
197                         AssertEquals ("Value round-trip (spaces)", expected, d.Value);
198
199                         d.Value = "version='1.0' encoding='ISO-8859-1' standalone='yes'" ;
200                         AssertEquals ("Value round-trip ('s)", expected, d.Value);
201                 }
202
203                 [Test]
204                 public void Bug79496 ()
205                 {
206                         StringWriter sw = new StringWriter ();
207                         XmlTextWriter xtw = new XmlTextWriter (sw);
208                         xtw.WriteStartDocument (true);
209                         xtw.WriteStartElement ("person");
210                         xtw.WriteEndElement ();
211                         xtw.Flush ();
212
213                         XmlDocument doc = new XmlDocument ();
214                         doc.LoadXml (sw.ToString ());
215                         AssertEquals ("<?xml version=\"1.0\" encoding=\"utf-16\" standalone=\"yes\"?><person />", doc.OuterXml);
216                 }
217
218                 [Test]
219                 public void XmlCommentCloneNode ()
220                 {
221                         XmlNode original = declaration;
222
223                         XmlNode shallow = declaration.CloneNode (false); // shallow
224                         XmlNodeBaseProperties (original, shallow);
225                         
226                         XmlNode deep = declaration.CloneNode (true); // deep
227                         XmlNodeBaseProperties (original, deep);
228
229                         AssertEquals ("deep cloning differs from shallow cloning",
230                                       deep.OuterXml, shallow.OuterXml);
231                 }
232         }
233 }