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 System.Threading;
\r
20 using System.Threading.Tasks;
\r
23 using NUnit.Framework;
\r
25 namespace MonoTests.System.Xml
\r
28 public class XmlReaderTests
\r
31 public void GetReady ()
\r
33 document = new XmlDocument ();
\r
34 document.LoadXml (xml1);
\r
37 XmlDocument document;
\r
38 const string xml1 = "<root attr1='value1'><child /></root>";
\r
39 const string xml2 = "<root><foo/><bar>test.</bar></root>";
\r
40 const string xml3 = "<root> test of <b>mixed</b> string.<![CDATA[ cdata string.]]></root>";
\r
41 const string xml4 = "<root>test of <b>mixed</b> string.</root>";
\r
45 // copy from XmlTextReaderTests
\r
46 private void AssertStartDocument (XmlReader xmlReader)
\r
48 Assert.IsTrue (xmlReader.ReadState == ReadState.Initial);
\r
49 Assert.IsTrue (xmlReader.NodeType == XmlNodeType.None);
\r
50 Assert.IsTrue (xmlReader.Depth == 0);
\r
51 Assert.IsTrue (!xmlReader.EOF);
\r
54 private void AssertNode (
\r
55 XmlReader xmlReader,
\r
56 XmlNodeType nodeType,
\r
58 bool isEmptyElement,
\r
62 string namespaceURI,
\r
66 AssertNode ("", xmlReader, nodeType, depth,
\r
67 isEmptyElement, name, prefix, localName,
\r
68 namespaceURI, value, attributeCount);
\r
71 private void AssertNode (
\r
73 XmlReader xmlReader,
\r
74 XmlNodeType nodeType,
\r
76 bool isEmptyElement,
\r
80 string namespaceURI,
\r
84 Assert.IsTrue (xmlReader.Read (), label + " Read() return value");
\r
85 Assert.IsTrue (xmlReader.ReadState == ReadState.Interactive, label + " ReadState");
\r
86 Assert.IsTrue (!xmlReader.EOF, label + " !EOF");
\r
87 AssertNodeValues (label, xmlReader, nodeType, depth,
\r
88 isEmptyElement, name, prefix, localName,
\r
89 namespaceURI, value, value != String.Empty,
\r
90 attributeCount, attributeCount > 0);
\r
93 private void AssertNodeValues (
\r
95 XmlReader xmlReader,
\r
96 XmlNodeType nodeType,
\r
98 bool isEmptyElement,
\r
102 string namespaceURI,
\r
104 int attributeCount)
\r
106 AssertNodeValues (label, xmlReader, nodeType, depth,
\r
107 isEmptyElement, name, prefix, localName,
\r
108 namespaceURI, value, value != String.Empty,
\r
109 attributeCount, attributeCount > 0);
\r
112 private void AssertNodeValues (
\r
114 XmlReader xmlReader,
\r
115 XmlNodeType nodeType,
\r
117 bool isEmptyElement,
\r
121 string namespaceURI,
\r
124 int attributeCount,
\r
125 bool hasAttributes)
\r
127 label = String.Concat (label, "(", xmlReader.GetType ().Name, ")");
\r
128 Assert.AreEqual (nodeType, xmlReader.NodeType, label + ": NodeType");
\r
129 Assert.AreEqual (isEmptyElement, xmlReader.IsEmptyElement, label + ": IsEmptyElement");
\r
131 Assert.AreEqual (name, xmlReader.Name, label + ": name");
\r
133 Assert.AreEqual (prefix, xmlReader.Prefix, label + ": prefix");
\r
135 Assert.AreEqual (localName, xmlReader.LocalName, label + ": localName");
\r
137 Assert.AreEqual (namespaceURI, xmlReader.NamespaceURI, label + ": namespaceURI");
\r
139 Assert.AreEqual (depth, xmlReader.Depth, label + ": Depth");
\r
141 Assert.AreEqual (hasValue, xmlReader.HasValue, label + ": hasValue");
\r
143 Assert.AreEqual (value, xmlReader.Value, label + ": Value");
\r
145 Assert.AreEqual (hasAttributes, xmlReader.HasAttributes, label + ": hasAttributes");
\r
147 Assert.AreEqual (attributeCount, xmlReader.AttributeCount, label + ": attributeCount");
\r
150 private void AssertAttribute (
\r
151 XmlReader xmlReader,
\r
155 string namespaceURI,
\r
158 Assert.AreEqual (value, xmlReader [name], "value");
\r
160 Assert.IsTrue (xmlReader.GetAttribute (name) == value);
\r
162 if (namespaceURI != String.Empty) {
\r
163 Assert.IsTrue (xmlReader[localName, namespaceURI] == value);
\r
164 Assert.IsTrue (xmlReader.GetAttribute (localName, namespaceURI) == value);
\r
168 private void AssertEndDocument (XmlReader xmlReader)
\r
170 Assert.IsTrue (!xmlReader.Read (), "could read");
\r
171 Assert.AreEqual (XmlNodeType.None, xmlReader.NodeType, "NodeType is not XmlNodeType.None");
\r
172 Assert.AreEqual (0, xmlReader.Depth, "Depth is not 0");
\r
173 Assert.AreEqual (ReadState.EndOfFile, xmlReader.ReadState, "ReadState is not ReadState.EndOfFile");
\r
174 Assert.IsTrue (xmlReader.EOF, "not EOF");
\r
176 xmlReader.Close ();
\r
177 Assert.AreEqual (ReadState.Closed, xmlReader.ReadState, "ReadState is not ReadState.Cosed");
\r
180 private delegate void TestMethod (XmlReader reader);
\r
182 private void RunTest (string xml, TestMethod method)
\r
184 xtr = new XmlTextReader (new StringReader (xml));
\r
188 xtr = new XmlTextReader (new StringReader (xml));
\r
189 XmlValidatingReader xvr = new XmlValidatingReader (xtr);
\r
190 xvr.ValidationType = ValidationType.DTD;
\r
191 xvr.EntityHandling = EntityHandling.ExpandCharEntities;
\r
195 xtr = new XmlTextReader (new StringReader (xml));
\r
196 xvr = new XmlValidatingReader (xtr);
\r
197 xvr.EntityHandling = EntityHandling.ExpandCharEntities;
\r
200 document.XmlResolver = null;
\r
201 document.LoadXml (xml);
\r
202 xnr = new XmlNodeReader (document);
\r
205 // XPathNavigatorReader tests
\r
206 System.Xml.XPath.XPathDocument doc = new System.Xml.XPath.XPathDocument (new StringReader (xml));
\r
207 XmlReader xpr = doc.CreateNavigator ().ReadSubtree ();
\r
217 public void InitialState ()
\r
219 RunTest (xml1, new TestMethod (InitialState));
\r
222 private void InitialState (XmlReader reader)
\r
224 Assert.AreEqual (0, reader.Depth, "Depth");
\r
225 Assert.AreEqual (false, reader.EOF, "EOF");
\r
226 Assert.AreEqual (false, reader.HasValue, "HasValue");
\r
227 Assert.AreEqual (false, reader.IsEmptyElement, "IsEmptyElement");
\r
228 Assert.AreEqual (String.Empty, reader.LocalName, "LocalName");
\r
229 Assert.AreEqual (XmlNodeType.None, reader.NodeType, "NodeType");
\r
230 Assert.AreEqual (ReadState.Initial, reader.ReadState, "ReadState");
\r
234 public void Read ()
\r
236 RunTest (xml1, new TestMethod (Read));
\r
239 public void Read (XmlReader reader)
\r
242 Assert.AreEqual (XmlNodeType.Element, reader.NodeType, "<root>.NodeType");
\r
243 Assert.AreEqual ("root", reader.Name, "<root>.Name");
\r
244 Assert.AreEqual (ReadState.Interactive, reader.ReadState, "<root>.ReadState");
\r
245 Assert.AreEqual (0, reader.Depth, "<root>.Depth");
\r
249 Assert.AreEqual (1, reader.Depth, "<child/>.Depth");
\r
250 Assert.AreEqual (XmlNodeType.Element, reader.NodeType, "<child/>.NodeType");
\r
251 Assert.AreEqual ("child", reader.Name, "<child/>.Name");
\r
254 Assert.AreEqual (0, reader.Depth, "</root>.Depth");
\r
255 Assert.AreEqual (XmlNodeType.EndElement, reader.NodeType, "</root>.NodeType");
\r
256 Assert.AreEqual ("root", reader.Name, "</root>.Name");
\r
259 Assert.AreEqual (true, reader.EOF, "end.EOF");
\r
260 Assert.AreEqual (XmlNodeType.None, reader.NodeType, "end.NodeType");
\r
264 [Category ("NotDotNet")]
\r
265 public void ReadAttributeValue ()
\r
267 RunTest ("<root attr=''/>", new TestMethod (ReadAttributeValue));
\r
270 public void ReadAttributeValue (XmlReader reader)
\r
272 reader.Read (); // root
\r
273 Assert.IsTrue (reader.MoveToFirstAttribute ());
\r
274 // It looks like that MS.NET shows AttributeCount and
\r
275 // HasAttributes as the same as element node!
\r
276 this.AssertNodeValues ("#1",
\r
277 reader, XmlNodeType.Attribute,
\r
278 1, false, "attr", "", "attr", "", "", true, 1, true);
\r
279 Assert.IsTrue (reader.ReadAttributeValue ());
\r
280 // MS.NET XmlTextReader fails. Its Prefix returns
\r
281 // null instead of "". It is fixed in MS.NET 2.0.
\r
282 this.AssertNodeValues ("#2",
\r
283 reader, XmlNodeType.Text,
\r
284 2, false, "", "", "", "", "", true, 1, true);
\r
285 Assert.IsTrue (reader.MoveToElement ());
\r
286 this.AssertNodeValues ("#3",
\r
287 reader, XmlNodeType.Element,
\r
288 0, true, "root", "", "root", "", "", false, 1, true);
\r
292 public void ReadEmptyElement ()
\r
294 RunTest (xml2, new TestMethod (ReadEmptyElement));
\r
297 public void ReadEmptyElement (XmlReader reader)
\r
299 reader.Read (); // root
\r
300 Assert.AreEqual (false, reader.IsEmptyElement);
\r
301 reader.Read (); // foo
\r
302 Assert.AreEqual ("foo", reader.Name);
\r
303 Assert.AreEqual (true, reader.IsEmptyElement);
\r
304 reader.Read (); // bar
\r
305 Assert.AreEqual ("bar", reader.Name);
\r
306 Assert.AreEqual (false, reader.IsEmptyElement);
\r
310 public void ReadStringFromElement ()
\r
312 RunTest (xml3, new TestMethod (ReadStringFromElement));
\r
315 public void ReadStringFromElement (XmlReader reader)
\r
317 // Note: ReadString() test works only when the reader is
\r
318 // positioned at the container element.
\r
319 // In case the reader is positioned at the first
\r
320 // character node, XmlTextReader and XmlNodeReader works
\r
324 string s = reader.ReadString ();
\r
325 Assert.AreEqual (" test of ", s, "readString.1.ret_val");
\r
326 Assert.AreEqual ("b", reader.Name, "readString.1.Name");
\r
327 s = reader.ReadString ();
\r
328 Assert.AreEqual ("mixed", s, "readString.2.ret_val");
\r
329 Assert.AreEqual (XmlNodeType.EndElement, reader.NodeType, "readString.2.NodeType");
\r
330 s = reader.ReadString (); // never proceeds.
\r
331 Assert.AreEqual (String.Empty, s, "readString.3.ret_val");
\r
332 Assert.AreEqual (XmlNodeType.EndElement, reader.NodeType, "readString.3.NodeType");
\r
334 Assert.AreEqual (XmlNodeType.Text, reader.NodeType, "readString.4.NodeType");
\r
335 Assert.AreEqual (" string.", reader.Value, "readString.4.Value");
\r
336 s = reader.ReadString (); // reads the same Text node.
\r
337 Assert.AreEqual (" string. cdata string.", s, "readString.5.ret_val");
\r
338 Assert.AreEqual (XmlNodeType.EndElement, reader.NodeType, "readString.5.NodeType");
\r
342 public void ReadInnerXml ()
\r
344 const string xml = "<root><foo>test of <b>mixed</b> string.</foo><bar /></root>";
\r
345 RunTest (xml, new TestMethod (ReadInnerXml));
\r
348 public void ReadInnerXml (XmlReader reader)
\r
352 Assert.AreEqual (ReadState.Interactive, reader.ReadState, "initial.ReadState");
\r
353 Assert.AreEqual (false, reader.EOF, "initial.EOF");
\r
354 Assert.AreEqual (XmlNodeType.Element, reader.NodeType, "initial.NodeType");
\r
355 string s = reader.ReadInnerXml ();
\r
356 Assert.AreEqual ("test of <b>mixed</b> string.", s, "read_all");
\r
357 Assert.AreEqual ("bar", reader.Name, "after.Name");
\r
358 Assert.AreEqual (XmlNodeType.Element, reader.NodeType, "after.NodeType");
\r
363 public void EmptyElement ()
\r
365 RunTest ("<foo/>", new TestMethod (EmptyElement));
\r
368 public void EmptyElement (XmlReader xmlReader)
\r
371 AssertStartDocument (xmlReader);
\r
374 xmlReader, // xmlReader
\r
375 XmlNodeType.Element, // nodeType
\r
377 true, // isEmptyElement
\r
379 String.Empty, // prefix
\r
380 "foo", // localName
\r
381 String.Empty, // namespaceURI
\r
382 String.Empty, // value
\r
383 0 // attributeCount
\r
386 AssertEndDocument (xmlReader);
\r
390 public void NestedEmptyTag ()
\r
392 string xml = "<foo><bar/></foo>";
\r
393 RunTest (xml, new TestMethod (NestedEmptyTag));
\r
396 public void NestedEmptyTag (XmlReader xmlReader)
\r
398 AssertStartDocument (xmlReader);
\r
402 xmlReader, // xmlReader
\r
403 XmlNodeType.Element, // nodeType
\r
405 false, // isEmptyElement
\r
407 String.Empty, // prefix
\r
408 "foo", // localName
\r
409 String.Empty, // namespaceURI
\r
410 String.Empty, // value
\r
411 0 // attributeCount
\r
416 xmlReader, // xmlReader
\r
417 XmlNodeType.Element, // nodeType
\r
419 true, // isEmptyElement
\r
421 String.Empty, // prefix
\r
422 "bar", // localName
\r
423 String.Empty, // namespaceURI
\r
424 String.Empty, // value
\r
425 0 // attributeCount
\r
430 xmlReader, // xmlReader
\r
431 XmlNodeType.EndElement, // nodeType
\r
433 false, // isEmptyElement
\r
435 String.Empty, // prefix
\r
436 "foo", // localName
\r
437 String.Empty, // namespaceURI
\r
438 String.Empty, // value
\r
439 0 // attributeCount
\r
442 AssertEndDocument (xmlReader);
\r
446 public void NestedText ()
\r
448 string xml = "<foo>bar</foo>";
\r
449 RunTest (xml, new TestMethod (NestedText));
\r
452 public void NestedText (XmlReader xmlReader)
\r
454 AssertStartDocument (xmlReader);
\r
457 xmlReader, // xmlReader
\r
458 XmlNodeType.Element, // nodeType
\r
460 false, // isEmptyElement
\r
462 String.Empty, // prefix
\r
463 "foo", // localName
\r
464 String.Empty, // namespaceURI
\r
465 String.Empty, // value
\r
466 0 // attributeCount
\r
470 xmlReader, // xmlReader
\r
471 XmlNodeType.Text, // nodeType
\r
473 false, // isEmptyElement
\r
474 String.Empty, // name
\r
475 String.Empty, // prefix
\r
476 String.Empty, // localName
\r
477 String.Empty, // namespaceURI
\r
479 0 // attributeCount
\r
483 xmlReader, // xmlReader
\r
484 XmlNodeType.EndElement, // nodeType
\r
486 false, // isEmptyElement
\r
488 String.Empty, // prefix
\r
489 "foo", // localName
\r
490 String.Empty, // namespaceURI
\r
491 String.Empty, // value
\r
492 0 // attributeCount
\r
495 AssertEndDocument (xmlReader);
\r
499 public void EmptyElementWithAttributes ()
\r
501 string xml = @"<foo bar=""baz"" quux='quuux' x:foo='x-foo' xmlns:x = 'urn:xfoo' />";
\r
502 RunTest (xml, new TestMethod (EmptyElementWithAttributes ));
\r
505 public void EmptyElementWithAttributes (XmlReader xmlReader)
\r
508 AssertStartDocument (xmlReader);
\r
511 xmlReader, // xmlReader
\r
512 XmlNodeType.Element, // nodeType
\r
514 true, // isEmptyElement
\r
516 String.Empty, // prefix
\r
517 "foo", // localName
\r
518 String.Empty, // namespaceURI
\r
519 String.Empty, // value
\r
520 4 // attributeCount
\r
524 xmlReader, // xmlReader
\r
526 String.Empty, // prefix
\r
527 "bar", // localName
\r
528 String.Empty, // namespaceURI
\r
533 xmlReader, // xmlReader
\r
535 String.Empty, // prefix
\r
536 "quux", // localName
\r
537 String.Empty, // namespaceURI
\r
542 xmlReader, // xmlReader
\r
543 "notexist", // name
\r
544 String.Empty, // prefix
\r
545 "notexist", // localName
\r
546 String.Empty, // namespaceURI
\r
551 xmlReader, // xmlReader
\r
554 "foo", // localName
\r
555 "urn:xfoo", // namespaceURI
\r
560 xmlReader, // xmlReader
\r
563 "bar", // localName
\r
564 "urn:xfoo", // namespaceURI
\r
568 AssertEndDocument (xmlReader);
\r
572 public void ProcessingInstructionBeforeDocumentElement ()
\r
574 string xml = "<?foo bar?><baz/>";
\r
575 RunTest (xml, new TestMethod (ProcessingInstructionBeforeDocumentElement));
\r
578 public void ProcessingInstructionBeforeDocumentElement (XmlReader xmlReader)
\r
580 AssertStartDocument (xmlReader);
\r
583 xmlReader, // xmlReader
\r
584 XmlNodeType.ProcessingInstruction, // nodeType
\r
586 false, // isEmptyElement
\r
588 String.Empty, // prefix
\r
589 "foo", // localName
\r
590 String.Empty, // namespaceURI
\r
592 0 // attributeCount
\r
596 xmlReader, // xmlReader
\r
597 XmlNodeType.Element, // nodeType
\r
599 true, // isEmptyElement
\r
601 String.Empty, // prefix
\r
602 "baz", // localName
\r
603 String.Empty, // namespaceURI
\r
604 String.Empty, // value
\r
605 0 // attributeCount
\r
608 AssertEndDocument (xmlReader);
\r
612 public void CommentBeforeDocumentElement ()
\r
614 string xml = "<!--foo--><bar/>";
\r
615 RunTest (xml, new TestMethod (CommentBeforeDocumentElement));
\r
618 public void CommentBeforeDocumentElement (XmlReader xmlReader)
\r
620 AssertStartDocument (xmlReader);
\r
623 xmlReader, // xmlReader
\r
624 XmlNodeType.Comment, // nodeType
\r
626 false, // isEmptyElement
\r
627 String.Empty, // name
\r
628 String.Empty, // prefix
\r
629 String.Empty, // localName
\r
630 String.Empty, // namespaceURI
\r
632 0 // attributeCount
\r
636 xmlReader, // xmlReader
\r
637 XmlNodeType.Element, // nodeType
\r
639 true, // isEmptyElement
\r
641 String.Empty, // prefix
\r
642 "bar", // localName
\r
643 String.Empty, // namespaceURI
\r
644 String.Empty, // value
\r
645 0 // attributeCount
\r
648 AssertEndDocument (xmlReader);
\r
652 public void PredefinedEntities ()
\r
654 string xml = "<foo><>&'"</foo>";
\r
655 RunTest (xml, new TestMethod (PredefinedEntities));
\r
658 public void PredefinedEntities (XmlReader xmlReader)
\r
660 AssertStartDocument (xmlReader);
\r
663 xmlReader, // xmlReader
\r
664 XmlNodeType.Element, // nodeType
\r
666 false, // isEmptyElement
\r
668 String.Empty, // prefix
\r
669 "foo", // localName
\r
670 String.Empty, // namespaceURI
\r
671 String.Empty, // value
\r
672 0 // attributeCount
\r
676 xmlReader, // xmlReader
\r
677 XmlNodeType.Text, // nodeType
\r
679 false, // isEmptyElement
\r
680 String.Empty, // name
\r
681 String.Empty, // prefix
\r
682 String.Empty, // localName
\r
683 String.Empty, // namespaceURI
\r
685 0 // attributeCount
\r
689 xmlReader, // xmlReader
\r
690 XmlNodeType.EndElement, // nodeType
\r
692 false, // isEmptyElement
\r
694 String.Empty, // prefix
\r
695 "foo", // localName
\r
696 String.Empty, // namespaceURI
\r
697 String.Empty, // value
\r
698 0 // attributeCount
\r
701 AssertEndDocument (xmlReader);
\r
705 public void CharacterReferences ()
\r
707 string xml = "<foo>FOO</foo>";
\r
708 RunTest (xml, new TestMethod (CharacterReferences));
\r
711 public void CharacterReferences (XmlReader xmlReader)
\r
713 AssertStartDocument (xmlReader);
\r
716 xmlReader, // xmlReader
\r
717 XmlNodeType.Element, // nodeType
\r
719 false, // isEmptyElement
\r
721 String.Empty, // prefix
\r
722 "foo", // localName
\r
723 String.Empty, // namespaceURI
\r
724 String.Empty, // value
\r
725 0 // attributeCount
\r
729 xmlReader, // xmlReader
\r
730 XmlNodeType.Text, // nodeType
\r
732 false, // isEmptyElement
\r
733 String.Empty, // name
\r
734 String.Empty, // prefix
\r
735 String.Empty, // localName
\r
736 String.Empty, // namespaceURI
\r
738 0 // attributeCount
\r
742 xmlReader, // xmlReader
\r
743 XmlNodeType.EndElement, // nodeType
\r
745 false, // isEmptyElement
\r
747 String.Empty, // prefix
\r
748 "foo", // localName
\r
749 String.Empty, // namespaceURI
\r
750 String.Empty, // value
\r
751 0 // attributeCount
\r
754 AssertEndDocument (xmlReader);
\r
758 public void PredefinedEntitiesInAttribute ()
\r
760 string xml = "<foo bar='<>&'"'/>";
\r
761 RunTest (xml, new TestMethod (PredefinedEntitiesInAttribute ));
\r
764 public void PredefinedEntitiesInAttribute (XmlReader xmlReader)
\r
766 AssertStartDocument (xmlReader);
\r
769 xmlReader, // xmlReader
\r
770 XmlNodeType.Element, // nodeType
\r
772 true, // isEmptyElement
\r
774 String.Empty, // prefix
\r
775 "foo", // localName
\r
776 String.Empty, // namespaceURI
\r
777 String.Empty, // value
\r
778 1 // attributeCount
\r
782 xmlReader, // xmlReader
\r
784 String.Empty, // prefix
\r
785 "bar", // localName
\r
786 String.Empty, // namespaceURI
\r
790 AssertEndDocument (xmlReader);
\r
794 public void CharacterReferencesInAttribute ()
\r
796 string xml = "<foo bar='FOO'/>";
\r
797 RunTest (xml, new TestMethod (CharacterReferencesInAttribute));
\r
800 public void CharacterReferencesInAttribute (XmlReader xmlReader)
\r
802 AssertStartDocument (xmlReader);
\r
805 xmlReader, // xmlReader
\r
806 XmlNodeType.Element, // nodeType
\r
808 true, // isEmptyElement
\r
810 String.Empty, // prefix
\r
811 "foo", // localName
\r
812 String.Empty, // namespaceURI
\r
813 String.Empty, // value
\r
814 1 // attributeCount
\r
818 xmlReader, // xmlReader
\r
820 String.Empty, // prefix
\r
821 "bar", // localName
\r
822 String.Empty, // namespaceURI
\r
826 AssertEndDocument (xmlReader);
\r
830 public void CDATA ()
\r
832 string xml = "<foo><![CDATA[<>&]]></foo>";
\r
833 RunTest (xml, new TestMethod (CDATA));
\r
836 public void CDATA (XmlReader xmlReader)
\r
838 AssertStartDocument (xmlReader);
\r
841 xmlReader, // xmlReader
\r
842 XmlNodeType.Element, // nodeType
\r
844 false, // isEmptyElement
\r
846 String.Empty, // prefix
\r
847 "foo", // localName
\r
848 String.Empty, // namespaceURI
\r
849 String.Empty, // value
\r
850 0 // attributeCount
\r
854 xmlReader, // xmlReader
\r
855 XmlNodeType.CDATA, // nodeType
\r
857 false, // isEmptyElement
\r
858 String.Empty, // name
\r
859 String.Empty, // prefix
\r
860 String.Empty, // localName
\r
861 String.Empty, // namespaceURI
\r
863 0 // attributeCount
\r
867 xmlReader, // xmlReader
\r
868 XmlNodeType.EndElement, // nodeType
\r
870 false, // isEmptyElement
\r
872 String.Empty, // prefix
\r
873 "foo", // localName
\r
874 String.Empty, // namespaceURI
\r
875 String.Empty, // value
\r
876 0 // attributeCount
\r
879 AssertEndDocument (xmlReader);
\r
883 public void EmptyElementInDefaultNamespace ()
\r
885 string xml = @"<foo xmlns='http://foo/' />";
\r
886 RunTest (xml, new TestMethod (EmptyElementInDefaultNamespace));
\r
889 public void EmptyElementInDefaultNamespace (XmlReader xmlReader)
\r
891 AssertStartDocument (xmlReader);
\r
894 xmlReader, // xmlReader
\r
895 XmlNodeType.Element, // nodeType
\r
897 true, // isEmptyElement
\r
899 String.Empty, // prefix
\r
900 "foo", // localName
\r
901 "http://foo/", // namespaceURI
\r
902 String.Empty, // value
\r
903 1 // attributeCount
\r
907 xmlReader, // xmlReader
\r
909 String.Empty, // prefix
\r
910 "xmlns", // localName
\r
911 "http://www.w3.org/2000/xmlns/", // namespaceURI
\r
912 "http://foo/" // value
\r
915 Assert.AreEqual ("http://foo/", xmlReader.LookupNamespace (String.Empty));
\r
917 AssertEndDocument (xmlReader);
\r
921 public void ChildElementInNamespace ()
\r
923 string xml = @"<foo:bar xmlns:foo='http://foo/'><baz:quux xmlns:baz='http://baz/' /></foo:bar>";
\r
924 RunTest (xml, new TestMethod (ChildElementInNamespace));
\r
927 public void ChildElementInNamespace (XmlReader xmlReader)
\r
929 AssertStartDocument (xmlReader);
\r
932 xmlReader, // xmlReader
\r
933 XmlNodeType.Element, // nodeType
\r
935 false, // isEmptyElement
\r
938 "bar", // localName
\r
939 "http://foo/", // namespaceURI
\r
940 String.Empty, // value
\r
941 1 // attributeCount
\r
945 xmlReader, // xmlReader
\r
946 "xmlns:foo", // name
\r
948 "foo", // localName
\r
949 "http://www.w3.org/2000/xmlns/", // namespaceURI
\r
950 "http://foo/" // value
\r
953 Assert.AreEqual ("http://foo/", xmlReader.LookupNamespace ("foo"));
\r
956 xmlReader, // xmlReader
\r
957 XmlNodeType.Element, // nodeType
\r
959 true, // isEmptyElement
\r
960 "baz:quux", // name
\r
962 "quux", // localName
\r
963 "http://baz/", // namespaceURI
\r
964 String.Empty, // value
\r
965 1 // attributeCount
\r
969 xmlReader, // xmlReader
\r
970 "xmlns:baz", // name
\r
972 "baz", // localName
\r
973 "http://www.w3.org/2000/xmlns/", // namespaceURI
\r
974 "http://baz/" // value
\r
977 Assert.AreEqual ("http://foo/", xmlReader.LookupNamespace ("foo"));
\r
978 Assert.AreEqual ("http://baz/", xmlReader.LookupNamespace ("baz"));
\r
981 xmlReader, // xmlReader
\r
982 XmlNodeType.EndElement, // nodeType
\r
984 false, // isEmptyElement
\r
987 "bar", // localName
\r
988 "http://foo/", // namespaceURI
\r
989 String.Empty, // value
\r
990 0 // attributeCount
\r
993 Assert.AreEqual ("http://foo/", xmlReader.LookupNamespace ("foo"));
\r
994 Assert.IsNull (xmlReader.LookupNamespace ("baz"));
\r
996 AssertEndDocument (xmlReader);
\r
1000 public void ChildElementInDefaultNamespace ()
\r
1002 string xml = @"<foo:bar xmlns:foo='http://foo/'><baz xmlns='http://baz/' /></foo:bar>";
\r
1003 RunTest (xml, new TestMethod (ChildElementInDefaultNamespace));
\r
1006 public void ChildElementInDefaultNamespace (XmlReader xmlReader)
\r
1008 AssertStartDocument (xmlReader);
\r
1011 xmlReader, // xmlReader
\r
1012 XmlNodeType.Element, // nodeType
\r
1014 false, // isEmptyElement
\r
1015 "foo:bar", // name
\r
1017 "bar", // localName
\r
1018 "http://foo/", // namespaceURI
\r
1019 String.Empty, // value
\r
1020 1 // attributeCount
\r
1024 xmlReader, // xmlReader
\r
1025 "xmlns:foo", // name
\r
1026 "xmlns", // prefix
\r
1027 "foo", // localName
\r
1028 "http://www.w3.org/2000/xmlns/", // namespaceURI
\r
1029 "http://foo/" // value
\r
1032 Assert.AreEqual ("http://foo/", xmlReader.LookupNamespace ("foo"));
\r
1035 xmlReader, // xmlReader
\r
1036 XmlNodeType.Element, // nodeType
\r
1038 true, // isEmptyElement
\r
1040 String.Empty, // prefix
\r
1041 "baz", // localName
\r
1042 "http://baz/", // namespaceURI
\r
1043 String.Empty, // value
\r
1044 1 // attributeCount
\r
1048 xmlReader, // xmlReader
\r
1050 String.Empty, // prefix
\r
1051 "xmlns", // localName
\r
1052 "http://www.w3.org/2000/xmlns/", // namespaceURI
\r
1053 "http://baz/" // value
\r
1056 Assert.AreEqual ("http://foo/", xmlReader.LookupNamespace ("foo"));
\r
1057 Assert.AreEqual ("http://baz/", xmlReader.LookupNamespace (String.Empty));
\r
1060 xmlReader, // xmlReader
\r
1061 XmlNodeType.EndElement, // nodeType
\r
1063 false, // isEmptyElement
\r
1064 "foo:bar", // name
\r
1066 "bar", // localName
\r
1067 "http://foo/", // namespaceURI
\r
1068 String.Empty, // value
\r
1069 0 // attributeCount
\r
1072 Assert.AreEqual ("http://foo/", xmlReader.LookupNamespace ("foo"));
\r
1074 AssertEndDocument (xmlReader);
\r
1078 public void AttributeInNamespace ()
\r
1080 string xml = @"<foo bar:baz='quux' xmlns:bar='http://bar/' />";
\r
1081 RunTest (xml, new TestMethod (AttributeInNamespace));
\r
1084 public void AttributeInNamespace (XmlReader xmlReader)
\r
1086 AssertStartDocument (xmlReader);
\r
1089 xmlReader, // xmlReader
\r
1090 XmlNodeType.Element, // nodeType
\r
1092 true, // isEmptyElement
\r
1094 String.Empty, // prefix
\r
1095 "foo", // localName
\r
1096 String.Empty, // namespaceURI
\r
1097 String.Empty, // value
\r
1098 2 // attributeCount
\r
1102 xmlReader, // xmlReader
\r
1103 "bar:baz", // name
\r
1105 "baz", // localName
\r
1106 "http://bar/", // namespaceURI
\r
1111 xmlReader, // xmlReader
\r
1112 "xmlns:bar", // name
\r
1113 "xmlns", // prefix
\r
1114 "bar", // localName
\r
1115 "http://www.w3.org/2000/xmlns/", // namespaceURI
\r
1116 "http://bar/" // value
\r
1119 Assert.AreEqual ("http://bar/", xmlReader.LookupNamespace ("bar"));
\r
1121 AssertEndDocument (xmlReader);
\r
1125 public void MoveToElementFromAttribute ()
\r
1127 string xml = @"<foo bar=""baz"" />";
\r
1128 RunTest (xml, new TestMethod (MoveToElementFromAttribute));
\r
1131 public void MoveToElementFromAttribute (XmlReader xmlReader)
\r
1133 Assert.IsTrue (xmlReader.Read ());
\r
1134 Assert.AreEqual (XmlNodeType.Element, xmlReader.NodeType);
\r
1135 Assert.IsTrue (xmlReader.MoveToFirstAttribute ());
\r
1136 Assert.AreEqual (XmlNodeType.Attribute, xmlReader.NodeType);
\r
1137 Assert.IsTrue (xmlReader.MoveToElement ());
\r
1138 Assert.AreEqual (XmlNodeType.Element, xmlReader.NodeType);
\r
1142 public void MoveToElementFromElement ()
\r
1144 string xml = @"<foo bar=""baz"" />";
\r
1145 RunTest (xml, new TestMethod (MoveToElementFromElement));
\r
1148 public void MoveToElementFromElement (XmlReader xmlReader)
\r
1150 Assert.IsTrue (xmlReader.Read ());
\r
1151 Assert.AreEqual (XmlNodeType.Element, xmlReader.NodeType);
\r
1152 Assert.IsTrue (!xmlReader.MoveToElement ());
\r
1153 Assert.AreEqual (XmlNodeType.Element, xmlReader.NodeType);
\r
1157 public void MoveToFirstAttributeWithNoAttributes ()
\r
1159 string xml = @"<foo />";
\r
1160 RunTest (xml, new TestMethod (MoveToFirstAttributeWithNoAttributes));
\r
1163 public void MoveToFirstAttributeWithNoAttributes (XmlReader xmlReader)
\r
1165 Assert.IsTrue (xmlReader.Read ());
\r
1166 Assert.AreEqual (XmlNodeType.Element, xmlReader.NodeType);
\r
1167 Assert.IsTrue (!xmlReader.MoveToFirstAttribute ());
\r
1168 Assert.AreEqual (XmlNodeType.Element, xmlReader.NodeType);
\r
1172 public void MoveToNextAttributeWithNoAttributes ()
\r
1174 string xml = @"<foo />";
\r
1175 RunTest (xml, new TestMethod (MoveToNextAttributeWithNoAttributes));
\r
1178 public void MoveToNextAttributeWithNoAttributes (XmlReader xmlReader)
\r
1180 Assert.IsTrue (xmlReader.Read ());
\r
1181 Assert.AreEqual (XmlNodeType.Element, xmlReader.NodeType);
\r
1182 Assert.IsTrue (!xmlReader.MoveToNextAttribute ());
\r
1183 Assert.AreEqual (XmlNodeType.Element, xmlReader.NodeType);
\r
1187 public void MoveToNextAttribute()
\r
1189 string xml = @"<foo bar=""baz"" quux='quuux'/>";
\r
1190 RunTest (xml, new TestMethod (MoveToNextAttribute));
\r
1193 public void MoveToNextAttribute (XmlReader xmlReader)
\r
1195 AssertStartDocument (xmlReader);
\r
1198 xmlReader, // xmlReader
\r
1199 XmlNodeType.Element, // nodeType
\r
1201 true, // isEmptyElement
\r
1203 String.Empty, // prefix
\r
1204 "foo", // localName
\r
1205 String.Empty, // namespaceURI
\r
1206 String.Empty, // value
\r
1207 2 // attributeCount
\r
1211 xmlReader, // xmlReader
\r
1213 String.Empty, // prefix
\r
1214 "bar", // localName
\r
1215 String.Empty, // namespaceURI
\r
1220 xmlReader, // xmlReader
\r
1222 String.Empty, // prefix
\r
1223 "quux", // localName
\r
1224 String.Empty, // namespaceURI
\r
1228 Assert.IsTrue (xmlReader.MoveToNextAttribute ());
\r
1229 Assert.AreEqual ("bar", xmlReader.Name);
\r
1230 Assert.AreEqual ("baz", xmlReader.Value);
\r
1232 Assert.IsTrue (xmlReader.MoveToNextAttribute ());
\r
1233 Assert.AreEqual ("quux", xmlReader.Name);
\r
1234 Assert.AreEqual ("quuux", xmlReader.Value);
\r
1236 Assert.IsTrue (!xmlReader.MoveToNextAttribute ());
\r
1238 Assert.IsTrue (xmlReader.MoveToElement ());
\r
1240 AssertNodeValues (
\r
1242 xmlReader, // xmlReader
\r
1243 XmlNodeType.Element, // nodeType
\r
1245 true, // isEmptyElement
\r
1247 String.Empty, // prefix
\r
1248 "foo", // localName
\r
1249 String.Empty, // namespaceURI
\r
1250 String.Empty, // value
\r
1251 2 // attributeCount
\r
1254 AssertEndDocument (xmlReader);
\r
1258 // [Category ("NotDotNet")] // MS XmlNodeReader never moves to xml declaration.
\r
1259 [Ignore ("Too inconsistent reference implementations to determine which is correct behavior.")]
\r
1260 public void MoveToXmlDeclAttributes ()
\r
1262 string xml = "<?xml version=\"1.0\" standalone=\"yes\"?><root/>";
\r
1263 RunTest (xml, new TestMethod (MoveToXmlDeclAttributes));
\r
1266 public void MoveToXmlDeclAttributes (XmlReader xmlReader)
\r
1268 xmlReader.Read ();
\r
1269 this.AssertNodeValues ("#1", xmlReader,
\r
1270 XmlNodeType.XmlDeclaration,
\r
1277 "version=\"1.0\" standalone=\"yes\"",
\r
1279 Assert.IsTrue (xmlReader.MoveToFirstAttribute (), "MoveToFirstAttribute");
\r
1280 this.AssertNodeValues ("#2", xmlReader,
\r
1281 XmlNodeType.Attribute,
\r
1282 0, // FIXME: might be 1
\r
1290 xmlReader.ReadAttributeValue ();
\r
1291 this.AssertNodeValues ("#3", xmlReader,
\r
1293 1, // FIXME might be 2
\r
1296 null, // FIXME: should be String.Empty,
\r
1298 null, // FIXME: should be String.Empty,
\r
1301 xmlReader.MoveToNextAttribute ();
\r
1302 this.AssertNodeValues ("#4", xmlReader,
\r
1303 XmlNodeType.Attribute,
\r
1304 0, // FIXME: might be 1
\r
1312 xmlReader.ReadAttributeValue ();
\r
1313 this.AssertNodeValues ("#5", xmlReader,
\r
1315 1, // FIXME: might be 2
\r
1318 null, // FIXME: should be String.Empty,
\r
1320 null, // FIXME: should be String.Empty,
\r
1326 public void AttributeOrder ()
\r
1328 string xml = @"<foo _1='1' _2='2' _3='3' />";
\r
1329 RunTest (xml, new TestMethod (AttributeOrder));
\r
1332 public void AttributeOrder (XmlReader xmlReader)
\r
1334 Assert.IsTrue (xmlReader.Read ());
\r
1335 Assert.AreEqual (XmlNodeType.Element, xmlReader.NodeType);
\r
1337 Assert.IsTrue (xmlReader.MoveToFirstAttribute ());
\r
1338 Assert.AreEqual ("_1", xmlReader.Name);
\r
1339 Assert.IsTrue (xmlReader.MoveToNextAttribute ());
\r
1340 Assert.AreEqual ("_2", xmlReader.Name);
\r
1341 Assert.IsTrue (xmlReader.MoveToNextAttribute ());
\r
1342 Assert.AreEqual ("_3", xmlReader.Name);
\r
1344 Assert.IsTrue (!xmlReader.MoveToNextAttribute ());
\r
1348 [Category ("NotDotNet")]
\r
1349 public void IndexerAndAttributes ()
\r
1351 string xml = @"<?xml version='1.0' standalone='no'?><foo _1='1' _2='2' _3='3' />";
\r
1352 RunTest (xml, new TestMethod (IndexerAndAttributes));
\r
1355 public void IndexerAndAttributes (XmlReader xmlReader)
\r
1357 Assert.IsTrue (xmlReader.Read ());
\r
1358 Assert.AreEqual ("1.0", xmlReader ["version"]);
\r
1359 Assert.AreEqual ("1.0", xmlReader.GetAttribute ("version"));
\r
1360 // .NET 1.1 BUG. XmlTextReader returns null, while XmlNodeReader returns "".
\r
1361 Assert.AreEqual (null, xmlReader ["encoding"]);
\r
1362 Assert.AreEqual (null, xmlReader.GetAttribute ("encoding"));
\r
1363 Assert.AreEqual ("no", xmlReader ["standalone"]);
\r
1364 Assert.AreEqual ("no", xmlReader.GetAttribute ("standalone"));
\r
1365 Assert.AreEqual ("1.0", xmlReader [0]);
\r
1366 Assert.AreEqual ("1.0", xmlReader.GetAttribute (0));
\r
1367 Assert.AreEqual ("no", xmlReader [1]);
\r
1368 Assert.AreEqual ("no", xmlReader.GetAttribute (1));
\r
1370 Assert.IsTrue (xmlReader.Read ());
\r
1371 Assert.AreEqual (XmlNodeType.Element, xmlReader.NodeType);
\r
1372 Assert.AreEqual ("1", xmlReader ["_1"]);
\r
1374 Assert.IsTrue (xmlReader.MoveToFirstAttribute ());
\r
1375 Assert.AreEqual ("_1", xmlReader.Name);
\r
1376 Assert.AreEqual ("1", xmlReader ["_1"]);
\r
1377 Assert.IsTrue (xmlReader.MoveToNextAttribute ());
\r
1378 Assert.AreEqual ("_2", xmlReader.Name);
\r
1379 Assert.AreEqual ("1", xmlReader ["_1"]);
\r
1380 Assert.IsTrue (xmlReader.MoveToNextAttribute ());
\r
1381 Assert.AreEqual ("_3", xmlReader.Name);
\r
1382 Assert.AreEqual ("1", xmlReader ["_1"]);
\r
1384 Assert.IsTrue (!xmlReader.MoveToNextAttribute ());
\r
1388 public void ProhibitedMultipleAttributes ()
\r
1390 string xml = @"<foo _1='1' _1='1' />";
\r
1392 RunTest (xml, new TestMethod (ReadAll));
\r
1393 } catch (XmlException) {
\r
1395 xml = @"<foo _1='1' _1='2' />";
\r
1397 RunTest (xml, new TestMethod (ReadAll));
\r
1398 } catch (XmlException) {
\r
1402 public void ReadAll (XmlReader xmlReader)
\r
1404 while (!xmlReader.EOF)
\r
1405 xmlReader.Read ();
\r
1409 public void SurrogatePairContent ()
\r
1411 string xml = "<root xmlns='𐄀'/>";
\r
1412 RunTest (xml, new TestMethod (SurrogatePairContent));
\r
1415 public void SurrogatePairContent (XmlReader xmlReader)
\r
1417 xmlReader.Read ();
\r
1418 Assert.AreEqual (true, xmlReader.MoveToAttribute ("xmlns"));
\r
1419 Assert.AreEqual ("xmlns", xmlReader.Name);
\r
1420 Assert.AreEqual (2, xmlReader.Value.Length);
\r
1421 Assert.AreEqual (0xD800, (int) xmlReader.Value [0]);
\r
1422 Assert.AreEqual (0xDD00, (int) xmlReader.Value [1]);
\r
1426 public void ReadOuterXmlOnEndElement ()
\r
1428 string xml = "<root><foo></foo></root>";
\r
1429 RunTest (xml, new TestMethod (ReadOuterXmlOnEndElement));
\r
1432 public void ReadOuterXmlOnEndElement (XmlReader xmlReader)
\r
1434 xmlReader.Read ();
\r
1435 xmlReader.Read ();
\r
1436 xmlReader.Read ();
\r
1437 Assert.AreEqual (String.Empty, xmlReader.ReadOuterXml ());
\r
1441 public void ReadInnerXmlOnEndElement ()
\r
1443 string xml = "<root><foo></foo></root>";
\r
1444 RunTest (xml, new TestMethod (ReadInnerXmlOnEndElement));
\r
1447 private void ReadInnerXmlOnEndElement (XmlReader xmlReader)
\r
1449 xmlReader.Read ();
\r
1450 xmlReader.Read ();
\r
1451 xmlReader.Read ();
\r
1452 Assert.AreEqual (String.Empty, xmlReader.ReadInnerXml ());
\r
1456 public void LookupEmptyPrefix ()
\r
1458 string xml = "<root><foo></foo></root>";
\r
1459 RunTest (xml, new TestMethod (LookupEmptyPrefix));
\r
1462 void LookupEmptyPrefix (XmlReader xmlReader)
\r
1464 xmlReader.Read ();
\r
1465 Assert.IsNull (xmlReader.LookupNamespace (String.Empty));
\r
1469 public void ReadStartElement ()
\r
1471 string xml = "<root>test</root>";
\r
1472 RunTest (xml, new TestMethod (ReadStartElement));
\r
1475 void ReadStartElement (XmlReader xr)
\r
1478 xr.ReadStartElement ();
\r
1479 // consume Element node.
\r
1480 Assert.AreEqual (XmlNodeType.Text, xr.NodeType);
\r
1484 public void LookupNamespaceAtEndElement ()
\r
1486 string xml = "<root xmlns:x='urn:foo'><foo/></root>";
\r
1487 RunTest (xml, new TestMethod (LookupNamespaceAtEndElement));
\r
1490 void LookupNamespaceAtEndElement (XmlReader reader)
\r
1493 Assert.AreEqual ("urn:foo", reader.LookupNamespace ("x"), "#1");
\r
1495 Assert.AreEqual ("urn:foo", reader.LookupNamespace ("x"), "#2");
\r
1497 Assert.AreEqual ("urn:foo", reader.LookupNamespace ("x"), "#3");
\r
1501 public void ReadClosedReader ()
\r
1503 string xml = "<fin>aaa</fin>";
\r
1504 RunTest (xml, new TestMethod (ReadClosedReader));
\r
1507 void ReadClosedReader (XmlReader reader)
\r
1511 reader.Read (); // silently returns false
\r
1515 public void CreateSimple ()
\r
1517 XmlReaderSettings s = new XmlReaderSettings ();
\r
1518 s.ProhibitDtd = false;
\r
1519 XmlReader xr = XmlReader.Create ("Test/XmlFiles/nested-dtd-test.xml", s);
\r
1521 Assert.AreEqual (XmlNodeType.DocumentType, xr.NodeType, "#1");
\r
1523 Assert.AreEqual (XmlNodeType.Whitespace, xr.NodeType, "#2");
\r
1525 Assert.AreEqual (XmlNodeType.Element, xr.NodeType, "#3");
\r
1529 [ExpectedException (typeof (XmlException))]
\r
1530 public void CreateSimpleProhibitDtd ()
\r
1532 XmlReader xr = XmlReader.Create ("Test/XmlFiles/nested-dtd-test.xml");
\r
1537 // a bit revised version of bug #78706
\r
1538 public void CreateFromUrlClose ()
\r
1540 string file = Path.Combine (Path.GetTempPath (), "78706.xml");
\r
1542 if (!File.Exists (file))
\r
1543 File.Create (file).Close ();
\r
1544 XmlReaderSettings s = new XmlReaderSettings ();
\r
1545 s.CloseInput = false; // explicitly
\r
1546 XmlReader r = XmlReader.Create (file, s);
\r
1548 XmlTextWriter w = new XmlTextWriter (file, null);
\r
1551 if (File.Exists (file))
\r
1552 File.Delete (file);
\r
1557 // a bit revised version of bug #385638
\r
1558 public void CreateFromUrlClose2 ()
\r
1560 string file = Path.Combine (Path.GetTempPath (), "385638.xml");
\r
1562 if (File.Exists (file))
\r
1563 File.Delete (file);
\r
1564 using (TextWriter tw = File.CreateText (file))
\r
1565 tw.Write ("<xml />");
\r
1566 XmlReaderSettings s = new XmlReaderSettings ();
\r
1567 s.IgnoreWhitespace = true; // this results in XmlFilterReader, which is the key for this bug.
\r
1568 XmlReader r = XmlReader.Create (file, s);
\r
1570 XmlTextWriter w = new XmlTextWriter (file, null);
\r
1573 if (File.Exists (file))
\r
1574 File.Delete (file);
\r
1579 [ExpectedException (typeof (ArgumentException))]
\r
1580 public void Create_String_Empty ()
\r
1582 XmlReader.Create (String.Empty);
\r
1586 public void ReadToDescendant ()
\r
1588 string xml = @"<root><foo/><bar/><foo> test text <bar><bar></bar></bar></foo></root>";
\r
1589 RunTest (xml, new TestMethod (ReadToDescendant));
\r
1592 void ReadToDescendant (XmlReader xmlReader)
\r
1594 // move to first <bar/>
\r
1595 Assert.IsTrue (xmlReader.ReadToDescendant ("bar"), "#1");
\r
1596 // no children in <bar/>. It is empty.
\r
1597 Assert.IsTrue (!xmlReader.ReadToDescendant ("bar"), "#2");
\r
1598 Assert.AreEqual ("bar", xmlReader.Name, "#2-2");
\r
1600 // move to the second <foo>
\r
1601 xmlReader.Read ();
\r
1602 // move to the second <bar>
\r
1603 Assert.IsTrue (xmlReader.ReadToDescendant ("bar"), "#3");
\r
1604 // move to <bar> inside <bar>...</bar>
\r
1605 Assert.IsTrue (xmlReader.ReadToDescendant ("bar"), "#4");
\r
1606 // the next is EndElement of </bar>, so no move.
\r
1607 Assert.IsTrue (!xmlReader.ReadToDescendant ("bar"), "#5");
\r
1608 Assert.AreEqual (XmlNodeType.EndElement, xmlReader.NodeType, "#5-2");
\r
1612 public void ReadToDescepdant2 ()
\r
1614 string xml = "<root/>";
\r
1615 RunTest (xml, new TestMethod (ReadToDescendant2));
\r
1618 void ReadToDescendant2 (XmlReader xmlReader)
\r
1620 // make sure that it works when the reader is at Initial state.
\r
1621 Assert.IsTrue (xmlReader.ReadToDescendant ("root"));
\r
1625 public void ReadToFollowing ()
\r
1627 string xml = @"<root><foo/><bar/><foo><bar><bar></bar></bar></foo></root>";
\r
1628 RunTest (xml, new TestMethod (ReadToFollowing));
\r
1631 public void ReadToFollowing (XmlReader xmlReader)
\r
1633 Assert.IsTrue (xmlReader.ReadToFollowing ("bar"), "#1");
\r
1634 Assert.IsTrue (xmlReader.ReadToFollowing ("bar"), "#2");
\r
1635 Assert.AreEqual (2, xmlReader.Depth, "#2-2");
\r
1636 Assert.IsTrue (xmlReader.ReadToFollowing ("bar"), "#3");
\r
1637 Assert.AreEqual (3, xmlReader.Depth, "#3-2");
\r
1638 Assert.IsTrue (!xmlReader.ReadToFollowing ("bar"), "#4");
\r
1642 [Category ("NotDotNet")]
\r
1643 public void ReadToNextSiblingAtInitialState ()
\r
1645 string xml = @"<root></root>";
\r
1646 RunTest (xml, new TestMethod (ReadToNextSiblingAtInitialState ));
\r
1649 void ReadToNextSiblingAtInitialState (XmlReader xmlReader)
\r
1651 Assert.IsTrue (!xmlReader.ReadToNextSibling ("bar"), "#1");
\r
1652 Assert.IsTrue (!xmlReader.ReadToNextSibling ("root"), "#2");
\r
1656 public void ReadToNextSibling ()
\r
1658 string xml = @"<root><foo/><bar attr='value'/><foo><pooh/><bar></bar><foo></foo><bar/></foo></root>";
\r
1659 RunTest (xml, new TestMethod (ReadToNextSibling));
\r
1662 void ReadToNextSibling (XmlReader xmlReader)
\r
1664 // It is funky, but without it MS.NET results in an infinite loop.
\r
1665 xmlReader.Read (); // root
\r
1667 xmlReader.Read (); // foo
\r
1668 Assert.IsTrue (xmlReader.ReadToNextSibling ("bar"), "#3");
\r
1670 Assert.AreEqual ("value", xmlReader.GetAttribute ("attr"), "#3-2");
\r
1671 xmlReader.Read (); // foo
\r
1672 xmlReader.Read (); // pooh
\r
1673 Assert.IsTrue (xmlReader.ReadToNextSibling ("bar"), "#4");
\r
1674 Assert.IsTrue (!xmlReader.IsEmptyElement, "#4-2");
\r
1675 Assert.IsTrue (xmlReader.ReadToNextSibling ("bar"), "#5");
\r
1676 Assert.IsTrue (xmlReader.IsEmptyElement, "#5-2");
\r
1677 Assert.IsTrue (xmlReader.Read (), "#6"); // /foo
\r
1679 AssertNodeValues ("#7", xmlReader,
\r
1680 XmlNodeType.EndElement,
\r
1682 false, // IsEmptyElement
\r
1684 String.Empty, // Prefix
\r
1685 "foo", // LocalName
\r
1686 String.Empty, // NamespaceURI
\r
1687 String.Empty, // Value
\r
1688 false, // HasValue
\r
1689 0, // AttributeCount
\r
1690 false); // HasAttributes
\r
1695 public void ReadToNextSibling2 ()
\r
1697 string xml = @"<root><baz><bar><foo attr='value'/></bar><foo attr='value2'><bar><foo /></bar></foo></baz></root>";
\r
1698 RunTest (xml, new TestMethod (ReadToNextSibling2));
\r
1701 void ReadToNextSibling2 (XmlReader r)
\r
1703 r.MoveToContent (); // ->root
\r
1704 r.Read (); // root->baz
\r
1705 r.Read (); // baz->bar
\r
1706 Assert.IsTrue (r.ReadToNextSibling ("foo"), "#1");
\r
1707 Assert.AreEqual ("value2", r.GetAttribute ("attr"), "#2");
\r
1708 r.Read (); // foo[@value='value2']->bar
\r
1709 Assert.IsTrue (!r.ReadToNextSibling ("foo"), "#3");
\r
1710 Assert.AreEqual (XmlNodeType.EndElement, r.NodeType, "#4");
\r
1711 Assert.AreEqual ("foo", r.LocalName, "#5");
\r
1716 public void ReadToNextSibling3 ()
\r
1718 string xml = @" <books> <book> <name>Happy C Sharp</name> </book> </books>";
\r
1719 XmlReader reader = XmlReader.Create (new StringReader (xml));
\r
1721 reader.MoveToContent ();
\r
1723 while (reader.Read ())
\r
1724 reader.ReadToNextSibling ("book"); // should not result in an infinite loop
\r
1729 public void ReadToNextSibling4 ()
\r
1731 string xml = @"<SerializableStringDictionary>
\r
1732 <SerializableStringDictionary>
\r
1733 <DictionaryEntry Key=""Key1"" Value=""Value1""/>
\r
1734 <DictionaryEntry Key=""Key2"" Value=""Value2""/>
\r
1735 <DictionaryEntry Key=""Key3"" Value=""Value3""/>
\r
1736 </SerializableStringDictionary>
\r
1737 </SerializableStringDictionary>";
\r
1739 var reader = XmlReader.Create (new StringReader (xml));
\r
1741 Assert.IsTrue (reader.ReadToDescendant ("SerializableStringDictionary"), "#1");
\r
1742 Assert.IsTrue (reader.ReadToDescendant ("DictionaryEntry"), "#2");
\r
1746 reader.MoveToAttribute ("Key");
\r
1747 var key = reader.ReadContentAsString ();
\r
1748 reader.MoveToAttribute ("Value");
\r
1749 var value = reader.ReadContentAsString ();
\r
1752 while (reader.ReadToNextSibling ("DictionaryEntry"));
\r
1753 Assert.AreEqual (3, count, "#3");
\r
1757 public void ReadSubtree ()
\r
1759 string xml = @"<root><foo/><bar attr='value'></bar></root>";
\r
1760 RunTest (xml, new TestMethod (ReadSubtree));
\r
1763 void ReadSubtree (XmlReader reader)
\r
1765 reader.MoveToContent (); // root
\r
1766 reader.Read (); // foo
\r
1767 XmlReader st = reader.ReadSubtree (); // <foo/>
\r
1769 // MS bug: IsEmptyElement should be false here.
\r
1771 AssertNodeValues ("#1", st,
\r
1774 false, // IsEmptyElement
\r
1775 String.Empty, // Name
\r
1776 String.Empty, // Prefix
\r
1777 String.Empty, // LocalName
\r
1778 String.Empty, // NamespaceURI
\r
1779 String.Empty, // Value
\r
1780 false, // HasValue
\r
1781 0, // AttributeCount
\r
1782 false); // HasAttributes
\r
1784 Assert.AreEqual (XmlNodeType.None, st.NodeType, "#1");
\r
1787 AssertNodeValues ("#2", st,
\r
1788 XmlNodeType.Element,
\r
1790 true, // IsEmptyElement
\r
1792 String.Empty, // Prefix
\r
1793 "foo", // LocalName
\r
1794 String.Empty, // NamespaceURI
\r
1795 String.Empty, // Value
\r
1796 false, // HasValue
\r
1797 0, // AttributeCount
\r
1798 false); // HasAttributes
\r
1800 Assert.IsTrue (!st.Read (), "#3");
\r
1802 // At this state, reader is not positioned on <bar> yet
\r
1803 AssertNodeValues ("#3-2", reader,
\r
1804 XmlNodeType.Element,
\r
1805 1, // Depth. It is 1 for main tree.
\r
1806 true, // IsEmptyElement
\r
1808 String.Empty, // Prefix
\r
1809 "foo", // LocalName
\r
1810 String.Empty, // NamespaceURI
\r
1811 String.Empty, // Value
\r
1812 false, // HasValue
\r
1813 0, // AttributeCount
\r
1814 false); // HasAttributes
\r
1818 AssertNodeValues ("#4", reader,
\r
1819 XmlNodeType.Element,
\r
1820 1, // Depth. It is 1 for main tree.
\r
1821 false, // IsEmptyElement
\r
1823 String.Empty, // Prefix
\r
1824 "bar", // LocalName
\r
1825 String.Empty, // NamespaceURI
\r
1826 String.Empty, // Value
\r
1827 false, // HasValue
\r
1828 1, // AttributeCount
\r
1829 true); // HasAttributes
\r
1831 st = reader.ReadSubtree ();
\r
1832 st.Read (); // Initial -> Interactive
\r
1833 AssertNodeValues ("#5", st,
\r
1834 XmlNodeType.Element,
\r
1835 0, // Depth. It is 0 for subtree.
\r
1836 false, // IsEmptyElement
\r
1838 String.Empty, // Prefix
\r
1839 "bar", // LocalName
\r
1840 String.Empty, // NamespaceURI
\r
1841 String.Empty, // Value
\r
1842 false, // HasValue
\r
1843 1, // AttributeCount
\r
1844 true); // HasAttributes
\r
1847 AssertNodeValues ("#6-1", st,
\r
1848 XmlNodeType.EndElement,
\r
1849 0, // Depth. It is 0 for subtree.
\r
1850 false, // IsEmptyElement
\r
1852 String.Empty, // Prefix
\r
1853 "bar", // LocalName
\r
1854 String.Empty, // NamespaceURI
\r
1855 String.Empty, // Value
\r
1856 false, // HasValue
\r
1857 0, // AttributeCount
\r
1858 false); // HasAttributes
\r
1860 AssertNodeValues ("#6-2", st,
\r
1861 XmlNodeType.EndElement,
\r
1862 0, // Depth. It is 0 for subtree.
\r
1863 false, // IsEmptyElement
\r
1865 String.Empty, // Prefix
\r
1866 "bar", // LocalName
\r
1867 String.Empty, // NamespaceURI
\r
1868 String.Empty, // Value
\r
1869 false, // HasValue
\r
1870 0, // AttributeCount
\r
1871 false); // HasAttributes
\r
1873 Assert.IsTrue (!st.Read (), "#7");
\r
1877 public void ReadInteger ()
\r
1879 string xml1 = "<root>1</root>";
\r
1882 xr = XmlReader.Create (new StringReader (xml1));
\r
1884 Assert.AreEqual ("1", xr.ReadElementContentAsString (), "#1");
\r
1886 AssertNodeValues ("#1-2", xr,
\r
1888 0, // Depth. It is 0 for subtree.
\r
1889 false, // IsEmptyElement
\r
1890 String.Empty, // Name
\r
1891 String.Empty, // Prefix
\r
1892 String.Empty, // LocalName
\r
1893 String.Empty, // NamespaceURI
\r
1894 String.Empty, // Value
\r
1895 false, // HasValue
\r
1896 0, // AttributeCount
\r
1897 false); // HasAttributes
\r
1899 xr = XmlReader.Create (new StringReader (xml1));
\r
1901 // this XmlReader has no schema, thus the value is untyped
\r
1902 Assert.AreEqual ("1", xr.ReadElementContentAsObject (), "#2");
\r
1904 xr = XmlReader.Create (new StringReader (xml1));
\r
1907 Assert.AreEqual ("1", xr.ReadContentAsString (), "#3");
\r
1909 xr = XmlReader.Create (new StringReader (xml1));
\r
1911 Assert.AreEqual (1, xr.ReadElementContentAsInt (), "#4");
\r
1913 xr = XmlReader.Create (new StringReader (xml1));
\r
1915 Assert.AreEqual (1, xr.ReadElementContentAs (typeof (int), null), "#5");
\r
1919 [ExpectedException (typeof (XmlException))]
\r
1920 public void ReadContentAsIntFail ()
\r
1922 XmlReader xr = XmlReader.Create (
\r
1923 new StringReader ("<doc>1.0</doc>"));
\r
1925 xr.ReadElementContentAsInt ();
\r
1929 public void ReadDateTime ()
\r
1931 DateTime time = new DateTime (2006, 1, 2, 3, 4, 56);
\r
1932 string xml1 = "<root>2006-01-02T03:04:56</root>";
\r
1935 xr = XmlReader.Create (new StringReader (xml1));
\r
1937 // this XmlReader has no schema, thus the value is untyped
\r
1938 Assert.AreEqual ("2006-01-02T03:04:56", xr.ReadElementContentAsString (), "#1");
\r
1940 xr = XmlReader.Create (new StringReader (xml1));
\r
1943 Assert.AreEqual (time, xr.ReadContentAsDateTime (), "#2");
\r
1945 xr = XmlReader.Create (new StringReader (xml1));
\r
1947 Assert.AreEqual (time, xr.ReadElementContentAsDateTime (), "#3");
\r
1949 xr = XmlReader.Create (new StringReader (xml1));
\r
1951 Assert.AreEqual (time, xr.ReadElementContentAs (typeof (DateTime), null), "#4");
\r
1955 [ExpectedException (typeof (XmlException))]
\r
1956 public void ReadContentAsDateTimeFail ()
\r
1958 XmlReader xr = XmlReader.Create (
\r
1959 new StringReader ("<doc>P1Y2M3D</doc>"));
\r
1961 xr.ReadElementContentAsDateTime ();
\r
1965 public void ReadContentAs_QNameEmptyNSResolver ()
\r
1967 XmlReader xr = XmlReader.Create (
\r
1968 new StringReader ("<doc xmlns:x='urn:foo'>x:el</doc>"));
\r
1970 object o = xr.ReadElementContentAs (
\r
1971 typeof (XmlQualifiedName), null);
\r
1972 // without IXmlNamespaceResolver, it still resolves
\r
1973 // x:el as valid QName.
\r
1974 Assert.IsNotNull (o, "#1");
\r
1975 XmlQualifiedName q = o as XmlQualifiedName;
\r
1976 Assert.AreEqual (new XmlQualifiedName ("el", "urn:foo"), q, "#2 : " + o.GetType ());
\r
1980 [ExpectedException (typeof (InvalidOperationException))]
\r
1981 public void ReadContentStringOnElementFail ()
\r
1983 XmlReader xr = XmlReader.Create (new StringReader ("<a>test</a>"));
\r
1985 xr.ReadContentAsString ();
\r
1989 public void ReadContentStringOnEndElement ()
\r
1991 XmlReader xr = XmlReader.Create (new StringReader ("<a>test</a>"));
\r
1995 Assert.AreEqual (String.Empty, xr.ReadContentAsString ()); // does not fail, unlike at Element!
\r
1999 public void ReadContentStringOnPI ()
\r
2001 XmlReader xr = XmlReader.Create (new StringReader ("<?pi ?><a>test</a>"));
\r
2003 Assert.AreEqual (String.Empty, xr.ReadContentAsString ());
\r
2007 [ExpectedException (typeof (InvalidOperationException))] // unlike ReadContentAsString()
\r
2008 public void ReadElementContentStringOnPI ()
\r
2010 XmlReader xr = XmlReader.Create (new StringReader ("<?pi ?><a>test</a>"));
\r
2012 Assert.AreEqual (XmlNodeType.ProcessingInstruction, xr.NodeType);
\r
2013 xr.ReadElementContentAsString ();
\r
2017 [ExpectedException (typeof (XmlException))]
\r
2018 public void ReadElementContentStringMixedContent ()
\r
2020 XmlReader xr = XmlReader.Create (
\r
2021 new StringReader ("<doc>123<child>456</child>789</doc>"));
\r
2023 // "child" is regarded as an invalid node.
\r
2024 string s = xr.ReadElementContentAsString ();
\r
2028 public void ReadContentStringMixedContent ()
\r
2030 XmlReader xr = XmlReader.Create (
\r
2031 new StringReader ("<doc>123<child>456</child>789</doc>"));
\r
2033 xr.Read (); // from Text "123"
\r
2034 string s = xr.ReadContentAsString ();
\r
2035 Assert.AreEqual ("123", s, "#1");
\r
2036 Assert.AreEqual (XmlNodeType.Element, xr.NodeType, "#2");
\r
2040 public void ReadElementContentAsString ()
\r
2042 XmlTextReader r = new XmlTextReader (
\r
2043 "<root/>", XmlNodeType.Document, null);
\r
2045 Assert.AreEqual (String.Empty, r.ReadElementContentAsString (), "#1");
\r
2046 Assert.AreEqual (XmlNodeType.None, r.NodeType, "#2");
\r
2050 public void ReadElementContentAs ()
\r
2052 // as System.Object
\r
2054 XmlTextReader r = new XmlTextReader (
\r
2055 "<root/>", XmlNodeType.Document, null);
\r
2057 Assert.AreEqual (String.Empty, r.ReadElementContentAs (typeof (object), null), "#1");
\r
2058 Assert.AreEqual (XmlNodeType.None, r.NodeType, "#2");
\r
2060 // regardless of its value, the return value is string.
\r
2061 r = new XmlTextReader ("<root>1</root>", XmlNodeType.Document, null);
\r
2063 Assert.AreEqual ("1", r.ReadElementContentAs (typeof (object), null), "#3");
\r
2064 Assert.AreEqual (XmlNodeType.None, r.NodeType, "#4");
\r
2068 public void ReadContentStringOnAttribute ()
\r
2070 string xml = @"<root id='myId'><child /></root>";
\r
2071 RunTest (xml, new TestMethod (ReadContentStringOnAttribute));
\r
2074 void ReadContentStringOnAttribute (XmlReader reader)
\r
2077 Assert.IsTrue (reader.MoveToAttribute ("id"));
\r
2078 Assert.AreEqual ("myId", reader.ReadContentAsString ());
\r
2082 public void ReadElementContentAsStringEmpty ()
\r
2084 string xml = "<root><sample/></root>";
\r
2085 RunTest (xml, new TestMethod (ReadElementContentAsStringEmpty));
\r
2088 void ReadElementContentAsStringEmpty (XmlReader reader)
\r
2090 reader.MoveToContent ();
\r
2092 Assert.AreEqual (String.Empty, reader.ReadElementContentAsString ("sample", ""));
\r
2093 Assert.AreEqual (XmlNodeType.EndElement, reader.NodeType);
\r
2097 public void ReadSubtreeClose ()
\r
2100 string xml = @"<root><item-list><item id='a'/><item id='b'/></item-list></root>";
\r
2101 RunTest (xml, new TestMethod (ReadSubtreeClose));
\r
2104 void ReadSubtreeClose (XmlReader reader)
\r
2106 reader.ReadToFollowing ("item-list");
\r
2107 XmlReader sub = reader.ReadSubtree ();
\r
2108 sub.ReadToDescendant ("item");
\r
2110 Assert.AreEqual (XmlNodeType.EndElement, reader.NodeType, "#1");
\r
2111 Assert.AreEqual ("item-list", reader.Name, "#2");
\r
2115 [ExpectedException (typeof (InvalidOperationException))]
\r
2116 public void ReadSubtreeOnNonElement ()
\r
2118 string xml = @"<x> <y/></x>";
\r
2119 XmlReader r = XmlReader.Create (new StringReader (xml));
\r
2126 [ExpectedException (typeof (InvalidOperationException))]
\r
2127 public void ReadSubtreeOnNonElement2 ()
\r
2129 string xml = @"<x> <y/></x>";
\r
2130 XmlReader r = XmlReader.Create (new StringReader (xml));
\r
2135 public void ReadSubtreeEmptyElement ()
\r
2137 string xml = @"<x/>";
\r
2138 XmlReader r = XmlReader.Create (new StringReader (xml));
\r
2140 XmlReader s = r.ReadSubtree ();
\r
2141 Assert.IsTrue (s.Read (), "#1");
\r
2142 Assert.AreEqual (XmlNodeType.Element, s.NodeType, "#2");
\r
2143 Assert.IsTrue (!s.Read (), "#3");
\r
2144 Assert.AreEqual (XmlNodeType.None, s.NodeType, "#4");
\r
2148 public void ReadSubtreeEmptyElementWithAttribute ()
\r
2150 string xml = @"<root><x a='b'/></root>";
\r
2151 XmlReader r = XmlReader.Create (new StringReader (xml));
\r
2154 XmlReader r2 = r.ReadSubtree ();
\r
2155 Console.WriteLine ("X");
\r
2157 XmlReader r3 = r2.ReadSubtree ();
\r
2158 r2.MoveToFirstAttribute ();
\r
2159 Assert.IsTrue (!r.IsEmptyElement, "#1");
\r
2160 Assert.IsTrue (!r2.IsEmptyElement, "#2");
\r
2162 Assert.IsTrue (r.IsEmptyElement, "#3");
\r
2163 Assert.IsTrue (r2.IsEmptyElement, "#4");
\r
2165 Assert.IsTrue (r.IsEmptyElement, "#5");
\r
2166 Assert.IsTrue (r2.IsEmptyElement, "#6");
\r
2170 public void ReadContentAsBase64 ()
\r
2172 byte[] randomData = new byte[24];
\r
2173 for (int i = 0; i < randomData.Length; i++)
\r
2174 randomData [i] = (byte) i;
\r
2176 string xmlString = "<?xml version=\"1.0\"?><data>" +
\r
2177 Convert.ToBase64String (randomData) + "</data>";
\r
2178 TextReader textReader = new StringReader (xmlString);
\r
2179 XmlReader xmlReader = XmlReader.Create (textReader);
\r
2180 xmlReader.ReadToFollowing ("data");
\r
2182 int readBytes = 0;
\r
2183 byte[] buffer = new byte [24];
\r
2185 xmlReader.ReadStartElement ();
\r
2186 readBytes = xmlReader.ReadContentAsBase64 (buffer, 0, buffer.Length);
\r
2187 Assert.AreEqual (24, readBytes, "#1");
\r
2188 Assert.AreEqual (0, xmlReader.ReadContentAsBase64 (buffer, 0, buffer.Length), "#2");
\r
2189 StringWriter sw = new StringWriter ();
\r
2190 foreach (byte b in buffer) sw.Write ("{0:X02}", b);
\r
2191 Assert.AreEqual ("000102030405060708090A0B0C0D0E0F1011121314151617", sw.ToString (), "#3");
\r
2195 public void ReadContentAsBase64_2 () // bug #480066
\r
2197 StringReader readerString = new StringReader ("<root><b64>TWFu</b64><b64>TWFu</b64>\r\n\t<b64>TWFu</b64><b64>TWFu</b64></root>");
\r
2198 XmlReaderSettings settingsXml = new XmlReaderSettings ();
\r
2199 settingsXml.XmlResolver = null;
\r
2200 using (var readerXml = XmlReader.Create (readerString, settingsXml)) {
\r
2201 readerXml.MoveToContent ();
\r
2202 readerXml.Read ();
\r
2203 readerXml.ReadStartElement ("b64");
\r
2204 const int bufferLength = 1024;
\r
2205 byte [] buffer = new byte [bufferLength];
\r
2206 readerXml.ReadContentAsBase64 (buffer, 0, bufferLength);
\r
2207 Assert.AreEqual (XmlNodeType.EndElement, readerXml.NodeType, "#1");
\r
2208 readerXml.Read ();
\r
2209 Assert.AreEqual (XmlNodeType.Element, readerXml.NodeType, "#2");
\r
2214 public void ReadContentAsBase64_3 () // bug #543332
\r
2216 byte [] fakeState = new byte[25];
\r
2217 byte [] fixedSizeBuffer = new byte [25];
\r
2218 byte [] readDataBuffer = new byte [25];
\r
2219 var ms = new MemoryStream ();
\r
2220 var xw = XmlWriter.Create (ms);
\r
2221 xw.WriteStartElement ("root");
\r
2222 xw.WriteBase64 (fakeState, 0, fakeState.Length);
\r
2223 xw.WriteEndElement ();
\r
2225 var reader = XmlReader.Create (new MemoryStream (ms.ToArray ()));
\r
2226 reader.MoveToContent ();
\r
2227 // we cannot completely trust the length read to indicate the end.
\r
2229 bytesRead = reader.ReadElementContentAsBase64 (fixedSizeBuffer, 0, fixedSizeBuffer.Length);
\r
2230 Assert.AreEqual (25, bytesRead, "#1");
\r
2231 Assert.AreEqual (XmlNodeType.Text, reader.NodeType, "#2");
\r
2232 bytesRead = reader.ReadElementContentAsBase64 (fixedSizeBuffer, 0, fixedSizeBuffer.Length);
\r
2233 Assert.AreEqual (0, bytesRead, "#3");
\r
2234 Assert.AreEqual (XmlNodeType.EndElement, reader.NodeType, "#4");
\r
2238 public void ReadElementContentAsQNameDefaultNS ()
\r
2240 var sw = new StringWriter ();
\r
2241 var xw = XmlWriter.Create (sw);
\r
2242 xw.WriteStartElement ("", "foo", "urn:foo");
\r
2243 xw.WriteValue (new XmlQualifiedName ("x", "urn:foo"));
\r
2244 xw.WriteEndElement ();
\r
2246 var xr = XmlReader.Create (new StringReader (sw.ToString ()));
\r
2247 xr.MoveToContent ();
\r
2248 var q = (XmlQualifiedName) xr.ReadElementContentAs (typeof (XmlQualifiedName), xr as IXmlNamespaceResolver);
\r
2249 Assert.AreEqual ("urn:foo", q.Namespace, "#1");
\r
2253 public void ReadElementContentAsArray ()
\r
2255 var sw = new StringWriter ();
\r
2256 var xw = XmlWriter.Create (sw);
\r
2257 xw.WriteStartElement ("root");
\r
2258 xw.WriteAttributeString ("xmlns", "b", "http://www.w3.org/2000/xmlns/", "urn:bar");
\r
2259 var arr = new XmlQualifiedName [] { new XmlQualifiedName ("foo"), new XmlQualifiedName ("bar", "urn:bar") };
\r
2260 xw.WriteValue (arr);
\r
2262 var xr = XmlReader.Create (new StringReader (sw.ToString ()));
\r
2263 xr.MoveToContent ();
\r
2264 var ret = xr.ReadElementContentAs (typeof (XmlQualifiedName []), null) as XmlQualifiedName [];
\r
2265 Assert.IsNotNull (ret, "#1");
\r
2266 Assert.AreEqual (arr [0], ret [0], "#2");
\r
2267 Assert.AreEqual (arr [1], ret [1], "#3");
\r
2271 public void ReadContentAs ()
\r
2273 var xr = XmlReader.Create (new StringReader ("<doc a=' 1 '/>"));
\r
2275 xr.MoveToAttribute ("a");
\r
2277 Assert.AreEqual ((Byte) 1, xr.ReadContentAs (typeof (Byte), null), "#1");
\r
2278 Assert.AreEqual ((SByte) 1, xr.ReadContentAs (typeof (SByte), null), "#2");
\r
2279 Assert.AreEqual ((Int16) 1, xr.ReadContentAs (typeof (Int16), null), "#3");
\r
2280 Assert.AreEqual ((UInt16) 1, xr.ReadContentAs (typeof (UInt16), null), "#4");
\r
2281 Assert.AreEqual ((Int32) 1, xr.ReadContentAs (typeof (Int32), null), "#5");
\r
2282 Assert.AreEqual ((UInt32) 1, xr.ReadContentAs (typeof (UInt32), null), "#6");
\r
2283 Assert.AreEqual ((Int64) 1, xr.ReadContentAs (typeof (Int64), null), "#7");
\r
2284 Assert.AreEqual ((UInt64) 1, xr.ReadContentAs (typeof (UInt64), null), "#8");
\r
2289 [ExpectedException(typeof(InvalidOperationException))]
\r
2290 public void MustSetAsyncFlag ()
\r
2292 var r = XmlReader.Create (new StringReader ("<root/>"));
\r
2296 Exception RunAsync (Action action)
\r
2298 var task = Task<Exception>.Run (async () => {
\r
2302 } catch (Exception ex) {
\r
2307 Assert.That (task.IsCompleted);
\r
2308 return task.Result;
\r
2312 public void SimpleAsync ()
\r
2314 var xml = "<root test=\"monkey\"/>";
\r
2315 var task = Task<Exception>.Run (async () => {
\r
2317 var s = new XmlReaderSettings ();
\r
2319 var r = XmlReader.Create (new StringReader (xml), s);
\r
2321 Assert.That (await r.ReadAsync ());
\r
2322 Assert.That (r.MoveToFirstAttribute ());
\r
2324 Assert.AreEqual (await r.GetValueAsync (), "monkey");
\r
2327 } catch (Exception ex) {
\r
2332 Assert.That (task.IsCompleted);
\r
2333 if (task.Result != null)
\r
2334 throw task.Result;
\r