2
0

XmlReaderCommonTests.cs 22 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889
  1. //
  2. // System.Xml.XmlReaderCommonTests
  3. //
  4. // Authors:
  5. // Atsushi Enomoto <[email protected]>
  6. //
  7. // (C) 2003 Atsushi Enomoto
  8. // Note: Most of testcases are moved from XmlTextReaderTests.cs and
  9. // XmlNodeReaderTests.cs.
  10. //
  11. using System;
  12. using System.IO;
  13. using System.Text;
  14. using System.Xml;
  15. using NUnit.Framework;
  16. namespace MonoTests.System.Xml
  17. {
  18. [TestFixture]
  19. public class XmlReaderTests
  20. {
  21. [SetUp]
  22. public void GetReady ()
  23. {
  24. document = new XmlDocument ();
  25. document.LoadXml (xml1);
  26. }
  27. XmlDocument document;
  28. const string xml1 = "<root attr1='value1'><child /></root>";
  29. const string xml2 = "<root><foo/><bar>test.</bar></root>";
  30. const string xml3 = "<root> test of <b>mixed</b> string.<![CDATA[ cdata string.]]></root>";
  31. const string xml4 = "<root>test of <b>mixed</b> string.</root>";
  32. XmlTextReader xtr;
  33. XmlNodeReader xnr;
  34. // copy from XmlTextReaderTests
  35. private void AssertStartDocument (XmlReader xmlReader)
  36. {
  37. Assertion.Assert (xmlReader.ReadState == ReadState.Initial);
  38. Assertion.Assert (xmlReader.NodeType == XmlNodeType.None);
  39. Assertion.Assert (xmlReader.Depth == 0);
  40. Assertion.Assert (!xmlReader.EOF);
  41. }
  42. private void AssertNode (
  43. XmlReader xmlReader,
  44. XmlNodeType nodeType,
  45. int depth,
  46. bool isEmptyElement,
  47. string name,
  48. string prefix,
  49. string localName,
  50. string namespaceURI,
  51. string value,
  52. int attributeCount)
  53. {
  54. Assertion.Assert ("Read() return value", xmlReader.Read ());
  55. Assertion.Assert ("ReadState", xmlReader.ReadState == ReadState.Interactive);
  56. Assertion.Assert ("!EOF", !xmlReader.EOF);
  57. AssertNodeValues (xmlReader, nodeType, depth, isEmptyElement, name, prefix, localName, namespaceURI, value, attributeCount);
  58. }
  59. private void AssertNodeValues (
  60. XmlReader xmlReader,
  61. XmlNodeType nodeType,
  62. int depth,
  63. bool isEmptyElement,
  64. string name,
  65. string prefix,
  66. string localName,
  67. string namespaceURI,
  68. string value,
  69. int attributeCount)
  70. {
  71. Assertion.AssertEquals ("NodeType", nodeType, xmlReader.NodeType);
  72. Assertion.AssertEquals ("Depth", depth, xmlReader.Depth);
  73. Assertion.AssertEquals ("IsEmptyElement", isEmptyElement, xmlReader.IsEmptyElement);
  74. Assertion.AssertEquals ("name", name, xmlReader.Name);
  75. Assertion.AssertEquals ("prefix", prefix, xmlReader.Prefix);
  76. Assertion.AssertEquals ("localName", localName, xmlReader.LocalName);
  77. Assertion.AssertEquals ("namespaceURI", namespaceURI, xmlReader.NamespaceURI);
  78. Assertion.AssertEquals ("hasValue", (value != String.Empty), xmlReader.HasValue);
  79. Assertion.AssertEquals ("Value", value, xmlReader.Value);
  80. Assertion.AssertEquals ("hasAttributes", attributeCount > 0, xmlReader.HasAttributes);
  81. Assertion.AssertEquals ("attributeCount", attributeCount, xmlReader.AttributeCount);
  82. }
  83. private void AssertAttribute (
  84. XmlReader xmlReader,
  85. string name,
  86. string prefix,
  87. string localName,
  88. string namespaceURI,
  89. string value)
  90. {
  91. Assertion.AssertEquals ("value", value, xmlReader [name]);
  92. Assertion.Assert (xmlReader.GetAttribute (name) == value);
  93. if (namespaceURI != String.Empty) {
  94. Assertion.Assert (xmlReader[localName, namespaceURI] == value);
  95. Assertion.Assert (xmlReader.GetAttribute (localName, namespaceURI) == value);
  96. }
  97. }
  98. private void AssertEndDocument (XmlReader xmlReader)
  99. {
  100. Assertion.Assert ("could read", !xmlReader.Read ());
  101. Assertion.AssertEquals ("NodeType is not XmlNodeType.None", XmlNodeType.None, xmlReader.NodeType);
  102. Assertion.AssertEquals ("Depth is not 0", 0, xmlReader.Depth);
  103. Assertion.AssertEquals ("ReadState is not ReadState.EndOfFile", ReadState.EndOfFile, xmlReader.ReadState);
  104. Assertion.Assert ("not EOF", xmlReader.EOF);
  105. xmlReader.Close ();
  106. Assertion.AssertEquals ("ReadState is not ReadState.Cosed", ReadState.Closed, xmlReader.ReadState);
  107. }
  108. private delegate void TestMethod (XmlReader reader);
  109. private void RunTest (string xml, TestMethod method)
  110. {
  111. xtr = new XmlTextReader (new StringReader (xml));
  112. try {
  113. method (xtr);
  114. } catch (AssertionException ex) {
  115. throw new AssertionException ("XmlTextReader failed: " + ex.Message, ex);
  116. }
  117. document.LoadXml (xml);
  118. xnr = new XmlNodeReader (document);
  119. try {
  120. method (xnr);
  121. } catch (AssertionException ex) {
  122. throw new AssertionException ("XmlNodeReader failed: " + ex.Message, ex);
  123. }
  124. }
  125. [Test]
  126. public void InitialState ()
  127. {
  128. RunTest (xml1, new TestMethod (InitialState));
  129. }
  130. private void InitialState (XmlReader reader)
  131. {
  132. Assertion.AssertEquals ("Depth", 0, reader.Depth);
  133. Assertion.AssertEquals ("EOF", false, reader.EOF);
  134. Assertion.AssertEquals ("HasValue", false, reader.HasValue);
  135. Assertion.AssertEquals ("IsEmptyElement", false, reader.IsEmptyElement);
  136. Assertion.AssertEquals ("LocalName", String.Empty, reader.LocalName);
  137. Assertion.AssertEquals ("NodeType", XmlNodeType.None, reader.NodeType);
  138. Assertion.AssertEquals ("ReadState", ReadState.Initial, reader.ReadState);
  139. }
  140. [Test]
  141. public void Read ()
  142. {
  143. RunTest (xml1, new TestMethod (Read));
  144. }
  145. public void Read (XmlReader reader)
  146. {
  147. reader.Read ();
  148. Assertion.AssertEquals ("<root>.NodeType", XmlNodeType.Element, reader.NodeType);
  149. Assertion.AssertEquals ("<root>.Name", "root", reader.Name);
  150. Assertion.AssertEquals ("<root>.ReadState", ReadState.Interactive, reader.ReadState);
  151. Assertion.AssertEquals ("<root>.Depth", 0, reader.Depth);
  152. // move to 'child'
  153. reader.Read ();
  154. Assertion.AssertEquals ("<child/>.Depth", 1, reader.Depth);
  155. Assertion.AssertEquals ("<child/>.NodeType", XmlNodeType.Element, reader.NodeType);
  156. Assertion.AssertEquals ("<child/>.Name", "child", reader.Name);
  157. reader.Read ();
  158. Assertion.AssertEquals ("</root>.Depth", 0, reader.Depth);
  159. Assertion.AssertEquals ("</root>.NodeType", XmlNodeType.EndElement, reader.NodeType);
  160. Assertion.AssertEquals ("</root>.Name", "root", reader.Name);
  161. reader.Read ();
  162. Assertion.AssertEquals ("end.EOF", true, reader.EOF);
  163. Assertion.AssertEquals ("end.NodeType", XmlNodeType.None, reader.NodeType);
  164. }
  165. [Test]
  166. public void ReadEmptyElement ()
  167. {
  168. RunTest (xml2, new TestMethod (ReadEmptyElement));
  169. }
  170. public void ReadEmptyElement (XmlReader reader)
  171. {
  172. reader.Read (); // root
  173. Assertion.AssertEquals (false, reader.IsEmptyElement);
  174. reader.Read (); // foo
  175. Assertion.AssertEquals ("foo", reader.Name);
  176. Assertion.AssertEquals (true, reader.IsEmptyElement);
  177. reader.Read (); // bar
  178. Assertion.AssertEquals ("bar", reader.Name);
  179. Assertion.AssertEquals (false, reader.IsEmptyElement);
  180. }
  181. [Test]
  182. public void ReadStringFromElement ()
  183. {
  184. RunTest (xml3, new TestMethod (ReadStringFromElement));
  185. }
  186. public void ReadStringFromElement (XmlReader reader)
  187. {
  188. // Note: ReadString() test works only when the reader is
  189. // positioned at the container element.
  190. // In case the reader is positioned at the first
  191. // character node, XmlTextReader and XmlNodeReader works
  192. // different!!
  193. reader.Read ();
  194. string s = reader.ReadString ();
  195. Assertion.AssertEquals ("readString.1.ret_val", " test of ", s);
  196. Assertion.AssertEquals ("readString.1.Name", "b", reader.Name);
  197. s = reader.ReadString ();
  198. Assertion.AssertEquals ("readString.2.ret_val", "mixed", s);
  199. Assertion.AssertEquals ("readString.2.NodeType", XmlNodeType.EndElement, reader.NodeType);
  200. s = reader.ReadString (); // never proceeds.
  201. Assertion.AssertEquals ("readString.3.ret_val", String.Empty, s);
  202. Assertion.AssertEquals ("readString.3.NodeType", XmlNodeType.EndElement, reader.NodeType);
  203. reader.Read ();
  204. Assertion.AssertEquals ("readString.4.NodeType", XmlNodeType.Text, reader.NodeType);
  205. Assertion.AssertEquals ("readString.4.Value", " string.", reader.Value);
  206. s = reader.ReadString (); // reads the same Text node.
  207. Assertion.AssertEquals ("readString.5.ret_val", " string. cdata string.", s);
  208. Assertion.AssertEquals ("readString.5.NodeType", XmlNodeType.EndElement, reader.NodeType);
  209. }
  210. [Test]
  211. public void ReadInnerXml ()
  212. {
  213. RunTest (xml4, new TestMethod (ReadInnerXml));
  214. }
  215. public void ReadInnerXml (XmlReader reader)
  216. {
  217. reader.Read ();
  218. Assertion.AssertEquals ("initial.ReadState", ReadState.Interactive, reader.ReadState);
  219. Assertion.AssertEquals ("initial.EOF", false, reader.EOF);
  220. Assertion.AssertEquals ("initial.NodeType", XmlNodeType.Element, reader.NodeType);
  221. }
  222. [Test]
  223. public void EmptyElement ()
  224. {
  225. RunTest ("<foo/>", new TestMethod (EmptyElement));
  226. }
  227. public void EmptyElement (XmlReader xmlReader)
  228. {
  229. AssertStartDocument (xmlReader);
  230. AssertNode (
  231. xmlReader, // xmlReader
  232. XmlNodeType.Element, // nodeType
  233. 0, // depth
  234. true, // isEmptyElement
  235. "foo", // name
  236. String.Empty, // prefix
  237. "foo", // localName
  238. String.Empty, // namespaceURI
  239. String.Empty, // value
  240. 0 // attributeCount
  241. );
  242. AssertEndDocument (xmlReader);
  243. }
  244. [Test]
  245. public void EmptyElementWithStartAndEndTag ()
  246. {
  247. string xml = "<foo></foo>";
  248. RunTest (xml,
  249. new TestMethod (EmptyElementWithStartAndEndTag));
  250. }
  251. public void EmptyElementWithStartAndEndTag (XmlReader xmlReader)
  252. {
  253. AssertStartDocument (xmlReader);
  254. AssertNode (
  255. xmlReader, // xmlReader
  256. XmlNodeType.Element, // nodeType
  257. 0, //depth
  258. false, // isEmptyElement
  259. "foo", // name
  260. String.Empty, // prefix
  261. "foo", // localName
  262. String.Empty, // namespaceURI
  263. String.Empty, // value
  264. 0 // attributeCount
  265. );
  266. AssertNode (
  267. xmlReader, // xmlReader
  268. XmlNodeType.EndElement, // nodeType
  269. 0, //depth
  270. false, // isEmptyElement
  271. "foo", // name
  272. String.Empty, // prefix
  273. "foo", // localName
  274. String.Empty, // namespaceURI
  275. String.Empty, // value
  276. 0 // attributeCount
  277. );
  278. AssertEndDocument (xmlReader);
  279. }
  280. [Test]
  281. public void NestedEmptyTag ()
  282. {
  283. string xml = "<foo><bar/></foo>";
  284. RunTest (xml, new TestMethod (NestedEmptyTag));
  285. }
  286. public void NestedEmptyTag (XmlReader xmlReader)
  287. {
  288. AssertStartDocument (xmlReader);
  289. AssertNode (
  290. xmlReader, // xmlReader
  291. XmlNodeType.Element, // nodeType
  292. 0, //depth
  293. false, // isEmptyElement
  294. "foo", // name
  295. String.Empty, // prefix
  296. "foo", // localName
  297. String.Empty, // namespaceURI
  298. String.Empty, // value
  299. 0 // attributeCount
  300. );
  301. AssertNode (
  302. xmlReader, // xmlReader
  303. XmlNodeType.Element, // nodeType
  304. 1, //depth
  305. true, // isEmptyElement
  306. "bar", // name
  307. String.Empty, // prefix
  308. "bar", // localName
  309. String.Empty, // namespaceURI
  310. String.Empty, // value
  311. 0 // attributeCount
  312. );
  313. AssertNode (
  314. xmlReader, // xmlReader
  315. XmlNodeType.EndElement, // nodeType
  316. 0, //depth
  317. false, // isEmptyElement
  318. "foo", // name
  319. String.Empty, // prefix
  320. "foo", // localName
  321. String.Empty, // namespaceURI
  322. String.Empty, // value
  323. 0 // attributeCount
  324. );
  325. AssertEndDocument (xmlReader);
  326. }
  327. [Test]
  328. public void NestedText ()
  329. {
  330. string xml = "<foo>bar</foo>";
  331. RunTest (xml, new TestMethod (NestedText));
  332. }
  333. public void NestedText (XmlReader xmlReader)
  334. {
  335. AssertStartDocument (xmlReader);
  336. AssertNode (
  337. xmlReader, // xmlReader
  338. XmlNodeType.Element, // nodeType
  339. 0, //depth
  340. false, // isEmptyElement
  341. "foo", // name
  342. String.Empty, // prefix
  343. "foo", // localName
  344. String.Empty, // namespaceURI
  345. String.Empty, // value
  346. 0 // attributeCount
  347. );
  348. AssertNode (
  349. xmlReader, // xmlReader
  350. XmlNodeType.Text, // nodeType
  351. 1, //depth
  352. false, // isEmptyElement
  353. String.Empty, // name
  354. String.Empty, // prefix
  355. String.Empty, // localName
  356. String.Empty, // namespaceURI
  357. "bar", // value
  358. 0 // attributeCount
  359. );
  360. AssertNode (
  361. xmlReader, // xmlReader
  362. XmlNodeType.EndElement, // nodeType
  363. 0, //depth
  364. false, // isEmptyElement
  365. "foo", // name
  366. String.Empty, // prefix
  367. "foo", // localName
  368. String.Empty, // namespaceURI
  369. String.Empty, // value
  370. 0 // attributeCount
  371. );
  372. AssertEndDocument (xmlReader);
  373. }
  374. [Test]
  375. public void EmptyElementWithAttribute ()
  376. {
  377. string xml = @"<foo bar=""baz""/>";
  378. RunTest (xml, new TestMethod (EmptyElementWithAttribute));
  379. }
  380. public void EmptyElementWithAttribute (XmlReader xmlReader)
  381. {
  382. AssertStartDocument (xmlReader);
  383. AssertNode (
  384. xmlReader, // xmlReader
  385. XmlNodeType.Element, // nodeType
  386. 0, //depth
  387. true, // isEmptyElement
  388. "foo", // name
  389. String.Empty, // prefix
  390. "foo", // localName
  391. String.Empty, // namespaceURI
  392. String.Empty, // value
  393. 1 // attributeCount
  394. );
  395. AssertAttribute (
  396. xmlReader, // xmlReader
  397. "bar", // name
  398. String.Empty, // prefix
  399. "bar", // localName
  400. String.Empty, // namespaceURI
  401. "baz" // value
  402. );
  403. AssertEndDocument (xmlReader);
  404. }
  405. [Test]
  406. public void StartAndEndTagWithAttribute ()
  407. {
  408. string xml = @"<foo bar='baz'></foo>";
  409. RunTest (xml, new TestMethod (StartAndEndTagWithAttribute));
  410. }
  411. public void StartAndEndTagWithAttribute (XmlReader xmlReader)
  412. {
  413. AssertStartDocument (xmlReader);
  414. AssertNode (
  415. xmlReader, // xmlReader
  416. XmlNodeType.Element, // nodeType
  417. 0, //depth
  418. false, // isEmptyElement
  419. "foo", // name
  420. String.Empty, // prefix
  421. "foo", // localName
  422. String.Empty, // namespaceURI
  423. String.Empty, // value
  424. 1 // attributeCount
  425. );
  426. AssertAttribute (
  427. xmlReader, // xmlReader
  428. "bar", // name
  429. String.Empty, // prefix
  430. "bar", // localName
  431. String.Empty, // namespaceURI
  432. "baz" // value
  433. );
  434. AssertNode (
  435. xmlReader, // xmlReader
  436. XmlNodeType.EndElement, // nodeType
  437. 0, //depth
  438. false, // isEmptyElement
  439. "foo", // name
  440. String.Empty, // prefix
  441. "foo", // localName
  442. String.Empty, // namespaceURI
  443. String.Empty, // value
  444. 0 // attributeCount
  445. );
  446. AssertEndDocument (xmlReader);
  447. }
  448. [Test]
  449. public void EmptyElementWithTwoAttributes ()
  450. {
  451. string xml = @"<foo bar=""baz"" quux='quuux'/>";
  452. RunTest (xml, new TestMethod (EmptyElementWithTwoAttributes ));
  453. }
  454. public void EmptyElementWithTwoAttributes (XmlReader xmlReader)
  455. {
  456. AssertStartDocument (xmlReader);
  457. AssertNode (
  458. xmlReader, // xmlReader
  459. XmlNodeType.Element, // nodeType
  460. 0, //depth
  461. true, // isEmptyElement
  462. "foo", // name
  463. String.Empty, // prefix
  464. "foo", // localName
  465. String.Empty, // namespaceURI
  466. String.Empty, // value
  467. 2 // attributeCount
  468. );
  469. AssertAttribute (
  470. xmlReader, // xmlReader
  471. "bar", // name
  472. String.Empty, // prefix
  473. "bar", // localName
  474. String.Empty, // namespaceURI
  475. "baz" // value
  476. );
  477. AssertAttribute (
  478. xmlReader, // xmlReader
  479. "quux", // name
  480. String.Empty, // prefix
  481. "quux", // localName
  482. String.Empty, // namespaceURI
  483. "quuux" // value
  484. );
  485. AssertEndDocument (xmlReader);
  486. }
  487. [Test]
  488. public void ProcessingInstructionBeforeDocumentElement ()
  489. {
  490. string xml = "<?foo bar?><baz/>";
  491. RunTest (xml, new TestMethod (ProcessingInstructionBeforeDocumentElement));
  492. }
  493. public void ProcessingInstructionBeforeDocumentElement (XmlReader xmlReader)
  494. {
  495. AssertStartDocument (xmlReader);
  496. AssertNode (
  497. xmlReader, // xmlReader
  498. XmlNodeType.ProcessingInstruction, // nodeType
  499. 0, //depth
  500. false, // isEmptyElement
  501. "foo", // name
  502. String.Empty, // prefix
  503. "foo", // localName
  504. String.Empty, // namespaceURI
  505. "bar", // value
  506. 0 // attributeCount
  507. );
  508. AssertNode (
  509. xmlReader, // xmlReader
  510. XmlNodeType.Element, // nodeType
  511. 0, //depth
  512. true, // isEmptyElement
  513. "baz", // name
  514. String.Empty, // prefix
  515. "baz", // localName
  516. String.Empty, // namespaceURI
  517. String.Empty, // value
  518. 0 // attributeCount
  519. );
  520. AssertEndDocument (xmlReader);
  521. }
  522. [Test]
  523. public void CommentBeforeDocumentElement ()
  524. {
  525. string xml = "<!--foo--><bar/>";
  526. RunTest (xml, new TestMethod (CommentBeforeDocumentElement));
  527. }
  528. public void CommentBeforeDocumentElement (XmlReader xmlReader)
  529. {
  530. AssertStartDocument (xmlReader);
  531. AssertNode (
  532. xmlReader, // xmlReader
  533. XmlNodeType.Comment, // nodeType
  534. 0, //depth
  535. false, // isEmptyElement
  536. String.Empty, // name
  537. String.Empty, // prefix
  538. String.Empty, // localName
  539. String.Empty, // namespaceURI
  540. "foo", // value
  541. 0 // attributeCount
  542. );
  543. AssertNode (
  544. xmlReader, // xmlReader
  545. XmlNodeType.Element, // nodeType
  546. 0, //depth
  547. true, // isEmptyElement
  548. "bar", // name
  549. String.Empty, // prefix
  550. "bar", // localName
  551. String.Empty, // namespaceURI
  552. String.Empty, // value
  553. 0 // attributeCount
  554. );
  555. AssertEndDocument (xmlReader);
  556. }
  557. [Test]
  558. public void PredefinedEntities ()
  559. {
  560. string xml = "<foo>&lt;&gt;&amp;&apos;&quot;</foo>";
  561. RunTest (xml, new TestMethod (PredefinedEntities));
  562. }
  563. public void PredefinedEntities (XmlReader xmlReader)
  564. {
  565. AssertStartDocument (xmlReader);
  566. AssertNode (
  567. xmlReader, // xmlReader
  568. XmlNodeType.Element, // nodeType
  569. 0, //depth
  570. false, // isEmptyElement
  571. "foo", // name
  572. String.Empty, // prefix
  573. "foo", // localName
  574. String.Empty, // namespaceURI
  575. String.Empty, // value
  576. 0 // attributeCount
  577. );
  578. AssertNode (
  579. xmlReader, // xmlReader
  580. XmlNodeType.Text, // nodeType
  581. 1, //depth
  582. false, // isEmptyElement
  583. String.Empty, // name
  584. String.Empty, // prefix
  585. String.Empty, // localName
  586. String.Empty, // namespaceURI
  587. "<>&'\"", // value
  588. 0 // attributeCount
  589. );
  590. AssertNode (
  591. xmlReader, // xmlReader
  592. XmlNodeType.EndElement, // nodeType
  593. 0, //depth
  594. false, // isEmptyElement
  595. "foo", // name
  596. String.Empty, // prefix
  597. "foo", // localName
  598. String.Empty, // namespaceURI
  599. String.Empty, // value
  600. 0 // attributeCount
  601. );
  602. AssertEndDocument (xmlReader);
  603. }
  604. [Test]
  605. public void EntityReference ()
  606. {
  607. string xml = "<foo>&bar;</foo>";
  608. RunTest (xml, new TestMethod (EntityReference));
  609. }
  610. public void EntityReference (XmlReader xmlReader)
  611. {
  612. AssertStartDocument (xmlReader);
  613. AssertNode (
  614. xmlReader, // xmlReader
  615. XmlNodeType.Element, // nodeType
  616. 0, //depth
  617. false, // isEmptyElement
  618. "foo", // name
  619. String.Empty, // prefix
  620. "foo", // localName
  621. String.Empty, // namespaceURI
  622. String.Empty, // value
  623. 0 // attributeCount
  624. );
  625. AssertNode (
  626. xmlReader, // xmlReader
  627. XmlNodeType.EntityReference, // nodeType
  628. 1, //depth
  629. false, // isEmptyElement
  630. "bar", // name
  631. String.Empty, // prefix
  632. "bar", // localName
  633. String.Empty, // namespaceURI
  634. String.Empty, // value
  635. 0 // attributeCount
  636. );
  637. AssertNode (
  638. xmlReader, // xmlReader
  639. XmlNodeType.EndElement, // nodeType
  640. 0, //depth
  641. false, // isEmptyElement
  642. "foo", // name
  643. String.Empty, // prefix
  644. "foo", // localName
  645. String.Empty, // namespaceURI
  646. String.Empty, // value
  647. 0 // attributeCount
  648. );
  649. AssertEndDocument (xmlReader);
  650. }
  651. [Test]
  652. public void EntityReferenceInsideText ()
  653. {
  654. string xml = "<foo>bar&baz;quux</foo>";
  655. RunTest (xml, new TestMethod (EntityReferenceInsideText));
  656. }
  657. public void EntityReferenceInsideText (XmlReader xmlReader)
  658. {
  659. AssertStartDocument (xmlReader);
  660. AssertNode (
  661. xmlReader, // xmlReader
  662. XmlNodeType.Element, // nodeType
  663. 0, //depth
  664. false, // isEmptyElement
  665. "foo", // name
  666. String.Empty, // prefix
  667. "foo", // localName
  668. String.Empty, // namespaceURI
  669. String.Empty, // value
  670. 0 // attributeCount
  671. );
  672. AssertNode (
  673. xmlReader, // xmlReader
  674. XmlNodeType.Text, // nodeType
  675. 1, //depth
  676. false, // isEmptyElement
  677. String.Empty, // name
  678. String.Empty, // prefix
  679. String.Empty, // localName
  680. String.Empty, // namespaceURI
  681. "bar", // value
  682. 0 // attributeCount
  683. );
  684. AssertNode (
  685. xmlReader, // xmlReader
  686. XmlNodeType.EntityReference, // nodeType
  687. 1, //depth
  688. false, // isEmptyElement
  689. "baz", // name
  690. String.Empty, // prefix
  691. "baz", // localName
  692. String.Empty, // namespaceURI
  693. String.Empty, // value
  694. 0 // attributeCount
  695. );
  696. AssertNode (
  697. xmlReader, // xmlReader
  698. XmlNodeType.Text, // nodeType
  699. 1, //depth
  700. false, // isEmptyElement
  701. String.Empty, // name
  702. String.Empty, // prefix
  703. String.Empty, // localName
  704. String.Empty, // namespaceURI
  705. "quux", // value
  706. 0 // attributeCount
  707. );
  708. AssertNode (
  709. xmlReader, // xmlReader
  710. XmlNodeType.EndElement, // nodeType
  711. 0, //depth
  712. false, // isEmptyElement
  713. "foo", // name
  714. String.Empty, // prefix
  715. "foo", // localName
  716. String.Empty, // namespaceURI
  717. String.Empty, // value
  718. 0 // attributeCount
  719. );
  720. AssertEndDocument (xmlReader);
  721. }
  722. [Test]
  723. public void CharacterReferences ()
  724. {
  725. string xml = "<foo>&#70;&#x4F;&#x4f;</foo>";
  726. RunTest (xml, new TestMethod (CharacterReferences));
  727. }
  728. public void CharacterReferences (XmlReader xmlReader)
  729. {
  730. AssertStartDocument (xmlReader);
  731. AssertNode (
  732. xmlReader, // xmlReader
  733. XmlNodeType.Element, // nodeType
  734. 0, //depth
  735. false, // isEmptyElement
  736. "foo", // name
  737. String.Empty, // prefix
  738. "foo", // localName
  739. String.Empty, // namespaceURI
  740. String.Empty, // value
  741. 0 // attributeCount
  742. );
  743. AssertNode (
  744. xmlReader, // xmlReader
  745. XmlNodeType.Text, // nodeType
  746. 1, //depth
  747. false, // isEmptyElement
  748. String.Empty, // name
  749. String.Empty, // prefix
  750. String.Empty, // localName
  751. String.Empty, // namespaceURI
  752. "FOO", // value
  753. 0 // attributeCount
  754. );
  755. AssertNode (
  756. xmlReader, // xmlReader
  757. XmlNodeType.EndElement, // nodeType
  758. 0, //depth
  759. false, // isEmptyElement
  760. "foo", // name
  761. String.Empty, // prefix
  762. "foo", // localName
  763. String.Empty, // namespaceURI
  764. String.Empty, // value
  765. 0 // attributeCount
  766. );
  767. AssertEndDocument (xmlReader);
  768. }
  769. }
  770. }