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 [Ignore ("Bug in Microsoft referencesource")]
\r
1350 public void IndexerAndAttributes ()
\r
1352 string xml = @"<?xml version='1.0' standalone='no'?><foo _1='1' _2='2' _3='3' />";
\r
1353 RunTest (xml, new TestMethod (IndexerAndAttributes));
\r
1356 public void IndexerAndAttributes (XmlReader xmlReader)
\r
1358 Assert.IsTrue (xmlReader.Read ());
\r
1359 Assert.AreEqual ("1.0", xmlReader ["version"]);
\r
1360 Assert.AreEqual ("1.0", xmlReader.GetAttribute ("version"));
\r
1361 // .NET 1.1 BUG. XmlTextReader returns null, while XmlNodeReader returns "".
\r
1362 Assert.AreEqual (null, xmlReader ["encoding"]);
\r
1363 Assert.AreEqual (null, xmlReader.GetAttribute ("encoding"));
\r
1364 Assert.AreEqual ("no", xmlReader ["standalone"]);
\r
1365 Assert.AreEqual ("no", xmlReader.GetAttribute ("standalone"));
\r
1366 Assert.AreEqual ("1.0", xmlReader [0]);
\r
1367 Assert.AreEqual ("1.0", xmlReader.GetAttribute (0));
\r
1368 Assert.AreEqual ("no", xmlReader [1]);
\r
1369 Assert.AreEqual ("no", xmlReader.GetAttribute (1));
\r
1371 Assert.IsTrue (xmlReader.Read ());
\r
1372 Assert.AreEqual (XmlNodeType.Element, xmlReader.NodeType);
\r
1373 Assert.AreEqual ("1", xmlReader ["_1"]);
\r
1375 Assert.IsTrue (xmlReader.MoveToFirstAttribute ());
\r
1376 Assert.AreEqual ("_1", xmlReader.Name);
\r
1377 Assert.AreEqual ("1", xmlReader ["_1"]);
\r
1378 Assert.IsTrue (xmlReader.MoveToNextAttribute ());
\r
1379 Assert.AreEqual ("_2", xmlReader.Name);
\r
1380 Assert.AreEqual ("1", xmlReader ["_1"]);
\r
1381 Assert.IsTrue (xmlReader.MoveToNextAttribute ());
\r
1382 Assert.AreEqual ("_3", xmlReader.Name);
\r
1383 Assert.AreEqual ("1", xmlReader ["_1"]);
\r
1385 Assert.IsTrue (!xmlReader.MoveToNextAttribute ());
\r
1389 public void ProhibitedMultipleAttributes ()
\r
1391 string xml = @"<foo _1='1' _1='1' />";
\r
1393 RunTest (xml, new TestMethod (ReadAll));
\r
1394 } catch (XmlException) {
\r
1396 xml = @"<foo _1='1' _1='2' />";
\r
1398 RunTest (xml, new TestMethod (ReadAll));
\r
1399 } catch (XmlException) {
\r
1403 public void ReadAll (XmlReader xmlReader)
\r
1405 while (!xmlReader.EOF)
\r
1406 xmlReader.Read ();
\r
1410 public void SurrogatePairContent ()
\r
1412 string xml = "<root xmlns='𐄀'/>";
\r
1413 RunTest (xml, new TestMethod (SurrogatePairContent));
\r
1416 public void SurrogatePairContent (XmlReader xmlReader)
\r
1418 xmlReader.Read ();
\r
1419 Assert.AreEqual (true, xmlReader.MoveToAttribute ("xmlns"));
\r
1420 Assert.AreEqual ("xmlns", xmlReader.Name);
\r
1421 Assert.AreEqual (2, xmlReader.Value.Length);
\r
1422 Assert.AreEqual (0xD800, (int) xmlReader.Value [0]);
\r
1423 Assert.AreEqual (0xDD00, (int) xmlReader.Value [1]);
\r
1427 public void ReadOuterXmlOnEndElement ()
\r
1429 string xml = "<root><foo></foo></root>";
\r
1430 RunTest (xml, new TestMethod (ReadOuterXmlOnEndElement));
\r
1433 public void ReadOuterXmlOnEndElement (XmlReader xmlReader)
\r
1435 xmlReader.Read ();
\r
1436 xmlReader.Read ();
\r
1437 xmlReader.Read ();
\r
1438 Assert.AreEqual (String.Empty, xmlReader.ReadOuterXml ());
\r
1442 public void ReadInnerXmlOnEndElement ()
\r
1444 string xml = "<root><foo></foo></root>";
\r
1445 RunTest (xml, new TestMethod (ReadInnerXmlOnEndElement));
\r
1448 private void ReadInnerXmlOnEndElement (XmlReader xmlReader)
\r
1450 xmlReader.Read ();
\r
1451 xmlReader.Read ();
\r
1452 xmlReader.Read ();
\r
1453 Assert.AreEqual (String.Empty, xmlReader.ReadInnerXml ());
\r
1457 public void LookupEmptyPrefix ()
\r
1459 string xml = "<root><foo></foo></root>";
\r
1460 RunTest (xml, new TestMethod (LookupEmptyPrefix));
\r
1463 void LookupEmptyPrefix (XmlReader xmlReader)
\r
1465 xmlReader.Read ();
\r
1466 Assert.IsNull (xmlReader.LookupNamespace (String.Empty));
\r
1470 public void ReadStartElement ()
\r
1472 string xml = "<root>test</root>";
\r
1473 RunTest (xml, new TestMethod (ReadStartElement));
\r
1476 void ReadStartElement (XmlReader xr)
\r
1479 xr.ReadStartElement ();
\r
1480 // consume Element node.
\r
1481 Assert.AreEqual (XmlNodeType.Text, xr.NodeType);
\r
1485 public void LookupNamespaceAtEndElement ()
\r
1487 string xml = "<root xmlns:x='urn:foo'><foo/></root>";
\r
1488 RunTest (xml, new TestMethod (LookupNamespaceAtEndElement));
\r
1491 void LookupNamespaceAtEndElement (XmlReader reader)
\r
1494 Assert.AreEqual ("urn:foo", reader.LookupNamespace ("x"), "#1");
\r
1496 Assert.AreEqual ("urn:foo", reader.LookupNamespace ("x"), "#2");
\r
1498 Assert.AreEqual ("urn:foo", reader.LookupNamespace ("x"), "#3");
\r
1502 public void ReadClosedReader ()
\r
1504 string xml = "<fin>aaa</fin>";
\r
1505 RunTest (xml, new TestMethod (ReadClosedReader));
\r
1508 void ReadClosedReader (XmlReader reader)
\r
1512 reader.Read (); // silently returns false
\r
1516 public void CreateSimple ()
\r
1518 XmlReaderSettings s = new XmlReaderSettings ();
\r
1519 s.ProhibitDtd = false;
\r
1520 XmlReader xr = XmlReader.Create ("Test/XmlFiles/nested-dtd-test.xml", s);
\r
1522 Assert.AreEqual (XmlNodeType.DocumentType, xr.NodeType, "#1");
\r
1524 Assert.AreEqual (XmlNodeType.Whitespace, xr.NodeType, "#2");
\r
1526 Assert.AreEqual (XmlNodeType.Element, xr.NodeType, "#3");
\r
1530 [ExpectedException (typeof (XmlException))]
\r
1531 public void CreateSimpleProhibitDtd ()
\r
1533 XmlReader xr = XmlReader.Create ("Test/XmlFiles/nested-dtd-test.xml");
\r
1538 // a bit revised version of bug #78706
\r
1539 public void CreateFromUrlClose ()
\r
1541 string file = Path.Combine (Path.GetTempPath (), "78706.xml");
\r
1543 if (!File.Exists (file))
\r
1544 File.Create (file).Close ();
\r
1545 XmlReaderSettings s = new XmlReaderSettings ();
\r
1546 s.CloseInput = false; // explicitly
\r
1547 XmlReader r = XmlReader.Create (file, s);
\r
1549 XmlTextWriter w = new XmlTextWriter (file, null);
\r
1552 if (File.Exists (file))
\r
1553 File.Delete (file);
\r
1558 // a bit revised version of bug #385638
\r
1559 public void CreateFromUrlClose2 ()
\r
1561 string file = Path.Combine (Path.GetTempPath (), "385638.xml");
\r
1563 if (File.Exists (file))
\r
1564 File.Delete (file);
\r
1565 using (TextWriter tw = File.CreateText (file))
\r
1566 tw.Write ("<xml />");
\r
1567 XmlReaderSettings s = new XmlReaderSettings ();
\r
1568 s.IgnoreWhitespace = true; // this results in XmlFilterReader, which is the key for this bug.
\r
1569 XmlReader r = XmlReader.Create (file, s);
\r
1571 XmlTextWriter w = new XmlTextWriter (file, null);
\r
1574 if (File.Exists (file))
\r
1575 File.Delete (file);
\r
1580 [ExpectedException (typeof (ArgumentException))]
\r
1581 public void Create_String_Empty ()
\r
1583 XmlReader.Create (String.Empty);
\r
1587 public void ReadToDescendant ()
\r
1589 string xml = @"<root><foo/><bar/><foo> test text <bar><bar></bar></bar></foo></root>";
\r
1590 RunTest (xml, new TestMethod (ReadToDescendant));
\r
1593 void ReadToDescendant (XmlReader xmlReader)
\r
1595 // move to first <bar/>
\r
1596 Assert.IsTrue (xmlReader.ReadToDescendant ("bar"), "#1");
\r
1597 // no children in <bar/>. It is empty.
\r
1598 Assert.IsTrue (!xmlReader.ReadToDescendant ("bar"), "#2");
\r
1599 Assert.AreEqual ("bar", xmlReader.Name, "#2-2");
\r
1601 // move to the second <foo>
\r
1602 xmlReader.Read ();
\r
1603 // move to the second <bar>
\r
1604 Assert.IsTrue (xmlReader.ReadToDescendant ("bar"), "#3");
\r
1605 // move to <bar> inside <bar>...</bar>
\r
1606 Assert.IsTrue (xmlReader.ReadToDescendant ("bar"), "#4");
\r
1607 // the next is EndElement of </bar>, so no move.
\r
1608 Assert.IsTrue (!xmlReader.ReadToDescendant ("bar"), "#5");
\r
1609 Assert.AreEqual (XmlNodeType.EndElement, xmlReader.NodeType, "#5-2");
\r
1613 public void ReadToDescepdant2 ()
\r
1615 string xml = "<root/>";
\r
1616 RunTest (xml, new TestMethod (ReadToDescendant2));
\r
1619 void ReadToDescendant2 (XmlReader xmlReader)
\r
1621 // make sure that it works when the reader is at Initial state.
\r
1622 Assert.IsTrue (xmlReader.ReadToDescendant ("root"));
\r
1626 public void ReadToFollowing ()
\r
1628 string xml = @"<root><foo/><bar/><foo><bar><bar></bar></bar></foo></root>";
\r
1629 RunTest (xml, new TestMethod (ReadToFollowing));
\r
1632 public void ReadToFollowing (XmlReader xmlReader)
\r
1634 Assert.IsTrue (xmlReader.ReadToFollowing ("bar"), "#1");
\r
1635 Assert.IsTrue (xmlReader.ReadToFollowing ("bar"), "#2");
\r
1636 Assert.AreEqual (2, xmlReader.Depth, "#2-2");
\r
1637 Assert.IsTrue (xmlReader.ReadToFollowing ("bar"), "#3");
\r
1638 Assert.AreEqual (3, xmlReader.Depth, "#3-2");
\r
1639 Assert.IsTrue (!xmlReader.ReadToFollowing ("bar"), "#4");
\r
1643 [Category ("NotDotNet")]
\r
1644 public void ReadToNextSiblingAtInitialState ()
\r
1646 string xml = @"<root></root>";
\r
1647 RunTest (xml, new TestMethod (ReadToNextSiblingAtInitialState ));
\r
1650 void ReadToNextSiblingAtInitialState (XmlReader xmlReader)
\r
1652 Assert.IsTrue (!xmlReader.ReadToNextSibling ("bar"), "#1");
\r
1653 Assert.IsTrue (!xmlReader.ReadToNextSibling ("root"), "#2");
\r
1657 public void ReadToNextSibling ()
\r
1659 string xml = @"<root><foo/><bar attr='value'/><foo><pooh/><bar></bar><foo></foo><bar/></foo></root>";
\r
1660 RunTest (xml, new TestMethod (ReadToNextSibling));
\r
1663 void ReadToNextSibling (XmlReader xmlReader)
\r
1665 // It is funky, but without it MS.NET results in an infinite loop.
\r
1666 xmlReader.Read (); // root
\r
1668 xmlReader.Read (); // foo
\r
1669 Assert.IsTrue (xmlReader.ReadToNextSibling ("bar"), "#3");
\r
1671 Assert.AreEqual ("value", xmlReader.GetAttribute ("attr"), "#3-2");
\r
1672 xmlReader.Read (); // foo
\r
1673 xmlReader.Read (); // pooh
\r
1674 Assert.IsTrue (xmlReader.ReadToNextSibling ("bar"), "#4");
\r
1675 Assert.IsTrue (!xmlReader.IsEmptyElement, "#4-2");
\r
1676 Assert.IsTrue (xmlReader.ReadToNextSibling ("bar"), "#5");
\r
1677 Assert.IsTrue (xmlReader.IsEmptyElement, "#5-2");
\r
1678 Assert.IsTrue (xmlReader.Read (), "#6"); // /foo
\r
1680 AssertNodeValues ("#7", xmlReader,
\r
1681 XmlNodeType.EndElement,
\r
1683 false, // IsEmptyElement
\r
1685 String.Empty, // Prefix
\r
1686 "foo", // LocalName
\r
1687 String.Empty, // NamespaceURI
\r
1688 String.Empty, // Value
\r
1689 false, // HasValue
\r
1690 0, // AttributeCount
\r
1691 false); // HasAttributes
\r
1696 public void ReadToNextSibling2 ()
\r
1698 string xml = @"<root><baz><bar><foo attr='value'/></bar><foo attr='value2'><bar><foo /></bar></foo></baz></root>";
\r
1699 RunTest (xml, new TestMethod (ReadToNextSibling2));
\r
1702 void ReadToNextSibling2 (XmlReader r)
\r
1704 r.MoveToContent (); // ->root
\r
1705 r.Read (); // root->baz
\r
1706 r.Read (); // baz->bar
\r
1707 Assert.IsTrue (r.ReadToNextSibling ("foo"), "#1");
\r
1708 Assert.AreEqual ("value2", r.GetAttribute ("attr"), "#2");
\r
1709 r.Read (); // foo[@value='value2']->bar
\r
1710 Assert.IsTrue (!r.ReadToNextSibling ("foo"), "#3");
\r
1711 Assert.AreEqual (XmlNodeType.EndElement, r.NodeType, "#4");
\r
1712 Assert.AreEqual ("foo", r.LocalName, "#5");
\r
1717 public void ReadToNextSibling3 ()
\r
1719 string xml = @" <books> <book> <name>Happy C Sharp</name> </book> </books>";
\r
1720 XmlReader reader = XmlReader.Create (new StringReader (xml));
\r
1722 reader.MoveToContent ();
\r
1724 while (reader.Read ())
\r
1725 reader.ReadToNextSibling ("book"); // should not result in an infinite loop
\r
1730 public void ReadToNextSibling4 ()
\r
1732 string xml = @"<SerializableStringDictionary>
\r
1733 <SerializableStringDictionary>
\r
1734 <DictionaryEntry Key=""Key1"" Value=""Value1""/>
\r
1735 <DictionaryEntry Key=""Key2"" Value=""Value2""/>
\r
1736 <DictionaryEntry Key=""Key3"" Value=""Value3""/>
\r
1737 </SerializableStringDictionary>
\r
1738 </SerializableStringDictionary>";
\r
1740 var reader = XmlReader.Create (new StringReader (xml));
\r
1742 Assert.IsTrue (reader.ReadToDescendant ("SerializableStringDictionary"), "#1");
\r
1743 Assert.IsTrue (reader.ReadToDescendant ("DictionaryEntry"), "#2");
\r
1747 reader.MoveToAttribute ("Key");
\r
1748 var key = reader.ReadContentAsString ();
\r
1749 reader.MoveToAttribute ("Value");
\r
1750 var value = reader.ReadContentAsString ();
\r
1753 while (reader.ReadToNextSibling ("DictionaryEntry"));
\r
1754 Assert.AreEqual (3, count, "#3");
\r
1757 [Test, Category("NotWorking")]
\r
1758 public void ReadToNextSiblingInInitialReadState ()
\r
1760 var xml = "<Text name=\"hello\"><Something></Something></Text>";
\r
1761 var ms = new MemoryStream(Encoding.Default.GetBytes(xml));
\r
1762 var xtr = XmlReader.Create(ms);
\r
1764 Assert.AreEqual(xtr.ReadState, ReadState.Initial);
\r
1765 xtr.ReadToNextSibling("Text");
\r
1767 Assert.AreEqual("hello", xtr.GetAttribute("name"));
\r
1771 public void ReadSubtree ()
\r
1773 string xml = @"<root><foo/><bar attr='value'></bar></root>";
\r
1774 RunTest (xml, new TestMethod (ReadSubtree));
\r
1777 void ReadSubtree (XmlReader reader)
\r
1779 reader.MoveToContent (); // root
\r
1780 reader.Read (); // foo
\r
1781 XmlReader st = reader.ReadSubtree (); // <foo/>
\r
1783 // MS bug: IsEmptyElement should be false here.
\r
1785 AssertNodeValues ("#1", st,
\r
1788 false, // IsEmptyElement
\r
1789 String.Empty, // Name
\r
1790 String.Empty, // Prefix
\r
1791 String.Empty, // LocalName
\r
1792 String.Empty, // NamespaceURI
\r
1793 String.Empty, // Value
\r
1794 false, // HasValue
\r
1795 0, // AttributeCount
\r
1796 false); // HasAttributes
\r
1798 Assert.AreEqual (XmlNodeType.None, st.NodeType, "#1");
\r
1801 AssertNodeValues ("#2", st,
\r
1802 XmlNodeType.Element,
\r
1804 true, // IsEmptyElement
\r
1806 String.Empty, // Prefix
\r
1807 "foo", // LocalName
\r
1808 String.Empty, // NamespaceURI
\r
1809 String.Empty, // Value
\r
1810 false, // HasValue
\r
1811 0, // AttributeCount
\r
1812 false); // HasAttributes
\r
1814 Assert.IsTrue (!st.Read (), "#3");
\r
1816 // At this state, reader is not positioned on <bar> yet
\r
1817 AssertNodeValues ("#3-2", reader,
\r
1818 XmlNodeType.Element,
\r
1819 1, // Depth. It is 1 for main tree.
\r
1820 true, // IsEmptyElement
\r
1822 String.Empty, // Prefix
\r
1823 "foo", // LocalName
\r
1824 String.Empty, // NamespaceURI
\r
1825 String.Empty, // Value
\r
1826 false, // HasValue
\r
1827 0, // AttributeCount
\r
1828 false); // HasAttributes
\r
1832 AssertNodeValues ("#4", reader,
\r
1833 XmlNodeType.Element,
\r
1834 1, // Depth. It is 1 for main tree.
\r
1835 false, // IsEmptyElement
\r
1837 String.Empty, // Prefix
\r
1838 "bar", // LocalName
\r
1839 String.Empty, // NamespaceURI
\r
1840 String.Empty, // Value
\r
1841 false, // HasValue
\r
1842 1, // AttributeCount
\r
1843 true); // HasAttributes
\r
1845 st = reader.ReadSubtree ();
\r
1846 st.Read (); // Initial -> Interactive
\r
1847 AssertNodeValues ("#5", st,
\r
1848 XmlNodeType.Element,
\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 1, // AttributeCount
\r
1858 true); // HasAttributes
\r
1861 AssertNodeValues ("#6-1", st,
\r
1862 XmlNodeType.EndElement,
\r
1863 0, // Depth. It is 0 for subtree.
\r
1864 false, // IsEmptyElement
\r
1866 String.Empty, // Prefix
\r
1867 "bar", // LocalName
\r
1868 String.Empty, // NamespaceURI
\r
1869 String.Empty, // Value
\r
1870 false, // HasValue
\r
1871 0, // AttributeCount
\r
1872 false); // HasAttributes
\r
1874 AssertNodeValues ("#6-2", st,
\r
1875 XmlNodeType.EndElement,
\r
1876 0, // Depth. It is 0 for subtree.
\r
1877 false, // IsEmptyElement
\r
1879 String.Empty, // Prefix
\r
1880 "bar", // LocalName
\r
1881 String.Empty, // NamespaceURI
\r
1882 String.Empty, // Value
\r
1883 false, // HasValue
\r
1884 0, // AttributeCount
\r
1885 false); // HasAttributes
\r
1887 Assert.IsTrue (!st.Read (), "#7");
\r
1891 public void ReadInteger ()
\r
1893 string xml1 = "<root>1</root>";
\r
1896 xr = XmlReader.Create (new StringReader (xml1));
\r
1898 Assert.AreEqual ("1", xr.ReadElementContentAsString (), "#1");
\r
1900 AssertNodeValues ("#1-2", xr,
\r
1902 0, // Depth. It is 0 for subtree.
\r
1903 false, // IsEmptyElement
\r
1904 String.Empty, // Name
\r
1905 String.Empty, // Prefix
\r
1906 String.Empty, // LocalName
\r
1907 String.Empty, // NamespaceURI
\r
1908 String.Empty, // Value
\r
1909 false, // HasValue
\r
1910 0, // AttributeCount
\r
1911 false); // HasAttributes
\r
1913 xr = XmlReader.Create (new StringReader (xml1));
\r
1915 // this XmlReader has no schema, thus the value is untyped
\r
1916 Assert.AreEqual ("1", xr.ReadElementContentAsObject (), "#2");
\r
1918 xr = XmlReader.Create (new StringReader (xml1));
\r
1921 Assert.AreEqual ("1", xr.ReadContentAsString (), "#3");
\r
1923 xr = XmlReader.Create (new StringReader (xml1));
\r
1925 Assert.AreEqual (1, xr.ReadElementContentAsInt (), "#4");
\r
1927 xr = XmlReader.Create (new StringReader (xml1));
\r
1929 Assert.AreEqual (1, xr.ReadElementContentAs (typeof (int), null), "#5");
\r
1933 [ExpectedException (typeof (XmlException))]
\r
1934 public void ReadContentAsIntFail ()
\r
1936 XmlReader xr = XmlReader.Create (
\r
1937 new StringReader ("<doc>1.0</doc>"));
\r
1939 xr.ReadElementContentAsInt ();
\r
1943 public void ReadDateTime ()
\r
1945 DateTime time = new DateTime (2006, 1, 2, 3, 4, 56);
\r
1946 string xml1 = "<root>2006-01-02T03:04:56</root>";
\r
1949 xr = XmlReader.Create (new StringReader (xml1));
\r
1951 // this XmlReader has no schema, thus the value is untyped
\r
1952 Assert.AreEqual ("2006-01-02T03:04:56", xr.ReadElementContentAsString (), "#1");
\r
1954 xr = XmlReader.Create (new StringReader (xml1));
\r
1957 Assert.AreEqual (time, xr.ReadContentAsDateTime (), "#2");
\r
1959 xr = XmlReader.Create (new StringReader (xml1));
\r
1961 Assert.AreEqual (time, xr.ReadElementContentAsDateTime (), "#3");
\r
1963 xr = XmlReader.Create (new StringReader (xml1));
\r
1965 Assert.AreEqual (time, xr.ReadElementContentAs (typeof (DateTime), null), "#4");
\r
1969 [ExpectedException (typeof (XmlException))]
\r
1970 public void ReadContentAsDateTimeFail ()
\r
1972 XmlReader xr = XmlReader.Create (
\r
1973 new StringReader ("<doc>P1Y2M3D</doc>"));
\r
1975 xr.ReadElementContentAsDateTime ();
\r
1979 public void ReadContentAs_QNameEmptyNSResolver ()
\r
1981 XmlReader xr = XmlReader.Create (
\r
1982 new StringReader ("<doc xmlns:x='urn:foo'>x:el</doc>"));
\r
1984 object o = xr.ReadElementContentAs (
\r
1985 typeof (XmlQualifiedName), null);
\r
1986 // without IXmlNamespaceResolver, it still resolves
\r
1987 // x:el as valid QName.
\r
1988 Assert.IsNotNull (o, "#1");
\r
1989 XmlQualifiedName q = o as XmlQualifiedName;
\r
1990 Assert.AreEqual (new XmlQualifiedName ("el", "urn:foo"), q, "#2 : " + o.GetType ());
\r
1994 [ExpectedException (typeof (InvalidOperationException))]
\r
1995 public void ReadContentStringOnElementFail ()
\r
1997 XmlReader xr = XmlReader.Create (new StringReader ("<a>test</a>"));
\r
1999 xr.ReadContentAsString ();
\r
2003 public void ReadContentStringOnEndElement ()
\r
2005 XmlReader xr = XmlReader.Create (new StringReader ("<a>test</a>"));
\r
2009 Assert.AreEqual (String.Empty, xr.ReadContentAsString ()); // does not fail, unlike at Element!
\r
2013 public void ReadContentStringOnPI ()
\r
2015 XmlReader xr = XmlReader.Create (new StringReader ("<?pi ?><a>test</a>"));
\r
2017 Assert.AreEqual (String.Empty, xr.ReadContentAsString ());
\r
2021 [ExpectedException (typeof (InvalidOperationException))] // unlike ReadContentAsString()
\r
2022 public void ReadElementContentStringOnPI ()
\r
2024 XmlReader xr = XmlReader.Create (new StringReader ("<?pi ?><a>test</a>"));
\r
2026 Assert.AreEqual (XmlNodeType.ProcessingInstruction, xr.NodeType);
\r
2027 xr.ReadElementContentAsString ();
\r
2031 [ExpectedException (typeof (XmlException))]
\r
2032 public void ReadElementContentStringMixedContent ()
\r
2034 XmlReader xr = XmlReader.Create (
\r
2035 new StringReader ("<doc>123<child>456</child>789</doc>"));
\r
2037 // "child" is regarded as an invalid node.
\r
2038 string s = xr.ReadElementContentAsString ();
\r
2042 public void ReadContentStringMixedContent ()
\r
2044 XmlReader xr = XmlReader.Create (
\r
2045 new StringReader ("<doc>123<child>456</child>789</doc>"));
\r
2047 xr.Read (); // from Text "123"
\r
2048 string s = xr.ReadContentAsString ();
\r
2049 Assert.AreEqual ("123", s, "#1");
\r
2050 Assert.AreEqual (XmlNodeType.Element, xr.NodeType, "#2");
\r
2054 public void ReadElementContentAsString ()
\r
2056 XmlTextReader r = new XmlTextReader (
\r
2057 "<root/>", XmlNodeType.Document, null);
\r
2059 Assert.AreEqual (String.Empty, r.ReadElementContentAsString (), "#1");
\r
2060 Assert.AreEqual (XmlNodeType.None, r.NodeType, "#2");
\r
2064 public void ReadElementContentAs ()
\r
2066 // as System.Object
\r
2068 XmlTextReader r = new XmlTextReader (
\r
2069 "<root/>", XmlNodeType.Document, null);
\r
2071 Assert.AreEqual (String.Empty, r.ReadElementContentAs (typeof (object), null), "#1");
\r
2072 Assert.AreEqual (XmlNodeType.None, r.NodeType, "#2");
\r
2074 // regardless of its value, the return value is string.
\r
2075 r = new XmlTextReader ("<root>1</root>", XmlNodeType.Document, null);
\r
2077 Assert.AreEqual ("1", r.ReadElementContentAs (typeof (object), null), "#3");
\r
2078 Assert.AreEqual (XmlNodeType.None, r.NodeType, "#4");
\r
2082 public void ReadContentStringOnAttribute ()
\r
2084 string xml = @"<root id='myId'><child /></root>";
\r
2085 RunTest (xml, new TestMethod (ReadContentStringOnAttribute));
\r
2088 void ReadContentStringOnAttribute (XmlReader reader)
\r
2091 Assert.IsTrue (reader.MoveToAttribute ("id"));
\r
2092 Assert.AreEqual ("myId", reader.ReadContentAsString ());
\r
2096 public void ReadElementContentAsStringEmpty ()
\r
2098 string xml = "<root><sample/></root>";
\r
2099 RunTest (xml, new TestMethod (ReadElementContentAsStringEmpty));
\r
2102 void ReadElementContentAsStringEmpty (XmlReader reader)
\r
2104 reader.MoveToContent ();
\r
2106 Assert.AreEqual (String.Empty, reader.ReadElementContentAsString ("sample", ""));
\r
2107 Assert.AreEqual (XmlNodeType.EndElement, reader.NodeType);
\r
2111 public void ReadSubtreeClose ()
\r
2114 string xml = @"<root><item-list><item id='a'/><item id='b'/></item-list></root>";
\r
2115 RunTest (xml, new TestMethod (ReadSubtreeClose));
\r
2118 void ReadSubtreeClose (XmlReader reader)
\r
2120 reader.ReadToFollowing ("item-list");
\r
2121 XmlReader sub = reader.ReadSubtree ();
\r
2122 sub.ReadToDescendant ("item");
\r
2124 Assert.AreEqual (XmlNodeType.EndElement, reader.NodeType, "#1");
\r
2125 Assert.AreEqual ("item-list", reader.Name, "#2");
\r
2129 [ExpectedException (typeof (InvalidOperationException))]
\r
2130 public void ReadSubtreeOnNonElement ()
\r
2132 string xml = @"<x> <y/></x>";
\r
2133 XmlReader r = XmlReader.Create (new StringReader (xml));
\r
2140 [ExpectedException (typeof (InvalidOperationException))]
\r
2141 public void ReadSubtreeOnNonElement2 ()
\r
2143 string xml = @"<x> <y/></x>";
\r
2144 XmlReader r = XmlReader.Create (new StringReader (xml));
\r
2149 public void ReadSubtreeEmptyElement ()
\r
2151 string xml = @"<x/>";
\r
2152 XmlReader r = XmlReader.Create (new StringReader (xml));
\r
2154 XmlReader s = r.ReadSubtree ();
\r
2155 Assert.IsTrue (s.Read (), "#1");
\r
2156 Assert.AreEqual (XmlNodeType.Element, s.NodeType, "#2");
\r
2157 Assert.IsTrue (!s.Read (), "#3");
\r
2158 Assert.AreEqual (XmlNodeType.None, s.NodeType, "#4");
\r
2162 public void ReadSubtreeEmptyElementWithAttribute ()
\r
2164 string xml = @"<root><x a='b'/></root>";
\r
2165 XmlReader r = XmlReader.Create (new StringReader (xml));
\r
2168 XmlReader r2 = r.ReadSubtree ();
\r
2169 Console.WriteLine ("X");
\r
2171 XmlReader r3 = r2.ReadSubtree ();
\r
2172 r2.MoveToFirstAttribute ();
\r
2173 Assert.IsTrue (!r.IsEmptyElement, "#1");
\r
2174 Assert.IsTrue (!r2.IsEmptyElement, "#2");
\r
2176 Assert.IsTrue (r.IsEmptyElement, "#3");
\r
2177 Assert.IsTrue (r2.IsEmptyElement, "#4");
\r
2179 Assert.IsTrue (r.IsEmptyElement, "#5");
\r
2180 Assert.IsTrue (r2.IsEmptyElement, "#6");
\r
2184 public void ReadContentAsBase64 ()
\r
2186 byte[] randomData = new byte[24];
\r
2187 for (int i = 0; i < randomData.Length; i++)
\r
2188 randomData [i] = (byte) i;
\r
2190 string xmlString = "<?xml version=\"1.0\"?><data>" +
\r
2191 Convert.ToBase64String (randomData) + "</data>";
\r
2192 TextReader textReader = new StringReader (xmlString);
\r
2193 XmlReader xmlReader = XmlReader.Create (textReader);
\r
2194 xmlReader.ReadToFollowing ("data");
\r
2196 int readBytes = 0;
\r
2197 byte[] buffer = new byte [24];
\r
2199 xmlReader.ReadStartElement ();
\r
2200 readBytes = xmlReader.ReadContentAsBase64 (buffer, 0, buffer.Length);
\r
2201 Assert.AreEqual (24, readBytes, "#1");
\r
2202 Assert.AreEqual (0, xmlReader.ReadContentAsBase64 (buffer, 0, buffer.Length), "#2");
\r
2203 StringWriter sw = new StringWriter ();
\r
2204 foreach (byte b in buffer) sw.Write ("{0:X02}", b);
\r
2205 Assert.AreEqual ("000102030405060708090A0B0C0D0E0F1011121314151617", sw.ToString (), "#3");
\r
2209 public void ReadContentAsBase64_2 () // bug #480066
\r
2211 StringReader readerString = new StringReader ("<root><b64>TWFu</b64><b64>TWFu</b64>\r\n\t<b64>TWFu</b64><b64>TWFu</b64></root>");
\r
2212 XmlReaderSettings settingsXml = new XmlReaderSettings ();
\r
2213 settingsXml.XmlResolver = null;
\r
2214 using (var readerXml = XmlReader.Create (readerString, settingsXml)) {
\r
2215 readerXml.MoveToContent ();
\r
2216 readerXml.Read ();
\r
2217 readerXml.ReadStartElement ("b64");
\r
2218 const int bufferLength = 1024;
\r
2219 byte [] buffer = new byte [bufferLength];
\r
2220 readerXml.ReadContentAsBase64 (buffer, 0, bufferLength);
\r
2221 Assert.AreEqual (XmlNodeType.EndElement, readerXml.NodeType, "#1");
\r
2222 readerXml.Read ();
\r
2223 Assert.AreEqual (XmlNodeType.Element, readerXml.NodeType, "#2");
\r
2228 public void ReadContentAsBase64_3 () // bug #543332
\r
2230 byte [] fakeState = new byte[25];
\r
2231 byte [] fixedSizeBuffer = new byte [25];
\r
2232 byte [] readDataBuffer = new byte [25];
\r
2233 var ms = new MemoryStream ();
\r
2234 var xw = XmlWriter.Create (ms);
\r
2235 xw.WriteStartElement ("root");
\r
2236 xw.WriteBase64 (fakeState, 0, fakeState.Length);
\r
2237 xw.WriteEndElement ();
\r
2239 var reader = XmlReader.Create (new MemoryStream (ms.ToArray ()));
\r
2240 reader.MoveToContent ();
\r
2241 // we cannot completely trust the length read to indicate the end.
\r
2243 bytesRead = reader.ReadElementContentAsBase64 (fixedSizeBuffer, 0, fixedSizeBuffer.Length);
\r
2244 Assert.AreEqual (25, bytesRead, "#1");
\r
2245 Assert.AreEqual (XmlNodeType.Text, reader.NodeType, "#2");
\r
2246 bytesRead = reader.ReadElementContentAsBase64 (fixedSizeBuffer, 0, fixedSizeBuffer.Length);
\r
2247 Assert.AreEqual (0, bytesRead, "#3");
\r
2248 Assert.AreEqual (XmlNodeType.None, reader.NodeType, "#4");
\r
2252 public void ReadElementContentAsQNameDefaultNS ()
\r
2254 var sw = new StringWriter ();
\r
2255 var xw = XmlWriter.Create (sw);
\r
2256 xw.WriteStartElement ("", "foo", "urn:foo");
\r
2257 xw.WriteValue (new XmlQualifiedName ("x", "urn:foo"));
\r
2258 xw.WriteEndElement ();
\r
2260 var xr = XmlReader.Create (new StringReader (sw.ToString ()));
\r
2261 xr.MoveToContent ();
\r
2262 var q = (XmlQualifiedName) xr.ReadElementContentAs (typeof (XmlQualifiedName), xr as IXmlNamespaceResolver);
\r
2263 Assert.AreEqual ("urn:foo", q.Namespace, "#1");
\r
2267 public void ReadElementContentAsArray ()
\r
2269 var sw = new StringWriter ();
\r
2270 var xw = XmlWriter.Create (sw);
\r
2271 xw.WriteStartElement ("root");
\r
2272 xw.WriteAttributeString ("xmlns", "b", "http://www.w3.org/2000/xmlns/", "urn:bar");
\r
2273 var arr = new XmlQualifiedName [] { new XmlQualifiedName ("foo"), new XmlQualifiedName ("bar", "urn:bar") };
\r
2274 xw.WriteValue (arr);
\r
2276 var xr = XmlReader.Create (new StringReader (sw.ToString ()));
\r
2277 xr.MoveToContent ();
\r
2278 var ret = xr.ReadElementContentAs (typeof (XmlQualifiedName []), null) as XmlQualifiedName [];
\r
2279 Assert.IsNotNull (ret, "#1");
\r
2280 Assert.AreEqual (arr [0], ret [0], "#2");
\r
2281 Assert.AreEqual (arr [1], ret [1], "#3");
\r
2285 public void ReadContentAs ()
\r
2287 var xr = XmlReader.Create (new StringReader ("<doc a=' 1 '/>"));
\r
2289 xr.MoveToAttribute ("a");
\r
2291 Assert.AreEqual ((Byte) 1, xr.ReadContentAs (typeof (Byte), null), "#1");
\r
2292 Assert.AreEqual ((SByte) 1, xr.ReadContentAs (typeof (SByte), null), "#2");
\r
2293 Assert.AreEqual ((Int16) 1, xr.ReadContentAs (typeof (Int16), null), "#3");
\r
2294 Assert.AreEqual ((UInt16) 1, xr.ReadContentAs (typeof (UInt16), null), "#4");
\r
2295 Assert.AreEqual ((Int32) 1, xr.ReadContentAs (typeof (Int32), null), "#5");
\r
2296 Assert.AreEqual ((UInt32) 1, xr.ReadContentAs (typeof (UInt32), null), "#6");
\r
2297 Assert.AreEqual ((Int64) 1, xr.ReadContentAs (typeof (Int64), null), "#7");
\r
2298 Assert.AreEqual ((UInt64) 1, xr.ReadContentAs (typeof (UInt64), null), "#8");
\r
2303 [ExpectedException(typeof(InvalidOperationException))]
\r
2304 public void MustSetAsyncFlag ()
\r
2306 var r = XmlReader.Create (new StringReader ("<root/>"));
\r
2310 Exception RunAsync (Action action)
\r
2312 var task = Task<Exception>.Run (async () => {
\r
2316 } catch (Exception ex) {
\r
2321 Assert.That (task.IsCompleted);
\r
2322 return task.Result;
\r
2326 public void SimpleAsync ()
\r
2328 var xml = "<root test=\"monkey\"/>";
\r
2329 var task = Task<Exception>.Run (async () => {
\r
2331 var s = new XmlReaderSettings ();
\r
2333 var r = XmlReader.Create (new StringReader (xml), s);
\r
2335 Assert.That (await r.ReadAsync ());
\r
2336 Assert.That (r.MoveToFirstAttribute ());
\r
2338 Assert.AreEqual (await r.GetValueAsync (), "monkey");
\r
2341 } catch (Exception ex) {
\r
2346 Assert.That (task.IsCompleted);
\r
2347 if (task.Result != null)
\r
2348 throw task.Result;
\r