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
\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.IsTrue (xmlReader.ReadState == ReadState.Initial);
\r
45 Assert.IsTrue (xmlReader.NodeType == XmlNodeType.None);
\r
46 Assert.IsTrue (xmlReader.Depth == 0);
\r
47 Assert.IsTrue (!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.IsTrue (xmlReader.Read (), label + " Read() return value");
\r
81 Assert.IsTrue (xmlReader.ReadState == ReadState.Interactive, label + " ReadState");
\r
82 Assert.IsTrue (!xmlReader.EOF, label + " !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 Assert.AreEqual (nodeType, xmlReader.NodeType, label + ": NodeType");
\r
125 Assert.AreEqual (isEmptyElement, xmlReader.IsEmptyElement, label + ": IsEmptyElement");
\r
127 Assert.AreEqual (name, xmlReader.Name, label + ": name");
\r
129 Assert.AreEqual (prefix, xmlReader.Prefix, label + ": prefix");
\r
131 Assert.AreEqual (localName, xmlReader.LocalName, label + ": localName");
\r
133 Assert.AreEqual (namespaceURI, xmlReader.NamespaceURI, label + ": namespaceURI");
\r
135 Assert.AreEqual (depth, xmlReader.Depth, label + ": Depth");
\r
137 Assert.AreEqual (hasValue, xmlReader.HasValue, label + ": hasValue");
\r
139 Assert.AreEqual (value, xmlReader.Value, label + ": Value");
\r
141 Assert.AreEqual (hasAttributes, xmlReader.HasAttributes, label + ": hasAttributes");
\r
143 Assert.AreEqual (attributeCount, xmlReader.AttributeCount, label + ": attributeCount");
\r
146 private void AssertAttribute (
\r
147 XmlReader xmlReader,
\r
151 string namespaceURI,
\r
154 Assert.AreEqual (value, xmlReader [name], "value");
\r
156 Assert.IsTrue (xmlReader.GetAttribute (name) == value);
\r
158 if (namespaceURI != String.Empty) {
\r
159 Assert.IsTrue (xmlReader[localName, namespaceURI] == value);
\r
160 Assert.IsTrue (xmlReader.GetAttribute (localName, namespaceURI) == value);
\r
164 private void AssertEndDocument (XmlReader xmlReader)
\r
166 Assert.IsTrue (!xmlReader.Read (), "could read");
\r
167 Assert.AreEqual (XmlNodeType.None, xmlReader.NodeType, "NodeType is not XmlNodeType.None");
\r
168 Assert.AreEqual (0, xmlReader.Depth, "Depth is not 0");
\r
169 Assert.AreEqual (ReadState.EndOfFile, xmlReader.ReadState, "ReadState is not ReadState.EndOfFile");
\r
170 Assert.IsTrue (xmlReader.EOF, "not EOF");
\r
172 xmlReader.Close ();
\r
173 Assert.AreEqual (ReadState.Closed, xmlReader.ReadState, "ReadState is not ReadState.Cosed");
\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 Assert.AreEqual (0, reader.Depth, "Depth");
\r
223 Assert.AreEqual (false, reader.EOF, "EOF");
\r
224 Assert.AreEqual (false, reader.HasValue, "HasValue");
\r
225 Assert.AreEqual (false, reader.IsEmptyElement, "IsEmptyElement");
\r
226 Assert.AreEqual (String.Empty, reader.LocalName, "LocalName");
\r
227 Assert.AreEqual (XmlNodeType.None, reader.NodeType, "NodeType");
\r
228 Assert.AreEqual (ReadState.Initial, reader.ReadState, "ReadState");
\r
232 public void Read ()
\r
234 RunTest (xml1, new TestMethod (Read));
\r
237 public void Read (XmlReader reader)
\r
240 Assert.AreEqual (XmlNodeType.Element, reader.NodeType, "<root>.NodeType");
\r
241 Assert.AreEqual ("root", reader.Name, "<root>.Name");
\r
242 Assert.AreEqual (ReadState.Interactive, reader.ReadState, "<root>.ReadState");
\r
243 Assert.AreEqual (0, reader.Depth, "<root>.Depth");
\r
247 Assert.AreEqual (1, reader.Depth, "<child/>.Depth");
\r
248 Assert.AreEqual (XmlNodeType.Element, reader.NodeType, "<child/>.NodeType");
\r
249 Assert.AreEqual ("child", reader.Name, "<child/>.Name");
\r
252 Assert.AreEqual (0, reader.Depth, "</root>.Depth");
\r
253 Assert.AreEqual (XmlNodeType.EndElement, reader.NodeType, "</root>.NodeType");
\r
254 Assert.AreEqual ("root", reader.Name, "</root>.Name");
\r
257 Assert.AreEqual (true, reader.EOF, "end.EOF");
\r
258 Assert.AreEqual (XmlNodeType.None, reader.NodeType, "end.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.IsTrue (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.IsTrue (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.IsTrue (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 Assert.AreEqual (false, reader.IsEmptyElement);
\r
299 reader.Read (); // foo
\r
300 Assert.AreEqual ("foo", reader.Name);
\r
301 Assert.AreEqual (true, reader.IsEmptyElement);
\r
302 reader.Read (); // bar
\r
303 Assert.AreEqual ("bar", reader.Name);
\r
304 Assert.AreEqual (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 Assert.AreEqual (" test of ", s, "readString.1.ret_val");
\r
324 Assert.AreEqual ("b", reader.Name, "readString.1.Name");
\r
325 s = reader.ReadString ();
\r
326 Assert.AreEqual ("mixed", s, "readString.2.ret_val");
\r
327 Assert.AreEqual (XmlNodeType.EndElement, reader.NodeType, "readString.2.NodeType");
\r
328 s = reader.ReadString (); // never proceeds.
\r
329 Assert.AreEqual (String.Empty, s, "readString.3.ret_val");
\r
330 Assert.AreEqual (XmlNodeType.EndElement, reader.NodeType, "readString.3.NodeType");
\r
332 Assert.AreEqual (XmlNodeType.Text, reader.NodeType, "readString.4.NodeType");
\r
333 Assert.AreEqual (" string.", reader.Value, "readString.4.Value");
\r
334 s = reader.ReadString (); // reads the same Text node.
\r
335 Assert.AreEqual (" string. cdata string.", s, "readString.5.ret_val");
\r
336 Assert.AreEqual (XmlNodeType.EndElement, reader.NodeType, "readString.5.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 Assert.AreEqual (ReadState.Interactive, reader.ReadState, "initial.ReadState");
\r
351 Assert.AreEqual (false, reader.EOF, "initial.EOF");
\r
352 Assert.AreEqual (XmlNodeType.Element, reader.NodeType, "initial.NodeType");
\r
353 string s = reader.ReadInnerXml ();
\r
354 Assert.AreEqual ("test of <b>mixed</b> string.", s, "read_all");
\r
355 Assert.AreEqual ("bar", reader.Name, "after.Name");
\r
356 Assert.AreEqual (XmlNodeType.Element, reader.NodeType, "after.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 Assert.AreEqual ("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 Assert.AreEqual ("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 Assert.AreEqual ("http://foo/", xmlReader.LookupNamespace ("foo"));
\r
976 Assert.AreEqual ("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 Assert.AreEqual ("http://foo/", xmlReader.LookupNamespace ("foo"));
\r
992 Assert.IsNull (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 Assert.AreEqual ("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 Assert.AreEqual ("http://foo/", xmlReader.LookupNamespace ("foo"));
\r
1055 Assert.AreEqual ("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 Assert.AreEqual ("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 Assert.AreEqual ("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.IsTrue (xmlReader.Read ());
\r
1132 Assert.AreEqual (XmlNodeType.Element, xmlReader.NodeType);
\r
1133 Assert.IsTrue (xmlReader.MoveToFirstAttribute ());
\r
1134 Assert.AreEqual (XmlNodeType.Attribute, xmlReader.NodeType);
\r
1135 Assert.IsTrue (xmlReader.MoveToElement ());
\r
1136 Assert.AreEqual (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.IsTrue (xmlReader.Read ());
\r
1149 Assert.AreEqual (XmlNodeType.Element, xmlReader.NodeType);
\r
1150 Assert.IsTrue (!xmlReader.MoveToElement ());
\r
1151 Assert.AreEqual (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.IsTrue (xmlReader.Read ());
\r
1164 Assert.AreEqual (XmlNodeType.Element, xmlReader.NodeType);
\r
1165 Assert.IsTrue (!xmlReader.MoveToFirstAttribute ());
\r
1166 Assert.AreEqual (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.IsTrue (xmlReader.Read ());
\r
1179 Assert.AreEqual (XmlNodeType.Element, xmlReader.NodeType);
\r
1180 Assert.IsTrue (!xmlReader.MoveToNextAttribute ());
\r
1181 Assert.AreEqual (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.IsTrue (xmlReader.MoveToNextAttribute ());
\r
1227 Assert.AreEqual ("bar", xmlReader.Name);
\r
1228 Assert.AreEqual ("baz", xmlReader.Value);
\r
1230 Assert.IsTrue (xmlReader.MoveToNextAttribute ());
\r
1231 Assert.AreEqual ("quux", xmlReader.Name);
\r
1232 Assert.AreEqual ("quuux", xmlReader.Value);
\r
1234 Assert.IsTrue (!xmlReader.MoveToNextAttribute ());
\r
1236 Assert.IsTrue (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.IsTrue (xmlReader.MoveToFirstAttribute (), "MoveToFirstAttribute");
\r
1278 this.AssertNodeValues ("#2", xmlReader,
\r
1279 XmlNodeType.Attribute,
\r
1280 0, // FIXME: might be 1
\r
1288 xmlReader.ReadAttributeValue ();
\r
1289 this.AssertNodeValues ("#3", xmlReader,
\r
1291 1, // FIXME might be 2
\r
1294 null, // FIXME: should be String.Empty,
\r
1296 null, // FIXME: should be String.Empty,
\r
1299 xmlReader.MoveToNextAttribute ();
\r
1300 this.AssertNodeValues ("#4", xmlReader,
\r
1301 XmlNodeType.Attribute,
\r
1302 0, // FIXME: might be 1
\r
1310 xmlReader.ReadAttributeValue ();
\r
1311 this.AssertNodeValues ("#5", xmlReader,
\r
1313 1, // FIXME: might be 2
\r
1316 null, // FIXME: should be String.Empty,
\r
1318 null, // FIXME: should be String.Empty,
\r
1324 public void AttributeOrder ()
\r
1326 string xml = @"<foo _1='1' _2='2' _3='3' />";
\r
1327 RunTest (xml, new TestMethod (AttributeOrder));
\r
1330 public void AttributeOrder (XmlReader xmlReader)
\r
1332 Assert.IsTrue (xmlReader.Read ());
\r
1333 Assert.AreEqual (XmlNodeType.Element, xmlReader.NodeType);
\r
1335 Assert.IsTrue (xmlReader.MoveToFirstAttribute ());
\r
1336 Assert.AreEqual ("_1", xmlReader.Name);
\r
1337 Assert.IsTrue (xmlReader.MoveToNextAttribute ());
\r
1338 Assert.AreEqual ("_2", xmlReader.Name);
\r
1339 Assert.IsTrue (xmlReader.MoveToNextAttribute ());
\r
1340 Assert.AreEqual ("_3", xmlReader.Name);
\r
1342 Assert.IsTrue (!xmlReader.MoveToNextAttribute ());
\r
1346 [Category ("NotDotNet")]
\r
1347 public void IndexerAndAttributes ()
\r
1349 string xml = @"<?xml version='1.0' standalone='no'?><foo _1='1' _2='2' _3='3' />";
\r
1350 RunTest (xml, new TestMethod (IndexerAndAttributes));
\r
1353 public void IndexerAndAttributes (XmlReader xmlReader)
\r
1355 Assert.IsTrue (xmlReader.Read ());
\r
1356 Assert.AreEqual ("1.0", xmlReader ["version"]);
\r
1357 Assert.AreEqual ("1.0", xmlReader.GetAttribute ("version"));
\r
1358 // .NET 1.1 BUG. XmlTextReader returns null, while XmlNodeReader returns "".
\r
1359 Assert.AreEqual (null, xmlReader ["encoding"]);
\r
1360 Assert.AreEqual (null, xmlReader.GetAttribute ("encoding"));
\r
1361 Assert.AreEqual ("no", xmlReader ["standalone"]);
\r
1362 Assert.AreEqual ("no", xmlReader.GetAttribute ("standalone"));
\r
1363 Assert.AreEqual ("1.0", xmlReader [0]);
\r
1364 Assert.AreEqual ("1.0", xmlReader.GetAttribute (0));
\r
1365 Assert.AreEqual ("no", xmlReader [1]);
\r
1366 Assert.AreEqual ("no", xmlReader.GetAttribute (1));
\r
1368 Assert.IsTrue (xmlReader.Read ());
\r
1369 Assert.AreEqual (XmlNodeType.Element, xmlReader.NodeType);
\r
1370 Assert.AreEqual ("1", xmlReader ["_1"]);
\r
1372 Assert.IsTrue (xmlReader.MoveToFirstAttribute ());
\r
1373 Assert.AreEqual ("_1", xmlReader.Name);
\r
1374 Assert.AreEqual ("1", xmlReader ["_1"]);
\r
1375 Assert.IsTrue (xmlReader.MoveToNextAttribute ());
\r
1376 Assert.AreEqual ("_2", xmlReader.Name);
\r
1377 Assert.AreEqual ("1", xmlReader ["_1"]);
\r
1378 Assert.IsTrue (xmlReader.MoveToNextAttribute ());
\r
1379 Assert.AreEqual ("_3", xmlReader.Name);
\r
1380 Assert.AreEqual ("1", xmlReader ["_1"]);
\r
1382 Assert.IsTrue (!xmlReader.MoveToNextAttribute ());
\r
1386 public void ProhibitedMultipleAttributes ()
\r
1388 string xml = @"<foo _1='1' _1='1' />";
\r
1390 RunTest (xml, new TestMethod (ReadAll));
\r
1391 } catch (XmlException) {
\r
1393 xml = @"<foo _1='1' _1='2' />";
\r
1395 RunTest (xml, new TestMethod (ReadAll));
\r
1396 } catch (XmlException) {
\r
1400 public void ReadAll (XmlReader xmlReader)
\r
1402 while (!xmlReader.EOF)
\r
1403 xmlReader.Read ();
\r
1407 public void SurrogatePairContent ()
\r
1409 string xml = "<root xmlns='𐄀'/>";
\r
1410 RunTest (xml, new TestMethod (SurrogatePairContent));
\r
1413 public void SurrogatePairContent (XmlReader xmlReader)
\r
1415 xmlReader.Read ();
\r
1416 Assert.AreEqual (true, xmlReader.MoveToAttribute ("xmlns"));
\r
1417 Assert.AreEqual ("xmlns", xmlReader.Name);
\r
1418 Assert.AreEqual (2, xmlReader.Value.Length);
\r
1419 Assert.AreEqual (0xD800, (int) xmlReader.Value [0]);
\r
1420 Assert.AreEqual (0xDD00, (int) xmlReader.Value [1]);
\r
1424 public void ReadOuterXmlOnEndElement ()
\r
1426 string xml = "<root><foo></foo></root>";
\r
1427 RunTest (xml, new TestMethod (ReadOuterXmlOnEndElement));
\r
1430 public void ReadOuterXmlOnEndElement (XmlReader xmlReader)
\r
1432 xmlReader.Read ();
\r
1433 xmlReader.Read ();
\r
1434 xmlReader.Read ();
\r
1435 Assert.AreEqual (String.Empty, xmlReader.ReadOuterXml ());
\r
1439 public void ReadInnerXmlOnEndElement ()
\r
1441 string xml = "<root><foo></foo></root>";
\r
1442 RunTest (xml, new TestMethod (ReadInnerXmlOnEndElement));
\r
1445 private void ReadInnerXmlOnEndElement (XmlReader xmlReader)
\r
1447 xmlReader.Read ();
\r
1448 xmlReader.Read ();
\r
1449 xmlReader.Read ();
\r
1450 Assert.AreEqual (String.Empty, xmlReader.ReadInnerXml ());
\r
1454 public void LookupEmptyPrefix ()
\r
1456 string xml = "<root><foo></foo></root>";
\r
1457 RunTest (xml, new TestMethod (LookupEmptyPrefix));
\r
1460 void LookupEmptyPrefix (XmlReader xmlReader)
\r
1462 xmlReader.Read ();
\r
1463 Assert.IsNull (xmlReader.LookupNamespace (String.Empty));
\r
1467 public void ReadStartElement ()
\r
1469 string xml = "<root>test</root>";
\r
1470 RunTest (xml, new TestMethod (ReadStartElement));
\r
1473 void ReadStartElement (XmlReader xr)
\r
1476 xr.ReadStartElement ();
\r
1477 // consume Element node.
\r
1478 Assert.AreEqual (XmlNodeType.Text, xr.NodeType);
\r
1482 public void LookupNamespaceAtEndElement ()
\r
1484 string xml = "<root xmlns:x='urn:foo'><foo/></root>";
\r
1485 RunTest (xml, new TestMethod (LookupNamespaceAtEndElement));
\r
1488 void LookupNamespaceAtEndElement (XmlReader reader)
\r
1491 Assert.AreEqual ("urn:foo", reader.LookupNamespace ("x"), "#1");
\r
1493 Assert.AreEqual ("urn:foo", reader.LookupNamespace ("x"), "#2");
\r
1495 Assert.AreEqual ("urn:foo", reader.LookupNamespace ("x"), "#3");
\r
1499 public void ReadClosedReader ()
\r
1501 string xml = "<fin>aaa</fin>";
\r
1502 RunTest (xml, new TestMethod (ReadClosedReader));
\r
1505 void ReadClosedReader (XmlReader reader)
\r
1509 reader.Read (); // silently returns false
\r
1514 public void CreateSimple ()
\r
1516 XmlReaderSettings s = new XmlReaderSettings ();
\r
1517 s.ProhibitDtd = false;
\r
1518 XmlReader xr = XmlReader.Create ("Test/XmlFiles/nested-dtd-test.xml", s);
\r
1520 Assert.AreEqual (XmlNodeType.DocumentType, xr.NodeType, "#1");
\r
1522 Assert.AreEqual (XmlNodeType.Whitespace, xr.NodeType, "#2");
\r
1524 Assert.AreEqual (XmlNodeType.Element, xr.NodeType, "#3");
\r
1528 [ExpectedException (typeof (XmlException))]
\r
1529 public void CreateSimpleProhibitDtd ()
\r
1531 XmlReader xr = XmlReader.Create ("Test/XmlFiles/nested-dtd-test.xml");
\r
1536 // a bit revised version of bug #78706
\r
1537 public void CreateFromUrlClose ()
\r
1539 string file = "Test/XmlFiles/78706.xml";
\r
1541 if (!File.Exists (file))
\r
1542 File.Create (file).Close ();
\r
1543 XmlReaderSettings s = new XmlReaderSettings ();
\r
1544 s.CloseInput = false; // explicitly
\r
1545 XmlReader r = XmlReader.Create (file, s);
\r
1547 XmlTextWriter w = new XmlTextWriter (file, null);
\r
1550 if (File.Exists (file))
\r
1551 File.Delete (file);
\r
1556 // a bit revised version of bug #385638
\r
1557 public void CreateFromUrlClose2 ()
\r
1559 string file = "Test/XmlFiles/385638.xml";
\r
1561 if (File.Exists (file))
\r
1562 File.Delete (file);
\r
1563 using (TextWriter tw = File.CreateText (file))
\r
1564 tw.Write ("<xml />");
\r
1565 XmlReaderSettings s = new XmlReaderSettings ();
\r
1566 s.IgnoreWhitespace = true; // this results in XmlFilterReader, which is the key for this bug.
\r
1567 XmlReader r = XmlReader.Create (file, s);
\r
1569 XmlTextWriter w = new XmlTextWriter (file, null);
\r
1572 if (File.Exists (file))
\r
1573 File.Delete (file);
\r
1578 [ExpectedException (typeof (ArgumentException))]
\r
1579 public void Create_String_Empty ()
\r
1581 XmlReader.Create (String.Empty);
\r
1585 public void ReadToDescendant ()
\r
1587 string xml = @"<root><foo/><bar/><foo> test text <bar><bar></bar></bar></foo></root>";
\r
1588 RunTest (xml, new TestMethod (ReadToDescendant));
\r
1591 void ReadToDescendant (XmlReader xmlReader)
\r
1593 // move to first <bar/>
\r
1594 Assert.IsTrue (xmlReader.ReadToDescendant ("bar"), "#1");
\r
1595 // no children in <bar/>. It is empty.
\r
1596 Assert.IsTrue (!xmlReader.ReadToDescendant ("bar"), "#2");
\r
1597 Assert.AreEqual ("bar", xmlReader.Name, "#2-2");
\r
1599 // move to the second <foo>
\r
1600 xmlReader.Read ();
\r
1601 // move to the second <bar>
\r
1602 Assert.IsTrue (xmlReader.ReadToDescendant ("bar"), "#3");
\r
1603 // move to <bar> inside <bar>...</bar>
\r
1604 Assert.IsTrue (xmlReader.ReadToDescendant ("bar"), "#4");
\r
1605 // the next is EndElement of </bar>, so no move.
\r
1606 Assert.IsTrue (!xmlReader.ReadToDescendant ("bar"), "#5");
\r
1607 Assert.AreEqual (XmlNodeType.EndElement, xmlReader.NodeType, "#5-2");
\r
1611 public void ReadToDescepdant2 ()
\r
1613 string xml = "<root/>";
\r
1614 RunTest (xml, new TestMethod (ReadToDescendant2));
\r
1617 void ReadToDescendant2 (XmlReader xmlReader)
\r
1619 // make sure that it works when the reader is at Initial state.
\r
1620 Assert.IsTrue (xmlReader.ReadToDescendant ("root"));
\r
1624 public void ReadToFollowing ()
\r
1626 string xml = @"<root><foo/><bar/><foo><bar><bar></bar></bar></foo></root>";
\r
1627 RunTest (xml, new TestMethod (ReadToFollowing));
\r
1630 public void ReadToFollowing (XmlReader xmlReader)
\r
1632 Assert.IsTrue (xmlReader.ReadToFollowing ("bar"), "#1");
\r
1633 Assert.IsTrue (xmlReader.ReadToFollowing ("bar"), "#2");
\r
1634 Assert.AreEqual (2, xmlReader.Depth, "#2-2");
\r
1635 Assert.IsTrue (xmlReader.ReadToFollowing ("bar"), "#3");
\r
1636 Assert.AreEqual (3, xmlReader.Depth, "#3-2");
\r
1637 Assert.IsTrue (!xmlReader.ReadToFollowing ("bar"), "#4");
\r
1641 [Category ("NotDotNet")]
\r
1642 public void ReadToNextSiblingAtInitialState ()
\r
1644 string xml = @"<root></root>";
\r
1645 RunTest (xml, new TestMethod (ReadToNextSiblingAtInitialState ));
\r
1648 void ReadToNextSiblingAtInitialState (XmlReader xmlReader)
\r
1650 Assert.IsTrue (!xmlReader.ReadToNextSibling ("bar"), "#1");
\r
1651 Assert.IsTrue (!xmlReader.ReadToNextSibling ("root"), "#2");
\r
1655 public void ReadToNextSibling ()
\r
1657 string xml = @"<root><foo/><bar attr='value'/><foo><pooh/><bar></bar><foo></foo><bar/></foo></root>";
\r
1658 RunTest (xml, new TestMethod (ReadToNextSibling));
\r
1661 void ReadToNextSibling (XmlReader xmlReader)
\r
1663 // It is funky, but without it MS.NET results in an infinite loop.
\r
1664 xmlReader.Read (); // root
\r
1666 xmlReader.Read (); // foo
\r
1667 Assert.IsTrue (xmlReader.ReadToNextSibling ("bar"), "#3");
\r
1669 Assert.AreEqual ("value", xmlReader.GetAttribute ("attr"), "#3-2");
\r
1670 xmlReader.Read (); // foo
\r
1671 xmlReader.Read (); // pooh
\r
1672 Assert.IsTrue (xmlReader.ReadToNextSibling ("bar"), "#4");
\r
1673 Assert.IsTrue (!xmlReader.IsEmptyElement, "#4-2");
\r
1674 Assert.IsTrue (xmlReader.ReadToNextSibling ("bar"), "#5");
\r
1675 Assert.IsTrue (xmlReader.IsEmptyElement, "#5-2");
\r
1676 Assert.IsTrue (xmlReader.Read (), "#6"); // /foo
\r
1678 AssertNodeValues ("#7", xmlReader,
\r
1679 XmlNodeType.EndElement,
\r
1681 false, // IsEmptyElement
\r
1683 String.Empty, // Prefix
\r
1684 "foo", // LocalName
\r
1685 String.Empty, // NamespaceURI
\r
1686 String.Empty, // Value
\r
1687 false, // HasValue
\r
1688 0, // AttributeCount
\r
1689 false); // HasAttributes
\r
1694 public void ReadToNextSibling2 ()
\r
1696 string xml = @"<root><baz><bar><foo attr='value'/></bar><foo attr='value2'><bar><foo /></bar></foo></baz></root>";
\r
1697 RunTest (xml, new TestMethod (ReadToNextSibling2));
\r
1700 void ReadToNextSibling2 (XmlReader r)
\r
1702 r.MoveToContent (); // ->root
\r
1703 r.Read (); // root->baz
\r
1704 r.Read (); // baz->bar
\r
1705 Assert.IsTrue (r.ReadToNextSibling ("foo"), "#1");
\r
1706 Assert.AreEqual ("value2", r.GetAttribute ("attr"), "#2");
\r
1707 r.Read (); // foo[@value='value2']->bar
\r
1708 Assert.IsTrue (!r.ReadToNextSibling ("foo"), "#3");
\r
1709 Assert.AreEqual (XmlNodeType.EndElement, r.NodeType, "#4");
\r
1710 Assert.AreEqual ("foo", r.LocalName, "#5");
\r
1715 public void ReadToNextSibling3 ()
\r
1717 string xml = @" <books> <book> <name>Happy C Sharp</name> </book> </books>";
\r
1718 XmlReader reader = XmlReader.Create (new StringReader (xml));
\r
1720 reader.MoveToContent ();
\r
1722 while (reader.Read ())
\r
1723 reader.ReadToNextSibling ("book"); // should not result in an infinite loop
\r
1727 public void ReadSubtree ()
\r
1729 string xml = @"<root><foo/><bar attr='value'></bar></root>";
\r
1730 RunTest (xml, new TestMethod (ReadSubtree));
\r
1733 void ReadSubtree (XmlReader reader)
\r
1735 reader.MoveToContent (); // root
\r
1736 reader.Read (); // foo
\r
1737 XmlReader st = reader.ReadSubtree (); // <foo/>
\r
1739 // MS bug: IsEmptyElement should be false here.
\r
1741 AssertNodeValues ("#1", st,
\r
1744 false, // IsEmptyElement
\r
1745 String.Empty, // Name
\r
1746 String.Empty, // Prefix
\r
1747 String.Empty, // 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 Assert.AreEqual (XmlNodeType.None, st.NodeType, "#1");
\r
1757 AssertNodeValues ("#2", st,
\r
1758 XmlNodeType.Element,
\r
1760 true, // IsEmptyElement
\r
1762 String.Empty, // Prefix
\r
1763 "foo", // LocalName
\r
1764 String.Empty, // NamespaceURI
\r
1765 String.Empty, // Value
\r
1766 false, // HasValue
\r
1767 0, // AttributeCount
\r
1768 false); // HasAttributes
\r
1770 Assert.IsTrue (!st.Read (), "#3");
\r
1772 // At this state, reader is not positioned on <bar> yet
\r
1773 AssertNodeValues ("#3-2", reader,
\r
1774 XmlNodeType.Element,
\r
1775 1, // Depth. It is 1 for main tree.
\r
1776 true, // IsEmptyElement
\r
1778 String.Empty, // Prefix
\r
1779 "foo", // LocalName
\r
1780 String.Empty, // NamespaceURI
\r
1781 String.Empty, // Value
\r
1782 false, // HasValue
\r
1783 0, // AttributeCount
\r
1784 false); // HasAttributes
\r
1788 AssertNodeValues ("#4", reader,
\r
1789 XmlNodeType.Element,
\r
1790 1, // Depth. It is 1 for main tree.
\r
1791 false, // IsEmptyElement
\r
1793 String.Empty, // Prefix
\r
1794 "bar", // LocalName
\r
1795 String.Empty, // NamespaceURI
\r
1796 String.Empty, // Value
\r
1797 false, // HasValue
\r
1798 1, // AttributeCount
\r
1799 true); // HasAttributes
\r
1801 st = reader.ReadSubtree ();
\r
1802 st.Read (); // Initial -> Interactive
\r
1803 AssertNodeValues ("#5", st,
\r
1804 XmlNodeType.Element,
\r
1805 0, // Depth. It is 0 for subtree.
\r
1806 false, // IsEmptyElement
\r
1808 String.Empty, // Prefix
\r
1809 "bar", // LocalName
\r
1810 String.Empty, // NamespaceURI
\r
1811 String.Empty, // Value
\r
1812 false, // HasValue
\r
1813 1, // AttributeCount
\r
1814 true); // HasAttributes
\r
1817 AssertNodeValues ("#6-1", st,
\r
1818 XmlNodeType.EndElement,
\r
1819 0, // Depth. It is 0 for subtree.
\r
1820 false, // IsEmptyElement
\r
1822 String.Empty, // Prefix
\r
1823 "bar", // LocalName
\r
1824 String.Empty, // NamespaceURI
\r
1825 String.Empty, // Value
\r
1826 false, // HasValue
\r
1827 0, // AttributeCount
\r
1828 false); // HasAttributes
\r
1830 AssertNodeValues ("#6-2", st,
\r
1831 XmlNodeType.EndElement,
\r
1832 0, // Depth. It is 0 for subtree.
\r
1833 false, // IsEmptyElement
\r
1835 String.Empty, // Prefix
\r
1836 "bar", // LocalName
\r
1837 String.Empty, // NamespaceURI
\r
1838 String.Empty, // Value
\r
1839 false, // HasValue
\r
1840 0, // AttributeCount
\r
1841 false); // HasAttributes
\r
1843 Assert.IsTrue (!st.Read (), "#7");
\r
1847 public void ReadInteger ()
\r
1849 string xml1 = "<root>1</root>";
\r
1852 xr = XmlReader.Create (new StringReader (xml1));
\r
1854 Assert.AreEqual ("1", xr.ReadElementContentAsString (), "#1");
\r
1856 AssertNodeValues ("#1-2", xr,
\r
1858 0, // Depth. It is 0 for subtree.
\r
1859 false, // IsEmptyElement
\r
1860 String.Empty, // Name
\r
1861 String.Empty, // Prefix
\r
1862 String.Empty, // LocalName
\r
1863 String.Empty, // NamespaceURI
\r
1864 String.Empty, // Value
\r
1865 false, // HasValue
\r
1866 0, // AttributeCount
\r
1867 false); // HasAttributes
\r
1869 xr = XmlReader.Create (new StringReader (xml1));
\r
1871 // this XmlReader has no schema, thus the value is untyped
\r
1872 Assert.AreEqual ("1", xr.ReadElementContentAsObject (), "#2");
\r
1874 xr = XmlReader.Create (new StringReader (xml1));
\r
1877 Assert.AreEqual ("1", xr.ReadContentAsString (), "#3");
\r
1879 xr = XmlReader.Create (new StringReader (xml1));
\r
1881 Assert.AreEqual (1, xr.ReadElementContentAsInt (), "#4");
\r
1883 xr = XmlReader.Create (new StringReader (xml1));
\r
1885 Assert.AreEqual (1, xr.ReadElementContentAs (typeof (int), null), "#5");
\r
1889 [ExpectedException (typeof (XmlException))]
\r
1890 public void ReadContentAsIntFail ()
\r
1892 XmlReader xr = XmlReader.Create (
\r
1893 new StringReader ("<doc>1.0</doc>"));
\r
1895 xr.ReadElementContentAsInt ();
\r
1899 public void ReadDateTime ()
\r
1901 DateTime time = new DateTime (2006, 1, 2, 3, 4, 56);
\r
1902 string xml1 = "<root>2006-01-02T03:04:56</root>";
\r
1905 xr = XmlReader.Create (new StringReader (xml1));
\r
1907 // this XmlReader has no schema, thus the value is untyped
\r
1908 Assert.AreEqual ("2006-01-02T03:04:56", xr.ReadElementContentAsString (), "#1");
\r
1910 xr = XmlReader.Create (new StringReader (xml1));
\r
1913 Assert.AreEqual (time, xr.ReadContentAsDateTime (), "#2");
\r
1915 xr = XmlReader.Create (new StringReader (xml1));
\r
1917 Assert.AreEqual (time, xr.ReadElementContentAsDateTime (), "#3");
\r
1919 xr = XmlReader.Create (new StringReader (xml1));
\r
1921 Assert.AreEqual (time, xr.ReadElementContentAs (typeof (DateTime), null), "#4");
\r
1925 [ExpectedException (typeof (XmlException))]
\r
1926 public void ReadContentAsDateTimeFail ()
\r
1928 XmlReader xr = XmlReader.Create (
\r
1929 new StringReader ("<doc>P1Y2M3D</doc>"));
\r
1931 xr.ReadElementContentAsDateTime ();
\r
1935 public void ReadContentAs_QNameEmptyNSResolver ()
\r
1937 XmlReader xr = XmlReader.Create (
\r
1938 new StringReader ("<doc xmlns:x='urn:foo'>x:el</doc>"));
\r
1940 object o = xr.ReadElementContentAs (
\r
1941 typeof (XmlQualifiedName), null);
\r
1942 // without IXmlNamespaceResolver, it still resolves
\r
1943 // x:el as valid QName.
\r
1944 Assert.IsNotNull (o, "#1");
\r
1945 XmlQualifiedName q = o as XmlQualifiedName;
\r
1946 Assert.AreEqual (new XmlQualifiedName ("el", "urn:foo"), q, "#2 : " + o.GetType ());
\r
1950 [ExpectedException (typeof (InvalidOperationException))]
\r
1951 public void ReadContentStringOnElementFail ()
\r
1953 XmlReader xr = XmlReader.Create (new StringReader ("<a>test</a>"));
\r
1955 xr.ReadContentAsString ();
\r
1959 public void ReadContentStringOnEndElement ()
\r
1961 XmlReader xr = XmlReader.Create (new StringReader ("<a>test</a>"));
\r
1965 Assert.AreEqual (String.Empty, xr.ReadContentAsString ()); // does not fail, unlike at Element!
\r
1969 public void ReadContentStringOnPI ()
\r
1971 XmlReader xr = XmlReader.Create (new StringReader ("<?pi ?><a>test</a>"));
\r
1973 Assert.AreEqual (String.Empty, xr.ReadContentAsString ());
\r
1977 [ExpectedException (typeof (InvalidOperationException))] // unlike ReadContentAsString()
\r
1978 public void ReadElementContentStringOnPI ()
\r
1980 XmlReader xr = XmlReader.Create (new StringReader ("<?pi ?><a>test</a>"));
\r
1982 Assert.AreEqual (XmlNodeType.ProcessingInstruction, xr.NodeType);
\r
1983 xr.ReadElementContentAsString ();
\r
1987 [ExpectedException (typeof (XmlException))]
\r
1988 public void ReadElementContentStringMixedContent ()
\r
1990 XmlReader xr = XmlReader.Create (
\r
1991 new StringReader ("<doc>123<child>456</child>789</doc>"));
\r
1993 // "child" is regarded as an invalid node.
\r
1994 string s = xr.ReadElementContentAsString ();
\r
1998 public void ReadContentStringMixedContent ()
\r
2000 XmlReader xr = XmlReader.Create (
\r
2001 new StringReader ("<doc>123<child>456</child>789</doc>"));
\r
2003 xr.Read (); // from Text "123"
\r
2004 string s = xr.ReadContentAsString ();
\r
2005 Assert.AreEqual ("123", s, "#1");
\r
2006 Assert.AreEqual (XmlNodeType.Element, xr.NodeType, "#2");
\r
2010 public void ReadElementContentAsString ()
\r
2012 XmlTextReader r = new XmlTextReader (
\r
2013 "<root/>", XmlNodeType.Document, null);
\r
2015 Assert.AreEqual (String.Empty, r.ReadElementContentAsString (), "#1");
\r
2016 Assert.AreEqual (XmlNodeType.None, r.NodeType, "#2");
\r
2020 public void ReadElementContentAs ()
\r
2022 // as System.Object
\r
2024 XmlTextReader r = new XmlTextReader (
\r
2025 "<root/>", XmlNodeType.Document, null);
\r
2027 Assert.AreEqual (String.Empty, r.ReadElementContentAs (typeof (object), null), "#1");
\r
2028 Assert.AreEqual (XmlNodeType.None, r.NodeType, "#2");
\r
2030 // regardless of its value, the return value is string.
\r
2031 r = new XmlTextReader ("<root>1</root>", XmlNodeType.Document, null);
\r
2033 Assert.AreEqual ("1", r.ReadElementContentAs (typeof (object), null), "#3");
\r
2034 Assert.AreEqual (XmlNodeType.None, r.NodeType, "#4");
\r
2038 public void ReadContentStringOnAttribute ()
\r
2040 string xml = @"<root id='myId'><child /></root>";
\r
2041 RunTest (xml, new TestMethod (ReadContentStringOnAttribute));
\r
2044 void ReadContentStringOnAttribute (XmlReader reader)
\r
2047 Assert.IsTrue (reader.MoveToAttribute ("id"));
\r
2048 Assert.AreEqual ("myId", reader.ReadContentAsString ());
\r
2052 public void ReadElementContentAsStringEmpty ()
\r
2054 string xml = "<root><sample/></root>";
\r
2055 RunTest (xml, new TestMethod (ReadElementContentAsStringEmpty));
\r
2058 void ReadElementContentAsStringEmpty (XmlReader reader)
\r
2060 reader.MoveToContent ();
\r
2062 Assert.AreEqual (String.Empty, reader.ReadElementContentAsString ("sample", ""));
\r
2063 Assert.AreEqual (XmlNodeType.EndElement, reader.NodeType);
\r
2067 public void ReadSubtreeClose ()
\r
2070 string xml = @"<root><item-list><item id='a'/><item id='b'/></item-list></root>";
\r
2071 RunTest (xml, new TestMethod (ReadSubtreeClose));
\r
2074 void ReadSubtreeClose (XmlReader reader)
\r
2076 reader.ReadToFollowing ("item-list");
\r
2077 XmlReader sub = reader.ReadSubtree ();
\r
2078 sub.ReadToDescendant ("item");
\r
2080 Assert.AreEqual (XmlNodeType.EndElement, reader.NodeType, "#1");
\r
2081 Assert.AreEqual ("item-list", reader.Name, "#2");
\r
2085 [ExpectedException (typeof (InvalidOperationException))]
\r
2086 public void ReadSubtreeOnNonElement ()
\r
2088 string xml = @"<x> <y/></x>";
\r
2089 XmlReader r = XmlReader.Create (new StringReader (xml));
\r
2096 [ExpectedException (typeof (InvalidOperationException))]
\r
2097 public void ReadSubtreeOnNonElement2 ()
\r
2099 string xml = @"<x> <y/></x>";
\r
2100 XmlReader r = XmlReader.Create (new StringReader (xml));
\r
2105 public void ReadSubtreeEmptyElement ()
\r
2107 string xml = @"<x/>";
\r
2108 XmlReader r = XmlReader.Create (new StringReader (xml));
\r
2110 XmlReader s = r.ReadSubtree ();
\r
2111 Assert.IsTrue (s.Read (), "#1");
\r
2112 Assert.AreEqual (XmlNodeType.Element, s.NodeType, "#2");
\r
2113 Assert.IsTrue (!s.Read (), "#3");
\r
2114 Assert.AreEqual (XmlNodeType.None, s.NodeType, "#4");
\r
2118 public void ReadSubtreeEmptyElementWithAttribute ()
\r
2120 string xml = @"<root><x a='b'/></root>";
\r
2121 XmlReader r = XmlReader.Create (new StringReader (xml));
\r
2124 XmlReader r2 = r.ReadSubtree ();
\r
2125 Console.WriteLine ("X");
\r
2127 XmlReader r3 = r2.ReadSubtree ();
\r
2128 r2.MoveToFirstAttribute ();
\r
2129 Assert.IsTrue (!r.IsEmptyElement, "#1");
\r
2130 Assert.IsTrue (!r2.IsEmptyElement, "#2");
\r
2132 Assert.IsTrue (r.IsEmptyElement, "#3");
\r
2133 Assert.IsTrue (r2.IsEmptyElement, "#4");
\r
2135 Assert.IsTrue (r.IsEmptyElement, "#5");
\r
2136 Assert.IsTrue (r2.IsEmptyElement, "#6");
\r
2140 public void ReadContentAsBase64 ()
\r
2142 byte[] randomData = new byte[24];
\r
2143 for (int i = 0; i < randomData.Length; i++)
\r
2144 randomData [i] = (byte) i;
\r
2146 string xmlString = "<?xml version=\"1.0\"?><data>" +
\r
2147 Convert.ToBase64String (randomData) + "</data>";
\r
2148 TextReader textReader = new StringReader (xmlString);
\r
2149 XmlReader xmlReader = XmlReader.Create (textReader);
\r
2150 xmlReader.ReadToFollowing ("data");
\r
2152 int readBytes = 0;
\r
2153 byte[] buffer = new byte [24];
\r
2155 xmlReader.ReadStartElement ();
\r
2156 readBytes = xmlReader.ReadContentAsBase64 (buffer, 0, buffer.Length);
\r
2157 Assert.AreEqual (24, readBytes, "#1");
\r
2158 Assert.AreEqual (0, xmlReader.ReadContentAsBase64 (buffer, 0, buffer.Length), "#2");
\r
2159 StringWriter sw = new StringWriter ();
\r
2160 foreach (byte b in buffer) sw.Write ("{0:X02}", b);
\r
2161 Assert.AreEqual ("000102030405060708090A0B0C0D0E0F1011121314151617", sw.ToString (), "#3");
\r
2165 public void ReadContentAsBase64_2 () // bug #480066
\r
2167 StringReader readerString = new StringReader ("<root><b64>TWFu</b64><b64>TWFu</b64>\r\n\t<b64>TWFu</b64><b64>TWFu</b64></root>");
\r
2168 XmlReaderSettings settingsXml = new XmlReaderSettings ();
\r
2169 settingsXml.XmlResolver = null;
\r
2170 using (var readerXml = XmlReader.Create (readerString, settingsXml)) {
\r
2171 readerXml.MoveToContent ();
\r
2172 readerXml.Read ();
\r
2173 readerXml.ReadStartElement ("b64");
\r
2174 const int bufferLength = 1024;
\r
2175 byte [] buffer = new byte [bufferLength];
\r
2176 readerXml.ReadContentAsBase64 (buffer, 0, bufferLength);
\r
2177 Assert.AreEqual (XmlNodeType.EndElement, readerXml.NodeType, "#1");
\r
2178 readerXml.Read ();
\r
2179 Assert.AreEqual (XmlNodeType.Element, readerXml.NodeType, "#2");
\r
2184 public void ReadContentAsBase64_3 () // bug #543332
\r
2186 byte [] fakeState = new byte[25];
\r
2187 byte [] fixedSizeBuffer = new byte [25];
\r
2188 byte [] readDataBuffer = new byte [25];
\r
2189 var ms = new MemoryStream ();
\r
2190 var xw = XmlWriter.Create (ms);
\r
2191 xw.WriteStartElement ("root");
\r
2192 xw.WriteBase64 (fakeState, 0, fakeState.Length);
\r
2193 xw.WriteEndElement ();
\r
2195 var reader = XmlReader.Create (new MemoryStream (ms.ToArray ()));
\r
2196 reader.MoveToContent ();
\r
2197 // we cannot completely trust the length read to indicate the end.
\r
2199 bytesRead = reader.ReadElementContentAsBase64 (fixedSizeBuffer, 0, fixedSizeBuffer.Length);
\r
2200 Assert.AreEqual (25, bytesRead, "#1");
\r
2201 Assert.AreEqual (XmlNodeType.Text, reader.NodeType, "#2");
\r
2202 bytesRead = reader.ReadElementContentAsBase64 (fixedSizeBuffer, 0, fixedSizeBuffer.Length);
\r
2203 Assert.AreEqual (0, bytesRead, "#3");
\r
2204 Assert.AreEqual (XmlNodeType.EndElement, reader.NodeType, "#4");
\r
2208 public void ReadElementContentAsQNameDefaultNS ()
\r
2210 var sw = new StringWriter ();
\r
2211 var xw = XmlWriter.Create (sw);
\r
2212 xw.WriteStartElement ("", "foo", "urn:foo");
\r
2213 xw.WriteValue (new XmlQualifiedName ("x", "urn:foo"));
\r
2214 xw.WriteEndElement ();
\r
2216 var xr = XmlReader.Create (new StringReader (sw.ToString ()));
\r
2217 xr.MoveToContent ();
\r
2218 var q = (XmlQualifiedName) xr.ReadElementContentAs (typeof (XmlQualifiedName), xr as IXmlNamespaceResolver);
\r
2219 Assert.AreEqual ("urn:foo", q.Namespace, "#1");
\r