2 // System.Xml.XmlReaderCommonTests
5 // Atsushi Enomoto <ginga@kit.hi-ho.ne.jp>
7 // (C) 2003 Atsushi Enomoto
8 // Note: Most of testcases are moved from XmlTextReaderTests.cs and
9 // XmlNodeReaderTests.cs.
16 using System
.Xml
.Schema
;
17 using System
.Xml
.XPath
;
19 using NUnit
.Framework
;
21 namespace MonoTests
.System
.Xml
24 public class XmlReaderTests
: Assertion
27 public void GetReady ()
29 document
= new XmlDocument ();
30 document
.LoadXml (xml1
);
34 const string xml1
= "<root attr1='value1'><child /></root>";
35 const string xml2
= "<root><foo/><bar>test.</bar></root>";
36 const string xml3
= "<root> test of <b>mixed</b> string.<![CDATA[ cdata string.]]></root>";
37 const string xml4
= "<root>test of <b>mixed</b> string.</root>";
41 // copy from XmlTextReaderTests
42 private void AssertStartDocument (XmlReader xmlReader
)
44 Assert (xmlReader
.ReadState
== ReadState
.Initial
);
45 Assert (xmlReader
.NodeType
== XmlNodeType
.None
);
46 Assert (xmlReader
.Depth
== 0);
47 Assert (!xmlReader
.EOF
);
50 private void AssertNode (
62 Assert ("Read() return value", xmlReader
.Read ());
63 Assert ("ReadState", xmlReader
.ReadState
== ReadState
.Interactive
);
64 Assert ("!EOF", !xmlReader
.EOF
);
65 AssertNodeValues (xmlReader
, nodeType
, depth
, isEmptyElement
, name
, prefix
, localName
, namespaceURI
, value, attributeCount
);
68 private void AssertNodeValues (
80 AssertNodeValues (xmlReader
, nodeType
, depth
, isEmptyElement
, name
, prefix
, localName
, namespaceURI
, value, value != String
.Empty
, attributeCount
, attributeCount
> 0);
83 private void AssertNodeValues (
97 AssertEquals ("NodeType", nodeType
, xmlReader
.NodeType
);
98 AssertEquals ("IsEmptyElement", isEmptyElement
, xmlReader
.IsEmptyElement
);
100 AssertEquals ("name", name
, xmlReader
.Name
);
102 AssertEquals ("prefix", prefix
, xmlReader
.Prefix
);
104 AssertEquals ("localName", localName
, xmlReader
.LocalName
);
106 AssertEquals ("namespaceURI", namespaceURI
, xmlReader
.NamespaceURI
);
108 AssertEquals ("Depth", depth
, xmlReader
.Depth
);
110 AssertEquals ("hasValue", hasValue
, xmlReader
.HasValue
);
112 AssertEquals ("Value", value, xmlReader
.Value
);
114 AssertEquals ("hasAttributes", hasAttributes
, xmlReader
.HasAttributes
);
116 AssertEquals ("attributeCount", attributeCount
, xmlReader
.AttributeCount
);
119 private void AssertAttribute (
127 AssertEquals ("value", value, xmlReader
[name
]);
129 Assert (xmlReader
.GetAttribute (name
) == value);
131 if (namespaceURI
!= String
.Empty
) {
132 Assert (xmlReader
[localName
, namespaceURI
] == value);
133 Assert (xmlReader
.GetAttribute (localName
, namespaceURI
) == value);
137 private void AssertEndDocument (XmlReader xmlReader
)
139 Assert ("could read", !xmlReader
.Read ());
140 AssertEquals ("NodeType is not XmlNodeType.None", XmlNodeType
.None
, xmlReader
.NodeType
);
141 AssertEquals ("Depth is not 0", 0, xmlReader
.Depth
);
142 AssertEquals ("ReadState is not ReadState.EndOfFile", ReadState
.EndOfFile
, xmlReader
.ReadState
);
143 Assert ("not EOF", xmlReader
.EOF
);
146 AssertEquals ("ReadState is not ReadState.Cosed", ReadState
.Closed
, xmlReader
.ReadState
);
149 private delegate void TestMethod (XmlReader reader
);
151 private void RunTest (string xml
, TestMethod method
)
153 xtr
= new XmlTextReader (new StringReader (xml
));
157 xtr
= new XmlTextReader (new StringReader (xml
));
158 XmlValidatingReader xvr
= new XmlValidatingReader (xtr
);
159 xvr
.ValidationType
= ValidationType
.DTD
;
160 xvr
.EntityHandling
= EntityHandling
.ExpandCharEntities
;
164 xtr
= new XmlTextReader (new StringReader (xml
));
165 xvr
= new XmlValidatingReader (xtr
);
166 xvr
.EntityHandling
= EntityHandling
.ExpandCharEntities
;
169 document
.XmlResolver
= null;
170 document
.LoadXml (xml
);
171 xnr
= new XmlNodeReader (document
);
176 // XPathNavigatorReader tests
177 System.Xml.XPath.XPathDocument doc = new System.Xml.XPath.XPathDocument (new StringReader (xml));
178 XmlReader xpr = doc.CreateNavigator ().ReadSubtree ();
189 public void InitialState ()
191 RunTest (xml1
, new TestMethod (InitialState
));
194 private void InitialState (XmlReader reader
)
196 AssertEquals ("Depth", 0, reader
.Depth
);
197 AssertEquals ("EOF", false, reader
.EOF
);
198 AssertEquals ("HasValue", false, reader
.HasValue
);
199 AssertEquals ("IsEmptyElement", false, reader
.IsEmptyElement
);
200 AssertEquals ("LocalName", String
.Empty
, reader
.LocalName
);
201 AssertEquals ("NodeType", XmlNodeType
.None
, reader
.NodeType
);
202 AssertEquals ("ReadState", ReadState
.Initial
, reader
.ReadState
);
208 RunTest (xml1
, new TestMethod (Read
));
211 public void Read (XmlReader reader
)
214 AssertEquals ("<root>.NodeType", XmlNodeType
.Element
, reader
.NodeType
);
215 AssertEquals ("<root>.Name", "root", reader
.Name
);
216 AssertEquals ("<root>.ReadState", ReadState
.Interactive
, reader
.ReadState
);
217 AssertEquals ("<root>.Depth", 0, reader
.Depth
);
221 AssertEquals ("<child/>.Depth", 1, reader
.Depth
);
222 AssertEquals ("<child/>.NodeType", XmlNodeType
.Element
, reader
.NodeType
);
223 AssertEquals ("<child/>.Name", "child", reader
.Name
);
226 AssertEquals ("</root>.Depth", 0, reader
.Depth
);
227 AssertEquals ("</root>.NodeType", XmlNodeType
.EndElement
, reader
.NodeType
);
228 AssertEquals ("</root>.Name", "root", reader
.Name
);
231 AssertEquals ("end.EOF", true, reader
.EOF
);
232 AssertEquals ("end.NodeType", XmlNodeType
.None
, reader
.NodeType
);
236 public void ReadAttributeValue ()
238 RunTest ("<root attr=''/>", new TestMethod (ReadAttributeValue
));
241 public void ReadAttributeValue (XmlReader reader
)
243 reader
.Read (); // root
244 Assert (reader
.MoveToFirstAttribute ());
245 // It looks like that MS.NET shows AttributeCount and
246 // HasAttributes as the same as element node!
247 this.AssertNodeValues (reader
, XmlNodeType
.Attribute
,
248 1, false, "attr", "", "attr", "", "", true, 1, true);
249 Assert (reader
.ReadAttributeValue ());
250 // MS.NET XmlTextReader fails. Its Prefix returns null instead of "".
251 this.AssertNodeValues (reader
, XmlNodeType
.Text
,
252 2, false, "", "", "", "", "", true, 1, true);
253 Assert (reader
.MoveToElement ());
254 this.AssertNodeValues (reader
, XmlNodeType
.Element
,
255 0, true, "root", "", "root", "", "", false, 1, true);
259 public void ReadEmptyElement ()
261 RunTest (xml2
, new TestMethod (ReadEmptyElement
));
264 public void ReadEmptyElement (XmlReader reader
)
266 reader
.Read (); // root
267 AssertEquals (false, reader
.IsEmptyElement
);
268 reader
.Read (); // foo
269 AssertEquals ("foo", reader
.Name
);
270 AssertEquals (true, reader
.IsEmptyElement
);
271 reader
.Read (); // bar
272 AssertEquals ("bar", reader
.Name
);
273 AssertEquals (false, reader
.IsEmptyElement
);
277 public void ReadStringFromElement ()
279 RunTest (xml3
, new TestMethod (ReadStringFromElement
));
282 public void ReadStringFromElement (XmlReader reader
)
284 // Note: ReadString() test works only when the reader is
285 // positioned at the container element.
286 // In case the reader is positioned at the first
287 // character node, XmlTextReader and XmlNodeReader works
291 string s
= reader
.ReadString ();
292 AssertEquals ("readString.1.ret_val", " test of ", s
);
293 AssertEquals ("readString.1.Name", "b", reader
.Name
);
294 s
= reader
.ReadString ();
295 AssertEquals ("readString.2.ret_val", "mixed", s
);
296 AssertEquals ("readString.2.NodeType", XmlNodeType
.EndElement
, reader
.NodeType
);
297 s
= reader
.ReadString (); // never proceeds.
298 AssertEquals ("readString.3.ret_val", String
.Empty
, s
);
299 AssertEquals ("readString.3.NodeType", XmlNodeType
.EndElement
, reader
.NodeType
);
301 AssertEquals ("readString.4.NodeType", XmlNodeType
.Text
, reader
.NodeType
);
302 AssertEquals ("readString.4.Value", " string.", reader
.Value
);
303 s
= reader
.ReadString (); // reads the same Text node.
304 AssertEquals ("readString.5.ret_val", " string. cdata string.", s
);
305 AssertEquals ("readString.5.NodeType", XmlNodeType
.EndElement
, reader
.NodeType
);
309 public void ReadInnerXml ()
311 const string xml
= "<root><foo>test of <b>mixed</b> string.</foo><bar /></root>";
312 RunTest (xml
, new TestMethod (ReadInnerXml
));
315 public void ReadInnerXml (XmlReader reader
)
319 AssertEquals ("initial.ReadState", ReadState
.Interactive
, reader
.ReadState
);
320 AssertEquals ("initial.EOF", false, reader
.EOF
);
321 AssertEquals ("initial.NodeType", XmlNodeType
.Element
, reader
.NodeType
);
322 string s
= reader
.ReadInnerXml ();
323 AssertEquals ("read_all", "test of <b>mixed</b> string.", s
);
324 AssertEquals ("after.Name", "bar", reader
.Name
);
325 AssertEquals ("after.NodeType", XmlNodeType
.Element
, reader
.NodeType
);
330 public void EmptyElement ()
332 RunTest ("<foo/>", new TestMethod (EmptyElement
));
335 public void EmptyElement (XmlReader xmlReader
)
338 AssertStartDocument (xmlReader
);
341 xmlReader
, // xmlReader
342 XmlNodeType
.Element
, // nodeType
344 true, // isEmptyElement
346 String
.Empty
, // prefix
348 String
.Empty
, // namespaceURI
349 String
.Empty
, // value
353 AssertEndDocument (xmlReader
);
357 public void NestedEmptyTag ()
359 string xml
= "<foo><bar/></foo>";
360 RunTest (xml
, new TestMethod (NestedEmptyTag
));
363 public void NestedEmptyTag (XmlReader xmlReader
)
365 AssertStartDocument (xmlReader
);
368 xmlReader
, // xmlReader
369 XmlNodeType
.Element
, // nodeType
371 false, // isEmptyElement
373 String
.Empty
, // prefix
375 String
.Empty
, // namespaceURI
376 String
.Empty
, // value
381 xmlReader
, // xmlReader
382 XmlNodeType
.Element
, // nodeType
384 true, // isEmptyElement
386 String
.Empty
, // prefix
388 String
.Empty
, // namespaceURI
389 String
.Empty
, // value
394 xmlReader
, // xmlReader
395 XmlNodeType
.EndElement
, // nodeType
397 false, // isEmptyElement
399 String
.Empty
, // prefix
401 String
.Empty
, // namespaceURI
402 String
.Empty
, // value
406 AssertEndDocument (xmlReader
);
410 public void NestedText ()
412 string xml
= "<foo>bar</foo>";
413 RunTest (xml
, new TestMethod (NestedText
));
416 public void NestedText (XmlReader xmlReader
)
418 AssertStartDocument (xmlReader
);
421 xmlReader
, // xmlReader
422 XmlNodeType
.Element
, // nodeType
424 false, // isEmptyElement
426 String
.Empty
, // prefix
428 String
.Empty
, // namespaceURI
429 String
.Empty
, // value
434 xmlReader
, // xmlReader
435 XmlNodeType
.Text
, // nodeType
437 false, // isEmptyElement
438 String
.Empty
, // name
439 String
.Empty
, // prefix
440 String
.Empty
, // localName
441 String
.Empty
, // namespaceURI
447 xmlReader
, // xmlReader
448 XmlNodeType
.EndElement
, // nodeType
450 false, // isEmptyElement
452 String
.Empty
, // prefix
454 String
.Empty
, // namespaceURI
455 String
.Empty
, // value
459 AssertEndDocument (xmlReader
);
463 public void EmptyElementWithAttributes ()
465 string xml
= @"<foo bar=""baz"" quux='quuux' x:foo='x-foo' xmlns:x = 'urn:xfoo' />";
466 RunTest (xml
, new TestMethod (EmptyElementWithAttributes
));
469 public void EmptyElementWithAttributes (XmlReader xmlReader
)
472 AssertStartDocument (xmlReader
);
475 xmlReader
, // xmlReader
476 XmlNodeType
.Element
, // nodeType
478 true, // isEmptyElement
480 String
.Empty
, // prefix
482 String
.Empty
, // namespaceURI
483 String
.Empty
, // value
488 xmlReader
, // xmlReader
490 String
.Empty
, // prefix
492 String
.Empty
, // namespaceURI
497 xmlReader
, // xmlReader
499 String
.Empty
, // prefix
501 String
.Empty
, // namespaceURI
506 xmlReader
, // xmlReader
508 String
.Empty
, // prefix
509 "notexist", // localName
510 String
.Empty
, // namespaceURI
515 xmlReader
, // xmlReader
519 "urn:xfoo", // namespaceURI
524 xmlReader
, // xmlReader
528 "urn:xfoo", // namespaceURI
532 AssertEndDocument (xmlReader
);
536 public void ProcessingInstructionBeforeDocumentElement ()
538 string xml
= "<?foo bar?><baz/>";
539 RunTest (xml
, new TestMethod (ProcessingInstructionBeforeDocumentElement
));
542 public void ProcessingInstructionBeforeDocumentElement (XmlReader xmlReader
)
544 AssertStartDocument (xmlReader
);
547 xmlReader
, // xmlReader
548 XmlNodeType
.ProcessingInstruction
, // nodeType
550 false, // isEmptyElement
552 String
.Empty
, // prefix
554 String
.Empty
, // namespaceURI
560 xmlReader
, // xmlReader
561 XmlNodeType
.Element
, // nodeType
563 true, // isEmptyElement
565 String
.Empty
, // prefix
567 String
.Empty
, // namespaceURI
568 String
.Empty
, // value
572 AssertEndDocument (xmlReader
);
576 public void CommentBeforeDocumentElement ()
578 string xml
= "<!--foo--><bar/>";
579 RunTest (xml
, new TestMethod (CommentBeforeDocumentElement
));
582 public void CommentBeforeDocumentElement (XmlReader xmlReader
)
584 AssertStartDocument (xmlReader
);
587 xmlReader
, // xmlReader
588 XmlNodeType
.Comment
, // nodeType
590 false, // isEmptyElement
591 String
.Empty
, // name
592 String
.Empty
, // prefix
593 String
.Empty
, // localName
594 String
.Empty
, // namespaceURI
600 xmlReader
, // xmlReader
601 XmlNodeType
.Element
, // nodeType
603 true, // isEmptyElement
605 String
.Empty
, // prefix
607 String
.Empty
, // namespaceURI
608 String
.Empty
, // value
612 AssertEndDocument (xmlReader
);
616 public void PredefinedEntities ()
618 string xml
= "<foo><>&'"</foo>";
619 RunTest (xml
, new TestMethod (PredefinedEntities
));
622 public void PredefinedEntities (XmlReader xmlReader
)
624 AssertStartDocument (xmlReader
);
627 xmlReader
, // xmlReader
628 XmlNodeType
.Element
, // nodeType
630 false, // isEmptyElement
632 String
.Empty
, // prefix
634 String
.Empty
, // namespaceURI
635 String
.Empty
, // value
640 xmlReader
, // xmlReader
641 XmlNodeType
.Text
, // nodeType
643 false, // isEmptyElement
644 String
.Empty
, // name
645 String
.Empty
, // prefix
646 String
.Empty
, // localName
647 String
.Empty
, // namespaceURI
653 xmlReader
, // xmlReader
654 XmlNodeType
.EndElement
, // nodeType
656 false, // isEmptyElement
658 String
.Empty
, // prefix
660 String
.Empty
, // namespaceURI
661 String
.Empty
, // value
665 AssertEndDocument (xmlReader
);
669 public void CharacterReferences ()
671 string xml
= "<foo>FOO</foo>";
672 RunTest (xml
, new TestMethod (CharacterReferences
));
675 public void CharacterReferences (XmlReader xmlReader
)
677 AssertStartDocument (xmlReader
);
680 xmlReader
, // xmlReader
681 XmlNodeType
.Element
, // nodeType
683 false, // isEmptyElement
685 String
.Empty
, // prefix
687 String
.Empty
, // namespaceURI
688 String
.Empty
, // value
693 xmlReader
, // xmlReader
694 XmlNodeType
.Text
, // nodeType
696 false, // isEmptyElement
697 String
.Empty
, // name
698 String
.Empty
, // prefix
699 String
.Empty
, // localName
700 String
.Empty
, // namespaceURI
706 xmlReader
, // xmlReader
707 XmlNodeType
.EndElement
, // nodeType
709 false, // isEmptyElement
711 String
.Empty
, // prefix
713 String
.Empty
, // namespaceURI
714 String
.Empty
, // value
718 AssertEndDocument (xmlReader
);
722 public void PredefinedEntitiesInAttribute ()
724 string xml
= "<foo bar='<>&'"'/>";
725 RunTest (xml
, new TestMethod (PredefinedEntitiesInAttribute
));
728 public void PredefinedEntitiesInAttribute (XmlReader xmlReader
)
730 AssertStartDocument (xmlReader
);
733 xmlReader
, // xmlReader
734 XmlNodeType
.Element
, // nodeType
736 true, // isEmptyElement
738 String
.Empty
, // prefix
740 String
.Empty
, // namespaceURI
741 String
.Empty
, // value
746 xmlReader
, // xmlReader
748 String
.Empty
, // prefix
750 String
.Empty
, // namespaceURI
754 AssertEndDocument (xmlReader
);
758 public void CharacterReferencesInAttribute ()
760 string xml
= "<foo bar='FOO'/>";
761 RunTest (xml
, new TestMethod (CharacterReferencesInAttribute
));
764 public void CharacterReferencesInAttribute (XmlReader xmlReader
)
766 AssertStartDocument (xmlReader
);
769 xmlReader
, // xmlReader
770 XmlNodeType
.Element
, // nodeType
772 true, // isEmptyElement
774 String
.Empty
, // prefix
776 String
.Empty
, // namespaceURI
777 String
.Empty
, // value
782 xmlReader
, // xmlReader
784 String
.Empty
, // prefix
786 String
.Empty
, // namespaceURI
790 AssertEndDocument (xmlReader
);
796 string xml
= "<foo><![CDATA[<>&]]></foo>";
797 RunTest (xml
, new TestMethod (CDATA
));
800 public void CDATA (XmlReader xmlReader
)
802 AssertStartDocument (xmlReader
);
805 xmlReader
, // xmlReader
806 XmlNodeType
.Element
, // nodeType
808 false, // isEmptyElement
810 String
.Empty
, // prefix
812 String
.Empty
, // namespaceURI
813 String
.Empty
, // value
818 xmlReader
, // xmlReader
819 XmlNodeType
.CDATA
, // nodeType
821 false, // isEmptyElement
822 String
.Empty
, // name
823 String
.Empty
, // prefix
824 String
.Empty
, // localName
825 String
.Empty
, // namespaceURI
831 xmlReader
, // xmlReader
832 XmlNodeType
.EndElement
, // nodeType
834 false, // isEmptyElement
836 String
.Empty
, // prefix
838 String
.Empty
, // namespaceURI
839 String
.Empty
, // value
843 AssertEndDocument (xmlReader
);
847 public void EmptyElementInDefaultNamespace ()
849 string xml
= @"<foo xmlns='http://foo/' />";
850 RunTest (xml
, new TestMethod (EmptyElementInDefaultNamespace
));
853 public void EmptyElementInDefaultNamespace (XmlReader xmlReader
)
855 AssertStartDocument (xmlReader
);
858 xmlReader
, // xmlReader
859 XmlNodeType
.Element
, // nodeType
861 true, // isEmptyElement
863 String
.Empty
, // prefix
865 "http://foo/", // namespaceURI
866 String
.Empty
, // value
871 xmlReader
, // xmlReader
873 String
.Empty
, // prefix
874 "xmlns", // localName
875 "http://www.w3.org/2000/xmlns/", // namespaceURI
876 "http://foo/" // value
879 AssertEquals ("http://foo/", xmlReader
.LookupNamespace (String
.Empty
));
881 AssertEndDocument (xmlReader
);
885 public void ChildElementInNamespace ()
887 string xml
= @"<foo:bar xmlns:foo='http://foo/'><baz:quux xmlns:baz='http://baz/' /></foo:bar>";
888 RunTest (xml
, new TestMethod (ChildElementInNamespace
));
891 public void ChildElementInNamespace (XmlReader xmlReader
)
893 AssertStartDocument (xmlReader
);
896 xmlReader
, // xmlReader
897 XmlNodeType
.Element
, // nodeType
899 false, // isEmptyElement
903 "http://foo/", // namespaceURI
904 String
.Empty
, // value
909 xmlReader
, // xmlReader
913 "http://www.w3.org/2000/xmlns/", // namespaceURI
914 "http://foo/" // value
917 AssertEquals ("http://foo/", xmlReader
.LookupNamespace ("foo"));
920 xmlReader
, // xmlReader
921 XmlNodeType
.Element
, // nodeType
923 true, // isEmptyElement
927 "http://baz/", // namespaceURI
928 String
.Empty
, // value
933 xmlReader
, // xmlReader
937 "http://www.w3.org/2000/xmlns/", // namespaceURI
938 "http://baz/" // value
941 AssertEquals ("http://foo/", xmlReader
.LookupNamespace ("foo"));
942 AssertEquals ("http://baz/", xmlReader
.LookupNamespace ("baz"));
945 xmlReader
, // xmlReader
946 XmlNodeType
.EndElement
, // nodeType
948 false, // isEmptyElement
952 "http://foo/", // namespaceURI
953 String
.Empty
, // value
957 AssertEquals ("http://foo/", xmlReader
.LookupNamespace ("foo"));
958 AssertNull (xmlReader
.LookupNamespace ("baz"));
960 AssertEndDocument (xmlReader
);
964 public void ChildElementInDefaultNamespace ()
966 string xml
= @"<foo:bar xmlns:foo='http://foo/'><baz xmlns='http://baz/' /></foo:bar>";
967 RunTest (xml
, new TestMethod (ChildElementInDefaultNamespace
));
970 public void ChildElementInDefaultNamespace (XmlReader xmlReader
)
972 AssertStartDocument (xmlReader
);
975 xmlReader
, // xmlReader
976 XmlNodeType
.Element
, // nodeType
978 false, // isEmptyElement
982 "http://foo/", // namespaceURI
983 String
.Empty
, // value
988 xmlReader
, // xmlReader
992 "http://www.w3.org/2000/xmlns/", // namespaceURI
993 "http://foo/" // value
996 AssertEquals ("http://foo/", xmlReader
.LookupNamespace ("foo"));
999 xmlReader
, // xmlReader
1000 XmlNodeType
.Element
, // nodeType
1002 true, // isEmptyElement
1004 String
.Empty
, // prefix
1006 "http://baz/", // namespaceURI
1007 String
.Empty
, // value
1012 xmlReader
, // xmlReader
1014 String
.Empty
, // prefix
1015 "xmlns", // localName
1016 "http://www.w3.org/2000/xmlns/", // namespaceURI
1017 "http://baz/" // value
1020 AssertEquals ("http://foo/", xmlReader
.LookupNamespace ("foo"));
1021 AssertEquals ("http://baz/", xmlReader
.LookupNamespace (String
.Empty
));
1024 xmlReader
, // xmlReader
1025 XmlNodeType
.EndElement
, // nodeType
1027 false, // isEmptyElement
1031 "http://foo/", // namespaceURI
1032 String
.Empty
, // value
1036 AssertEquals ("http://foo/", xmlReader
.LookupNamespace ("foo"));
1038 AssertEndDocument (xmlReader
);
1042 public void AttributeInNamespace ()
1044 string xml
= @"<foo bar:baz='quux' xmlns:bar='http://bar/' />";
1045 RunTest (xml
, new TestMethod (AttributeInNamespace
));
1048 public void AttributeInNamespace (XmlReader xmlReader
)
1050 AssertStartDocument (xmlReader
);
1053 xmlReader
, // xmlReader
1054 XmlNodeType
.Element
, // nodeType
1056 true, // isEmptyElement
1058 String
.Empty
, // prefix
1060 String
.Empty
, // namespaceURI
1061 String
.Empty
, // value
1066 xmlReader
, // xmlReader
1070 "http://bar/", // namespaceURI
1075 xmlReader
, // xmlReader
1076 "xmlns:bar", // name
1079 "http://www.w3.org/2000/xmlns/", // namespaceURI
1080 "http://bar/" // value
1083 AssertEquals ("http://bar/", xmlReader
.LookupNamespace ("bar"));
1085 AssertEndDocument (xmlReader
);
1089 public void MoveToElementFromAttribute ()
1091 string xml
= @"<foo bar=""baz"" />";
1092 RunTest (xml
, new TestMethod (MoveToElementFromAttribute
));
1095 public void MoveToElementFromAttribute (XmlReader xmlReader
)
1097 Assert (xmlReader
.Read ());
1098 AssertEquals (XmlNodeType
.Element
, xmlReader
.NodeType
);
1099 Assert (xmlReader
.MoveToFirstAttribute ());
1100 AssertEquals (XmlNodeType
.Attribute
, xmlReader
.NodeType
);
1101 Assert (xmlReader
.MoveToElement ());
1102 AssertEquals (XmlNodeType
.Element
, xmlReader
.NodeType
);
1106 public void MoveToElementFromElement ()
1108 string xml
= @"<foo bar=""baz"" />";
1109 RunTest (xml
, new TestMethod (MoveToElementFromElement
));
1112 public void MoveToElementFromElement (XmlReader xmlReader
)
1114 Assert (xmlReader
.Read ());
1115 AssertEquals (XmlNodeType
.Element
, xmlReader
.NodeType
);
1116 Assert (!xmlReader
.MoveToElement ());
1117 AssertEquals (XmlNodeType
.Element
, xmlReader
.NodeType
);
1121 public void MoveToFirstAttributeWithNoAttributes ()
1123 string xml
= @"<foo />";
1124 RunTest (xml
, new TestMethod (MoveToFirstAttributeWithNoAttributes
));
1127 public void MoveToFirstAttributeWithNoAttributes (XmlReader xmlReader
)
1129 Assert (xmlReader
.Read ());
1130 AssertEquals (XmlNodeType
.Element
, xmlReader
.NodeType
);
1131 Assert (!xmlReader
.MoveToFirstAttribute ());
1132 AssertEquals (XmlNodeType
.Element
, xmlReader
.NodeType
);
1136 public void MoveToNextAttributeWithNoAttributes ()
1138 string xml
= @"<foo />";
1139 RunTest (xml
, new TestMethod (MoveToNextAttributeWithNoAttributes
));
1142 public void MoveToNextAttributeWithNoAttributes (XmlReader xmlReader
)
1144 Assert (xmlReader
.Read ());
1145 AssertEquals (XmlNodeType
.Element
, xmlReader
.NodeType
);
1146 Assert (!xmlReader
.MoveToNextAttribute ());
1147 AssertEquals (XmlNodeType
.Element
, xmlReader
.NodeType
);
1151 public void MoveToNextAttribute()
1153 string xml
= @"<foo bar=""baz"" quux='quuux'/>";
1154 RunTest (xml
, new TestMethod (MoveToNextAttribute
));
1157 public void MoveToNextAttribute (XmlReader xmlReader
)
1159 AssertStartDocument (xmlReader
);
1162 xmlReader
, // xmlReader
1163 XmlNodeType
.Element
, // nodeType
1165 true, // isEmptyElement
1167 String
.Empty
, // prefix
1169 String
.Empty
, // namespaceURI
1170 String
.Empty
, // value
1175 xmlReader
, // xmlReader
1177 String
.Empty
, // prefix
1179 String
.Empty
, // namespaceURI
1184 xmlReader
, // xmlReader
1186 String
.Empty
, // prefix
1187 "quux", // localName
1188 String
.Empty
, // namespaceURI
1192 Assert (xmlReader
.MoveToNextAttribute ());
1193 AssertEquals ("bar", xmlReader
.Name
);
1194 AssertEquals ("baz", xmlReader
.Value
);
1196 Assert (xmlReader
.MoveToNextAttribute ());
1197 AssertEquals ("quux", xmlReader
.Name
);
1198 AssertEquals ("quuux", xmlReader
.Value
);
1200 Assert (!xmlReader
.MoveToNextAttribute ());
1202 Assert (xmlReader
.MoveToElement ());
1205 xmlReader
, // xmlReader
1206 XmlNodeType
.Element
, // nodeType
1208 true, // isEmptyElement
1210 String
.Empty
, // prefix
1212 String
.Empty
, // namespaceURI
1213 String
.Empty
, // value
1217 AssertEndDocument (xmlReader
);
1221 [Ignore ("XmlNodeReader never moves to xml declaration.")]
1222 public void MoveToXmlDeclAttributes ()
1224 string xml
= "<?xml version=\"1.0\" standalone=\"yes\"?><root/>";
1225 RunTest (xml
, new TestMethod (MoveToXmlDeclAttributes
));
1228 public void MoveToXmlDeclAttributes (XmlReader xmlReader
)
1231 this.AssertNodeValues (xmlReader
,
1232 XmlNodeType
.XmlDeclaration
,
1239 "version=\"1.0\" standalone=\"yes\"",
1241 xmlReader
.MoveToFirstAttribute ();
1242 this.AssertNodeValues (xmlReader
,
1243 XmlNodeType
.Attribute
,
1252 xmlReader
.ReadAttributeValue ();
1253 this.AssertNodeValues (xmlReader
,
1263 xmlReader
.MoveToNextAttribute ();
1264 this.AssertNodeValues (xmlReader
,
1265 XmlNodeType
.Attribute
,
1274 xmlReader
.ReadAttributeValue ();
1275 this.AssertNodeValues (xmlReader
,
1288 public void AttributeOrder ()
1290 string xml
= @"<foo _1='1' _2='2' _3='3' />";
1291 RunTest (xml
, new TestMethod (AttributeOrder
));
1294 public void AttributeOrder (XmlReader xmlReader
)
1296 Assert (xmlReader
.Read ());
1297 AssertEquals (XmlNodeType
.Element
, xmlReader
.NodeType
);
1299 Assert (xmlReader
.MoveToFirstAttribute ());
1300 AssertEquals ("_1", xmlReader
.Name
);
1301 Assert (xmlReader
.MoveToNextAttribute ());
1302 AssertEquals ("_2", xmlReader
.Name
);
1303 Assert (xmlReader
.MoveToNextAttribute ());
1304 AssertEquals ("_3", xmlReader
.Name
);
1306 Assert (!xmlReader
.MoveToNextAttribute ());
1310 public void IndexerAndAttributes ()
1312 string xml
= @"<?xml version='1.0' standalone='no'?><foo _1='1' _2='2' _3='3' />";
1313 RunTest (xml
, new TestMethod (IndexerAndAttributes
));
1316 public void IndexerAndAttributes (XmlReader xmlReader
)
1318 Assert (xmlReader
.Read ());
1319 AssertEquals ("1.0", xmlReader
["version"]);
1320 AssertEquals ("1.0", xmlReader
.GetAttribute ("version"));
1321 // .NET 1.1 BUG. XmlTextReader returns null, while XmlNodeReader returns "".
1322 AssertEquals (null, xmlReader
["encoding"]);
1323 AssertEquals (null, xmlReader
.GetAttribute ("encoding"));
1324 AssertEquals ("no", xmlReader
["standalone"]);
1325 AssertEquals ("no", xmlReader
.GetAttribute ("standalone"));
1326 AssertEquals ("1.0", xmlReader
[0]);
1327 AssertEquals ("1.0", xmlReader
.GetAttribute (0));
1328 AssertEquals ("no", xmlReader
[1]);
1329 AssertEquals ("no", xmlReader
.GetAttribute (1));
1331 Assert (xmlReader
.Read ());
1332 AssertEquals (XmlNodeType
.Element
, xmlReader
.NodeType
);
1333 AssertEquals ("1", xmlReader
["_1"]);
1335 Assert (xmlReader
.MoveToFirstAttribute ());
1336 AssertEquals ("_1", xmlReader
.Name
);
1337 AssertEquals ("1", xmlReader
["_1"]);
1338 Assert (xmlReader
.MoveToNextAttribute ());
1339 AssertEquals ("_2", xmlReader
.Name
);
1340 AssertEquals ("1", xmlReader
["_1"]);
1341 Assert (xmlReader
.MoveToNextAttribute ());
1342 AssertEquals ("_3", xmlReader
.Name
);
1343 AssertEquals ("1", xmlReader
["_1"]);
1345 Assert (!xmlReader
.MoveToNextAttribute ());
1349 public void ProhibitedMultipleAttributes ()
1351 string xml
= @"<foo _1='1' _1='1' />";
1353 RunTest (xml
, new TestMethod (ReadAll
));
1354 } catch (XmlException
) {
1356 xml
= @"<foo _1='1' _1='2' />";
1358 RunTest (xml
, new TestMethod (ReadAll
));
1359 } catch (XmlException
) {
1363 public void ReadAll (XmlReader xmlReader
)
1365 while (!xmlReader
.EOF
)
1370 public void SurrogatePairContent ()
1372 string xml
= "<root xmlns='𐄀'/>";
1373 RunTest (xml
, new TestMethod (SurrogatePairContent
));
1376 public void SurrogatePairContent (XmlReader xmlReader
)
1379 AssertEquals (true, xmlReader
.MoveToAttribute ("xmlns"));
1380 AssertEquals ("xmlns", xmlReader
.Name
);
1381 AssertEquals (2, xmlReader
.Value
.Length
);
1382 AssertEquals (0xD800, (int) xmlReader
.Value
[0]);
1383 AssertEquals (0xDD00, (int) xmlReader
.Value
[1]);
1387 public void ReadOuterXmlOnEndElement ()
1389 string xml
= "<root><foo></foo></root>";
1390 RunTest (xml
, new TestMethod (ReadOuterXmlOnEndElement
));
1393 public void ReadOuterXmlOnEndElement (XmlReader xmlReader
)
1398 AssertEquals (String
.Empty
, xmlReader
.ReadOuterXml ());
1402 public void ReadInnerXmlOnEndElement ()
1404 string xml
= "<root><foo></foo></root>";
1405 RunTest (xml
, new TestMethod (ReadInnerXmlOnEndElement
));
1408 private void ReadInnerXmlOnEndElement (XmlReader xmlReader
)
1413 AssertEquals (String
.Empty
, xmlReader
.ReadInnerXml ());