2003-01-26 Atsushi Enomoto <ginga@kit.hi-ho.ne.jp>
[mono.git] / mcs / class / System.XML / Test / XmlNodeReaderTests.cs
1 //\r
2 // System.Xml.XmlNodeReaderTests\r
3 //\r
4 // Author:\r
5 //   Atsushi Enomoto <ginga@kit.hi-ho.ne.jp>\r
6 //\r
7 // (C) 2003 Atsushi Enomoto\r
8 //\r
9 //\r
10 \r
11 \r
12 \r
13 using System;\r
14 using System.IO;\r
15 using System.Text;\r
16 using System.Xml;\r
17 \r
18 using NUnit.Framework;\r
19 \r
20 namespace MonoTests.System.Xml\r
21 {\r
22         public class XmlNodeReaderTests : TestCase\r
23         {\r
24                 public XmlNodeReaderTests () : base ("MonoTests.System.Xml.NodeReaderTests testsuite") {}\r
25                 public XmlNodeReaderTests (string name) : base (name) {}\r
26 \r
27                 protected override void SetUp ()\r
28                 {\r
29                         document.LoadXml ("<root attr1='value1'><child /></root>");\r
30                 }\r
31 \r
32                 XmlDocument document = new XmlDocument ();\r
33 \r
34                 // MS.NET's not-overriden XmlNodeReader.WriteStartElement(name)\r
35                 // invokes WriteStartElement(null, name, null). \r
36                 // WriteStartElement(name, ns) invokes (null, name, ns), too.\r
37                 public void TestInitialState ()\r
38                 {\r
39                         XmlNodeReader nrdr = new XmlNodeReader (document);\r
40                         AssertEquals ("Depth", 0, nrdr.Depth);\r
41                         AssertEquals ("EOF", false, nrdr.EOF);\r
42                         AssertEquals ("HasValue", false, nrdr.HasValue);\r
43                         AssertEquals ("IsEmptyElement", false, nrdr.IsEmptyElement);\r
44                         AssertEquals ("LocalName", String.Empty, nrdr.LocalName);\r
45                         AssertEquals ("NodeType", XmlNodeType.None, nrdr.NodeType);\r
46                         AssertEquals ("ReadState", ReadState.Initial, nrdr.ReadState);\r
47                 }\r
48 \r
49                 public void TestInvalidConstruction ()\r
50                 {\r
51                         XmlNodeReader nrdr;\r
52                         try {\r
53                                 nrdr = new XmlNodeReader (null);\r
54                                 Fail ("null reference exception is preferable.");\r
55                         } catch (NullReferenceException ex) {\r
56                         }\r
57                         nrdr = new XmlNodeReader (new XmlDocument ());\r
58                         nrdr.Read ();\r
59                         AssertEquals ("newDoc.ReadState", ReadState.Error, nrdr.ReadState);\r
60                         AssertEquals ("newDoc.EOF", true, nrdr.EOF);\r
61                         AssertEquals ("newDoc.NodeType", XmlNodeType.None, nrdr.NodeType);\r
62                         nrdr = new XmlNodeReader (document.CreateDocumentFragment ());\r
63                         nrdr.Read ();\r
64                         AssertEquals ("Fragment.ReadState", ReadState.Error, nrdr.ReadState);\r
65                         AssertEquals ("Fragment.EOF", true, nrdr.EOF);\r
66                         AssertEquals ("Fragment.NodeType", XmlNodeType.None, nrdr.NodeType);\r
67                 }\r
68 \r
69                 public void TestRead ()\r
70                 {\r
71                         XmlNodeReader nrdr = new XmlNodeReader (document);\r
72                         nrdr.Read ();\r
73                         AssertEquals ("<root>.NodeType", XmlNodeType.Element, nrdr.NodeType);\r
74                         AssertEquals ("<root>.Name", "root", nrdr.Name);\r
75                         AssertEquals ("<root>.ReadState", ReadState.Interactive, nrdr.ReadState);\r
76                         AssertEquals ("<root>.Depth", 0, nrdr.Depth);\r
77 \r
78                         // move to 'child'\r
79                         nrdr.Read ();\r
80                         AssertEquals ("<child/>.Depth", 1, nrdr.Depth);\r
81                         AssertEquals ("<child/>.NodeType", XmlNodeType.Element, nrdr.NodeType);\r
82                         AssertEquals ("<child/>.Name", "child", nrdr.Name);\r
83 \r
84                         nrdr.Read ();\r
85                         AssertEquals ("</root>.Depth", 0, nrdr.Depth);\r
86                         AssertEquals ("</root>.NodeType", XmlNodeType.EndElement, nrdr.NodeType);\r
87                         AssertEquals ("</root>.Name", "root", nrdr.Name);\r
88 \r
89                         nrdr.Read ();\r
90                         AssertEquals ("end.EOF", true, nrdr.EOF);\r
91                         AssertEquals ("end.NodeType", XmlNodeType.None, nrdr.NodeType);\r
92                 }\r
93 \r
94                 public void TestReadFromElement ()\r
95                 {\r
96                         XmlNodeReader nrdr = new XmlNodeReader (document.DocumentElement);\r
97                         nrdr.Read ();\r
98                         AssertEquals ("<root>.NodeType", XmlNodeType.Element, nrdr.NodeType);\r
99                         AssertEquals ("<root>.Name", "root", nrdr.Name);\r
100                         AssertEquals ("<root>.ReadState", ReadState.Interactive, nrdr.ReadState);\r
101                         AssertEquals ("<root>.Depth", 0, nrdr.Depth);\r
102                 }\r
103 \r
104                 public void TestReadString ()\r
105                 {\r
106                         XmlDocument doc = new XmlDocument ();\r
107                         doc.LoadXml ("<root>test of <b>mixed</b> string.<![CDATA[ cdata string.]]></root>");\r
108                         XmlNodeReader nrdr = new XmlNodeReader (doc);\r
109                         nrdr.Read ();\r
110                         string s = nrdr.ReadString ();\r
111                         AssertEquals ("readString.1.ret_val", "test of ", s);\r
112                         AssertEquals ("readString.1.Name", "b", nrdr.Name);\r
113                         s = nrdr.ReadString ();\r
114                         AssertEquals ("readString.2.ret_val", "mixed", s);\r
115                         AssertEquals ("readString.2.NodeType", XmlNodeType.EndElement, nrdr.NodeType);\r
116                         s = nrdr.ReadString (); // never proceeds.\r
117                         AssertEquals ("readString.3.ret_val", String.Empty, s);\r
118                         AssertEquals ("readString.3.NodeType", XmlNodeType.EndElement, nrdr.NodeType);\r
119                         nrdr.Read ();\r
120                         AssertEquals ("readString.4.NodeType", XmlNodeType.Text, nrdr.NodeType);\r
121                         AssertEquals ("readString.4.Value", " string.", nrdr.Value);\r
122                         s = nrdr.ReadString (); // reads the same Text node.\r
123                         AssertEquals ("readString.5.ret_val", " string. cdata string.", s);\r
124                         AssertEquals ("readString.5.NodeType", XmlNodeType.EndElement, nrdr.NodeType);\r
125                 }\r
126 \r
127                 public void TestRedInnerXml ()\r
128                 {\r
129                         XmlDocument doc = new XmlDocument ();\r
130                         doc.LoadXml ("<root>test of <b>mixed</b> string.</root>");\r
131                         XmlNodeReader nrdr = new XmlNodeReader (doc);\r
132                         nrdr.ReadInnerXml ();\r
133                         AssertEquals ("initial.ReadState", ReadState.Error, nrdr.ReadState);\r
134                         AssertEquals ("initial.EOF", true, nrdr.EOF);\r
135                         AssertEquals ("initial.NodeType", XmlNodeType.None, nrdr.NodeType);\r
136                 }\r
137         }\r
138 \r
139 }\r