2 // System.Xml.XmlReaderCommonTests
\r
5 // Atsushi Enomoto <ginga@kit.hi-ho.ne.jp>
\r
7 // (C) 2003 Atsushi Enomoto
\r
8 // Note: Most of testcases are moved from XmlTextReaderTests.cs and
\r
9 // XmlNodeReaderTests.cs.
\r
16 using System.Xml.Schema;
\r
17 using System.Xml.XPath;
\r
19 using NUnit.Framework;
\r
21 namespace MonoTests.System.Xml
\r
24 public class XmlReaderTests : Assertion
\r
27 public void GetReady ()
\r
29 document = new XmlDocument ();
\r
30 document.LoadXml (xml1);
\r
33 XmlDocument document;
\r
34 const string xml1 = "<root attr1='value1'><child /></root>";
\r
35 const string xml2 = "<root><foo/><bar>test.</bar></root>";
\r
36 const string xml3 = "<root> test of <b>mixed</b> string.<![CDATA[ cdata string.]]></root>";
\r
37 const string xml4 = "<root>test of <b>mixed</b> string.</root>";
\r
41 // copy from XmlTextReaderTests
\r
42 private void AssertStartDocument (XmlReader xmlReader)
\r
44 Assert (xmlReader.ReadState == ReadState.Initial);
\r
45 Assert (xmlReader.NodeType == XmlNodeType.None);
\r
46 Assert (xmlReader.Depth == 0);
\r
47 Assert (!xmlReader.EOF);
\r
50 private void AssertNode (
\r
51 XmlReader xmlReader,
\r
52 XmlNodeType nodeType,
\r
54 bool isEmptyElement,
\r
58 string namespaceURI,
\r
62 AssertNode ("", xmlReader, nodeType, depth,
\r
63 isEmptyElement, name, prefix, localName,
\r
64 namespaceURI, value, attributeCount);
\r
67 private void AssertNode (
\r
69 XmlReader xmlReader,
\r
70 XmlNodeType nodeType,
\r
72 bool isEmptyElement,
\r
76 string namespaceURI,
\r
80 Assert (label + " Read() return value", xmlReader.Read ());
\r
81 Assert (label + " ReadState", xmlReader.ReadState == ReadState.Interactive);
\r
82 Assert (label + " !EOF", !xmlReader.EOF);
\r
83 AssertNodeValues (label, xmlReader, nodeType, depth,
\r
84 isEmptyElement, name, prefix, localName,
\r
85 namespaceURI, value, value != String.Empty,
\r
86 attributeCount, attributeCount > 0);
\r
89 private void AssertNodeValues (
\r
91 XmlReader xmlReader,
\r
92 XmlNodeType nodeType,
\r
94 bool isEmptyElement,
\r
98 string namespaceURI,
\r
100 int attributeCount)
\r
102 AssertNodeValues (label, xmlReader, nodeType, depth,
\r
103 isEmptyElement, name, prefix, localName,
\r
104 namespaceURI, value, value != String.Empty,
\r
105 attributeCount, attributeCount > 0);
\r
108 private void AssertNodeValues (
\r
110 XmlReader xmlReader,
\r
111 XmlNodeType nodeType,
\r
113 bool isEmptyElement,
\r
117 string namespaceURI,
\r
120 int attributeCount,
\r
121 bool hasAttributes)
\r
123 label = String.Concat (label, "(", xmlReader.GetType ().Name, ")");
\r
124 AssertEquals (label + ": NodeType", nodeType, xmlReader.NodeType);
\r
125 AssertEquals (label + ": IsEmptyElement", isEmptyElement, xmlReader.IsEmptyElement);
\r
127 AssertEquals (label + ": name", name, xmlReader.Name);
\r
129 AssertEquals (label + ": prefix", prefix, xmlReader.Prefix);
\r
131 AssertEquals (label + ": localName", localName, xmlReader.LocalName);
\r
133 AssertEquals (label + ": namespaceURI", namespaceURI, xmlReader.NamespaceURI);
\r
135 AssertEquals (label + ": Depth", depth, xmlReader.Depth);
\r
137 AssertEquals (label + ": hasValue", hasValue, xmlReader.HasValue);
\r
139 AssertEquals (label + ": Value", value, xmlReader.Value);
\r
141 AssertEquals (label + ": hasAttributes", hasAttributes, xmlReader.HasAttributes);
\r
143 AssertEquals (label + ": attributeCount", attributeCount, xmlReader.AttributeCount);
\r
146 private void AssertAttribute (
\r
147 XmlReader xmlReader,
\r
151 string namespaceURI,
\r
154 AssertEquals ("value", value, xmlReader [name]);
\r
156 Assert (xmlReader.GetAttribute (name) == value);
\r
158 if (namespaceURI != String.Empty) {
\r
159 Assert (xmlReader[localName, namespaceURI] == value);
\r
160 Assert (xmlReader.GetAttribute (localName, namespaceURI) == value);
\r
164 private void AssertEndDocument (XmlReader xmlReader)
\r
166 Assert ("could read", !xmlReader.Read ());
\r
167 AssertEquals ("NodeType is not XmlNodeType.None", XmlNodeType.None, xmlReader.NodeType);
\r
168 AssertEquals ("Depth is not 0", 0, xmlReader.Depth);
\r
169 AssertEquals ("ReadState is not ReadState.EndOfFile", ReadState.EndOfFile, xmlReader.ReadState);
\r
170 Assert ("not EOF", xmlReader.EOF);
\r
172 xmlReader.Close ();
\r
173 AssertEquals ("ReadState is not ReadState.Cosed", ReadState.Closed, xmlReader.ReadState);
\r
176 private delegate void TestMethod (XmlReader reader);
\r
178 private void RunTest (string xml, TestMethod method)
\r
180 xtr = new XmlTextReader (new StringReader (xml));
\r
184 xtr = new XmlTextReader (new StringReader (xml));
\r
185 XmlValidatingReader xvr = new XmlValidatingReader (xtr);
\r
186 xvr.ValidationType = ValidationType.DTD;
\r
187 xvr.EntityHandling = EntityHandling.ExpandCharEntities;
\r
191 xtr = new XmlTextReader (new StringReader (xml));
\r
192 xvr = new XmlValidatingReader (xtr);
\r
193 xvr.EntityHandling = EntityHandling.ExpandCharEntities;
\r
196 document.XmlResolver = null;
\r
197 document.LoadXml (xml);
\r
198 xnr = new XmlNodeReader (document);
\r
202 // XPathNavigatorReader tests
\r
203 System.Xml.XPath.XPathDocument doc = new System.Xml.XPath.XPathDocument (new StringReader (xml));
\r
204 XmlReader xpr = doc.CreateNavigator ().ReadSubtree ();
\r
215 public void InitialState ()
\r
217 RunTest (xml1, new TestMethod (InitialState));
\r
220 private void InitialState (XmlReader reader)
\r
222 AssertEquals ("Depth", 0, reader.Depth);
\r
223 AssertEquals ("EOF", false, reader.EOF);
\r
224 AssertEquals ("HasValue", false, reader.HasValue);
\r
225 AssertEquals ("IsEmptyElement", false, reader.IsEmptyElement);
\r
226 AssertEquals ("LocalName", String.Empty, reader.LocalName);
\r
227 AssertEquals ("NodeType", XmlNodeType.None, reader.NodeType);
\r
228 AssertEquals ("ReadState", ReadState.Initial, reader.ReadState);
\r
232 public void Read ()
\r
234 RunTest (xml1, new TestMethod (Read));
\r
237 public void Read (XmlReader reader)
\r
240 AssertEquals ("<root>.NodeType", XmlNodeType.Element, reader.NodeType);
\r
241 AssertEquals ("<root>.Name", "root", reader.Name);
\r
242 AssertEquals ("<root>.ReadState", ReadState.Interactive, reader.ReadState);
\r
243 AssertEquals ("<root>.Depth", 0, reader.Depth);
\r
247 AssertEquals ("<child/>.Depth", 1, reader.Depth);
\r
248 AssertEquals ("<child/>.NodeType", XmlNodeType.Element, reader.NodeType);
\r
249 AssertEquals ("<child/>.Name", "child", reader.Name);
\r
252 AssertEquals ("</root>.Depth", 0, reader.Depth);
\r
253 AssertEquals ("</root>.NodeType", XmlNodeType.EndElement, reader.NodeType);
\r
254 AssertEquals ("</root>.Name", "root", reader.Name);
\r
257 AssertEquals ("end.EOF", true, reader.EOF);
\r
258 AssertEquals ("end.NodeType", XmlNodeType.None, reader.NodeType);
\r
262 [Category ("NotDotNet")]
\r
263 public void ReadAttributeValue ()
\r
265 RunTest ("<root attr=''/>", new TestMethod (ReadAttributeValue));
\r
268 public void ReadAttributeValue (XmlReader reader)
\r
270 reader.Read (); // root
\r
271 Assert (reader.MoveToFirstAttribute ());
\r
272 // It looks like that MS.NET shows AttributeCount and
\r
273 // HasAttributes as the same as element node!
\r
274 this.AssertNodeValues ("#1",
\r
275 reader, XmlNodeType.Attribute,
\r
276 1, false, "attr", "", "attr", "", "", true, 1, true);
\r
277 Assert (reader.ReadAttributeValue ());
\r
278 // MS.NET XmlTextReader fails. Its Prefix returns
\r
279 // null instead of "". It is fixed in MS.NET 2.0.
\r
280 this.AssertNodeValues ("#2",
\r
281 reader, XmlNodeType.Text,
\r
282 2, false, "", "", "", "", "", true, 1, true);
\r
283 Assert (reader.MoveToElement ());
\r
284 this.AssertNodeValues ("#3",
\r
285 reader, XmlNodeType.Element,
\r
286 0, true, "root", "", "root", "", "", false, 1, true);
\r
290 public void ReadEmptyElement ()
\r
292 RunTest (xml2, new TestMethod (ReadEmptyElement));
\r
295 public void ReadEmptyElement (XmlReader reader)
\r
297 reader.Read (); // root
\r
298 AssertEquals (false, reader.IsEmptyElement);
\r
299 reader.Read (); // foo
\r
300 AssertEquals ("foo", reader.Name);
\r
301 AssertEquals (true, reader.IsEmptyElement);
\r
302 reader.Read (); // bar
\r
303 AssertEquals ("bar", reader.Name);
\r
304 AssertEquals (false, reader.IsEmptyElement);
\r
308 public void ReadStringFromElement ()
\r
310 RunTest (xml3, new TestMethod (ReadStringFromElement));
\r
313 public void ReadStringFromElement (XmlReader reader)
\r
315 // Note: ReadString() test works only when the reader is
\r
316 // positioned at the container element.
\r
317 // In case the reader is positioned at the first
\r
318 // character node, XmlTextReader and XmlNodeReader works
\r
322 string s = reader.ReadString ();
\r
323 AssertEquals ("readString.1.ret_val", " test of ", s);
\r
324 AssertEquals ("readString.1.Name", "b", reader.Name);
\r
325 s = reader.ReadString ();
\r
326 AssertEquals ("readString.2.ret_val", "mixed", s);
\r
327 AssertEquals ("readString.2.NodeType", XmlNodeType.EndElement, reader.NodeType);
\r
328 s = reader.ReadString (); // never proceeds.
\r
329 AssertEquals ("readString.3.ret_val", String.Empty, s);
\r
330 AssertEquals ("readString.3.NodeType", XmlNodeType.EndElement, reader.NodeType);
\r
332 AssertEquals ("readString.4.NodeType", XmlNodeType.Text, reader.NodeType);
\r
333 AssertEquals ("readString.4.Value", " string.", reader.Value);
\r
334 s = reader.ReadString (); // reads the same Text node.
\r
335 AssertEquals ("readString.5.ret_val", " string. cdata string.", s);
\r
336 AssertEquals ("readString.5.NodeType", XmlNodeType.EndElement, reader.NodeType);
\r
340 public void ReadInnerXml ()
\r
342 const string xml = "<root><foo>test of <b>mixed</b> string.</foo><bar /></root>";
\r
343 RunTest (xml, new TestMethod (ReadInnerXml));
\r
346 public void ReadInnerXml (XmlReader reader)
\r
350 AssertEquals ("initial.ReadState", ReadState.Interactive, reader.ReadState);
\r
351 AssertEquals ("initial.EOF", false, reader.EOF);
\r
352 AssertEquals ("initial.NodeType", XmlNodeType.Element, reader.NodeType);
\r
353 string s = reader.ReadInnerXml ();
\r
354 AssertEquals ("read_all", "test of <b>mixed</b> string.", s);
\r
355 AssertEquals ("after.Name", "bar", reader.Name);
\r
356 AssertEquals ("after.NodeType", XmlNodeType.Element, reader.NodeType);
\r
361 public void EmptyElement ()
\r
363 RunTest ("<foo/>", new TestMethod (EmptyElement));
\r
366 public void EmptyElement (XmlReader xmlReader)
\r
369 AssertStartDocument (xmlReader);
\r
372 xmlReader, // xmlReader
\r
373 XmlNodeType.Element, // nodeType
\r
375 true, // isEmptyElement
\r
377 String.Empty, // prefix
\r
378 "foo", // localName
\r
379 String.Empty, // namespaceURI
\r
380 String.Empty, // value
\r
381 0 // attributeCount
\r
384 AssertEndDocument (xmlReader);
\r
388 public void NestedEmptyTag ()
\r
390 string xml = "<foo><bar/></foo>";
\r
391 RunTest (xml, new TestMethod (NestedEmptyTag));
\r
394 public void NestedEmptyTag (XmlReader xmlReader)
\r
396 AssertStartDocument (xmlReader);
\r
400 xmlReader, // xmlReader
\r
401 XmlNodeType.Element, // nodeType
\r
403 false, // isEmptyElement
\r
405 String.Empty, // prefix
\r
406 "foo", // localName
\r
407 String.Empty, // namespaceURI
\r
408 String.Empty, // value
\r
409 0 // attributeCount
\r
414 xmlReader, // xmlReader
\r
415 XmlNodeType.Element, // nodeType
\r
417 true, // isEmptyElement
\r
419 String.Empty, // prefix
\r
420 "bar", // localName
\r
421 String.Empty, // namespaceURI
\r
422 String.Empty, // value
\r
423 0 // attributeCount
\r
428 xmlReader, // xmlReader
\r
429 XmlNodeType.EndElement, // nodeType
\r
431 false, // isEmptyElement
\r
433 String.Empty, // prefix
\r
434 "foo", // localName
\r
435 String.Empty, // namespaceURI
\r
436 String.Empty, // value
\r
437 0 // attributeCount
\r
440 AssertEndDocument (xmlReader);
\r
444 public void NestedText ()
\r
446 string xml = "<foo>bar</foo>";
\r
447 RunTest (xml, new TestMethod (NestedText));
\r
450 public void NestedText (XmlReader xmlReader)
\r
452 AssertStartDocument (xmlReader);
\r
455 xmlReader, // xmlReader
\r
456 XmlNodeType.Element, // nodeType
\r
458 false, // isEmptyElement
\r
460 String.Empty, // prefix
\r
461 "foo", // localName
\r
462 String.Empty, // namespaceURI
\r
463 String.Empty, // value
\r
464 0 // attributeCount
\r
468 xmlReader, // xmlReader
\r
469 XmlNodeType.Text, // nodeType
\r
471 false, // isEmptyElement
\r
472 String.Empty, // name
\r
473 String.Empty, // prefix
\r
474 String.Empty, // localName
\r
475 String.Empty, // namespaceURI
\r
477 0 // attributeCount
\r
481 xmlReader, // xmlReader
\r
482 XmlNodeType.EndElement, // nodeType
\r
484 false, // isEmptyElement
\r
486 String.Empty, // prefix
\r
487 "foo", // localName
\r
488 String.Empty, // namespaceURI
\r
489 String.Empty, // value
\r
490 0 // attributeCount
\r
493 AssertEndDocument (xmlReader);
\r
497 public void EmptyElementWithAttributes ()
\r
499 string xml = @"<foo bar=""baz"" quux='quuux' x:foo='x-foo' xmlns:x = 'urn:xfoo' />";
\r
500 RunTest (xml, new TestMethod (EmptyElementWithAttributes ));
\r
503 public void EmptyElementWithAttributes (XmlReader xmlReader)
\r
506 AssertStartDocument (xmlReader);
\r
509 xmlReader, // xmlReader
\r
510 XmlNodeType.Element, // nodeType
\r
512 true, // isEmptyElement
\r
514 String.Empty, // prefix
\r
515 "foo", // localName
\r
516 String.Empty, // namespaceURI
\r
517 String.Empty, // value
\r
518 4 // attributeCount
\r
522 xmlReader, // xmlReader
\r
524 String.Empty, // prefix
\r
525 "bar", // localName
\r
526 String.Empty, // namespaceURI
\r
531 xmlReader, // xmlReader
\r
533 String.Empty, // prefix
\r
534 "quux", // localName
\r
535 String.Empty, // namespaceURI
\r
540 xmlReader, // xmlReader
\r
541 "notexist", // name
\r
542 String.Empty, // prefix
\r
543 "notexist", // localName
\r
544 String.Empty, // namespaceURI
\r
549 xmlReader, // xmlReader
\r
552 "foo", // localName
\r
553 "urn:xfoo", // namespaceURI
\r
558 xmlReader, // xmlReader
\r
561 "bar", // localName
\r
562 "urn:xfoo", // namespaceURI
\r
566 AssertEndDocument (xmlReader);
\r
570 public void ProcessingInstructionBeforeDocumentElement ()
\r
572 string xml = "<?foo bar?><baz/>";
\r
573 RunTest (xml, new TestMethod (ProcessingInstructionBeforeDocumentElement));
\r
576 public void ProcessingInstructionBeforeDocumentElement (XmlReader xmlReader)
\r
578 AssertStartDocument (xmlReader);
\r
581 xmlReader, // xmlReader
\r
582 XmlNodeType.ProcessingInstruction, // nodeType
\r
584 false, // isEmptyElement
\r
586 String.Empty, // prefix
\r
587 "foo", // localName
\r
588 String.Empty, // namespaceURI
\r
590 0 // attributeCount
\r
594 xmlReader, // xmlReader
\r
595 XmlNodeType.Element, // nodeType
\r
597 true, // isEmptyElement
\r
599 String.Empty, // prefix
\r
600 "baz", // localName
\r
601 String.Empty, // namespaceURI
\r
602 String.Empty, // value
\r
603 0 // attributeCount
\r
606 AssertEndDocument (xmlReader);
\r
610 public void CommentBeforeDocumentElement ()
\r
612 string xml = "<!--foo--><bar/>";
\r
613 RunTest (xml, new TestMethod (CommentBeforeDocumentElement));
\r
616 public void CommentBeforeDocumentElement (XmlReader xmlReader)
\r
618 AssertStartDocument (xmlReader);
\r
621 xmlReader, // xmlReader
\r
622 XmlNodeType.Comment, // nodeType
\r
624 false, // isEmptyElement
\r
625 String.Empty, // name
\r
626 String.Empty, // prefix
\r
627 String.Empty, // localName
\r
628 String.Empty, // namespaceURI
\r
630 0 // attributeCount
\r
634 xmlReader, // xmlReader
\r
635 XmlNodeType.Element, // nodeType
\r
637 true, // isEmptyElement
\r
639 String.Empty, // prefix
\r
640 "bar", // localName
\r
641 String.Empty, // namespaceURI
\r
642 String.Empty, // value
\r
643 0 // attributeCount
\r
646 AssertEndDocument (xmlReader);
\r
650 public void PredefinedEntities ()
\r
652 string xml = "<foo><>&'"</foo>";
\r
653 RunTest (xml, new TestMethod (PredefinedEntities));
\r
656 public void PredefinedEntities (XmlReader xmlReader)
\r
658 AssertStartDocument (xmlReader);
\r
661 xmlReader, // xmlReader
\r
662 XmlNodeType.Element, // nodeType
\r
664 false, // isEmptyElement
\r
666 String.Empty, // prefix
\r
667 "foo", // localName
\r
668 String.Empty, // namespaceURI
\r
669 String.Empty, // value
\r
670 0 // attributeCount
\r
674 xmlReader, // xmlReader
\r
675 XmlNodeType.Text, // nodeType
\r
677 false, // isEmptyElement
\r
678 String.Empty, // name
\r
679 String.Empty, // prefix
\r
680 String.Empty, // localName
\r
681 String.Empty, // namespaceURI
\r
683 0 // attributeCount
\r
687 xmlReader, // xmlReader
\r
688 XmlNodeType.EndElement, // nodeType
\r
690 false, // isEmptyElement
\r
692 String.Empty, // prefix
\r
693 "foo", // localName
\r
694 String.Empty, // namespaceURI
\r
695 String.Empty, // value
\r
696 0 // attributeCount
\r
699 AssertEndDocument (xmlReader);
\r
703 public void CharacterReferences ()
\r
705 string xml = "<foo>FOO</foo>";
\r
706 RunTest (xml, new TestMethod (CharacterReferences));
\r
709 public void CharacterReferences (XmlReader xmlReader)
\r
711 AssertStartDocument (xmlReader);
\r
714 xmlReader, // xmlReader
\r
715 XmlNodeType.Element, // nodeType
\r
717 false, // isEmptyElement
\r
719 String.Empty, // prefix
\r
720 "foo", // localName
\r
721 String.Empty, // namespaceURI
\r
722 String.Empty, // value
\r
723 0 // attributeCount
\r
727 xmlReader, // xmlReader
\r
728 XmlNodeType.Text, // nodeType
\r
730 false, // isEmptyElement
\r
731 String.Empty, // name
\r
732 String.Empty, // prefix
\r
733 String.Empty, // localName
\r
734 String.Empty, // namespaceURI
\r
736 0 // attributeCount
\r
740 xmlReader, // xmlReader
\r
741 XmlNodeType.EndElement, // nodeType
\r
743 false, // isEmptyElement
\r
745 String.Empty, // prefix
\r
746 "foo", // localName
\r
747 String.Empty, // namespaceURI
\r
748 String.Empty, // value
\r
749 0 // attributeCount
\r
752 AssertEndDocument (xmlReader);
\r
756 public void PredefinedEntitiesInAttribute ()
\r
758 string xml = "<foo bar='<>&'"'/>";
\r
759 RunTest (xml, new TestMethod (PredefinedEntitiesInAttribute ));
\r
762 public void PredefinedEntitiesInAttribute (XmlReader xmlReader)
\r
764 AssertStartDocument (xmlReader);
\r
767 xmlReader, // xmlReader
\r
768 XmlNodeType.Element, // nodeType
\r
770 true, // isEmptyElement
\r
772 String.Empty, // prefix
\r
773 "foo", // localName
\r
774 String.Empty, // namespaceURI
\r
775 String.Empty, // value
\r
776 1 // attributeCount
\r
780 xmlReader, // xmlReader
\r
782 String.Empty, // prefix
\r
783 "bar", // localName
\r
784 String.Empty, // namespaceURI
\r
788 AssertEndDocument (xmlReader);
\r
792 public void CharacterReferencesInAttribute ()
\r
794 string xml = "<foo bar='FOO'/>";
\r
795 RunTest (xml, new TestMethod (CharacterReferencesInAttribute));
\r
798 public void CharacterReferencesInAttribute (XmlReader xmlReader)
\r
800 AssertStartDocument (xmlReader);
\r
803 xmlReader, // xmlReader
\r
804 XmlNodeType.Element, // nodeType
\r
806 true, // isEmptyElement
\r
808 String.Empty, // prefix
\r
809 "foo", // localName
\r
810 String.Empty, // namespaceURI
\r
811 String.Empty, // value
\r
812 1 // attributeCount
\r
816 xmlReader, // xmlReader
\r
818 String.Empty, // prefix
\r
819 "bar", // localName
\r
820 String.Empty, // namespaceURI
\r
824 AssertEndDocument (xmlReader);
\r
828 public void CDATA ()
\r
830 string xml = "<foo><![CDATA[<>&]]></foo>";
\r
831 RunTest (xml, new TestMethod (CDATA));
\r
834 public void CDATA (XmlReader xmlReader)
\r
836 AssertStartDocument (xmlReader);
\r
839 xmlReader, // xmlReader
\r
840 XmlNodeType.Element, // nodeType
\r
842 false, // isEmptyElement
\r
844 String.Empty, // prefix
\r
845 "foo", // localName
\r
846 String.Empty, // namespaceURI
\r
847 String.Empty, // value
\r
848 0 // attributeCount
\r
852 xmlReader, // xmlReader
\r
853 XmlNodeType.CDATA, // nodeType
\r
855 false, // isEmptyElement
\r
856 String.Empty, // name
\r
857 String.Empty, // prefix
\r
858 String.Empty, // localName
\r
859 String.Empty, // namespaceURI
\r
861 0 // attributeCount
\r
865 xmlReader, // xmlReader
\r
866 XmlNodeType.EndElement, // nodeType
\r
868 false, // isEmptyElement
\r
870 String.Empty, // prefix
\r
871 "foo", // localName
\r
872 String.Empty, // namespaceURI
\r
873 String.Empty, // value
\r
874 0 // attributeCount
\r
877 AssertEndDocument (xmlReader);
\r
881 public void EmptyElementInDefaultNamespace ()
\r
883 string xml = @"<foo xmlns='http://foo/' />";
\r
884 RunTest (xml, new TestMethod (EmptyElementInDefaultNamespace));
\r
887 public void EmptyElementInDefaultNamespace (XmlReader xmlReader)
\r
889 AssertStartDocument (xmlReader);
\r
892 xmlReader, // xmlReader
\r
893 XmlNodeType.Element, // nodeType
\r
895 true, // isEmptyElement
\r
897 String.Empty, // prefix
\r
898 "foo", // localName
\r
899 "http://foo/", // namespaceURI
\r
900 String.Empty, // value
\r
901 1 // attributeCount
\r
905 xmlReader, // xmlReader
\r
907 String.Empty, // prefix
\r
908 "xmlns", // localName
\r
909 "http://www.w3.org/2000/xmlns/", // namespaceURI
\r
910 "http://foo/" // value
\r
913 AssertEquals ("http://foo/", xmlReader.LookupNamespace (String.Empty));
\r
915 AssertEndDocument (xmlReader);
\r
919 public void ChildElementInNamespace ()
\r
921 string xml = @"<foo:bar xmlns:foo='http://foo/'><baz:quux xmlns:baz='http://baz/' /></foo:bar>";
\r
922 RunTest (xml, new TestMethod (ChildElementInNamespace));
\r
925 public void ChildElementInNamespace (XmlReader xmlReader)
\r
927 AssertStartDocument (xmlReader);
\r
930 xmlReader, // xmlReader
\r
931 XmlNodeType.Element, // nodeType
\r
933 false, // isEmptyElement
\r
936 "bar", // localName
\r
937 "http://foo/", // namespaceURI
\r
938 String.Empty, // value
\r
939 1 // attributeCount
\r
943 xmlReader, // xmlReader
\r
944 "xmlns:foo", // name
\r
946 "foo", // localName
\r
947 "http://www.w3.org/2000/xmlns/", // namespaceURI
\r
948 "http://foo/" // value
\r
951 AssertEquals ("http://foo/", xmlReader.LookupNamespace ("foo"));
\r
954 xmlReader, // xmlReader
\r
955 XmlNodeType.Element, // nodeType
\r
957 true, // isEmptyElement
\r
958 "baz:quux", // name
\r
960 "quux", // localName
\r
961 "http://baz/", // namespaceURI
\r
962 String.Empty, // value
\r
963 1 // attributeCount
\r
967 xmlReader, // xmlReader
\r
968 "xmlns:baz", // name
\r
970 "baz", // localName
\r
971 "http://www.w3.org/2000/xmlns/", // namespaceURI
\r
972 "http://baz/" // value
\r
975 AssertEquals ("http://foo/", xmlReader.LookupNamespace ("foo"));
\r
976 AssertEquals ("http://baz/", xmlReader.LookupNamespace ("baz"));
\r
979 xmlReader, // xmlReader
\r
980 XmlNodeType.EndElement, // nodeType
\r
982 false, // isEmptyElement
\r
985 "bar", // localName
\r
986 "http://foo/", // namespaceURI
\r
987 String.Empty, // value
\r
988 0 // attributeCount
\r
991 AssertEquals ("http://foo/", xmlReader.LookupNamespace ("foo"));
\r
992 AssertNull (xmlReader.LookupNamespace ("baz"));
\r
994 AssertEndDocument (xmlReader);
\r
998 public void ChildElementInDefaultNamespace ()
\r
1000 string xml = @"<foo:bar xmlns:foo='http://foo/'><baz xmlns='http://baz/' /></foo:bar>";
\r
1001 RunTest (xml, new TestMethod (ChildElementInDefaultNamespace));
\r
1004 public void ChildElementInDefaultNamespace (XmlReader xmlReader)
\r
1006 AssertStartDocument (xmlReader);
\r
1009 xmlReader, // xmlReader
\r
1010 XmlNodeType.Element, // nodeType
\r
1012 false, // isEmptyElement
\r
1013 "foo:bar", // name
\r
1015 "bar", // localName
\r
1016 "http://foo/", // namespaceURI
\r
1017 String.Empty, // value
\r
1018 1 // attributeCount
\r
1022 xmlReader, // xmlReader
\r
1023 "xmlns:foo", // name
\r
1024 "xmlns", // prefix
\r
1025 "foo", // localName
\r
1026 "http://www.w3.org/2000/xmlns/", // namespaceURI
\r
1027 "http://foo/" // value
\r
1030 AssertEquals ("http://foo/", xmlReader.LookupNamespace ("foo"));
\r
1033 xmlReader, // xmlReader
\r
1034 XmlNodeType.Element, // nodeType
\r
1036 true, // isEmptyElement
\r
1038 String.Empty, // prefix
\r
1039 "baz", // localName
\r
1040 "http://baz/", // namespaceURI
\r
1041 String.Empty, // value
\r
1042 1 // attributeCount
\r
1046 xmlReader, // xmlReader
\r
1048 String.Empty, // prefix
\r
1049 "xmlns", // localName
\r
1050 "http://www.w3.org/2000/xmlns/", // namespaceURI
\r
1051 "http://baz/" // value
\r
1054 AssertEquals ("http://foo/", xmlReader.LookupNamespace ("foo"));
\r
1055 AssertEquals ("http://baz/", xmlReader.LookupNamespace (String.Empty));
\r
1058 xmlReader, // xmlReader
\r
1059 XmlNodeType.EndElement, // nodeType
\r
1061 false, // isEmptyElement
\r
1062 "foo:bar", // name
\r
1064 "bar", // localName
\r
1065 "http://foo/", // namespaceURI
\r
1066 String.Empty, // value
\r
1067 0 // attributeCount
\r
1070 AssertEquals ("http://foo/", xmlReader.LookupNamespace ("foo"));
\r
1072 AssertEndDocument (xmlReader);
\r
1076 public void AttributeInNamespace ()
\r
1078 string xml = @"<foo bar:baz='quux' xmlns:bar='http://bar/' />";
\r
1079 RunTest (xml, new TestMethod (AttributeInNamespace));
\r
1082 public void AttributeInNamespace (XmlReader xmlReader)
\r
1084 AssertStartDocument (xmlReader);
\r
1087 xmlReader, // xmlReader
\r
1088 XmlNodeType.Element, // nodeType
\r
1090 true, // isEmptyElement
\r
1092 String.Empty, // prefix
\r
1093 "foo", // localName
\r
1094 String.Empty, // namespaceURI
\r
1095 String.Empty, // value
\r
1096 2 // attributeCount
\r
1100 xmlReader, // xmlReader
\r
1101 "bar:baz", // name
\r
1103 "baz", // localName
\r
1104 "http://bar/", // namespaceURI
\r
1109 xmlReader, // xmlReader
\r
1110 "xmlns:bar", // name
\r
1111 "xmlns", // prefix
\r
1112 "bar", // localName
\r
1113 "http://www.w3.org/2000/xmlns/", // namespaceURI
\r
1114 "http://bar/" // value
\r
1117 AssertEquals ("http://bar/", xmlReader.LookupNamespace ("bar"));
\r
1119 AssertEndDocument (xmlReader);
\r
1123 public void MoveToElementFromAttribute ()
\r
1125 string xml = @"<foo bar=""baz"" />";
\r
1126 RunTest (xml, new TestMethod (MoveToElementFromAttribute));
\r
1129 public void MoveToElementFromAttribute (XmlReader xmlReader)
\r
1131 Assert (xmlReader.Read ());
\r
1132 AssertEquals (XmlNodeType.Element, xmlReader.NodeType);
\r
1133 Assert (xmlReader.MoveToFirstAttribute ());
\r
1134 AssertEquals (XmlNodeType.Attribute, xmlReader.NodeType);
\r
1135 Assert (xmlReader.MoveToElement ());
\r
1136 AssertEquals (XmlNodeType.Element, xmlReader.NodeType);
\r
1140 public void MoveToElementFromElement ()
\r
1142 string xml = @"<foo bar=""baz"" />";
\r
1143 RunTest (xml, new TestMethod (MoveToElementFromElement));
\r
1146 public void MoveToElementFromElement (XmlReader xmlReader)
\r
1148 Assert (xmlReader.Read ());
\r
1149 AssertEquals (XmlNodeType.Element, xmlReader.NodeType);
\r
1150 Assert (!xmlReader.MoveToElement ());
\r
1151 AssertEquals (XmlNodeType.Element, xmlReader.NodeType);
\r
1155 public void MoveToFirstAttributeWithNoAttributes ()
\r
1157 string xml = @"<foo />";
\r
1158 RunTest (xml, new TestMethod (MoveToFirstAttributeWithNoAttributes));
\r
1161 public void MoveToFirstAttributeWithNoAttributes (XmlReader xmlReader)
\r
1163 Assert (xmlReader.Read ());
\r
1164 AssertEquals (XmlNodeType.Element, xmlReader.NodeType);
\r
1165 Assert (!xmlReader.MoveToFirstAttribute ());
\r
1166 AssertEquals (XmlNodeType.Element, xmlReader.NodeType);
\r
1170 public void MoveToNextAttributeWithNoAttributes ()
\r
1172 string xml = @"<foo />";
\r
1173 RunTest (xml, new TestMethod (MoveToNextAttributeWithNoAttributes));
\r
1176 public void MoveToNextAttributeWithNoAttributes (XmlReader xmlReader)
\r
1178 Assert (xmlReader.Read ());
\r
1179 AssertEquals (XmlNodeType.Element, xmlReader.NodeType);
\r
1180 Assert (!xmlReader.MoveToNextAttribute ());
\r
1181 AssertEquals (XmlNodeType.Element, xmlReader.NodeType);
\r
1185 public void MoveToNextAttribute()
\r
1187 string xml = @"<foo bar=""baz"" quux='quuux'/>";
\r
1188 RunTest (xml, new TestMethod (MoveToNextAttribute));
\r
1191 public void MoveToNextAttribute (XmlReader xmlReader)
\r
1193 AssertStartDocument (xmlReader);
\r
1196 xmlReader, // xmlReader
\r
1197 XmlNodeType.Element, // nodeType
\r
1199 true, // isEmptyElement
\r
1201 String.Empty, // prefix
\r
1202 "foo", // localName
\r
1203 String.Empty, // namespaceURI
\r
1204 String.Empty, // value
\r
1205 2 // attributeCount
\r
1209 xmlReader, // xmlReader
\r
1211 String.Empty, // prefix
\r
1212 "bar", // localName
\r
1213 String.Empty, // namespaceURI
\r
1218 xmlReader, // xmlReader
\r
1220 String.Empty, // prefix
\r
1221 "quux", // localName
\r
1222 String.Empty, // namespaceURI
\r
1226 Assert (xmlReader.MoveToNextAttribute ());
\r
1227 AssertEquals ("bar", xmlReader.Name);
\r
1228 AssertEquals ("baz", xmlReader.Value);
\r
1230 Assert (xmlReader.MoveToNextAttribute ());
\r
1231 AssertEquals ("quux", xmlReader.Name);
\r
1232 AssertEquals ("quuux", xmlReader.Value);
\r
1234 Assert (!xmlReader.MoveToNextAttribute ());
\r
1236 Assert (xmlReader.MoveToElement ());
\r
1238 AssertNodeValues (
\r
1240 xmlReader, // xmlReader
\r
1241 XmlNodeType.Element, // nodeType
\r
1243 true, // isEmptyElement
\r
1245 String.Empty, // prefix
\r
1246 "foo", // localName
\r
1247 String.Empty, // namespaceURI
\r
1248 String.Empty, // value
\r
1249 2 // attributeCount
\r
1252 AssertEndDocument (xmlReader);
\r
1256 // [Category ("NotDotNet")] // MS XmlNodeReader never moves to xml declaration.
\r
1257 [Ignore ("Too inconsistent reference implementations to determine which is correct behavior.")]
\r
1258 public void MoveToXmlDeclAttributes ()
\r
1260 string xml = "<?xml version=\"1.0\" standalone=\"yes\"?><root/>";
\r
1261 RunTest (xml, new TestMethod (MoveToXmlDeclAttributes));
\r
1264 public void MoveToXmlDeclAttributes (XmlReader xmlReader)
\r
1266 xmlReader.Read ();
\r
1267 this.AssertNodeValues ("#1", xmlReader,
\r
1268 XmlNodeType.XmlDeclaration,
\r
1275 "version=\"1.0\" standalone=\"yes\"",
\r
1277 Assert ("MoveToFirstAttribute",
\r
1278 xmlReader.MoveToFirstAttribute ());
\r
1279 this.AssertNodeValues ("#2", xmlReader,
\r
1280 XmlNodeType.Attribute,
\r
1281 0, // FIXME: might be 1
\r
1289 xmlReader.ReadAttributeValue ();
\r
1290 this.AssertNodeValues ("#3", xmlReader,
\r
1292 1, // FIXME might be 2
\r
1295 null, // FIXME: should be String.Empty,
\r
1297 null, // FIXME: should be String.Empty,
\r
1300 xmlReader.MoveToNextAttribute ();
\r
1301 this.AssertNodeValues ("#4", xmlReader,
\r
1302 XmlNodeType.Attribute,
\r
1303 0, // FIXME: might be 1
\r
1311 xmlReader.ReadAttributeValue ();
\r
1312 this.AssertNodeValues ("#5", xmlReader,
\r
1314 1, // FIXME: might be 2
\r
1317 null, // FIXME: should be String.Empty,
\r
1319 null, // FIXME: should be String.Empty,
\r
1325 public void AttributeOrder ()
\r
1327 string xml = @"<foo _1='1' _2='2' _3='3' />";
\r
1328 RunTest (xml, new TestMethod (AttributeOrder));
\r
1331 public void AttributeOrder (XmlReader xmlReader)
\r
1333 Assert (xmlReader.Read ());
\r
1334 AssertEquals (XmlNodeType.Element, xmlReader.NodeType);
\r
1336 Assert (xmlReader.MoveToFirstAttribute ());
\r
1337 AssertEquals ("_1", xmlReader.Name);
\r
1338 Assert (xmlReader.MoveToNextAttribute ());
\r
1339 AssertEquals ("_2", xmlReader.Name);
\r
1340 Assert (xmlReader.MoveToNextAttribute ());
\r
1341 AssertEquals ("_3", xmlReader.Name);
\r
1343 Assert (!xmlReader.MoveToNextAttribute ());
\r
1347 [Category ("NotDotNet")]
\r
1348 public void IndexerAndAttributes ()
\r
1350 string xml = @"<?xml version='1.0' standalone='no'?><foo _1='1' _2='2' _3='3' />";
\r
1351 RunTest (xml, new TestMethod (IndexerAndAttributes));
\r
1354 public void IndexerAndAttributes (XmlReader xmlReader)
\r
1356 Assert (xmlReader.Read ());
\r
1357 AssertEquals ("1.0", xmlReader ["version"]);
\r
1358 AssertEquals ("1.0", xmlReader.GetAttribute ("version"));
\r
1359 // .NET 1.1 BUG. XmlTextReader returns null, while XmlNodeReader returns "".
\r
1360 AssertEquals (null, xmlReader ["encoding"]);
\r
1361 AssertEquals (null, xmlReader.GetAttribute ("encoding"));
\r
1362 AssertEquals ("no", xmlReader ["standalone"]);
\r
1363 AssertEquals ("no", xmlReader.GetAttribute ("standalone"));
\r
1364 AssertEquals ("1.0", xmlReader [0]);
\r
1365 AssertEquals ("1.0", xmlReader.GetAttribute (0));
\r
1366 AssertEquals ("no", xmlReader [1]);
\r
1367 AssertEquals ("no", xmlReader.GetAttribute (1));
\r
1369 Assert (xmlReader.Read ());
\r
1370 AssertEquals (XmlNodeType.Element, xmlReader.NodeType);
\r
1371 AssertEquals ("1", xmlReader ["_1"]);
\r
1373 Assert (xmlReader.MoveToFirstAttribute ());
\r
1374 AssertEquals ("_1", xmlReader.Name);
\r
1375 AssertEquals ("1", xmlReader ["_1"]);
\r
1376 Assert (xmlReader.MoveToNextAttribute ());
\r
1377 AssertEquals ("_2", xmlReader.Name);
\r
1378 AssertEquals ("1", xmlReader ["_1"]);
\r
1379 Assert (xmlReader.MoveToNextAttribute ());
\r
1380 AssertEquals ("_3", xmlReader.Name);
\r
1381 AssertEquals ("1", xmlReader ["_1"]);
\r
1383 Assert (!xmlReader.MoveToNextAttribute ());
\r
1387 public void ProhibitedMultipleAttributes ()
\r
1389 string xml = @"<foo _1='1' _1='1' />";
\r
1391 RunTest (xml, new TestMethod (ReadAll));
\r
1392 } catch (XmlException) {
\r
1394 xml = @"<foo _1='1' _1='2' />";
\r
1396 RunTest (xml, new TestMethod (ReadAll));
\r
1397 } catch (XmlException) {
\r
1401 public void ReadAll (XmlReader xmlReader)
\r
1403 while (!xmlReader.EOF)
\r
1404 xmlReader.Read ();
\r
1408 public void SurrogatePairContent ()
\r
1410 string xml = "<root xmlns='𐄀'/>";
\r
1411 RunTest (xml, new TestMethod (SurrogatePairContent));
\r
1414 public void SurrogatePairContent (XmlReader xmlReader)
\r
1416 xmlReader.Read ();
\r
1417 AssertEquals (true, xmlReader.MoveToAttribute ("xmlns"));
\r
1418 AssertEquals ("xmlns", xmlReader.Name);
\r
1419 AssertEquals (2, xmlReader.Value.Length);
\r
1420 AssertEquals (0xD800, (int) xmlReader.Value [0]);
\r
1421 AssertEquals (0xDD00, (int) xmlReader.Value [1]);
\r
1425 public void ReadOuterXmlOnEndElement ()
\r
1427 string xml = "<root><foo></foo></root>";
\r
1428 RunTest (xml, new TestMethod (ReadOuterXmlOnEndElement));
\r
1431 public void ReadOuterXmlOnEndElement (XmlReader xmlReader)
\r
1433 xmlReader.Read ();
\r
1434 xmlReader.Read ();
\r
1435 xmlReader.Read ();
\r
1436 AssertEquals (String.Empty, xmlReader.ReadOuterXml ());
\r
1440 public void ReadInnerXmlOnEndElement ()
\r
1442 string xml = "<root><foo></foo></root>";
\r
1443 RunTest (xml, new TestMethod (ReadInnerXmlOnEndElement));
\r
1446 private void ReadInnerXmlOnEndElement (XmlReader xmlReader)
\r
1448 xmlReader.Read ();
\r
1449 xmlReader.Read ();
\r
1450 xmlReader.Read ();
\r
1451 AssertEquals (String.Empty, xmlReader.ReadInnerXml ());
\r
1455 public void LookupEmptyPrefix ()
\r
1457 string xml = "<root><foo></foo></root>";
\r
1458 RunTest (xml, new TestMethod (LookupEmptyPrefix));
\r
1461 void LookupEmptyPrefix (XmlReader xmlReader)
\r
1463 xmlReader.Read ();
\r
1464 AssertNull (xmlReader.LookupNamespace (String.Empty));
\r
1468 public void ReadStartElement ()
\r
1470 string xml = "<root>test</root>";
\r
1471 RunTest (xml, new TestMethod (ReadStartElement));
\r
1474 void ReadStartElement (XmlReader xr)
\r
1477 xr.ReadStartElement ();
\r
1478 // consume Element node.
\r
1479 AssertEquals (XmlNodeType.Text, xr.NodeType);
\r
1483 public void LookupNamespaceAtEndElement ()
\r
1485 string xml = "<root xmlns:x='urn:foo'><foo/></root>";
\r
1486 RunTest (xml, new TestMethod (LookupNamespaceAtEndElement));
\r
1489 void LookupNamespaceAtEndElement (XmlReader reader)
\r
1492 AssertEquals ("#1", "urn:foo", reader.LookupNamespace ("x"));
\r
1494 AssertEquals ("#2", "urn:foo", reader.LookupNamespace ("x"));
\r
1496 AssertEquals ("#3", "urn:foo", reader.LookupNamespace ("x"));
\r
1501 public void CreateSimple ()
\r
1503 XmlReaderSettings s = new XmlReaderSettings ();
\r
1504 s.ProhibitDtd = false;
\r
1505 XmlReader xr = XmlReader.Create ("Test/XmlFiles/nested-dtd-test.xml", s);
\r
1507 AssertEquals ("#1", XmlNodeType.DocumentType, xr.NodeType);
\r
1509 AssertEquals ("#2", XmlNodeType.Whitespace, xr.NodeType);
\r
1511 AssertEquals ("#3", XmlNodeType.Element, xr.NodeType);
\r
1515 [ExpectedException (typeof (XmlException))]
\r
1516 public void CreateSimpleProhibitDtd ()
\r
1518 XmlReader xr = XmlReader.Create ("Test/XmlFiles/nested-dtd-test.xml");
\r
1523 // a bit revised version of bug #78706
\r
1524 public void CreateFromUrlClose ()
\r
1526 string file = "Test/XmlFiles/78706.xml";
\r
1528 if (!File.Exists (file))
\r
1529 File.Create (file).Close ();
\r
1530 XmlReaderSettings s = new XmlReaderSettings ();
\r
1531 s.CloseInput = false; // explicitly
\r
1532 XmlReader r = XmlReader.Create (file, s);
\r
1534 XmlTextWriter w = new XmlTextWriter (file, null);
\r
1537 if (File.Exists (file))
\r
1538 File.Delete (file);
\r
1543 public void ReadToDescendant ()
\r
1545 string xml = @"<root><foo/><bar/><foo> test text <bar><bar></bar></bar></foo></root>";
\r
1546 RunTest (xml, new TestMethod (ReadToDescendant));
\r
1549 void ReadToDescendant (XmlReader xmlReader)
\r
1551 // move to first <bar/>
\r
1552 Assert ("#1", xmlReader.ReadToDescendant ("bar"));
\r
1553 // no children in <bar/>. It is empty.
\r
1554 Assert ("#2", !xmlReader.ReadToDescendant ("bar"));
\r
1555 AssertEquals ("#2-2", "bar", xmlReader.Name);
\r
1557 // move to the second <foo>
\r
1558 xmlReader.Read ();
\r
1559 // move to the second <bar>
\r
1560 Assert ("#3", xmlReader.ReadToDescendant ("bar"));
\r
1561 // move to <bar> inside <bar>...</bar>
\r
1562 Assert ("#4", xmlReader.ReadToDescendant ("bar"));
\r
1563 // the next is EndElement of </bar>, so no move.
\r
1564 Assert ("#5", !xmlReader.ReadToDescendant ("bar"));
\r
1565 AssertEquals ("#5-2", XmlNodeType.EndElement, xmlReader.NodeType);
\r
1569 public void ReadToDescepdant2 ()
\r
1571 string xml = "<root/>";
\r
1572 RunTest (xml, new TestMethod (ReadToDescendant2));
\r
1575 void ReadToDescendant2 (XmlReader xmlReader)
\r
1577 // make sure that it works when the reader is at Initial state.
\r
1578 Assert (xmlReader.ReadToDescendant ("root"));
\r
1582 public void ReadToFollowing ()
\r
1584 string xml = @"<root><foo/><bar/><foo><bar><bar></bar></bar></foo></root>";
\r
1585 RunTest (xml, new TestMethod (ReadToFollowing));
\r
1588 public void ReadToFollowing (XmlReader xmlReader)
\r
1590 Assert ("#1", xmlReader.ReadToFollowing ("bar"));
\r
1591 Assert ("#2", xmlReader.ReadToFollowing ("bar"));
\r
1592 AssertEquals ("#2-2", 2, xmlReader.Depth);
\r
1593 Assert ("#3", xmlReader.ReadToFollowing ("bar"));
\r
1594 AssertEquals ("#3-2", 3, xmlReader.Depth);
\r
1595 Assert ("#4", !xmlReader.ReadToFollowing ("bar"));
\r
1599 [Category ("NotDotNet")]
\r
1600 public void ReadToNextSiblingAtInitialState ()
\r
1602 string xml = @"<root></root>";
\r
1603 RunTest (xml, new TestMethod (ReadToNextSiblingAtInitialState ));
\r
1606 void ReadToNextSiblingAtInitialState (XmlReader xmlReader)
\r
1608 Assert ("#1", !xmlReader.ReadToNextSibling ("bar"));
\r
1609 Assert ("#2", !xmlReader.ReadToNextSibling ("root"));
\r
1613 public void ReadToNextSibling ()
\r
1615 string xml = @"<root><foo/><bar attr='value'/><foo><pooh/><bar></bar><foo></foo><bar/></foo></root>";
\r
1616 RunTest (xml, new TestMethod (ReadToNextSibling));
\r
1619 void ReadToNextSibling (XmlReader xmlReader)
\r
1621 // It is funky, but without it MS.NET results in an infinite loop.
\r
1622 xmlReader.Read (); // root
\r
1624 xmlReader.Read (); // foo
\r
1625 Assert ("#3", xmlReader.ReadToNextSibling ("bar"));
\r
1627 AssertEquals ("#3-2", "value", xmlReader.GetAttribute ("attr"));
\r
1628 xmlReader.Read (); // foo
\r
1629 xmlReader.Read (); // pooh
\r
1630 Assert ("#4", xmlReader.ReadToNextSibling ("bar"));
\r
1631 Assert ("#4-2", !xmlReader.IsEmptyElement);
\r
1632 Assert ("#5", xmlReader.ReadToNextSibling ("bar"));
\r
1633 Assert ("#5-2", xmlReader.IsEmptyElement);
\r
1634 Assert ("#6", xmlReader.Read ()); // /foo
\r
1636 AssertNodeValues ("#7", xmlReader,
\r
1637 XmlNodeType.EndElement,
\r
1639 false, // IsEmptyElement
\r
1641 String.Empty, // Prefix
\r
1642 "foo", // LocalName
\r
1643 String.Empty, // NamespaceURI
\r
1644 String.Empty, // Value
\r
1645 false, // HasValue
\r
1646 0, // AttributeCount
\r
1647 false); // HasAttributes
\r
1651 public void ReadSubtree ()
\r
1653 string xml = @"<root><foo/><bar attr='value'></bar></root>";
\r
1654 RunTest (xml, new TestMethod (ReadSubtree));
\r
1657 void ReadSubtree (XmlReader reader)
\r
1659 reader.MoveToContent (); // root
\r
1660 reader.Read (); // foo
\r
1661 XmlReader st = reader.ReadSubtree (); // <foo/>
\r
1663 // MS bug: IsEmptyElement should be false here.
\r
1665 AssertNodeValues ("#1", st,
\r
1668 false, // IsEmptyElement
\r
1669 String.Empty, // Name
\r
1670 String.Empty, // Prefix
\r
1671 String.Empty, // LocalName
\r
1672 String.Empty, // NamespaceURI
\r
1673 String.Empty, // Value
\r
1674 false, // HasValue
\r
1675 0, // AttributeCount
\r
1676 false); // HasAttributes
\r
1678 AssertEquals ("#1", XmlNodeType.None, st.NodeType);
\r
1681 AssertNodeValues ("#2", st,
\r
1682 XmlNodeType.Element,
\r
1684 true, // IsEmptyElement
\r
1686 String.Empty, // Prefix
\r
1687 "foo", // LocalName
\r
1688 String.Empty, // NamespaceURI
\r
1689 String.Empty, // Value
\r
1690 false, // HasValue
\r
1691 0, // AttributeCount
\r
1692 false); // HasAttributes
\r
1694 Assert ("#3", !st.Read ());
\r
1696 // At this state, reader is not positioned on <bar> yet
\r
1697 AssertNodeValues ("#3-2", reader,
\r
1698 XmlNodeType.Element,
\r
1699 1, // Depth. It is 1 for main tree.
\r
1700 true, // IsEmptyElement
\r
1702 String.Empty, // Prefix
\r
1703 "foo", // LocalName
\r
1704 String.Empty, // NamespaceURI
\r
1705 String.Empty, // Value
\r
1706 false, // HasValue
\r
1707 0, // AttributeCount
\r
1708 false); // HasAttributes
\r
1712 AssertNodeValues ("#4", reader,
\r
1713 XmlNodeType.Element,
\r
1714 1, // Depth. It is 1 for main tree.
\r
1715 false, // IsEmptyElement
\r
1717 String.Empty, // Prefix
\r
1718 "bar", // LocalName
\r
1719 String.Empty, // NamespaceURI
\r
1720 String.Empty, // Value
\r
1721 false, // HasValue
\r
1722 1, // AttributeCount
\r
1723 true); // HasAttributes
\r
1725 st = reader.ReadSubtree ();
\r
1726 st.Read (); // Initial -> Interactive
\r
1727 AssertNodeValues ("#5", st,
\r
1728 XmlNodeType.Element,
\r
1729 0, // Depth. It is 0 for subtree.
\r
1730 false, // IsEmptyElement
\r
1732 String.Empty, // Prefix
\r
1733 "bar", // LocalName
\r
1734 String.Empty, // NamespaceURI
\r
1735 String.Empty, // Value
\r
1736 false, // HasValue
\r
1737 1, // AttributeCount
\r
1738 true); // HasAttributes
\r
1741 AssertNodeValues ("#6-1", st,
\r
1742 XmlNodeType.EndElement,
\r
1743 0, // Depth. It is 0 for subtree.
\r
1744 false, // IsEmptyElement
\r
1746 String.Empty, // Prefix
\r
1747 "bar", // LocalName
\r
1748 String.Empty, // NamespaceURI
\r
1749 String.Empty, // Value
\r
1750 false, // HasValue
\r
1751 0, // AttributeCount
\r
1752 false); // HasAttributes
\r
1754 AssertNodeValues ("#6-2", st,
\r
1755 XmlNodeType.EndElement,
\r
1756 0, // Depth. It is 0 for subtree.
\r
1757 false, // IsEmptyElement
\r
1759 String.Empty, // Prefix
\r
1760 "bar", // LocalName
\r
1761 String.Empty, // NamespaceURI
\r
1762 String.Empty, // Value
\r
1763 false, // HasValue
\r
1764 0, // AttributeCount
\r
1765 false); // HasAttributes
\r
1767 Assert ("#7", !st.Read ());
\r
1771 public void ReadInteger ()
\r
1773 string xml1 = "<root>1</root>";
\r
1776 xr = XmlReader.Create (new StringReader (xml1));
\r
1778 AssertEquals ("#1", "1", xr.ReadElementContentAsString ());
\r
1780 AssertNodeValues ("#1-2", xr,
\r
1782 0, // Depth. It is 0 for subtree.
\r
1783 false, // IsEmptyElement
\r
1784 String.Empty, // Name
\r
1785 String.Empty, // Prefix
\r
1786 String.Empty, // LocalName
\r
1787 String.Empty, // NamespaceURI
\r
1788 String.Empty, // Value
\r
1789 false, // HasValue
\r
1790 0, // AttributeCount
\r
1791 false); // HasAttributes
\r
1793 xr = XmlReader.Create (new StringReader (xml1));
\r
1795 // this XmlReader has no schema, thus the value is untyped
\r
1796 AssertEquals ("#2", "1", xr.ReadElementContentAsObject ());
\r
1798 xr = XmlReader.Create (new StringReader (xml1));
\r
1801 AssertEquals ("#3", "1", xr.ReadContentAsString ());
\r
1803 xr = XmlReader.Create (new StringReader (xml1));
\r
1805 AssertEquals ("#4", 1, xr.ReadElementContentAsInt ());
\r
1807 xr = XmlReader.Create (new StringReader (xml1));
\r
1809 AssertEquals ("#5", 1, xr.ReadElementContentAs (typeof (int), null));
\r
1813 [ExpectedException (typeof (XmlException))]
\r
1814 public void ReadContentAsIntFail ()
\r
1816 XmlReader xr = XmlReader.Create (
\r
1817 new StringReader ("<doc>1.0</doc>"));
\r
1819 xr.ReadElementContentAsInt ();
\r
1823 public void ReadDateTime ()
\r
1825 DateTime time = new DateTime (2006, 1, 2, 3, 4, 56);
\r
1826 string xml1 = "<root>2006-01-02T03:04:56</root>";
\r
1829 xr = XmlReader.Create (new StringReader (xml1));
\r
1831 // this XmlReader has no schema, thus the value is untyped
\r
1832 AssertEquals ("#1", "2006-01-02T03:04:56",
\r
1833 xr.ReadElementContentAsString ());
\r
1835 xr = XmlReader.Create (new StringReader (xml1));
\r
1838 AssertEquals ("#2", time, xr.ReadContentAsDateTime ());
\r
1840 xr = XmlReader.Create (new StringReader (xml1));
\r
1842 AssertEquals ("#3", time, xr.ReadElementContentAsDateTime ());
\r
1844 xr = XmlReader.Create (new StringReader (xml1));
\r
1846 AssertEquals ("#4", time, xr.ReadElementContentAs (typeof (DateTime), null));
\r
1850 [ExpectedException (typeof (XmlException))]
\r
1851 public void ReadContentAsDateTimeFail ()
\r
1853 XmlReader xr = XmlReader.Create (
\r
1854 new StringReader ("<doc>P1Y2M3D</doc>"));
\r
1856 xr.ReadElementContentAsDateTime ();
\r
1860 public void ReadContentAs_QNameEmptyNSResolver ()
\r
1862 XmlReader xr = XmlReader.Create (
\r
1863 new StringReader ("<doc xmlns:x='urn:foo'>x:el</doc>"));
\r
1865 object o = xr.ReadElementContentAs (
\r
1866 typeof (XmlQualifiedName), null);
\r
1867 // without IXmlNamespaceResolver, it still resolves
\r
1868 // x:el as valid QName.
\r
1869 AssertNotNull ("#1", o);
\r
1870 XmlQualifiedName q = o as XmlQualifiedName;
\r
1871 AssertEquals ("#2 : " + o.GetType (),
\r
1872 new XmlQualifiedName ("el", "urn:foo"), q);
\r
1876 [ExpectedException (typeof (InvalidOperationException))]
\r
1877 public void ReadContentStringOnElementFail ()
\r
1879 XmlReader xr = XmlReader.Create (new StringReader ("<a>test</a>"));
\r
1881 xr.ReadContentAsString ();
\r
1885 [ExpectedException (typeof (XmlException))]
\r
1886 public void ReadElementContentStringMixedContent ()
\r
1888 XmlReader xr = XmlReader.Create (
\r
1889 new StringReader ("<doc>123<child>456</child>789</doc>"));
\r
1891 // "child" is regarded as an invalid node.
\r
1892 string s = xr.ReadElementContentAsString ();
\r
1896 public void ReadContentStringMixedContent ()
\r
1898 XmlReader xr = XmlReader.Create (
\r
1899 new StringReader ("<doc>123<child>456</child>789</doc>"));
\r
1901 xr.Read (); // from Text "123"
\r
1902 string s = xr.ReadContentAsString ();
\r
1903 AssertEquals ("#1", "123", s);
\r
1904 AssertEquals ("#2", XmlNodeType.Element, xr.NodeType);
\r
1908 public void ReadElementContentAsString ()
\r
1910 XmlTextReader r = new XmlTextReader (
\r
1911 "<root/>", XmlNodeType.Document, null);
\r
1913 AssertEquals ("#1",
\r
1914 String.Empty, r.ReadElementContentAsString ());
\r
1915 AssertEquals ("#2",
\r
1916 XmlNodeType.None, r.NodeType);
\r
1920 public void ReadElementContentAs ()
\r
1922 // as System.Object
\r
1924 XmlTextReader r = new XmlTextReader (
\r
1925 "<root/>", XmlNodeType.Document, null);
\r
1927 AssertEquals ("#1",
\r
1928 String.Empty, r.ReadElementContentAs (typeof (object), null));
\r
1929 AssertEquals ("#2",
\r
1930 XmlNodeType.None, r.NodeType);
\r
1932 // regardless of its value, the return value is string.
\r
1933 r = new XmlTextReader ("<root>1</root>", XmlNodeType.Document, null);
\r
1935 AssertEquals ("#3",
\r
1936 "1", r.ReadElementContentAs (typeof (object), null));
\r
1937 AssertEquals ("#4",
\r
1938 XmlNodeType.None, r.NodeType);
\r
1942 public void ReadContentStringOnAttribute ()
\r
1944 string xml = @"<root id='myId'><child /></root>";
\r
1945 RunTest (xml, new TestMethod (ReadContentStringOnAttribute));
\r
1948 void ReadContentStringOnAttribute (XmlReader reader)
\r
1951 Assert (reader.MoveToAttribute ("id"));
\r
1952 AssertEquals ("myId", reader.ReadContentAsString ());
\r