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
1756 [Test, Category("NotWorking")]
\r
1757 public void ReadToNextSiblingInInitialReadState ()
\r
1759 var xml = "<Text name=\"hello\"><Something></Something></Text>";
\r
1760 var ms = new MemoryStream(Encoding.Default.GetBytes(xml));
\r
1761 var xtr = XmlReader.Create(ms);
\r
1763 Assert.AreEqual(xtr.ReadState, ReadState.Initial);
\r
1764 xtr.ReadToNextSibling("Text");
\r
1766 Assert.AreEqual("hello", xtr.GetAttribute("name"));
\r
1770 public void ReadSubtree ()
\r
1772 string xml = @"<root><foo/><bar attr='value'></bar></root>";
\r
1773 RunTest (xml, new TestMethod (ReadSubtree));
\r
1776 void ReadSubtree (XmlReader reader)
\r
1778 reader.MoveToContent (); // root
\r
1779 reader.Read (); // foo
\r
1780 XmlReader st = reader.ReadSubtree (); // <foo/>
\r
1782 // MS bug: IsEmptyElement should be false here.
\r
1784 AssertNodeValues ("#1", st,
\r
1787 false, // IsEmptyElement
\r
1788 String.Empty, // Name
\r
1789 String.Empty, // Prefix
\r
1790 String.Empty, // LocalName
\r
1791 String.Empty, // NamespaceURI
\r
1792 String.Empty, // Value
\r
1793 false, // HasValue
\r
1794 0, // AttributeCount
\r
1795 false); // HasAttributes
\r
1797 Assert.AreEqual (XmlNodeType.None, st.NodeType, "#1");
\r
1800 AssertNodeValues ("#2", st,
\r
1801 XmlNodeType.Element,
\r
1803 true, // IsEmptyElement
\r
1805 String.Empty, // Prefix
\r
1806 "foo", // LocalName
\r
1807 String.Empty, // NamespaceURI
\r
1808 String.Empty, // Value
\r
1809 false, // HasValue
\r
1810 0, // AttributeCount
\r
1811 false); // HasAttributes
\r
1813 Assert.IsTrue (!st.Read (), "#3");
\r
1815 // At this state, reader is not positioned on <bar> yet
\r
1816 AssertNodeValues ("#3-2", reader,
\r
1817 XmlNodeType.Element,
\r
1818 1, // Depth. It is 1 for main tree.
\r
1819 true, // IsEmptyElement
\r
1821 String.Empty, // Prefix
\r
1822 "foo", // LocalName
\r
1823 String.Empty, // NamespaceURI
\r
1824 String.Empty, // Value
\r
1825 false, // HasValue
\r
1826 0, // AttributeCount
\r
1827 false); // HasAttributes
\r
1831 AssertNodeValues ("#4", reader,
\r
1832 XmlNodeType.Element,
\r
1833 1, // Depth. It is 1 for main tree.
\r
1834 false, // IsEmptyElement
\r
1836 String.Empty, // Prefix
\r
1837 "bar", // LocalName
\r
1838 String.Empty, // NamespaceURI
\r
1839 String.Empty, // Value
\r
1840 false, // HasValue
\r
1841 1, // AttributeCount
\r
1842 true); // HasAttributes
\r
1844 st = reader.ReadSubtree ();
\r
1845 st.Read (); // Initial -> Interactive
\r
1846 AssertNodeValues ("#5", st,
\r
1847 XmlNodeType.Element,
\r
1848 0, // Depth. It is 0 for subtree.
\r
1849 false, // IsEmptyElement
\r
1851 String.Empty, // Prefix
\r
1852 "bar", // LocalName
\r
1853 String.Empty, // NamespaceURI
\r
1854 String.Empty, // Value
\r
1855 false, // HasValue
\r
1856 1, // AttributeCount
\r
1857 true); // HasAttributes
\r
1860 AssertNodeValues ("#6-1", 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 AssertNodeValues ("#6-2", st,
\r
1874 XmlNodeType.EndElement,
\r
1875 0, // Depth. It is 0 for subtree.
\r
1876 false, // IsEmptyElement
\r
1878 String.Empty, // Prefix
\r
1879 "bar", // LocalName
\r
1880 String.Empty, // NamespaceURI
\r
1881 String.Empty, // Value
\r
1882 false, // HasValue
\r
1883 0, // AttributeCount
\r
1884 false); // HasAttributes
\r
1886 Assert.IsTrue (!st.Read (), "#7");
\r
1890 public void ReadInteger ()
\r
1892 string xml1 = "<root>1</root>";
\r
1895 xr = XmlReader.Create (new StringReader (xml1));
\r
1897 Assert.AreEqual ("1", xr.ReadElementContentAsString (), "#1");
\r
1899 AssertNodeValues ("#1-2", xr,
\r
1901 0, // Depth. It is 0 for subtree.
\r
1902 false, // IsEmptyElement
\r
1903 String.Empty, // Name
\r
1904 String.Empty, // Prefix
\r
1905 String.Empty, // LocalName
\r
1906 String.Empty, // NamespaceURI
\r
1907 String.Empty, // Value
\r
1908 false, // HasValue
\r
1909 0, // AttributeCount
\r
1910 false); // HasAttributes
\r
1912 xr = XmlReader.Create (new StringReader (xml1));
\r
1914 // this XmlReader has no schema, thus the value is untyped
\r
1915 Assert.AreEqual ("1", xr.ReadElementContentAsObject (), "#2");
\r
1917 xr = XmlReader.Create (new StringReader (xml1));
\r
1920 Assert.AreEqual ("1", xr.ReadContentAsString (), "#3");
\r
1922 xr = XmlReader.Create (new StringReader (xml1));
\r
1924 Assert.AreEqual (1, xr.ReadElementContentAsInt (), "#4");
\r
1926 xr = XmlReader.Create (new StringReader (xml1));
\r
1928 Assert.AreEqual (1, xr.ReadElementContentAs (typeof (int), null), "#5");
\r
1932 [ExpectedException (typeof (XmlException))]
\r
1933 public void ReadContentAsIntFail ()
\r
1935 XmlReader xr = XmlReader.Create (
\r
1936 new StringReader ("<doc>1.0</doc>"));
\r
1938 xr.ReadElementContentAsInt ();
\r
1942 public void ReadDateTime ()
\r
1944 DateTime time = new DateTime (2006, 1, 2, 3, 4, 56);
\r
1945 string xml1 = "<root>2006-01-02T03:04:56</root>";
\r
1948 xr = XmlReader.Create (new StringReader (xml1));
\r
1950 // this XmlReader has no schema, thus the value is untyped
\r
1951 Assert.AreEqual ("2006-01-02T03:04:56", xr.ReadElementContentAsString (), "#1");
\r
1953 xr = XmlReader.Create (new StringReader (xml1));
\r
1956 Assert.AreEqual (time, xr.ReadContentAsDateTime (), "#2");
\r
1958 xr = XmlReader.Create (new StringReader (xml1));
\r
1960 Assert.AreEqual (time, xr.ReadElementContentAsDateTime (), "#3");
\r
1962 xr = XmlReader.Create (new StringReader (xml1));
\r
1964 Assert.AreEqual (time, xr.ReadElementContentAs (typeof (DateTime), null), "#4");
\r
1968 [ExpectedException (typeof (XmlException))]
\r
1969 public void ReadContentAsDateTimeFail ()
\r
1971 XmlReader xr = XmlReader.Create (
\r
1972 new StringReader ("<doc>P1Y2M3D</doc>"));
\r
1974 xr.ReadElementContentAsDateTime ();
\r
1978 public void ReadContentAs_QNameEmptyNSResolver ()
\r
1980 XmlReader xr = XmlReader.Create (
\r
1981 new StringReader ("<doc xmlns:x='urn:foo'>x:el</doc>"));
\r
1983 object o = xr.ReadElementContentAs (
\r
1984 typeof (XmlQualifiedName), null);
\r
1985 // without IXmlNamespaceResolver, it still resolves
\r
1986 // x:el as valid QName.
\r
1987 Assert.IsNotNull (o, "#1");
\r
1988 XmlQualifiedName q = o as XmlQualifiedName;
\r
1989 Assert.AreEqual (new XmlQualifiedName ("el", "urn:foo"), q, "#2 : " + o.GetType ());
\r
1993 [ExpectedException (typeof (InvalidOperationException))]
\r
1994 public void ReadContentStringOnElementFail ()
\r
1996 XmlReader xr = XmlReader.Create (new StringReader ("<a>test</a>"));
\r
1998 xr.ReadContentAsString ();
\r
2002 public void ReadContentStringOnEndElement ()
\r
2004 XmlReader xr = XmlReader.Create (new StringReader ("<a>test</a>"));
\r
2008 Assert.AreEqual (String.Empty, xr.ReadContentAsString ()); // does not fail, unlike at Element!
\r
2012 public void ReadContentStringOnPI ()
\r
2014 XmlReader xr = XmlReader.Create (new StringReader ("<?pi ?><a>test</a>"));
\r
2016 Assert.AreEqual (String.Empty, xr.ReadContentAsString ());
\r
2020 [ExpectedException (typeof (InvalidOperationException))] // unlike ReadContentAsString()
\r
2021 public void ReadElementContentStringOnPI ()
\r
2023 XmlReader xr = XmlReader.Create (new StringReader ("<?pi ?><a>test</a>"));
\r
2025 Assert.AreEqual (XmlNodeType.ProcessingInstruction, xr.NodeType);
\r
2026 xr.ReadElementContentAsString ();
\r
2030 [ExpectedException (typeof (XmlException))]
\r
2031 public void ReadElementContentStringMixedContent ()
\r
2033 XmlReader xr = XmlReader.Create (
\r
2034 new StringReader ("<doc>123<child>456</child>789</doc>"));
\r
2036 // "child" is regarded as an invalid node.
\r
2037 string s = xr.ReadElementContentAsString ();
\r
2041 public void ReadContentStringMixedContent ()
\r
2043 XmlReader xr = XmlReader.Create (
\r
2044 new StringReader ("<doc>123<child>456</child>789</doc>"));
\r
2046 xr.Read (); // from Text "123"
\r
2047 string s = xr.ReadContentAsString ();
\r
2048 Assert.AreEqual ("123", s, "#1");
\r
2049 Assert.AreEqual (XmlNodeType.Element, xr.NodeType, "#2");
\r
2053 public void ReadElementContentAsString ()
\r
2055 XmlTextReader r = new XmlTextReader (
\r
2056 "<root/>", XmlNodeType.Document, null);
\r
2058 Assert.AreEqual (String.Empty, r.ReadElementContentAsString (), "#1");
\r
2059 Assert.AreEqual (XmlNodeType.None, r.NodeType, "#2");
\r
2063 public void ReadElementContentAs ()
\r
2065 // as System.Object
\r
2067 XmlTextReader r = new XmlTextReader (
\r
2068 "<root/>", XmlNodeType.Document, null);
\r
2070 Assert.AreEqual (String.Empty, r.ReadElementContentAs (typeof (object), null), "#1");
\r
2071 Assert.AreEqual (XmlNodeType.None, r.NodeType, "#2");
\r
2073 // regardless of its value, the return value is string.
\r
2074 r = new XmlTextReader ("<root>1</root>", XmlNodeType.Document, null);
\r
2076 Assert.AreEqual ("1", r.ReadElementContentAs (typeof (object), null), "#3");
\r
2077 Assert.AreEqual (XmlNodeType.None, r.NodeType, "#4");
\r
2081 public void ReadContentStringOnAttribute ()
\r
2083 string xml = @"<root id='myId'><child /></root>";
\r
2084 RunTest (xml, new TestMethod (ReadContentStringOnAttribute));
\r
2087 void ReadContentStringOnAttribute (XmlReader reader)
\r
2090 Assert.IsTrue (reader.MoveToAttribute ("id"));
\r
2091 Assert.AreEqual ("myId", reader.ReadContentAsString ());
\r
2095 public void ReadElementContentAsStringEmpty ()
\r
2097 string xml = "<root><sample/></root>";
\r
2098 RunTest (xml, new TestMethod (ReadElementContentAsStringEmpty));
\r
2101 void ReadElementContentAsStringEmpty (XmlReader reader)
\r
2103 reader.MoveToContent ();
\r
2105 Assert.AreEqual (String.Empty, reader.ReadElementContentAsString ("sample", ""));
\r
2106 Assert.AreEqual (XmlNodeType.EndElement, reader.NodeType);
\r
2110 public void ReadSubtreeClose ()
\r
2113 string xml = @"<root><item-list><item id='a'/><item id='b'/></item-list></root>";
\r
2114 RunTest (xml, new TestMethod (ReadSubtreeClose));
\r
2117 void ReadSubtreeClose (XmlReader reader)
\r
2119 reader.ReadToFollowing ("item-list");
\r
2120 XmlReader sub = reader.ReadSubtree ();
\r
2121 sub.ReadToDescendant ("item");
\r
2123 Assert.AreEqual (XmlNodeType.EndElement, reader.NodeType, "#1");
\r
2124 Assert.AreEqual ("item-list", reader.Name, "#2");
\r
2128 [ExpectedException (typeof (InvalidOperationException))]
\r
2129 public void ReadSubtreeOnNonElement ()
\r
2131 string xml = @"<x> <y/></x>";
\r
2132 XmlReader r = XmlReader.Create (new StringReader (xml));
\r
2139 [ExpectedException (typeof (InvalidOperationException))]
\r
2140 public void ReadSubtreeOnNonElement2 ()
\r
2142 string xml = @"<x> <y/></x>";
\r
2143 XmlReader r = XmlReader.Create (new StringReader (xml));
\r
2148 public void ReadSubtreeEmptyElement ()
\r
2150 string xml = @"<x/>";
\r
2151 XmlReader r = XmlReader.Create (new StringReader (xml));
\r
2153 XmlReader s = r.ReadSubtree ();
\r
2154 Assert.IsTrue (s.Read (), "#1");
\r
2155 Assert.AreEqual (XmlNodeType.Element, s.NodeType, "#2");
\r
2156 Assert.IsTrue (!s.Read (), "#3");
\r
2157 Assert.AreEqual (XmlNodeType.None, s.NodeType, "#4");
\r
2161 public void ReadSubtreeEmptyElementWithAttribute ()
\r
2163 string xml = @"<root><x a='b'/></root>";
\r
2164 XmlReader r = XmlReader.Create (new StringReader (xml));
\r
2167 XmlReader r2 = r.ReadSubtree ();
\r
2168 Console.WriteLine ("X");
\r
2170 XmlReader r3 = r2.ReadSubtree ();
\r
2171 r2.MoveToFirstAttribute ();
\r
2172 Assert.IsTrue (!r.IsEmptyElement, "#1");
\r
2173 Assert.IsTrue (!r2.IsEmptyElement, "#2");
\r
2175 Assert.IsTrue (r.IsEmptyElement, "#3");
\r
2176 Assert.IsTrue (r2.IsEmptyElement, "#4");
\r
2178 Assert.IsTrue (r.IsEmptyElement, "#5");
\r
2179 Assert.IsTrue (r2.IsEmptyElement, "#6");
\r
2183 public void ReadContentAsBase64 ()
\r
2185 byte[] randomData = new byte[24];
\r
2186 for (int i = 0; i < randomData.Length; i++)
\r
2187 randomData [i] = (byte) i;
\r
2189 string xmlString = "<?xml version=\"1.0\"?><data>" +
\r
2190 Convert.ToBase64String (randomData) + "</data>";
\r
2191 TextReader textReader = new StringReader (xmlString);
\r
2192 XmlReader xmlReader = XmlReader.Create (textReader);
\r
2193 xmlReader.ReadToFollowing ("data");
\r
2195 int readBytes = 0;
\r
2196 byte[] buffer = new byte [24];
\r
2198 xmlReader.ReadStartElement ();
\r
2199 readBytes = xmlReader.ReadContentAsBase64 (buffer, 0, buffer.Length);
\r
2200 Assert.AreEqual (24, readBytes, "#1");
\r
2201 Assert.AreEqual (0, xmlReader.ReadContentAsBase64 (buffer, 0, buffer.Length), "#2");
\r
2202 StringWriter sw = new StringWriter ();
\r
2203 foreach (byte b in buffer) sw.Write ("{0:X02}", b);
\r
2204 Assert.AreEqual ("000102030405060708090A0B0C0D0E0F1011121314151617", sw.ToString (), "#3");
\r
2208 public void ReadContentAsBase64_2 () // bug #480066
\r
2210 StringReader readerString = new StringReader ("<root><b64>TWFu</b64><b64>TWFu</b64>\r\n\t<b64>TWFu</b64><b64>TWFu</b64></root>");
\r
2211 XmlReaderSettings settingsXml = new XmlReaderSettings ();
\r
2212 settingsXml.XmlResolver = null;
\r
2213 using (var readerXml = XmlReader.Create (readerString, settingsXml)) {
\r
2214 readerXml.MoveToContent ();
\r
2215 readerXml.Read ();
\r
2216 readerXml.ReadStartElement ("b64");
\r
2217 const int bufferLength = 1024;
\r
2218 byte [] buffer = new byte [bufferLength];
\r
2219 readerXml.ReadContentAsBase64 (buffer, 0, bufferLength);
\r
2220 Assert.AreEqual (XmlNodeType.EndElement, readerXml.NodeType, "#1");
\r
2221 readerXml.Read ();
\r
2222 Assert.AreEqual (XmlNodeType.Element, readerXml.NodeType, "#2");
\r
2227 public void ReadContentAsBase64_3 () // bug #543332
\r
2229 byte [] fakeState = new byte[25];
\r
2230 byte [] fixedSizeBuffer = new byte [25];
\r
2231 byte [] readDataBuffer = new byte [25];
\r
2232 var ms = new MemoryStream ();
\r
2233 var xw = XmlWriter.Create (ms);
\r
2234 xw.WriteStartElement ("root");
\r
2235 xw.WriteBase64 (fakeState, 0, fakeState.Length);
\r
2236 xw.WriteEndElement ();
\r
2238 var reader = XmlReader.Create (new MemoryStream (ms.ToArray ()));
\r
2239 reader.MoveToContent ();
\r
2240 // we cannot completely trust the length read to indicate the end.
\r
2242 bytesRead = reader.ReadElementContentAsBase64 (fixedSizeBuffer, 0, fixedSizeBuffer.Length);
\r
2243 Assert.AreEqual (25, bytesRead, "#1");
\r
2244 Assert.AreEqual (XmlNodeType.Text, reader.NodeType, "#2");
\r
2245 bytesRead = reader.ReadElementContentAsBase64 (fixedSizeBuffer, 0, fixedSizeBuffer.Length);
\r
2246 Assert.AreEqual (0, bytesRead, "#3");
\r
2247 Assert.AreEqual (XmlNodeType.EndElement, reader.NodeType, "#4");
\r
2251 public void ReadElementContentAsQNameDefaultNS ()
\r
2253 var sw = new StringWriter ();
\r
2254 var xw = XmlWriter.Create (sw);
\r
2255 xw.WriteStartElement ("", "foo", "urn:foo");
\r
2256 xw.WriteValue (new XmlQualifiedName ("x", "urn:foo"));
\r
2257 xw.WriteEndElement ();
\r
2259 var xr = XmlReader.Create (new StringReader (sw.ToString ()));
\r
2260 xr.MoveToContent ();
\r
2261 var q = (XmlQualifiedName) xr.ReadElementContentAs (typeof (XmlQualifiedName), xr as IXmlNamespaceResolver);
\r
2262 Assert.AreEqual ("urn:foo", q.Namespace, "#1");
\r
2266 public void ReadElementContentAsArray ()
\r
2268 var sw = new StringWriter ();
\r
2269 var xw = XmlWriter.Create (sw);
\r
2270 xw.WriteStartElement ("root");
\r
2271 xw.WriteAttributeString ("xmlns", "b", "http://www.w3.org/2000/xmlns/", "urn:bar");
\r
2272 var arr = new XmlQualifiedName [] { new XmlQualifiedName ("foo"), new XmlQualifiedName ("bar", "urn:bar") };
\r
2273 xw.WriteValue (arr);
\r
2275 var xr = XmlReader.Create (new StringReader (sw.ToString ()));
\r
2276 xr.MoveToContent ();
\r
2277 var ret = xr.ReadElementContentAs (typeof (XmlQualifiedName []), null) as XmlQualifiedName [];
\r
2278 Assert.IsNotNull (ret, "#1");
\r
2279 Assert.AreEqual (arr [0], ret [0], "#2");
\r
2280 Assert.AreEqual (arr [1], ret [1], "#3");
\r
2284 public void ReadContentAs ()
\r
2286 var xr = XmlReader.Create (new StringReader ("<doc a=' 1 '/>"));
\r
2288 xr.MoveToAttribute ("a");
\r
2290 Assert.AreEqual ((Byte) 1, xr.ReadContentAs (typeof (Byte), null), "#1");
\r
2291 Assert.AreEqual ((SByte) 1, xr.ReadContentAs (typeof (SByte), null), "#2");
\r
2292 Assert.AreEqual ((Int16) 1, xr.ReadContentAs (typeof (Int16), null), "#3");
\r
2293 Assert.AreEqual ((UInt16) 1, xr.ReadContentAs (typeof (UInt16), null), "#4");
\r
2294 Assert.AreEqual ((Int32) 1, xr.ReadContentAs (typeof (Int32), null), "#5");
\r
2295 Assert.AreEqual ((UInt32) 1, xr.ReadContentAs (typeof (UInt32), null), "#6");
\r
2296 Assert.AreEqual ((Int64) 1, xr.ReadContentAs (typeof (Int64), null), "#7");
\r
2297 Assert.AreEqual ((UInt64) 1, xr.ReadContentAs (typeof (UInt64), null), "#8");
\r
2302 [ExpectedException(typeof(InvalidOperationException))]
\r
2303 public void MustSetAsyncFlag ()
\r
2305 var r = XmlReader.Create (new StringReader ("<root/>"));
\r
2309 Exception RunAsync (Action action)
\r
2311 var task = Task<Exception>.Run (async () => {
\r
2315 } catch (Exception ex) {
\r
2320 Assert.That (task.IsCompleted);
\r
2321 return task.Result;
\r
2325 public void SimpleAsync ()
\r
2327 var xml = "<root test=\"monkey\"/>";
\r
2328 var task = Task<Exception>.Run (async () => {
\r
2330 var s = new XmlReaderSettings ();
\r
2332 var r = XmlReader.Create (new StringReader (xml), s);
\r
2334 Assert.That (await r.ReadAsync ());
\r
2335 Assert.That (r.MoveToFirstAttribute ());
\r
2337 Assert.AreEqual (await r.GetValueAsync (), "monkey");
\r
2340 } catch (Exception ex) {
\r
2345 Assert.That (task.IsCompleted);
\r
2346 if (task.Result != null)
\r
2347 throw task.Result;
\r