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
206 // XPathNavigatorReader tests
\r
207 System.Xml.XPath.XPathDocument doc = new System.Xml.XPath.XPathDocument (new StringReader (xml));
\r
208 XmlReader xpr = doc.CreateNavigator ().ReadSubtree ();
\r
219 public void InitialState ()
\r
221 RunTest (xml1, new TestMethod (InitialState));
\r
224 private void InitialState (XmlReader reader)
\r
226 Assert.AreEqual (0, reader.Depth, "Depth");
\r
227 Assert.AreEqual (false, reader.EOF, "EOF");
\r
228 Assert.AreEqual (false, reader.HasValue, "HasValue");
\r
229 Assert.AreEqual (false, reader.IsEmptyElement, "IsEmptyElement");
\r
230 Assert.AreEqual (String.Empty, reader.LocalName, "LocalName");
\r
231 Assert.AreEqual (XmlNodeType.None, reader.NodeType, "NodeType");
\r
232 Assert.AreEqual (ReadState.Initial, reader.ReadState, "ReadState");
\r
236 public void Read ()
\r
238 RunTest (xml1, new TestMethod (Read));
\r
241 public void Read (XmlReader reader)
\r
244 Assert.AreEqual (XmlNodeType.Element, reader.NodeType, "<root>.NodeType");
\r
245 Assert.AreEqual ("root", reader.Name, "<root>.Name");
\r
246 Assert.AreEqual (ReadState.Interactive, reader.ReadState, "<root>.ReadState");
\r
247 Assert.AreEqual (0, reader.Depth, "<root>.Depth");
\r
251 Assert.AreEqual (1, reader.Depth, "<child/>.Depth");
\r
252 Assert.AreEqual (XmlNodeType.Element, reader.NodeType, "<child/>.NodeType");
\r
253 Assert.AreEqual ("child", reader.Name, "<child/>.Name");
\r
256 Assert.AreEqual (0, reader.Depth, "</root>.Depth");
\r
257 Assert.AreEqual (XmlNodeType.EndElement, reader.NodeType, "</root>.NodeType");
\r
258 Assert.AreEqual ("root", reader.Name, "</root>.Name");
\r
261 Assert.AreEqual (true, reader.EOF, "end.EOF");
\r
262 Assert.AreEqual (XmlNodeType.None, reader.NodeType, "end.NodeType");
\r
266 [Category ("NotDotNet")]
\r
267 public void ReadAttributeValue ()
\r
269 RunTest ("<root attr=''/>", new TestMethod (ReadAttributeValue));
\r
272 public void ReadAttributeValue (XmlReader reader)
\r
274 reader.Read (); // root
\r
275 Assert.IsTrue (reader.MoveToFirstAttribute ());
\r
276 // It looks like that MS.NET shows AttributeCount and
\r
277 // HasAttributes as the same as element node!
\r
278 this.AssertNodeValues ("#1",
\r
279 reader, XmlNodeType.Attribute,
\r
280 1, false, "attr", "", "attr", "", "", true, 1, true);
\r
281 Assert.IsTrue (reader.ReadAttributeValue ());
\r
282 // MS.NET XmlTextReader fails. Its Prefix returns
\r
283 // null instead of "". It is fixed in MS.NET 2.0.
\r
284 this.AssertNodeValues ("#2",
\r
285 reader, XmlNodeType.Text,
\r
286 2, false, "", "", "", "", "", true, 1, true);
\r
287 Assert.IsTrue (reader.MoveToElement ());
\r
288 this.AssertNodeValues ("#3",
\r
289 reader, XmlNodeType.Element,
\r
290 0, true, "root", "", "root", "", "", false, 1, true);
\r
294 public void ReadEmptyElement ()
\r
296 RunTest (xml2, new TestMethod (ReadEmptyElement));
\r
299 public void ReadEmptyElement (XmlReader reader)
\r
301 reader.Read (); // root
\r
302 Assert.AreEqual (false, reader.IsEmptyElement);
\r
303 reader.Read (); // foo
\r
304 Assert.AreEqual ("foo", reader.Name);
\r
305 Assert.AreEqual (true, reader.IsEmptyElement);
\r
306 reader.Read (); // bar
\r
307 Assert.AreEqual ("bar", reader.Name);
\r
308 Assert.AreEqual (false, reader.IsEmptyElement);
\r
312 public void ReadStringFromElement ()
\r
314 RunTest (xml3, new TestMethod (ReadStringFromElement));
\r
317 public void ReadStringFromElement (XmlReader reader)
\r
319 // Note: ReadString() test works only when the reader is
\r
320 // positioned at the container element.
\r
321 // In case the reader is positioned at the first
\r
322 // character node, XmlTextReader and XmlNodeReader works
\r
326 string s = reader.ReadString ();
\r
327 Assert.AreEqual (" test of ", s, "readString.1.ret_val");
\r
328 Assert.AreEqual ("b", reader.Name, "readString.1.Name");
\r
329 s = reader.ReadString ();
\r
330 Assert.AreEqual ("mixed", s, "readString.2.ret_val");
\r
331 Assert.AreEqual (XmlNodeType.EndElement, reader.NodeType, "readString.2.NodeType");
\r
332 s = reader.ReadString (); // never proceeds.
\r
333 Assert.AreEqual (String.Empty, s, "readString.3.ret_val");
\r
334 Assert.AreEqual (XmlNodeType.EndElement, reader.NodeType, "readString.3.NodeType");
\r
336 Assert.AreEqual (XmlNodeType.Text, reader.NodeType, "readString.4.NodeType");
\r
337 Assert.AreEqual (" string.", reader.Value, "readString.4.Value");
\r
338 s = reader.ReadString (); // reads the same Text node.
\r
339 Assert.AreEqual (" string. cdata string.", s, "readString.5.ret_val");
\r
340 Assert.AreEqual (XmlNodeType.EndElement, reader.NodeType, "readString.5.NodeType");
\r
344 public void ReadInnerXml ()
\r
346 const string xml = "<root><foo>test of <b>mixed</b> string.</foo><bar /></root>";
\r
347 RunTest (xml, new TestMethod (ReadInnerXml));
\r
350 public void ReadInnerXml (XmlReader reader)
\r
354 Assert.AreEqual (ReadState.Interactive, reader.ReadState, "initial.ReadState");
\r
355 Assert.AreEqual (false, reader.EOF, "initial.EOF");
\r
356 Assert.AreEqual (XmlNodeType.Element, reader.NodeType, "initial.NodeType");
\r
357 string s = reader.ReadInnerXml ();
\r
358 Assert.AreEqual ("test of <b>mixed</b> string.", s, "read_all");
\r
359 Assert.AreEqual ("bar", reader.Name, "after.Name");
\r
360 Assert.AreEqual (XmlNodeType.Element, reader.NodeType, "after.NodeType");
\r
365 public void EmptyElement ()
\r
367 RunTest ("<foo/>", new TestMethod (EmptyElement));
\r
370 public void EmptyElement (XmlReader xmlReader)
\r
373 AssertStartDocument (xmlReader);
\r
376 xmlReader, // xmlReader
\r
377 XmlNodeType.Element, // nodeType
\r
379 true, // isEmptyElement
\r
381 String.Empty, // prefix
\r
382 "foo", // localName
\r
383 String.Empty, // namespaceURI
\r
384 String.Empty, // value
\r
385 0 // attributeCount
\r
388 AssertEndDocument (xmlReader);
\r
392 public void NestedEmptyTag ()
\r
394 string xml = "<foo><bar/></foo>";
\r
395 RunTest (xml, new TestMethod (NestedEmptyTag));
\r
398 public void NestedEmptyTag (XmlReader xmlReader)
\r
400 AssertStartDocument (xmlReader);
\r
404 xmlReader, // xmlReader
\r
405 XmlNodeType.Element, // nodeType
\r
407 false, // isEmptyElement
\r
409 String.Empty, // prefix
\r
410 "foo", // localName
\r
411 String.Empty, // namespaceURI
\r
412 String.Empty, // value
\r
413 0 // attributeCount
\r
418 xmlReader, // xmlReader
\r
419 XmlNodeType.Element, // nodeType
\r
421 true, // isEmptyElement
\r
423 String.Empty, // prefix
\r
424 "bar", // localName
\r
425 String.Empty, // namespaceURI
\r
426 String.Empty, // value
\r
427 0 // attributeCount
\r
432 xmlReader, // xmlReader
\r
433 XmlNodeType.EndElement, // nodeType
\r
435 false, // isEmptyElement
\r
437 String.Empty, // prefix
\r
438 "foo", // localName
\r
439 String.Empty, // namespaceURI
\r
440 String.Empty, // value
\r
441 0 // attributeCount
\r
444 AssertEndDocument (xmlReader);
\r
448 public void NestedText ()
\r
450 string xml = "<foo>bar</foo>";
\r
451 RunTest (xml, new TestMethod (NestedText));
\r
454 public void NestedText (XmlReader xmlReader)
\r
456 AssertStartDocument (xmlReader);
\r
459 xmlReader, // xmlReader
\r
460 XmlNodeType.Element, // nodeType
\r
462 false, // isEmptyElement
\r
464 String.Empty, // prefix
\r
465 "foo", // localName
\r
466 String.Empty, // namespaceURI
\r
467 String.Empty, // value
\r
468 0 // attributeCount
\r
472 xmlReader, // xmlReader
\r
473 XmlNodeType.Text, // nodeType
\r
475 false, // isEmptyElement
\r
476 String.Empty, // name
\r
477 String.Empty, // prefix
\r
478 String.Empty, // localName
\r
479 String.Empty, // namespaceURI
\r
481 0 // attributeCount
\r
485 xmlReader, // xmlReader
\r
486 XmlNodeType.EndElement, // nodeType
\r
488 false, // isEmptyElement
\r
490 String.Empty, // prefix
\r
491 "foo", // localName
\r
492 String.Empty, // namespaceURI
\r
493 String.Empty, // value
\r
494 0 // attributeCount
\r
497 AssertEndDocument (xmlReader);
\r
501 public void EmptyElementWithAttributes ()
\r
503 string xml = @"<foo bar=""baz"" quux='quuux' x:foo='x-foo' xmlns:x = 'urn:xfoo' />";
\r
504 RunTest (xml, new TestMethod (EmptyElementWithAttributes ));
\r
507 public void EmptyElementWithAttributes (XmlReader xmlReader)
\r
510 AssertStartDocument (xmlReader);
\r
513 xmlReader, // xmlReader
\r
514 XmlNodeType.Element, // nodeType
\r
516 true, // isEmptyElement
\r
518 String.Empty, // prefix
\r
519 "foo", // localName
\r
520 String.Empty, // namespaceURI
\r
521 String.Empty, // value
\r
522 4 // attributeCount
\r
526 xmlReader, // xmlReader
\r
528 String.Empty, // prefix
\r
529 "bar", // localName
\r
530 String.Empty, // namespaceURI
\r
535 xmlReader, // xmlReader
\r
537 String.Empty, // prefix
\r
538 "quux", // localName
\r
539 String.Empty, // namespaceURI
\r
544 xmlReader, // xmlReader
\r
545 "notexist", // name
\r
546 String.Empty, // prefix
\r
547 "notexist", // localName
\r
548 String.Empty, // namespaceURI
\r
553 xmlReader, // xmlReader
\r
556 "foo", // localName
\r
557 "urn:xfoo", // namespaceURI
\r
562 xmlReader, // xmlReader
\r
565 "bar", // localName
\r
566 "urn:xfoo", // namespaceURI
\r
570 AssertEndDocument (xmlReader);
\r
574 public void ProcessingInstructionBeforeDocumentElement ()
\r
576 string xml = "<?foo bar?><baz/>";
\r
577 RunTest (xml, new TestMethod (ProcessingInstructionBeforeDocumentElement));
\r
580 public void ProcessingInstructionBeforeDocumentElement (XmlReader xmlReader)
\r
582 AssertStartDocument (xmlReader);
\r
585 xmlReader, // xmlReader
\r
586 XmlNodeType.ProcessingInstruction, // nodeType
\r
588 false, // isEmptyElement
\r
590 String.Empty, // prefix
\r
591 "foo", // localName
\r
592 String.Empty, // namespaceURI
\r
594 0 // attributeCount
\r
598 xmlReader, // xmlReader
\r
599 XmlNodeType.Element, // nodeType
\r
601 true, // isEmptyElement
\r
603 String.Empty, // prefix
\r
604 "baz", // localName
\r
605 String.Empty, // namespaceURI
\r
606 String.Empty, // value
\r
607 0 // attributeCount
\r
610 AssertEndDocument (xmlReader);
\r
614 public void CommentBeforeDocumentElement ()
\r
616 string xml = "<!--foo--><bar/>";
\r
617 RunTest (xml, new TestMethod (CommentBeforeDocumentElement));
\r
620 public void CommentBeforeDocumentElement (XmlReader xmlReader)
\r
622 AssertStartDocument (xmlReader);
\r
625 xmlReader, // xmlReader
\r
626 XmlNodeType.Comment, // nodeType
\r
628 false, // isEmptyElement
\r
629 String.Empty, // name
\r
630 String.Empty, // prefix
\r
631 String.Empty, // localName
\r
632 String.Empty, // namespaceURI
\r
634 0 // attributeCount
\r
638 xmlReader, // xmlReader
\r
639 XmlNodeType.Element, // nodeType
\r
641 true, // isEmptyElement
\r
643 String.Empty, // prefix
\r
644 "bar", // localName
\r
645 String.Empty, // namespaceURI
\r
646 String.Empty, // value
\r
647 0 // attributeCount
\r
650 AssertEndDocument (xmlReader);
\r
654 public void PredefinedEntities ()
\r
656 string xml = "<foo><>&'"</foo>";
\r
657 RunTest (xml, new TestMethod (PredefinedEntities));
\r
660 public void PredefinedEntities (XmlReader xmlReader)
\r
662 AssertStartDocument (xmlReader);
\r
665 xmlReader, // xmlReader
\r
666 XmlNodeType.Element, // nodeType
\r
668 false, // isEmptyElement
\r
670 String.Empty, // prefix
\r
671 "foo", // localName
\r
672 String.Empty, // namespaceURI
\r
673 String.Empty, // value
\r
674 0 // attributeCount
\r
678 xmlReader, // xmlReader
\r
679 XmlNodeType.Text, // nodeType
\r
681 false, // isEmptyElement
\r
682 String.Empty, // name
\r
683 String.Empty, // prefix
\r
684 String.Empty, // localName
\r
685 String.Empty, // namespaceURI
\r
687 0 // attributeCount
\r
691 xmlReader, // xmlReader
\r
692 XmlNodeType.EndElement, // nodeType
\r
694 false, // isEmptyElement
\r
696 String.Empty, // prefix
\r
697 "foo", // localName
\r
698 String.Empty, // namespaceURI
\r
699 String.Empty, // value
\r
700 0 // attributeCount
\r
703 AssertEndDocument (xmlReader);
\r
707 public void CharacterReferences ()
\r
709 string xml = "<foo>FOO</foo>";
\r
710 RunTest (xml, new TestMethod (CharacterReferences));
\r
713 public void CharacterReferences (XmlReader xmlReader)
\r
715 AssertStartDocument (xmlReader);
\r
718 xmlReader, // xmlReader
\r
719 XmlNodeType.Element, // nodeType
\r
721 false, // isEmptyElement
\r
723 String.Empty, // prefix
\r
724 "foo", // localName
\r
725 String.Empty, // namespaceURI
\r
726 String.Empty, // value
\r
727 0 // attributeCount
\r
731 xmlReader, // xmlReader
\r
732 XmlNodeType.Text, // nodeType
\r
734 false, // isEmptyElement
\r
735 String.Empty, // name
\r
736 String.Empty, // prefix
\r
737 String.Empty, // localName
\r
738 String.Empty, // namespaceURI
\r
740 0 // attributeCount
\r
744 xmlReader, // xmlReader
\r
745 XmlNodeType.EndElement, // nodeType
\r
747 false, // isEmptyElement
\r
749 String.Empty, // prefix
\r
750 "foo", // localName
\r
751 String.Empty, // namespaceURI
\r
752 String.Empty, // value
\r
753 0 // attributeCount
\r
756 AssertEndDocument (xmlReader);
\r
760 public void PredefinedEntitiesInAttribute ()
\r
762 string xml = "<foo bar='<>&'"'/>";
\r
763 RunTest (xml, new TestMethod (PredefinedEntitiesInAttribute ));
\r
766 public void PredefinedEntitiesInAttribute (XmlReader xmlReader)
\r
768 AssertStartDocument (xmlReader);
\r
771 xmlReader, // xmlReader
\r
772 XmlNodeType.Element, // nodeType
\r
774 true, // isEmptyElement
\r
776 String.Empty, // prefix
\r
777 "foo", // localName
\r
778 String.Empty, // namespaceURI
\r
779 String.Empty, // value
\r
780 1 // attributeCount
\r
784 xmlReader, // xmlReader
\r
786 String.Empty, // prefix
\r
787 "bar", // localName
\r
788 String.Empty, // namespaceURI
\r
792 AssertEndDocument (xmlReader);
\r
796 public void CharacterReferencesInAttribute ()
\r
798 string xml = "<foo bar='FOO'/>";
\r
799 RunTest (xml, new TestMethod (CharacterReferencesInAttribute));
\r
802 public void CharacterReferencesInAttribute (XmlReader xmlReader)
\r
804 AssertStartDocument (xmlReader);
\r
807 xmlReader, // xmlReader
\r
808 XmlNodeType.Element, // nodeType
\r
810 true, // isEmptyElement
\r
812 String.Empty, // prefix
\r
813 "foo", // localName
\r
814 String.Empty, // namespaceURI
\r
815 String.Empty, // value
\r
816 1 // attributeCount
\r
820 xmlReader, // xmlReader
\r
822 String.Empty, // prefix
\r
823 "bar", // localName
\r
824 String.Empty, // namespaceURI
\r
828 AssertEndDocument (xmlReader);
\r
832 public void CDATA ()
\r
834 string xml = "<foo><![CDATA[<>&]]></foo>";
\r
835 RunTest (xml, new TestMethod (CDATA));
\r
838 public void CDATA (XmlReader xmlReader)
\r
840 AssertStartDocument (xmlReader);
\r
843 xmlReader, // xmlReader
\r
844 XmlNodeType.Element, // nodeType
\r
846 false, // isEmptyElement
\r
848 String.Empty, // prefix
\r
849 "foo", // localName
\r
850 String.Empty, // namespaceURI
\r
851 String.Empty, // value
\r
852 0 // attributeCount
\r
856 xmlReader, // xmlReader
\r
857 XmlNodeType.CDATA, // nodeType
\r
859 false, // isEmptyElement
\r
860 String.Empty, // name
\r
861 String.Empty, // prefix
\r
862 String.Empty, // localName
\r
863 String.Empty, // namespaceURI
\r
865 0 // attributeCount
\r
869 xmlReader, // xmlReader
\r
870 XmlNodeType.EndElement, // nodeType
\r
872 false, // isEmptyElement
\r
874 String.Empty, // prefix
\r
875 "foo", // localName
\r
876 String.Empty, // namespaceURI
\r
877 String.Empty, // value
\r
878 0 // attributeCount
\r
881 AssertEndDocument (xmlReader);
\r
885 public void EmptyElementInDefaultNamespace ()
\r
887 string xml = @"<foo xmlns='http://foo/' />";
\r
888 RunTest (xml, new TestMethod (EmptyElementInDefaultNamespace));
\r
891 public void EmptyElementInDefaultNamespace (XmlReader xmlReader)
\r
893 AssertStartDocument (xmlReader);
\r
896 xmlReader, // xmlReader
\r
897 XmlNodeType.Element, // nodeType
\r
899 true, // isEmptyElement
\r
901 String.Empty, // prefix
\r
902 "foo", // localName
\r
903 "http://foo/", // namespaceURI
\r
904 String.Empty, // value
\r
905 1 // attributeCount
\r
909 xmlReader, // xmlReader
\r
911 String.Empty, // prefix
\r
912 "xmlns", // localName
\r
913 "http://www.w3.org/2000/xmlns/", // namespaceURI
\r
914 "http://foo/" // value
\r
917 Assert.AreEqual ("http://foo/", xmlReader.LookupNamespace (String.Empty));
\r
919 AssertEndDocument (xmlReader);
\r
923 public void ChildElementInNamespace ()
\r
925 string xml = @"<foo:bar xmlns:foo='http://foo/'><baz:quux xmlns:baz='http://baz/' /></foo:bar>";
\r
926 RunTest (xml, new TestMethod (ChildElementInNamespace));
\r
929 public void ChildElementInNamespace (XmlReader xmlReader)
\r
931 AssertStartDocument (xmlReader);
\r
934 xmlReader, // xmlReader
\r
935 XmlNodeType.Element, // nodeType
\r
937 false, // isEmptyElement
\r
940 "bar", // localName
\r
941 "http://foo/", // namespaceURI
\r
942 String.Empty, // value
\r
943 1 // attributeCount
\r
947 xmlReader, // xmlReader
\r
948 "xmlns:foo", // name
\r
950 "foo", // localName
\r
951 "http://www.w3.org/2000/xmlns/", // namespaceURI
\r
952 "http://foo/" // value
\r
955 Assert.AreEqual ("http://foo/", xmlReader.LookupNamespace ("foo"));
\r
958 xmlReader, // xmlReader
\r
959 XmlNodeType.Element, // nodeType
\r
961 true, // isEmptyElement
\r
962 "baz:quux", // name
\r
964 "quux", // localName
\r
965 "http://baz/", // namespaceURI
\r
966 String.Empty, // value
\r
967 1 // attributeCount
\r
971 xmlReader, // xmlReader
\r
972 "xmlns:baz", // name
\r
974 "baz", // localName
\r
975 "http://www.w3.org/2000/xmlns/", // namespaceURI
\r
976 "http://baz/" // value
\r
979 Assert.AreEqual ("http://foo/", xmlReader.LookupNamespace ("foo"));
\r
980 Assert.AreEqual ("http://baz/", xmlReader.LookupNamespace ("baz"));
\r
983 xmlReader, // xmlReader
\r
984 XmlNodeType.EndElement, // nodeType
\r
986 false, // isEmptyElement
\r
989 "bar", // localName
\r
990 "http://foo/", // namespaceURI
\r
991 String.Empty, // value
\r
992 0 // attributeCount
\r
995 Assert.AreEqual ("http://foo/", xmlReader.LookupNamespace ("foo"));
\r
996 Assert.IsNull (xmlReader.LookupNamespace ("baz"));
\r
998 AssertEndDocument (xmlReader);
\r
1002 public void ChildElementInDefaultNamespace ()
\r
1004 string xml = @"<foo:bar xmlns:foo='http://foo/'><baz xmlns='http://baz/' /></foo:bar>";
\r
1005 RunTest (xml, new TestMethod (ChildElementInDefaultNamespace));
\r
1008 public void ChildElementInDefaultNamespace (XmlReader xmlReader)
\r
1010 AssertStartDocument (xmlReader);
\r
1013 xmlReader, // xmlReader
\r
1014 XmlNodeType.Element, // nodeType
\r
1016 false, // isEmptyElement
\r
1017 "foo:bar", // name
\r
1019 "bar", // localName
\r
1020 "http://foo/", // namespaceURI
\r
1021 String.Empty, // value
\r
1022 1 // attributeCount
\r
1026 xmlReader, // xmlReader
\r
1027 "xmlns:foo", // name
\r
1028 "xmlns", // prefix
\r
1029 "foo", // localName
\r
1030 "http://www.w3.org/2000/xmlns/", // namespaceURI
\r
1031 "http://foo/" // value
\r
1034 Assert.AreEqual ("http://foo/", xmlReader.LookupNamespace ("foo"));
\r
1037 xmlReader, // xmlReader
\r
1038 XmlNodeType.Element, // nodeType
\r
1040 true, // isEmptyElement
\r
1042 String.Empty, // prefix
\r
1043 "baz", // localName
\r
1044 "http://baz/", // namespaceURI
\r
1045 String.Empty, // value
\r
1046 1 // attributeCount
\r
1050 xmlReader, // xmlReader
\r
1052 String.Empty, // prefix
\r
1053 "xmlns", // localName
\r
1054 "http://www.w3.org/2000/xmlns/", // namespaceURI
\r
1055 "http://baz/" // value
\r
1058 Assert.AreEqual ("http://foo/", xmlReader.LookupNamespace ("foo"));
\r
1059 Assert.AreEqual ("http://baz/", xmlReader.LookupNamespace (String.Empty));
\r
1062 xmlReader, // xmlReader
\r
1063 XmlNodeType.EndElement, // nodeType
\r
1065 false, // isEmptyElement
\r
1066 "foo:bar", // name
\r
1068 "bar", // localName
\r
1069 "http://foo/", // namespaceURI
\r
1070 String.Empty, // value
\r
1071 0 // attributeCount
\r
1074 Assert.AreEqual ("http://foo/", xmlReader.LookupNamespace ("foo"));
\r
1076 AssertEndDocument (xmlReader);
\r
1080 public void AttributeInNamespace ()
\r
1082 string xml = @"<foo bar:baz='quux' xmlns:bar='http://bar/' />";
\r
1083 RunTest (xml, new TestMethod (AttributeInNamespace));
\r
1086 public void AttributeInNamespace (XmlReader xmlReader)
\r
1088 AssertStartDocument (xmlReader);
\r
1091 xmlReader, // xmlReader
\r
1092 XmlNodeType.Element, // nodeType
\r
1094 true, // isEmptyElement
\r
1096 String.Empty, // prefix
\r
1097 "foo", // localName
\r
1098 String.Empty, // namespaceURI
\r
1099 String.Empty, // value
\r
1100 2 // attributeCount
\r
1104 xmlReader, // xmlReader
\r
1105 "bar:baz", // name
\r
1107 "baz", // localName
\r
1108 "http://bar/", // namespaceURI
\r
1113 xmlReader, // xmlReader
\r
1114 "xmlns:bar", // name
\r
1115 "xmlns", // prefix
\r
1116 "bar", // localName
\r
1117 "http://www.w3.org/2000/xmlns/", // namespaceURI
\r
1118 "http://bar/" // value
\r
1121 Assert.AreEqual ("http://bar/", xmlReader.LookupNamespace ("bar"));
\r
1123 AssertEndDocument (xmlReader);
\r
1127 public void MoveToElementFromAttribute ()
\r
1129 string xml = @"<foo bar=""baz"" />";
\r
1130 RunTest (xml, new TestMethod (MoveToElementFromAttribute));
\r
1133 public void MoveToElementFromAttribute (XmlReader xmlReader)
\r
1135 Assert.IsTrue (xmlReader.Read ());
\r
1136 Assert.AreEqual (XmlNodeType.Element, xmlReader.NodeType);
\r
1137 Assert.IsTrue (xmlReader.MoveToFirstAttribute ());
\r
1138 Assert.AreEqual (XmlNodeType.Attribute, xmlReader.NodeType);
\r
1139 Assert.IsTrue (xmlReader.MoveToElement ());
\r
1140 Assert.AreEqual (XmlNodeType.Element, xmlReader.NodeType);
\r
1144 public void MoveToElementFromElement ()
\r
1146 string xml = @"<foo bar=""baz"" />";
\r
1147 RunTest (xml, new TestMethod (MoveToElementFromElement));
\r
1150 public void MoveToElementFromElement (XmlReader xmlReader)
\r
1152 Assert.IsTrue (xmlReader.Read ());
\r
1153 Assert.AreEqual (XmlNodeType.Element, xmlReader.NodeType);
\r
1154 Assert.IsTrue (!xmlReader.MoveToElement ());
\r
1155 Assert.AreEqual (XmlNodeType.Element, xmlReader.NodeType);
\r
1159 public void MoveToFirstAttributeWithNoAttributes ()
\r
1161 string xml = @"<foo />";
\r
1162 RunTest (xml, new TestMethod (MoveToFirstAttributeWithNoAttributes));
\r
1165 public void MoveToFirstAttributeWithNoAttributes (XmlReader xmlReader)
\r
1167 Assert.IsTrue (xmlReader.Read ());
\r
1168 Assert.AreEqual (XmlNodeType.Element, xmlReader.NodeType);
\r
1169 Assert.IsTrue (!xmlReader.MoveToFirstAttribute ());
\r
1170 Assert.AreEqual (XmlNodeType.Element, xmlReader.NodeType);
\r
1174 public void MoveToNextAttributeWithNoAttributes ()
\r
1176 string xml = @"<foo />";
\r
1177 RunTest (xml, new TestMethod (MoveToNextAttributeWithNoAttributes));
\r
1180 public void MoveToNextAttributeWithNoAttributes (XmlReader xmlReader)
\r
1182 Assert.IsTrue (xmlReader.Read ());
\r
1183 Assert.AreEqual (XmlNodeType.Element, xmlReader.NodeType);
\r
1184 Assert.IsTrue (!xmlReader.MoveToNextAttribute ());
\r
1185 Assert.AreEqual (XmlNodeType.Element, xmlReader.NodeType);
\r
1189 public void MoveToNextAttribute()
\r
1191 string xml = @"<foo bar=""baz"" quux='quuux'/>";
\r
1192 RunTest (xml, new TestMethod (MoveToNextAttribute));
\r
1195 public void MoveToNextAttribute (XmlReader xmlReader)
\r
1197 AssertStartDocument (xmlReader);
\r
1200 xmlReader, // xmlReader
\r
1201 XmlNodeType.Element, // nodeType
\r
1203 true, // isEmptyElement
\r
1205 String.Empty, // prefix
\r
1206 "foo", // localName
\r
1207 String.Empty, // namespaceURI
\r
1208 String.Empty, // value
\r
1209 2 // attributeCount
\r
1213 xmlReader, // xmlReader
\r
1215 String.Empty, // prefix
\r
1216 "bar", // localName
\r
1217 String.Empty, // namespaceURI
\r
1222 xmlReader, // xmlReader
\r
1224 String.Empty, // prefix
\r
1225 "quux", // localName
\r
1226 String.Empty, // namespaceURI
\r
1230 Assert.IsTrue (xmlReader.MoveToNextAttribute ());
\r
1231 Assert.AreEqual ("bar", xmlReader.Name);
\r
1232 Assert.AreEqual ("baz", xmlReader.Value);
\r
1234 Assert.IsTrue (xmlReader.MoveToNextAttribute ());
\r
1235 Assert.AreEqual ("quux", xmlReader.Name);
\r
1236 Assert.AreEqual ("quuux", xmlReader.Value);
\r
1238 Assert.IsTrue (!xmlReader.MoveToNextAttribute ());
\r
1240 Assert.IsTrue (xmlReader.MoveToElement ());
\r
1242 AssertNodeValues (
\r
1244 xmlReader, // xmlReader
\r
1245 XmlNodeType.Element, // nodeType
\r
1247 true, // isEmptyElement
\r
1249 String.Empty, // prefix
\r
1250 "foo", // localName
\r
1251 String.Empty, // namespaceURI
\r
1252 String.Empty, // value
\r
1253 2 // attributeCount
\r
1256 AssertEndDocument (xmlReader);
\r
1260 // [Category ("NotDotNet")] // MS XmlNodeReader never moves to xml declaration.
\r
1261 [Ignore ("Too inconsistent reference implementations to determine which is correct behavior.")]
\r
1262 public void MoveToXmlDeclAttributes ()
\r
1264 string xml = "<?xml version=\"1.0\" standalone=\"yes\"?><root/>";
\r
1265 RunTest (xml, new TestMethod (MoveToXmlDeclAttributes));
\r
1268 public void MoveToXmlDeclAttributes (XmlReader xmlReader)
\r
1270 xmlReader.Read ();
\r
1271 this.AssertNodeValues ("#1", xmlReader,
\r
1272 XmlNodeType.XmlDeclaration,
\r
1279 "version=\"1.0\" standalone=\"yes\"",
\r
1281 Assert.IsTrue (xmlReader.MoveToFirstAttribute (), "MoveToFirstAttribute");
\r
1282 this.AssertNodeValues ("#2", xmlReader,
\r
1283 XmlNodeType.Attribute,
\r
1284 0, // FIXME: might be 1
\r
1292 xmlReader.ReadAttributeValue ();
\r
1293 this.AssertNodeValues ("#3", xmlReader,
\r
1295 1, // FIXME might be 2
\r
1298 null, // FIXME: should be String.Empty,
\r
1300 null, // FIXME: should be String.Empty,
\r
1303 xmlReader.MoveToNextAttribute ();
\r
1304 this.AssertNodeValues ("#4", xmlReader,
\r
1305 XmlNodeType.Attribute,
\r
1306 0, // FIXME: might be 1
\r
1314 xmlReader.ReadAttributeValue ();
\r
1315 this.AssertNodeValues ("#5", xmlReader,
\r
1317 1, // FIXME: might be 2
\r
1320 null, // FIXME: should be String.Empty,
\r
1322 null, // FIXME: should be String.Empty,
\r
1328 public void AttributeOrder ()
\r
1330 string xml = @"<foo _1='1' _2='2' _3='3' />";
\r
1331 RunTest (xml, new TestMethod (AttributeOrder));
\r
1334 public void AttributeOrder (XmlReader xmlReader)
\r
1336 Assert.IsTrue (xmlReader.Read ());
\r
1337 Assert.AreEqual (XmlNodeType.Element, xmlReader.NodeType);
\r
1339 Assert.IsTrue (xmlReader.MoveToFirstAttribute ());
\r
1340 Assert.AreEqual ("_1", xmlReader.Name);
\r
1341 Assert.IsTrue (xmlReader.MoveToNextAttribute ());
\r
1342 Assert.AreEqual ("_2", xmlReader.Name);
\r
1343 Assert.IsTrue (xmlReader.MoveToNextAttribute ());
\r
1344 Assert.AreEqual ("_3", xmlReader.Name);
\r
1346 Assert.IsTrue (!xmlReader.MoveToNextAttribute ());
\r
1350 [Category ("NotDotNet")]
\r
1351 public void IndexerAndAttributes ()
\r
1353 string xml = @"<?xml version='1.0' standalone='no'?><foo _1='1' _2='2' _3='3' />";
\r
1354 RunTest (xml, new TestMethod (IndexerAndAttributes));
\r
1357 public void IndexerAndAttributes (XmlReader xmlReader)
\r
1359 Assert.IsTrue (xmlReader.Read ());
\r
1360 Assert.AreEqual ("1.0", xmlReader ["version"]);
\r
1361 Assert.AreEqual ("1.0", xmlReader.GetAttribute ("version"));
\r
1362 // .NET 1.1 BUG. XmlTextReader returns null, while XmlNodeReader returns "".
\r
1363 Assert.AreEqual (null, xmlReader ["encoding"]);
\r
1364 Assert.AreEqual (null, xmlReader.GetAttribute ("encoding"));
\r
1365 Assert.AreEqual ("no", xmlReader ["standalone"]);
\r
1366 Assert.AreEqual ("no", xmlReader.GetAttribute ("standalone"));
\r
1367 Assert.AreEqual ("1.0", xmlReader [0]);
\r
1368 Assert.AreEqual ("1.0", xmlReader.GetAttribute (0));
\r
1369 Assert.AreEqual ("no", xmlReader [1]);
\r
1370 Assert.AreEqual ("no", xmlReader.GetAttribute (1));
\r
1372 Assert.IsTrue (xmlReader.Read ());
\r
1373 Assert.AreEqual (XmlNodeType.Element, xmlReader.NodeType);
\r
1374 Assert.AreEqual ("1", xmlReader ["_1"]);
\r
1376 Assert.IsTrue (xmlReader.MoveToFirstAttribute ());
\r
1377 Assert.AreEqual ("_1", xmlReader.Name);
\r
1378 Assert.AreEqual ("1", xmlReader ["_1"]);
\r
1379 Assert.IsTrue (xmlReader.MoveToNextAttribute ());
\r
1380 Assert.AreEqual ("_2", xmlReader.Name);
\r
1381 Assert.AreEqual ("1", xmlReader ["_1"]);
\r
1382 Assert.IsTrue (xmlReader.MoveToNextAttribute ());
\r
1383 Assert.AreEqual ("_3", xmlReader.Name);
\r
1384 Assert.AreEqual ("1", xmlReader ["_1"]);
\r
1386 Assert.IsTrue (!xmlReader.MoveToNextAttribute ());
\r
1390 public void ProhibitedMultipleAttributes ()
\r
1392 string xml = @"<foo _1='1' _1='1' />";
\r
1394 RunTest (xml, new TestMethod (ReadAll));
\r
1395 } catch (XmlException) {
\r
1397 xml = @"<foo _1='1' _1='2' />";
\r
1399 RunTest (xml, new TestMethod (ReadAll));
\r
1400 } catch (XmlException) {
\r
1404 public void ReadAll (XmlReader xmlReader)
\r
1406 while (!xmlReader.EOF)
\r
1407 xmlReader.Read ();
\r
1411 public void SurrogatePairContent ()
\r
1413 string xml = "<root xmlns='𐄀'/>";
\r
1414 RunTest (xml, new TestMethod (SurrogatePairContent));
\r
1417 public void SurrogatePairContent (XmlReader xmlReader)
\r
1419 xmlReader.Read ();
\r
1420 Assert.AreEqual (true, xmlReader.MoveToAttribute ("xmlns"));
\r
1421 Assert.AreEqual ("xmlns", xmlReader.Name);
\r
1422 Assert.AreEqual (2, xmlReader.Value.Length);
\r
1423 Assert.AreEqual (0xD800, (int) xmlReader.Value [0]);
\r
1424 Assert.AreEqual (0xDD00, (int) xmlReader.Value [1]);
\r
1428 public void ReadOuterXmlOnEndElement ()
\r
1430 string xml = "<root><foo></foo></root>";
\r
1431 RunTest (xml, new TestMethod (ReadOuterXmlOnEndElement));
\r
1434 public void ReadOuterXmlOnEndElement (XmlReader xmlReader)
\r
1436 xmlReader.Read ();
\r
1437 xmlReader.Read ();
\r
1438 xmlReader.Read ();
\r
1439 Assert.AreEqual (String.Empty, xmlReader.ReadOuterXml ());
\r
1443 public void ReadInnerXmlOnEndElement ()
\r
1445 string xml = "<root><foo></foo></root>";
\r
1446 RunTest (xml, new TestMethod (ReadInnerXmlOnEndElement));
\r
1449 private void ReadInnerXmlOnEndElement (XmlReader xmlReader)
\r
1451 xmlReader.Read ();
\r
1452 xmlReader.Read ();
\r
1453 xmlReader.Read ();
\r
1454 Assert.AreEqual (String.Empty, xmlReader.ReadInnerXml ());
\r
1458 public void LookupEmptyPrefix ()
\r
1460 string xml = "<root><foo></foo></root>";
\r
1461 RunTest (xml, new TestMethod (LookupEmptyPrefix));
\r
1464 void LookupEmptyPrefix (XmlReader xmlReader)
\r
1466 xmlReader.Read ();
\r
1467 Assert.IsNull (xmlReader.LookupNamespace (String.Empty));
\r
1471 public void ReadStartElement ()
\r
1473 string xml = "<root>test</root>";
\r
1474 RunTest (xml, new TestMethod (ReadStartElement));
\r
1477 void ReadStartElement (XmlReader xr)
\r
1480 xr.ReadStartElement ();
\r
1481 // consume Element node.
\r
1482 Assert.AreEqual (XmlNodeType.Text, xr.NodeType);
\r
1486 public void LookupNamespaceAtEndElement ()
\r
1488 string xml = "<root xmlns:x='urn:foo'><foo/></root>";
\r
1489 RunTest (xml, new TestMethod (LookupNamespaceAtEndElement));
\r
1492 void LookupNamespaceAtEndElement (XmlReader reader)
\r
1495 Assert.AreEqual ("urn:foo", reader.LookupNamespace ("x"), "#1");
\r
1497 Assert.AreEqual ("urn:foo", reader.LookupNamespace ("x"), "#2");
\r
1499 Assert.AreEqual ("urn:foo", reader.LookupNamespace ("x"), "#3");
\r
1503 public void ReadClosedReader ()
\r
1505 string xml = "<fin>aaa</fin>";
\r
1506 RunTest (xml, new TestMethod (ReadClosedReader));
\r
1509 void ReadClosedReader (XmlReader reader)
\r
1513 reader.Read (); // silently returns false
\r
1518 public void CreateSimple ()
\r
1520 XmlReaderSettings s = new XmlReaderSettings ();
\r
1521 s.ProhibitDtd = false;
\r
1522 XmlReader xr = XmlReader.Create ("Test/XmlFiles/nested-dtd-test.xml", s);
\r
1524 Assert.AreEqual (XmlNodeType.DocumentType, xr.NodeType, "#1");
\r
1526 Assert.AreEqual (XmlNodeType.Whitespace, xr.NodeType, "#2");
\r
1528 Assert.AreEqual (XmlNodeType.Element, xr.NodeType, "#3");
\r
1532 [ExpectedException (typeof (XmlException))]
\r
1533 public void CreateSimpleProhibitDtd ()
\r
1535 XmlReader xr = XmlReader.Create ("Test/XmlFiles/nested-dtd-test.xml");
\r
1540 // a bit revised version of bug #78706
\r
1541 public void CreateFromUrlClose ()
\r
1543 string file = Path.Combine (Path.GetTempPath (), "78706.xml");
\r
1545 if (!File.Exists (file))
\r
1546 File.Create (file).Close ();
\r
1547 XmlReaderSettings s = new XmlReaderSettings ();
\r
1548 s.CloseInput = false; // explicitly
\r
1549 XmlReader r = XmlReader.Create (file, s);
\r
1551 XmlTextWriter w = new XmlTextWriter (file, null);
\r
1554 if (File.Exists (file))
\r
1555 File.Delete (file);
\r
1560 // a bit revised version of bug #385638
\r
1561 public void CreateFromUrlClose2 ()
\r
1563 string file = Path.Combine (Path.GetTempPath (), "385638.xml");
\r
1565 if (File.Exists (file))
\r
1566 File.Delete (file);
\r
1567 using (TextWriter tw = File.CreateText (file))
\r
1568 tw.Write ("<xml />");
\r
1569 XmlReaderSettings s = new XmlReaderSettings ();
\r
1570 s.IgnoreWhitespace = true; // this results in XmlFilterReader, which is the key for this bug.
\r
1571 XmlReader r = XmlReader.Create (file, s);
\r
1573 XmlTextWriter w = new XmlTextWriter (file, null);
\r
1576 if (File.Exists (file))
\r
1577 File.Delete (file);
\r
1582 [ExpectedException (typeof (ArgumentException))]
\r
1583 public void Create_String_Empty ()
\r
1585 XmlReader.Create (String.Empty);
\r
1589 public void ReadToDescendant ()
\r
1591 string xml = @"<root><foo/><bar/><foo> test text <bar><bar></bar></bar></foo></root>";
\r
1592 RunTest (xml, new TestMethod (ReadToDescendant));
\r
1595 void ReadToDescendant (XmlReader xmlReader)
\r
1597 // move to first <bar/>
\r
1598 Assert.IsTrue (xmlReader.ReadToDescendant ("bar"), "#1");
\r
1599 // no children in <bar/>. It is empty.
\r
1600 Assert.IsTrue (!xmlReader.ReadToDescendant ("bar"), "#2");
\r
1601 Assert.AreEqual ("bar", xmlReader.Name, "#2-2");
\r
1603 // move to the second <foo>
\r
1604 xmlReader.Read ();
\r
1605 // move to the second <bar>
\r
1606 Assert.IsTrue (xmlReader.ReadToDescendant ("bar"), "#3");
\r
1607 // move to <bar> inside <bar>...</bar>
\r
1608 Assert.IsTrue (xmlReader.ReadToDescendant ("bar"), "#4");
\r
1609 // the next is EndElement of </bar>, so no move.
\r
1610 Assert.IsTrue (!xmlReader.ReadToDescendant ("bar"), "#5");
\r
1611 Assert.AreEqual (XmlNodeType.EndElement, xmlReader.NodeType, "#5-2");
\r
1615 public void ReadToDescepdant2 ()
\r
1617 string xml = "<root/>";
\r
1618 RunTest (xml, new TestMethod (ReadToDescendant2));
\r
1621 void ReadToDescendant2 (XmlReader xmlReader)
\r
1623 // make sure that it works when the reader is at Initial state.
\r
1624 Assert.IsTrue (xmlReader.ReadToDescendant ("root"));
\r
1628 public void ReadToFollowing ()
\r
1630 string xml = @"<root><foo/><bar/><foo><bar><bar></bar></bar></foo></root>";
\r
1631 RunTest (xml, new TestMethod (ReadToFollowing));
\r
1634 public void ReadToFollowing (XmlReader xmlReader)
\r
1636 Assert.IsTrue (xmlReader.ReadToFollowing ("bar"), "#1");
\r
1637 Assert.IsTrue (xmlReader.ReadToFollowing ("bar"), "#2");
\r
1638 Assert.AreEqual (2, xmlReader.Depth, "#2-2");
\r
1639 Assert.IsTrue (xmlReader.ReadToFollowing ("bar"), "#3");
\r
1640 Assert.AreEqual (3, xmlReader.Depth, "#3-2");
\r
1641 Assert.IsTrue (!xmlReader.ReadToFollowing ("bar"), "#4");
\r
1645 [Category ("NotDotNet")]
\r
1646 public void ReadToNextSiblingAtInitialState ()
\r
1648 string xml = @"<root></root>";
\r
1649 RunTest (xml, new TestMethod (ReadToNextSiblingAtInitialState ));
\r
1652 void ReadToNextSiblingAtInitialState (XmlReader xmlReader)
\r
1654 Assert.IsTrue (!xmlReader.ReadToNextSibling ("bar"), "#1");
\r
1655 Assert.IsTrue (!xmlReader.ReadToNextSibling ("root"), "#2");
\r
1659 public void ReadToNextSibling ()
\r
1661 string xml = @"<root><foo/><bar attr='value'/><foo><pooh/><bar></bar><foo></foo><bar/></foo></root>";
\r
1662 RunTest (xml, new TestMethod (ReadToNextSibling));
\r
1665 void ReadToNextSibling (XmlReader xmlReader)
\r
1667 // It is funky, but without it MS.NET results in an infinite loop.
\r
1668 xmlReader.Read (); // root
\r
1670 xmlReader.Read (); // foo
\r
1671 Assert.IsTrue (xmlReader.ReadToNextSibling ("bar"), "#3");
\r
1673 Assert.AreEqual ("value", xmlReader.GetAttribute ("attr"), "#3-2");
\r
1674 xmlReader.Read (); // foo
\r
1675 xmlReader.Read (); // pooh
\r
1676 Assert.IsTrue (xmlReader.ReadToNextSibling ("bar"), "#4");
\r
1677 Assert.IsTrue (!xmlReader.IsEmptyElement, "#4-2");
\r
1678 Assert.IsTrue (xmlReader.ReadToNextSibling ("bar"), "#5");
\r
1679 Assert.IsTrue (xmlReader.IsEmptyElement, "#5-2");
\r
1680 Assert.IsTrue (xmlReader.Read (), "#6"); // /foo
\r
1682 AssertNodeValues ("#7", xmlReader,
\r
1683 XmlNodeType.EndElement,
\r
1685 false, // IsEmptyElement
\r
1687 String.Empty, // Prefix
\r
1688 "foo", // LocalName
\r
1689 String.Empty, // NamespaceURI
\r
1690 String.Empty, // Value
\r
1691 false, // HasValue
\r
1692 0, // AttributeCount
\r
1693 false); // HasAttributes
\r
1698 public void ReadToNextSibling2 ()
\r
1700 string xml = @"<root><baz><bar><foo attr='value'/></bar><foo attr='value2'><bar><foo /></bar></foo></baz></root>";
\r
1701 RunTest (xml, new TestMethod (ReadToNextSibling2));
\r
1704 void ReadToNextSibling2 (XmlReader r)
\r
1706 r.MoveToContent (); // ->root
\r
1707 r.Read (); // root->baz
\r
1708 r.Read (); // baz->bar
\r
1709 Assert.IsTrue (r.ReadToNextSibling ("foo"), "#1");
\r
1710 Assert.AreEqual ("value2", r.GetAttribute ("attr"), "#2");
\r
1711 r.Read (); // foo[@value='value2']->bar
\r
1712 Assert.IsTrue (!r.ReadToNextSibling ("foo"), "#3");
\r
1713 Assert.AreEqual (XmlNodeType.EndElement, r.NodeType, "#4");
\r
1714 Assert.AreEqual ("foo", r.LocalName, "#5");
\r
1719 public void ReadToNextSibling3 ()
\r
1721 string xml = @" <books> <book> <name>Happy C Sharp</name> </book> </books>";
\r
1722 XmlReader reader = XmlReader.Create (new StringReader (xml));
\r
1724 reader.MoveToContent ();
\r
1726 while (reader.Read ())
\r
1727 reader.ReadToNextSibling ("book"); // should not result in an infinite loop
\r
1732 public void ReadToNextSibling4 ()
\r
1734 string xml = @"<SerializableStringDictionary>
\r
1735 <SerializableStringDictionary>
\r
1736 <DictionaryEntry Key=""Key1"" Value=""Value1""/>
\r
1737 <DictionaryEntry Key=""Key2"" Value=""Value2""/>
\r
1738 <DictionaryEntry Key=""Key3"" Value=""Value3""/>
\r
1739 </SerializableStringDictionary>
\r
1740 </SerializableStringDictionary>";
\r
1742 var reader = XmlReader.Create (new StringReader (xml));
\r
1744 Assert.IsTrue (reader.ReadToDescendant ("SerializableStringDictionary"), "#1");
\r
1745 Assert.IsTrue (reader.ReadToDescendant ("DictionaryEntry"), "#2");
\r
1749 reader.MoveToAttribute ("Key");
\r
1750 var key = reader.ReadContentAsString ();
\r
1751 reader.MoveToAttribute ("Value");
\r
1752 var value = reader.ReadContentAsString ();
\r
1755 while (reader.ReadToNextSibling ("DictionaryEntry"));
\r
1756 Assert.AreEqual (3, count, "#3");
\r
1760 public void ReadSubtree ()
\r
1762 string xml = @"<root><foo/><bar attr='value'></bar></root>";
\r
1763 RunTest (xml, new TestMethod (ReadSubtree));
\r
1766 void ReadSubtree (XmlReader reader)
\r
1768 reader.MoveToContent (); // root
\r
1769 reader.Read (); // foo
\r
1770 XmlReader st = reader.ReadSubtree (); // <foo/>
\r
1772 // MS bug: IsEmptyElement should be false here.
\r
1774 AssertNodeValues ("#1", st,
\r
1777 false, // IsEmptyElement
\r
1778 String.Empty, // Name
\r
1779 String.Empty, // Prefix
\r
1780 String.Empty, // LocalName
\r
1781 String.Empty, // NamespaceURI
\r
1782 String.Empty, // Value
\r
1783 false, // HasValue
\r
1784 0, // AttributeCount
\r
1785 false); // HasAttributes
\r
1787 Assert.AreEqual (XmlNodeType.None, st.NodeType, "#1");
\r
1790 AssertNodeValues ("#2", st,
\r
1791 XmlNodeType.Element,
\r
1793 true, // IsEmptyElement
\r
1795 String.Empty, // Prefix
\r
1796 "foo", // LocalName
\r
1797 String.Empty, // NamespaceURI
\r
1798 String.Empty, // Value
\r
1799 false, // HasValue
\r
1800 0, // AttributeCount
\r
1801 false); // HasAttributes
\r
1803 Assert.IsTrue (!st.Read (), "#3");
\r
1805 // At this state, reader is not positioned on <bar> yet
\r
1806 AssertNodeValues ("#3-2", reader,
\r
1807 XmlNodeType.Element,
\r
1808 1, // Depth. It is 1 for main tree.
\r
1809 true, // IsEmptyElement
\r
1811 String.Empty, // Prefix
\r
1812 "foo", // LocalName
\r
1813 String.Empty, // NamespaceURI
\r
1814 String.Empty, // Value
\r
1815 false, // HasValue
\r
1816 0, // AttributeCount
\r
1817 false); // HasAttributes
\r
1821 AssertNodeValues ("#4", reader,
\r
1822 XmlNodeType.Element,
\r
1823 1, // Depth. It is 1 for main tree.
\r
1824 false, // IsEmptyElement
\r
1826 String.Empty, // Prefix
\r
1827 "bar", // LocalName
\r
1828 String.Empty, // NamespaceURI
\r
1829 String.Empty, // Value
\r
1830 false, // HasValue
\r
1831 1, // AttributeCount
\r
1832 true); // HasAttributes
\r
1834 st = reader.ReadSubtree ();
\r
1835 st.Read (); // Initial -> Interactive
\r
1836 AssertNodeValues ("#5", st,
\r
1837 XmlNodeType.Element,
\r
1838 0, // Depth. It is 0 for subtree.
\r
1839 false, // IsEmptyElement
\r
1841 String.Empty, // Prefix
\r
1842 "bar", // LocalName
\r
1843 String.Empty, // NamespaceURI
\r
1844 String.Empty, // Value
\r
1845 false, // HasValue
\r
1846 1, // AttributeCount
\r
1847 true); // HasAttributes
\r
1850 AssertNodeValues ("#6-1", st,
\r
1851 XmlNodeType.EndElement,
\r
1852 0, // Depth. It is 0 for subtree.
\r
1853 false, // IsEmptyElement
\r
1855 String.Empty, // Prefix
\r
1856 "bar", // LocalName
\r
1857 String.Empty, // NamespaceURI
\r
1858 String.Empty, // Value
\r
1859 false, // HasValue
\r
1860 0, // AttributeCount
\r
1861 false); // HasAttributes
\r
1863 AssertNodeValues ("#6-2", st,
\r
1864 XmlNodeType.EndElement,
\r
1865 0, // Depth. It is 0 for subtree.
\r
1866 false, // IsEmptyElement
\r
1868 String.Empty, // Prefix
\r
1869 "bar", // LocalName
\r
1870 String.Empty, // NamespaceURI
\r
1871 String.Empty, // Value
\r
1872 false, // HasValue
\r
1873 0, // AttributeCount
\r
1874 false); // HasAttributes
\r
1876 Assert.IsTrue (!st.Read (), "#7");
\r
1880 public void ReadInteger ()
\r
1882 string xml1 = "<root>1</root>";
\r
1885 xr = XmlReader.Create (new StringReader (xml1));
\r
1887 Assert.AreEqual ("1", xr.ReadElementContentAsString (), "#1");
\r
1889 AssertNodeValues ("#1-2", xr,
\r
1891 0, // Depth. It is 0 for subtree.
\r
1892 false, // IsEmptyElement
\r
1893 String.Empty, // Name
\r
1894 String.Empty, // Prefix
\r
1895 String.Empty, // LocalName
\r
1896 String.Empty, // NamespaceURI
\r
1897 String.Empty, // Value
\r
1898 false, // HasValue
\r
1899 0, // AttributeCount
\r
1900 false); // HasAttributes
\r
1902 xr = XmlReader.Create (new StringReader (xml1));
\r
1904 // this XmlReader has no schema, thus the value is untyped
\r
1905 Assert.AreEqual ("1", xr.ReadElementContentAsObject (), "#2");
\r
1907 xr = XmlReader.Create (new StringReader (xml1));
\r
1910 Assert.AreEqual ("1", xr.ReadContentAsString (), "#3");
\r
1912 xr = XmlReader.Create (new StringReader (xml1));
\r
1914 Assert.AreEqual (1, xr.ReadElementContentAsInt (), "#4");
\r
1916 xr = XmlReader.Create (new StringReader (xml1));
\r
1918 Assert.AreEqual (1, xr.ReadElementContentAs (typeof (int), null), "#5");
\r
1922 [ExpectedException (typeof (XmlException))]
\r
1923 public void ReadContentAsIntFail ()
\r
1925 XmlReader xr = XmlReader.Create (
\r
1926 new StringReader ("<doc>1.0</doc>"));
\r
1928 xr.ReadElementContentAsInt ();
\r
1932 public void ReadDateTime ()
\r
1934 DateTime time = new DateTime (2006, 1, 2, 3, 4, 56);
\r
1935 string xml1 = "<root>2006-01-02T03:04:56</root>";
\r
1938 xr = XmlReader.Create (new StringReader (xml1));
\r
1940 // this XmlReader has no schema, thus the value is untyped
\r
1941 Assert.AreEqual ("2006-01-02T03:04:56", xr.ReadElementContentAsString (), "#1");
\r
1943 xr = XmlReader.Create (new StringReader (xml1));
\r
1946 Assert.AreEqual (time, xr.ReadContentAsDateTime (), "#2");
\r
1948 xr = XmlReader.Create (new StringReader (xml1));
\r
1950 Assert.AreEqual (time, xr.ReadElementContentAsDateTime (), "#3");
\r
1952 xr = XmlReader.Create (new StringReader (xml1));
\r
1954 Assert.AreEqual (time, xr.ReadElementContentAs (typeof (DateTime), null), "#4");
\r
1958 [ExpectedException (typeof (XmlException))]
\r
1959 public void ReadContentAsDateTimeFail ()
\r
1961 XmlReader xr = XmlReader.Create (
\r
1962 new StringReader ("<doc>P1Y2M3D</doc>"));
\r
1964 xr.ReadElementContentAsDateTime ();
\r
1968 public void ReadContentAs_QNameEmptyNSResolver ()
\r
1970 XmlReader xr = XmlReader.Create (
\r
1971 new StringReader ("<doc xmlns:x='urn:foo'>x:el</doc>"));
\r
1973 object o = xr.ReadElementContentAs (
\r
1974 typeof (XmlQualifiedName), null);
\r
1975 // without IXmlNamespaceResolver, it still resolves
\r
1976 // x:el as valid QName.
\r
1977 Assert.IsNotNull (o, "#1");
\r
1978 XmlQualifiedName q = o as XmlQualifiedName;
\r
1979 Assert.AreEqual (new XmlQualifiedName ("el", "urn:foo"), q, "#2 : " + o.GetType ());
\r
1983 [ExpectedException (typeof (InvalidOperationException))]
\r
1984 public void ReadContentStringOnElementFail ()
\r
1986 XmlReader xr = XmlReader.Create (new StringReader ("<a>test</a>"));
\r
1988 xr.ReadContentAsString ();
\r
1992 public void ReadContentStringOnEndElement ()
\r
1994 XmlReader xr = XmlReader.Create (new StringReader ("<a>test</a>"));
\r
1998 Assert.AreEqual (String.Empty, xr.ReadContentAsString ()); // does not fail, unlike at Element!
\r
2002 public void ReadContentStringOnPI ()
\r
2004 XmlReader xr = XmlReader.Create (new StringReader ("<?pi ?><a>test</a>"));
\r
2006 Assert.AreEqual (String.Empty, xr.ReadContentAsString ());
\r
2010 [ExpectedException (typeof (InvalidOperationException))] // unlike ReadContentAsString()
\r
2011 public void ReadElementContentStringOnPI ()
\r
2013 XmlReader xr = XmlReader.Create (new StringReader ("<?pi ?><a>test</a>"));
\r
2015 Assert.AreEqual (XmlNodeType.ProcessingInstruction, xr.NodeType);
\r
2016 xr.ReadElementContentAsString ();
\r
2020 [ExpectedException (typeof (XmlException))]
\r
2021 public void ReadElementContentStringMixedContent ()
\r
2023 XmlReader xr = XmlReader.Create (
\r
2024 new StringReader ("<doc>123<child>456</child>789</doc>"));
\r
2026 // "child" is regarded as an invalid node.
\r
2027 string s = xr.ReadElementContentAsString ();
\r
2031 public void ReadContentStringMixedContent ()
\r
2033 XmlReader xr = XmlReader.Create (
\r
2034 new StringReader ("<doc>123<child>456</child>789</doc>"));
\r
2036 xr.Read (); // from Text "123"
\r
2037 string s = xr.ReadContentAsString ();
\r
2038 Assert.AreEqual ("123", s, "#1");
\r
2039 Assert.AreEqual (XmlNodeType.Element, xr.NodeType, "#2");
\r
2043 public void ReadElementContentAsString ()
\r
2045 XmlTextReader r = new XmlTextReader (
\r
2046 "<root/>", XmlNodeType.Document, null);
\r
2048 Assert.AreEqual (String.Empty, r.ReadElementContentAsString (), "#1");
\r
2049 Assert.AreEqual (XmlNodeType.None, r.NodeType, "#2");
\r
2053 public void ReadElementContentAs ()
\r
2055 // as System.Object
\r
2057 XmlTextReader r = new XmlTextReader (
\r
2058 "<root/>", XmlNodeType.Document, null);
\r
2060 Assert.AreEqual (String.Empty, r.ReadElementContentAs (typeof (object), null), "#1");
\r
2061 Assert.AreEqual (XmlNodeType.None, r.NodeType, "#2");
\r
2063 // regardless of its value, the return value is string.
\r
2064 r = new XmlTextReader ("<root>1</root>", XmlNodeType.Document, null);
\r
2066 Assert.AreEqual ("1", r.ReadElementContentAs (typeof (object), null), "#3");
\r
2067 Assert.AreEqual (XmlNodeType.None, r.NodeType, "#4");
\r
2071 public void ReadContentStringOnAttribute ()
\r
2073 string xml = @"<root id='myId'><child /></root>";
\r
2074 RunTest (xml, new TestMethod (ReadContentStringOnAttribute));
\r
2077 void ReadContentStringOnAttribute (XmlReader reader)
\r
2080 Assert.IsTrue (reader.MoveToAttribute ("id"));
\r
2081 Assert.AreEqual ("myId", reader.ReadContentAsString ());
\r
2085 public void ReadElementContentAsStringEmpty ()
\r
2087 string xml = "<root><sample/></root>";
\r
2088 RunTest (xml, new TestMethod (ReadElementContentAsStringEmpty));
\r
2091 void ReadElementContentAsStringEmpty (XmlReader reader)
\r
2093 reader.MoveToContent ();
\r
2095 Assert.AreEqual (String.Empty, reader.ReadElementContentAsString ("sample", ""));
\r
2096 Assert.AreEqual (XmlNodeType.EndElement, reader.NodeType);
\r
2100 public void ReadSubtreeClose ()
\r
2103 string xml = @"<root><item-list><item id='a'/><item id='b'/></item-list></root>";
\r
2104 RunTest (xml, new TestMethod (ReadSubtreeClose));
\r
2107 void ReadSubtreeClose (XmlReader reader)
\r
2109 reader.ReadToFollowing ("item-list");
\r
2110 XmlReader sub = reader.ReadSubtree ();
\r
2111 sub.ReadToDescendant ("item");
\r
2113 Assert.AreEqual (XmlNodeType.EndElement, reader.NodeType, "#1");
\r
2114 Assert.AreEqual ("item-list", reader.Name, "#2");
\r
2118 [ExpectedException (typeof (InvalidOperationException))]
\r
2119 public void ReadSubtreeOnNonElement ()
\r
2121 string xml = @"<x> <y/></x>";
\r
2122 XmlReader r = XmlReader.Create (new StringReader (xml));
\r
2129 [ExpectedException (typeof (InvalidOperationException))]
\r
2130 public void ReadSubtreeOnNonElement2 ()
\r
2132 string xml = @"<x> <y/></x>";
\r
2133 XmlReader r = XmlReader.Create (new StringReader (xml));
\r
2138 public void ReadSubtreeEmptyElement ()
\r
2140 string xml = @"<x/>";
\r
2141 XmlReader r = XmlReader.Create (new StringReader (xml));
\r
2143 XmlReader s = r.ReadSubtree ();
\r
2144 Assert.IsTrue (s.Read (), "#1");
\r
2145 Assert.AreEqual (XmlNodeType.Element, s.NodeType, "#2");
\r
2146 Assert.IsTrue (!s.Read (), "#3");
\r
2147 Assert.AreEqual (XmlNodeType.None, s.NodeType, "#4");
\r
2151 public void ReadSubtreeEmptyElementWithAttribute ()
\r
2153 string xml = @"<root><x a='b'/></root>";
\r
2154 XmlReader r = XmlReader.Create (new StringReader (xml));
\r
2157 XmlReader r2 = r.ReadSubtree ();
\r
2158 Console.WriteLine ("X");
\r
2160 XmlReader r3 = r2.ReadSubtree ();
\r
2161 r2.MoveToFirstAttribute ();
\r
2162 Assert.IsTrue (!r.IsEmptyElement, "#1");
\r
2163 Assert.IsTrue (!r2.IsEmptyElement, "#2");
\r
2165 Assert.IsTrue (r.IsEmptyElement, "#3");
\r
2166 Assert.IsTrue (r2.IsEmptyElement, "#4");
\r
2168 Assert.IsTrue (r.IsEmptyElement, "#5");
\r
2169 Assert.IsTrue (r2.IsEmptyElement, "#6");
\r
2173 public void ReadContentAsBase64 ()
\r
2175 byte[] randomData = new byte[24];
\r
2176 for (int i = 0; i < randomData.Length; i++)
\r
2177 randomData [i] = (byte) i;
\r
2179 string xmlString = "<?xml version=\"1.0\"?><data>" +
\r
2180 Convert.ToBase64String (randomData) + "</data>";
\r
2181 TextReader textReader = new StringReader (xmlString);
\r
2182 XmlReader xmlReader = XmlReader.Create (textReader);
\r
2183 xmlReader.ReadToFollowing ("data");
\r
2185 int readBytes = 0;
\r
2186 byte[] buffer = new byte [24];
\r
2188 xmlReader.ReadStartElement ();
\r
2189 readBytes = xmlReader.ReadContentAsBase64 (buffer, 0, buffer.Length);
\r
2190 Assert.AreEqual (24, readBytes, "#1");
\r
2191 Assert.AreEqual (0, xmlReader.ReadContentAsBase64 (buffer, 0, buffer.Length), "#2");
\r
2192 StringWriter sw = new StringWriter ();
\r
2193 foreach (byte b in buffer) sw.Write ("{0:X02}", b);
\r
2194 Assert.AreEqual ("000102030405060708090A0B0C0D0E0F1011121314151617", sw.ToString (), "#3");
\r
2198 public void ReadContentAsBase64_2 () // bug #480066
\r
2200 StringReader readerString = new StringReader ("<root><b64>TWFu</b64><b64>TWFu</b64>\r\n\t<b64>TWFu</b64><b64>TWFu</b64></root>");
\r
2201 XmlReaderSettings settingsXml = new XmlReaderSettings ();
\r
2202 settingsXml.XmlResolver = null;
\r
2203 using (var readerXml = XmlReader.Create (readerString, settingsXml)) {
\r
2204 readerXml.MoveToContent ();
\r
2205 readerXml.Read ();
\r
2206 readerXml.ReadStartElement ("b64");
\r
2207 const int bufferLength = 1024;
\r
2208 byte [] buffer = new byte [bufferLength];
\r
2209 readerXml.ReadContentAsBase64 (buffer, 0, bufferLength);
\r
2210 Assert.AreEqual (XmlNodeType.EndElement, readerXml.NodeType, "#1");
\r
2211 readerXml.Read ();
\r
2212 Assert.AreEqual (XmlNodeType.Element, readerXml.NodeType, "#2");
\r
2217 public void ReadContentAsBase64_3 () // bug #543332
\r
2219 byte [] fakeState = new byte[25];
\r
2220 byte [] fixedSizeBuffer = new byte [25];
\r
2221 byte [] readDataBuffer = new byte [25];
\r
2222 var ms = new MemoryStream ();
\r
2223 var xw = XmlWriter.Create (ms);
\r
2224 xw.WriteStartElement ("root");
\r
2225 xw.WriteBase64 (fakeState, 0, fakeState.Length);
\r
2226 xw.WriteEndElement ();
\r
2228 var reader = XmlReader.Create (new MemoryStream (ms.ToArray ()));
\r
2229 reader.MoveToContent ();
\r
2230 // we cannot completely trust the length read to indicate the end.
\r
2232 bytesRead = reader.ReadElementContentAsBase64 (fixedSizeBuffer, 0, fixedSizeBuffer.Length);
\r
2233 Assert.AreEqual (25, bytesRead, "#1");
\r
2234 Assert.AreEqual (XmlNodeType.Text, reader.NodeType, "#2");
\r
2235 bytesRead = reader.ReadElementContentAsBase64 (fixedSizeBuffer, 0, fixedSizeBuffer.Length);
\r
2236 Assert.AreEqual (0, bytesRead, "#3");
\r
2237 Assert.AreEqual (XmlNodeType.EndElement, reader.NodeType, "#4");
\r
2241 public void ReadElementContentAsQNameDefaultNS ()
\r
2243 var sw = new StringWriter ();
\r
2244 var xw = XmlWriter.Create (sw);
\r
2245 xw.WriteStartElement ("", "foo", "urn:foo");
\r
2246 xw.WriteValue (new XmlQualifiedName ("x", "urn:foo"));
\r
2247 xw.WriteEndElement ();
\r
2249 var xr = XmlReader.Create (new StringReader (sw.ToString ()));
\r
2250 xr.MoveToContent ();
\r
2251 var q = (XmlQualifiedName) xr.ReadElementContentAs (typeof (XmlQualifiedName), xr as IXmlNamespaceResolver);
\r
2252 Assert.AreEqual ("urn:foo", q.Namespace, "#1");
\r
2256 public void ReadElementContentAsArray ()
\r
2258 var sw = new StringWriter ();
\r
2259 var xw = XmlWriter.Create (sw);
\r
2260 xw.WriteStartElement ("root");
\r
2261 xw.WriteAttributeString ("xmlns", "b", "http://www.w3.org/2000/xmlns/", "urn:bar");
\r
2262 var arr = new XmlQualifiedName [] { new XmlQualifiedName ("foo"), new XmlQualifiedName ("bar", "urn:bar") };
\r
2263 xw.WriteValue (arr);
\r
2265 var xr = XmlReader.Create (new StringReader (sw.ToString ()));
\r
2266 xr.MoveToContent ();
\r
2267 var ret = xr.ReadElementContentAs (typeof (XmlQualifiedName []), null) as XmlQualifiedName [];
\r
2268 Assert.IsNotNull (ret, "#1");
\r
2269 Assert.AreEqual (arr [0], ret [0], "#2");
\r
2270 Assert.AreEqual (arr [1], ret [1], "#3");
\r
2274 public void ReadContentAs ()
\r
2276 var xr = XmlReader.Create (new StringReader ("<doc a=' 1 '/>"));
\r
2278 xr.MoveToAttribute ("a");
\r
2280 Assert.AreEqual ((Byte) 1, xr.ReadContentAs (typeof (Byte), null), "#1");
\r
2281 Assert.AreEqual ((SByte) 1, xr.ReadContentAs (typeof (SByte), null), "#2");
\r
2282 Assert.AreEqual ((Int16) 1, xr.ReadContentAs (typeof (Int16), null), "#3");
\r
2283 Assert.AreEqual ((UInt16) 1, xr.ReadContentAs (typeof (UInt16), null), "#4");
\r
2284 Assert.AreEqual ((Int32) 1, xr.ReadContentAs (typeof (Int32), null), "#5");
\r
2285 Assert.AreEqual ((UInt32) 1, xr.ReadContentAs (typeof (UInt32), null), "#6");
\r
2286 Assert.AreEqual ((Int64) 1, xr.ReadContentAs (typeof (Int64), null), "#7");
\r
2287 Assert.AreEqual ((UInt64) 1, xr.ReadContentAs (typeof (UInt64), null), "#8");
\r
2292 [ExpectedException(typeof(InvalidOperationException))]
\r
2293 public void MustSetAsyncFlag ()
\r
2295 var r = XmlReader.Create (new StringReader ("<root/>"));
\r
2299 Exception RunAsync (Action action)
\r
2301 var task = Task<Exception>.Run (async () => {
\r
2305 } catch (Exception ex) {
\r
2310 Assert.That (task.IsCompleted);
\r
2311 return task.Result;
\r
2315 public void SimpleAsync ()
\r
2317 var xml = "<root test=\"monkey\"/>";
\r
2318 var task = Task<Exception>.Run (async () => {
\r
2320 var s = new XmlReaderSettings ();
\r
2322 var r = XmlReader.Create (new StringReader (xml), s);
\r
2324 Assert.That (await r.ReadAsync ());
\r
2325 Assert.That (r.MoveToFirstAttribute ());
\r
2327 Assert.AreEqual (await r.GetValueAsync (), "monkey");
\r
2330 } catch (Exception ex) {
\r
2335 Assert.That (task.IsCompleted);
\r
2336 if (task.Result != null)
\r
2337 throw task.Result;
\r