3 // Jason Diamond <jason@injektilo.org>
4 // Martin Willemoes Hansen <mwh@sysrq.dk>
5 // Atsushi Enomoto <atsushi@ximian.com>
7 // (C) 2002 Jason Diamond
8 // (C) 2003 Martin Willemoes Hansen
9 // (C) 2004-2006 Novell, Inc.
10 // (C) 2003 Atsushi Enomoto <ginga@kit.hi-ho.ne.jp>
12 // Permission is hereby granted, free of charge, to any person obtaining
13 // a copy of this software and associated documentation files (the
14 // "Software"), to deal in the Software without restriction, including
15 // without limitation the rights to use, copy, modify, merge, publish,
16 // distribute, sublicense, and/or sell copies of the Software, and to
17 // permit persons to whom the Software is furnished to do so, subject to
18 // the following conditions:
20 // The above copyright notice and this permission notice shall be
21 // included in all copies or substantial portions of the Software.
23 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
24 // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
25 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
26 // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
27 // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
28 // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
29 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
33 // imported from XPathNavigatorTests
40 using System.Xml.Linq;
41 using System.Xml.XPath;
44 using NUnit.Framework;
46 namespace MonoTests.System.Xml
49 public class ExtensionsTest2
51 XPathNavigator navigator;
54 public void CreateNavigator ()
56 navigator = XDocument.Parse ("<foo />").CreateNavigator ();
57 Assert.IsNotNull (navigator);
61 public void PropertiesOnDocument ()
63 navigator = XDocument.Parse ("<foo:bar xmlns:foo='#foo' />").CreateNavigator ();
65 Assert.AreEqual (XPathNodeType.Root, navigator.NodeType, "#1");
66 Assert.AreEqual (String.Empty, navigator.Name, "#2");
67 Assert.AreEqual (String.Empty, navigator.LocalName, "#3");
68 Assert.AreEqual (String.Empty, navigator.NamespaceURI, "#4");
69 Assert.AreEqual (String.Empty, navigator.Prefix, "#5");
70 Assert.IsTrue (!navigator.HasAttributes, "#6");
71 Assert.IsTrue (navigator.HasChildren, "#7");
72 Assert.IsTrue (!navigator.IsEmptyElement, "#8");
76 public void PropertiesOnElement ()
78 navigator = XDocument.Parse ("<foo:bar xmlns:foo='#foo' />").FirstNode.CreateNavigator ();
80 Assert.AreEqual (XPathNodeType.Element, navigator.NodeType, "#1");
81 Assert.AreEqual ("foo:bar", navigator.Name, "#2");
82 Assert.AreEqual ("bar", navigator.LocalName, "#3");
83 Assert.AreEqual ("#foo", navigator.NamespaceURI, "#4");
84 Assert.AreEqual ("foo", navigator.Prefix, "#5");
85 Assert.IsTrue (!navigator.HasAttributes, "#6");
86 Assert.IsTrue (!navigator.HasChildren, "#7");
87 Assert.IsTrue (navigator.IsEmptyElement, "#8");
91 public void Navigation ()
93 navigator = XDocument.Parse ("<foo><bar /><baz /></foo>").FirstNode.CreateNavigator ();
95 Assert.AreEqual ("foo", navigator.Name, "#1");
96 Assert.IsTrue (navigator.MoveToFirstChild (), "#2");
97 Assert.AreEqual ("bar", navigator.Name, "#3");
98 Assert.IsTrue (navigator.MoveToNext (), "#4");
99 Assert.AreEqual ("baz", navigator.Name, "#5");
100 Assert.IsTrue (!navigator.MoveToNext (), "#6");
101 Assert.AreEqual ("baz", navigator.Name, "#7");
102 Assert.IsTrue (navigator.MoveToPrevious (), "#8");
103 Assert.AreEqual ("bar", navigator.Name, "#9");
104 Assert.IsTrue (!navigator.MoveToPrevious (), "#10");
105 Assert.IsTrue (navigator.MoveToParent (), "#11");
106 Assert.AreEqual ("foo", navigator.Name, "#12");
107 navigator.MoveToRoot ();
108 Assert.AreEqual (XPathNodeType.Root, navigator.NodeType, "#13");
109 Assert.IsTrue (!navigator.MoveToParent (), "#14");
110 Assert.AreEqual (XPathNodeType.Root, navigator.NodeType, "#15");
111 Assert.IsTrue (navigator.MoveToFirstChild (), "#16");
112 Assert.AreEqual ("foo", navigator.Name, "#17");
113 Assert.IsTrue (navigator.MoveToFirst (), "#18");
114 Assert.AreEqual ("foo", navigator.Name, "#19");
115 Assert.IsTrue (navigator.MoveToFirstChild (), "#20");
116 Assert.AreEqual ("bar", navigator.Name, "#21");
117 Assert.IsTrue (navigator.MoveToNext (), "#22");
118 Assert.AreEqual ("baz", navigator.Name, "#23");
119 Assert.IsTrue (navigator.MoveToFirst (), "#24");
120 Assert.AreEqual ("bar", navigator.Name, "#25");
124 [Category ("NotDotNet")] // fails to differentiate document instances
125 public void MoveToAndIsSamePosition ()
127 var doc1 = XDocument.Parse ("<foo><bar /></foo>");
128 XPathNavigator navigator1a = doc1.FirstNode.CreateNavigator ();
129 XPathNavigator navigator1b = doc1.FirstNode.CreateNavigator ();
131 var doc2 = XDocument.Parse ("<foo><bar /></foo>");
132 XPathNavigator navigator2 = doc2.FirstNode.CreateNavigator ();
134 Assert.AreEqual ("foo", navigator1a.Name, "#1");
135 Assert.IsTrue (navigator1a.MoveToFirstChild (), "#2");
136 Assert.AreEqual ("bar", navigator1a.Name, "#3");
138 Assert.IsTrue (!navigator1b.IsSamePosition (navigator1a), "#4");
139 Assert.AreEqual ("foo", navigator1b.Name, "#5");
140 Assert.IsTrue (navigator1b.MoveTo (navigator1a), "#6");
141 Assert.IsTrue (navigator1b.IsSamePosition (navigator1a), "#7");
142 Assert.AreEqual ("bar", navigator1b.Name, "#8");
144 Assert.IsTrue (!navigator2.IsSamePosition (navigator1a), "#9");
145 Assert.AreEqual ("foo", navigator2.Name, "#10");
146 Assert.IsFalse (navigator2.MoveTo (navigator1a), "#11");
147 Assert.AreEqual ("foo", navigator2.Name, "#12");
151 public void AttributeNavigation ()
153 navigator = XDocument.Parse ("<foo bar='baz' quux='quuux' />").FirstNode.CreateNavigator ();
155 Assert.AreEqual (XPathNodeType.Element, navigator.NodeType, "#1");
156 Assert.AreEqual ("foo", navigator.Name, "#2");
157 Assert.IsTrue (navigator.MoveToFirstAttribute (), "#3");
158 Assert.AreEqual (XPathNodeType.Attribute, navigator.NodeType, "#4");
159 Assert.AreEqual ("bar", navigator.Name, "#5");
160 Assert.AreEqual ("baz", navigator.Value, "#6");
161 Assert.IsTrue (navigator.MoveToNextAttribute (), "#7");
162 Assert.AreEqual (XPathNodeType.Attribute, navigator.NodeType, "#8");
163 Assert.AreEqual ("quux", navigator.Name, "#9");
164 Assert.AreEqual ("quuux", navigator.Value, "#10");
168 public void ElementAndRootValues()
170 navigator = XDocument.Parse ("<foo><bar>baz</bar><quux>quuux</quux></foo>").FirstNode.CreateNavigator ();
172 Assert.AreEqual (XPathNodeType.Element, navigator.NodeType, "#1");
173 Assert.AreEqual ("foo", navigator.Name, "#2");
174 //Assert.AreEqual ("bazquuux", navigator.Value, "#3");
176 navigator.MoveToRoot ();
177 //Assert.AreEqual ("bazquuux", navigator.Value, "#4");
181 public void DocumentWithXmlDeclaration ()
183 navigator = XDocument.Parse ("<?xml version=\"1.0\" standalone=\"yes\"?><Root><foo>bar</foo></Root>").CreateNavigator ();
185 navigator.MoveToRoot ();
186 navigator.MoveToFirstChild ();
187 Assert.AreEqual (XPathNodeType.Element, navigator.NodeType, "#1");
188 Assert.AreEqual ("Root", navigator.Name, "#2");
192 public void DocumentWithProcessingInstruction ()
194 navigator = XDocument.Parse ("<?xml-stylesheet href='foo.xsl' type='text/xsl' ?><foo />").CreateNavigator ();
196 Assert.IsTrue (navigator.MoveToFirstChild ());
197 Assert.AreEqual (XPathNodeType.ProcessingInstruction, navigator.NodeType, "#1");
198 Assert.AreEqual ("xml-stylesheet", navigator.Name, "#2");
200 XPathNodeIterator iter = navigator.SelectChildren (XPathNodeType.Element);
201 Assert.AreEqual (0, iter.Count, "#3");
206 public void SelectFromOrphan ()
208 // SelectSingleNode () from node without parent.
209 XmlDocument doc = new XmlDocument ();
210 doc.LoadXml ("<foo><include id='original' /></foo>");
212 XmlNode node = doc.CreateElement ("child");
213 node.InnerXml = "<include id='new' />";
215 XmlNode new_include = node.SelectSingleNode ("//include");
216 Assert.AreEqual ("<include id=\"new\" />", new_include.OuterXml, "#1");
218 // In this case 'node2' has parent 'node'
219 doc = new XmlDocument ();
220 doc.LoadXml ("<foo><include id='original' /></foo>");
222 node = doc.CreateElement ("child");
223 XmlNode node2 = doc.CreateElement ("grandchild");
224 node.AppendChild (node2);
225 node2.InnerXml = "<include id='new' />";
227 new_include = node2.SelectSingleNode ("/");
228 Assert.AreEqual ("<child><grandchild><include id=\"new\" /></grandchild></child>",
229 new_include.OuterXml, "#2");
234 [ExpectedException (typeof (NotSupportedException))]
235 public void XPathDocumentMoveToId ()
237 string dtd = "<!DOCTYPE root [<!ELEMENT root EMPTY><!ATTLIST root id ID #REQUIRED>]>";
238 string xml = dtd + "<root id='aaa'/>";
239 XPathNavigator nav = navigator = XDocument.Parse (xml).CreateNavigator ();
240 Assert.IsTrue (nav.MoveToId ("aaa"), "ctor() from TextReader");
242 XmlValidatingReader xvr = new XmlValidatingReader (xml, XmlNodeType.Document, null);
243 nav = new XPathDocument (xvr).CreateNavigator ();
244 nav.MoveToId ("aaa"); // it does not support this method
248 public void SignificantWhitespaceConstruction ()
250 string xml = @"<root>
251 <child xml:space='preserve'> <!-- --> </child>
252 <child xml:space='preserve'> </child>
254 XPathNavigator nav = XDocument.Parse (xml, LoadOptions.PreserveWhitespace).CreateNavigator ();
255 nav.MoveToFirstChild ();
256 nav.MoveToFirstChild ();
257 Assert.AreEqual (XPathNodeType.Text, nav.NodeType, "#1"); // not Whitespace but Text
259 nav.MoveToFirstChild ();
260 Assert.AreEqual (XPathNodeType.Text, nav.NodeType, "#2"); // not SignificantWhitespace but Text
264 public void VariableReference ()
266 XPathDocument xpd = new XPathDocument (
267 new StringReader ("<root>sample text</root>"));
268 XPathNavigator nav = xpd.CreateNavigator ();
270 XPathExpression expr = nav.Compile ("foo(string(.),$idx)");
271 XsltArgumentList args = new XsltArgumentList ();
272 args.AddParam ("idx", "", 5);
273 MyContext ctx = new MyContext (nav.NameTable as NameTable, args);
274 ctx.AddNamespace ("x", "urn:foo");
276 expr.SetContext (ctx);
278 XPathNodeIterator iter = nav.Select ("/root");
280 Assert.AreEqual ("e", iter.Current.Evaluate (expr), "#1");
283 class MyContext : XsltContext
285 XsltArgumentList args;
287 public MyContext (NameTable nt, XsltArgumentList args)
293 public override IXsltContextFunction ResolveFunction (
294 string prefix, string name, XPathResultType [] argtypes)
297 return new MyFunction (argtypes);
301 public override IXsltContextVariable ResolveVariable (string prefix, string name)
303 return new MyVariable (name);
306 public override bool PreserveWhitespace (XPathNavigator nav)
311 public override int CompareDocument (string uri1, string uri2)
313 return String.CompareOrdinal (uri1, uri2);
316 public override bool Whitespace {
317 get { return false; }
320 public object GetParam (string name, string ns)
322 return args.GetParam (name, ns);
326 public class MyFunction : IXsltContextFunction
328 XPathResultType [] argtypes;
330 public MyFunction (XPathResultType [] argtypes)
332 this.argtypes = argtypes;
335 public XPathResultType [] ArgTypes {
336 get { return argtypes; }
347 public XPathResultType ReturnType {
348 get { return XPathResultType.String; }
351 public object Invoke (XsltContext xsltContext,
352 object [] args, XPathNavigator instanceContext)
354 return ((string) args [0]) [(int) (double) args [1]].ToString ();
358 public class MyVariable : IXsltContextVariable
362 public MyVariable (string name)
367 public object Evaluate (XsltContext ctx)
369 return ((MyContext) ctx).GetParam (name, String.Empty);
372 public bool IsLocal {
373 get { return false; }
376 public bool IsParam {
377 get { return false; }
380 public XPathResultType VariableType {
381 get { return XPathResultType.Any; }
386 public void TextMatchesWhitespace ()
388 string xml = "<root><ws> </ws><sws xml:space='preserve'> </sws></root>";
389 XmlDocument doc = new XmlDocument ();
390 doc.PreserveWhitespace = true;
392 XPathNavigator nav = doc.CreateNavigator ();
393 nav.MoveToFirstChild (); // root
394 nav.MoveToFirstChild (); // ws
395 nav.MoveToFirstChild (); // ' '
396 Assert.AreEqual (true, nav.Matches ("text()"), "#1");
398 nav.MoveToNext (); // sws
399 nav.MoveToFirstChild (); // ' '
400 Assert.AreEqual (true, nav.Matches ("text()"), "#2");
404 public void Bug456103 ()
406 XmlDocument doc = new XmlDocument ();
407 doc.LoadXml ("<root><X/></root>");
409 XPathNavigator nav = doc.DocumentElement.CreateNavigator ();
410 // ".//*" does not reproduce the bug.
411 var i = nav.Select ("descendant::*");
413 // without this call to get_Count() the bug does not reproduce.
414 Assert.AreEqual (1, i.Count, "#1");
416 Assert.IsTrue (i.MoveNext (), "#2");
421 public void ValueAsBoolean ()
423 string xml = "<root>1</root>";
424 XmlDocument doc = new XmlDocument ();
426 XPathNavigator nav = doc.CreateNavigator ();
427 nav.MoveToFirstChild ();
428 Assert.AreEqual (true, nav.ValueAsBoolean, "#1");
429 nav.MoveToFirstChild ();
430 Assert.AreEqual (true, nav.ValueAsBoolean, "#2");
434 [ExpectedException (typeof (FormatException))]
435 public void ValueAsBooleanFail ()
437 string xml = "<root>1.0</root>";
438 XmlDocument doc = new XmlDocument ();
440 XPathNavigator nav = doc.CreateNavigator ();
441 nav.MoveToFirstChild ();
442 bool i = nav.ValueAsBoolean;
446 public void ValueAsDateTime ()
448 DateTime time = new DateTime (2005, 12, 13);
449 string xml = "<root>2005-12-13</root>";
450 XmlDocument doc = new XmlDocument ();
452 XPathNavigator nav = doc.CreateNavigator ();
453 nav.MoveToFirstChild ();
454 Assert.AreEqual (time, nav.ValueAsDateTime, "#1");
455 nav.MoveToFirstChild ();
456 Assert.AreEqual (time, nav.ValueAsDateTime, "#2");
460 [ExpectedException (typeof (FormatException))]
461 public void ValueAsDateTimeFail ()
463 string xml = "<root>dating time</root>";
464 XmlDocument doc = new XmlDocument ();
466 XPathNavigator nav = doc.CreateNavigator ();
467 nav.MoveToFirstChild ();
468 DateTime time = nav.ValueAsDateTime;
472 public void ValueAsDouble ()
474 string xml = "<root>3.14159265359</root>";
475 XmlDocument doc = new XmlDocument ();
477 XPathNavigator nav = doc.CreateNavigator ();
478 nav.MoveToFirstChild ();
479 Assert.AreEqual (3.14159265359, nav.ValueAsDouble, "#1");
480 nav.MoveToFirstChild ();
481 Assert.AreEqual (3.14159265359, nav.ValueAsDouble, "#2");
485 [ExpectedException (typeof (FormatException))]
486 public void ValueAsDoubleFail ()
488 string xml = "<root>Double Dealer</root>";
489 XmlDocument doc = new XmlDocument ();
491 XPathNavigator nav = doc.CreateNavigator ();
492 nav.MoveToFirstChild ();
493 Double dealer = nav.ValueAsDouble;
497 public void ValueAsInt ()
499 string xml = "<root>1</root>";
500 XmlDocument doc = new XmlDocument ();
502 XPathNavigator nav = doc.CreateNavigator ();
503 nav.MoveToFirstChild ();
504 Assert.AreEqual (1, nav.ValueAsInt, "#1");
505 nav.MoveToFirstChild ();
506 Assert.AreEqual (1, nav.ValueAsInt, "#2");
510 // Here, it seems to be using XQueryConvert (whatever was called)
511 [ExpectedException (typeof (FormatException))]
512 public void ValueAsIntFail ()
514 string xml = "<root>1.0</root>";
515 XmlDocument doc = new XmlDocument ();
517 XPathNavigator nav = doc.CreateNavigator ();
518 nav.MoveToFirstChild ();
519 int i = nav.ValueAsInt;
523 public void ValueAsLong ()
525 string xml = "<root>10000000000000000</root>";
526 XmlDocument doc = new XmlDocument ();
528 XPathNavigator nav = doc.CreateNavigator ();
529 nav.MoveToFirstChild ();
530 Assert.AreEqual (10000000000000000, nav.ValueAsLong, "#1");
531 nav.MoveToFirstChild ();
532 Assert.AreEqual (10000000000000000, nav.ValueAsLong, "#2");
536 // Here, it seems to be using XQueryConvert (whatever was called)
537 [ExpectedException (typeof (FormatException))]
538 public void ValueAsLongFail ()
540 string xml = "<root>0x10000000000000000</root>";
541 XmlDocument doc = new XmlDocument ();
543 XPathNavigator nav = doc.CreateNavigator ();
544 nav.MoveToFirstChild ();
545 long l = nav.ValueAsLong;
549 public void InnerXmlText ()
551 StringReader sr = new StringReader ("<Abc><Foo>Hello</Foo></Abc>");
552 XPathDocument doc = new XPathDocument (sr);
553 XPathNavigator nav = doc.CreateNavigator ();
554 XPathNodeIterator iter = nav.Select ("/Abc/Foo");
556 Assert.AreEqual ("Hello", iter.Current.InnerXml, "#1");
557 Assert.AreEqual ("<Foo>Hello</Foo>", iter.Current.OuterXml, "#2");
558 iter = nav.Select ("/Abc/Foo/text()");
560 Assert.AreEqual (String.Empty, iter.Current.InnerXml, "#3");
561 Assert.AreEqual ("Hello", iter.Current.OuterXml, "#4");
565 public void InnerXmlAttribute ()
567 StringReader sr = new StringReader ("<Abc><Foo attr='val1'/></Abc>");
568 XPathDocument doc = new XPathDocument (sr);
569 XPathNavigator nav = doc.CreateNavigator ();
571 XPathNodeIterator iter = nav.Select ("/Abc/Foo/@attr");
573 Assert.AreEqual ("val1", iter.Current.InnerXml, "#1");
577 public void InnerXmlTextEscape ()
579 StringReader sr = new StringReader ("<Abc><Foo>Hello<\r\nInnerXml</Foo></Abc>");
580 XPathDocument doc = new XPathDocument (sr);
581 XPathNavigator nav = doc.CreateNavigator ();
582 XPathNodeIterator iter = nav.Select ("/Abc/Foo");
584 Assert.AreEqual ("Hello<\r\nInnerXml", iter.Current.InnerXml, "#1");
585 Assert.AreEqual ("<Foo>Hello<\r\nInnerXml</Foo>", iter.Current.OuterXml, "#2");
586 iter = nav.Select ("/Abc/Foo/text()");
588 Assert.AreEqual (String.Empty, iter.Current.InnerXml, "#3");
589 Assert.AreEqual ("Hello<\r\nInnerXml", iter.Current.OuterXml, "#4");
593 [Category ("NotDotNet")] // .NET bug; it should escape value
594 public void InnerXmlAttributeEscape ()
596 StringReader sr = new StringReader ("<Abc><Foo attr='val"1 >'/></Abc>");
597 XPathDocument doc = new XPathDocument (sr);
598 XPathNavigator nav = doc.CreateNavigator ();
600 XPathNodeIterator iter = nav.Select ("/Abc/Foo/@attr");
602 Assert.AreEqual ("val"1 >", iter.Current.InnerXml, "#1");
606 public void WriterAttributePrefix ()
608 XmlDocument doc = new XmlDocument ();
609 XmlWriter w = doc.CreateNavigator ().AppendChild ();
610 w.WriteStartElement ("foo");
611 w.WriteAttributeString ("xmlns", "x", "http://www.w3.org/2000/xmlns/", "urn:foo");
612 Assert.AreEqual ("x", w.LookupPrefix ("urn:foo"), "#0");
613 w.WriteStartElement (null, "bar", "urn:foo");
614 w.WriteAttributeString (null, "ext", "urn:foo", "bah");
615 w.WriteEndElement ();
616 w.WriteEndElement ();
618 Assert.AreEqual ("x", doc.FirstChild.FirstChild.Prefix, "#1");
619 Assert.AreEqual ("x", doc.FirstChild.FirstChild.Attributes [0].Prefix, "#2");
623 public void ValueAs ()
625 string xml = "<root>1</root>";
626 XPathNavigator nav = new XPathDocument (XmlReader.Create (new StringReader (xml))).CreateNavigator ();
627 nav.MoveToFirstChild ();
628 nav.MoveToFirstChild ();
629 Assert.AreEqual ("1", nav.ValueAs (typeof (string), null), "#1");
630 Assert.AreEqual (1, nav.ValueAs (typeof (int), null), "#2");
634 public void MoveToFollowingNodeTypeAll ()
636 XmlDocument doc = new XmlDocument ();
637 doc.LoadXml ("<root><child/><child2/></root>");
638 XPathNavigator nav = doc.CreateNavigator ();
639 Assert.IsTrue (nav.MoveToFollowing (XPathNodeType.All), "#1");
640 Assert.IsTrue (nav.MoveToFollowing (XPathNodeType.All), "#2");
641 Assert.AreEqual ("child", nav.LocalName, "#3");
642 Assert.IsTrue (nav.MoveToNext (XPathNodeType.All), "#4");
643 Assert.AreEqual ("child2", nav.LocalName, "#5");
646 [Test] // bug #324606.
647 public void XPathDocumentFromSubtreeNodes ()
649 string xml = "<root><child1><nest1><nest2>hello!</nest2></nest1></child1><child2/><child3/></root>";
650 XmlReader r = new XmlTextReader (new StringReader (xml));
652 if (r.Name == "child1")
655 XPathDocument d = new XPathDocument (r);
656 XPathNavigator n = d.CreateNavigator ();
657 string result = @"<child1>
659 <nest2>hello!</nest2>
664 Assert.AreEqual (result, n.OuterXml.Replace ("\r\n", "\n"), "#1");
667 [Test] // bug #376191
668 public void InnerXmlOnRoot ()
670 string xml = @"<test>
676 navigator = XDocument.Parse (xml).CreateNavigator ();
677 Assert.AreEqual (navigator.OuterXml, navigator.InnerXml, "#1");
680 [Test] // bug #515136
681 public void SelectChildrenEmpty ()
683 string s = "<root> <foo> </foo> </root>";
684 XPathNavigator nav = XDocument.Parse (s).CreateNavigator ();
685 XPathNodeIterator it = nav.SelectChildren (String.Empty, String.Empty);
686 foreach (XPathNavigator xpn in it)
688 Assert.Fail ("no selection");