XmlDataSourceTest.cs 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403
  1. //
  2. // Tests for System.Web.UI.WebControls.XmlDataSource.cs
  3. //
  4. // Author:
  5. // Chris Toshok ([email protected])
  6. // Yoni Klain ([email protected])
  7. //
  8. //
  9. // Copyright (C) 2005 Novell, Inc (http://www.novell.com)
  10. //
  11. // Permission is hereby granted, free of charge, to any person obtaining
  12. // a copy of this software and associated documentation files (the
  13. // "Software"), to deal in the Software without restriction, including
  14. // without limitation the rights to use, copy, modify, merge, publish,
  15. // distribute, sublicense, and/or sell copies of the Software, and to
  16. // permit persons to whom the Software is furnished to do so, subject to
  17. // the following conditions:
  18. //
  19. // The above copyright notice and this permission notice shall be
  20. // included in all copies or substantial portions of the Software.
  21. //
  22. // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
  23. // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
  24. // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
  25. // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
  26. // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
  27. // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
  28. // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
  29. // NOTE: INCLUDE 2 CATEGORIES [Category ("NunitWeb")];[Category ("NotWorking")]
  30. #if NET_2_0
  31. using System;
  32. using System.Collections;
  33. using System.Collections.Specialized;
  34. using System.IO;
  35. using System.Globalization;
  36. using System.Web;
  37. using System.Web.UI;
  38. using System.Web.UI.WebControls;
  39. using System.Xml;
  40. using System.Xml.Xsl;
  41. using NUnit.Framework;
  42. using MonoTests.SystemWeb.Framework;
  43. using MonoTests.stand_alone.WebHarness;
  44. using System.Threading;
  45. namespace MonoTests.System.Web.UI.WebControls
  46. {
  47. class DSPoker : XmlDataSource
  48. {
  49. public DSPoker () {
  50. TrackViewState ();
  51. }
  52. public object SaveState () {
  53. return SaveViewState ();
  54. }
  55. public void LoadState (object o) {
  56. LoadViewState (o);
  57. }
  58. public HierarchicalDataSourceView DoGetHierarchicalView(string viewPath)
  59. {
  60. return base.GetHierarchicalView(viewPath);
  61. }
  62. }
  63. [TestFixture]
  64. public class XmlDataSourceTest
  65. {
  66. string data = @"<?xml version=""1.0"" encoding=""utf-8""?><IranHistoricalPlaces name=""places""><Place name=""Taghe Bostan""><City>Kermanshah</City><Antiquity>2000</Antiquity></Place><Place name=""Persepolis""><City>Shiraz</City><Antiquity>2500</Antiquity></Place></IranHistoricalPlaces>";
  67. [TestFixtureSetUp]
  68. public void CopyTestResources ()
  69. {
  70. #if DOT_NET
  71. WebTest.CopyResource (GetType (), "MonoTests.System.Web.UI.WebControls.Resources.XMLDataSourceTest.xml", "XMLDataSourceTest.xml");
  72. WebTest.CopyResource (GetType (), "MonoTests.System.Web.UI.WebControls.Resources.XMLDataSourceTest.xsl", "XMLDataSourceTest.xsl");
  73. WebTest.CopyResource (GetType (), "MonoTests.System.Web.UI.WebControls.Resources.XMLDataSourceTest1.aspx", "XMLDataSourceTest1.aspx");
  74. WebTest.CopyResource (GetType (), "MonoTests.System.Web.UI.WebControls.Resources.XMLDataSourceTest2.aspx", "XMLDataSourceTest2.aspx");
  75. WebTest.CopyResource (GetType (), "MonoTests.System.Web.UI.WebControls.Resources.XMLDataSourceTest3.aspx", "XMLDataSourceTest3.aspx");
  76. WebTest.CopyResource (GetType (), "MonoTests.System.Web.UI.WebControls.Resources.XMLDataSourceTest4.aspx", "XMLDataSourceTest4.aspx");
  77. #else
  78. WebTest.CopyResource (GetType (), "XMLDataSourceTest.xml", "XMLDataSourceTest.xml");
  79. WebTest.CopyResource (GetType (), "XMLDataSourceTest.xsl", "XMLDataSourceTest.xsl");
  80. WebTest.CopyResource (GetType (), "XMLDataSourceTest1.aspx", "XMLDataSourceTest1.aspx");
  81. WebTest.CopyResource (GetType (), "XMLDataSourceTest2.aspx", "XMLDataSourceTest2.aspx");
  82. WebTest.CopyResource (GetType (), "XMLDataSourceTest3.aspx", "XMLDataSourceTest3.aspx");
  83. WebTest.CopyResource (GetType (), "XMLDataSourceTest4.aspx", "XMLDataSourceTest4.aspx");
  84. #endif
  85. }
  86. [SetUp]
  87. public void SetupTestCase ()
  88. {
  89. Thread.Sleep (100);
  90. }
  91. [Test]
  92. public void Defaults ()
  93. {
  94. DSPoker p = new DSPoker ();
  95. Assert.AreEqual ("", p.Data, "A4");
  96. Assert.AreEqual ("", p.DataFile, "A5");
  97. Assert.AreEqual ("", p.Transform, "A9");
  98. Assert.AreEqual ("", p.TransformFile, "A10");
  99. Assert.AreEqual ("", p.XPath, "A11");
  100. // Added
  101. Assert.AreEqual (null, p.TransformArgumentList, "A17");
  102. }
  103. [Test]
  104. [Category ("NotWorking")]
  105. public void Defaults_NotWorking ()
  106. {
  107. DSPoker p = new DSPoker ();
  108. Assert.AreEqual (0, p.CacheDuration, "A12");
  109. Assert.AreEqual (DataSourceCacheExpiry.Absolute, p.CacheExpirationPolicy, "A13");
  110. Assert.AreEqual ("", p.CacheKeyDependency, "A14");
  111. Assert.AreEqual (true, p.EnableCaching, "A15");
  112. }
  113. [Test]
  114. public void Attributes ()
  115. {
  116. DSPoker p = new DSPoker ();
  117. p.Data = data;
  118. Assert.AreEqual (data, p.Data, "A1");
  119. p.Transform = "transform";
  120. Assert.AreEqual ("transform", p.Transform, "A2");
  121. p.XPath = "xpath";
  122. Assert.AreEqual ("xpath", p.XPath, "A3");
  123. }
  124. [Test]
  125. [Category ("NotWorking")]
  126. public void ViewState ()
  127. {
  128. // XXX weird... something odd going on with
  129. // ViewState? or are none of these stored?
  130. DSPoker p = new DSPoker ();
  131. p.Data = data;
  132. p.Transform = "transform";
  133. p.XPath = "xpath";
  134. object state = p.SaveState ();
  135. DSPoker copy = new DSPoker ();
  136. copy.LoadState (state);
  137. Assert.AreEqual ("", copy.Data, "A1");
  138. Assert.AreEqual ("", copy.Transform, "A2");
  139. Assert.AreEqual ("", copy.XPath, "A3");
  140. p = new DSPoker ();
  141. p.DataFile = "DataFile";
  142. p.TransformFile = "TransformFile";
  143. state = p.SaveState ();
  144. copy = new DSPoker ();
  145. copy.LoadState (state);
  146. Assert.AreEqual ("", copy.DataFile, "A1");
  147. Assert.AreEqual ("", copy.TransformFile, "A2");
  148. }
  149. [Test]
  150. [Category ("NunitWeb")]
  151. public void DataFile ()
  152. {
  153. new WebTest (PageInvoker.CreateOnLoad (datafile)).Run ();
  154. }
  155. public static void datafile (Page p)
  156. {
  157. string originalxml = @"<?xml version=""1.0"" encoding=""utf-8""?><bookstore xmlns:bk=""urn:samples""><book genre=""novel"" publicationdate=""1999"" bk:ISBN=""0192100262""><title>Pride and Prejudice</title><author><first-name>Jane</first-name><last-name>Austen</last-name></author><price>24.95</price>""
  158. </book><book genre=""novel"" publicationdate=""1985"" bk:ISBN=""0771008139""><title>The Handmaid's Tale</title><author><first-name>Margaret</first-name><last-name>Atwood</last-name></author><price>29.95</price></book></bookstore>";
  159. XmlDataSource ds = new XmlDataSource ();
  160. p.Form.Controls.Add (ds);
  161. ds.DataFile = "~/XMLDataSourceTest.xml";
  162. ds.DataBind ();
  163. string derivedxml = ((XmlDocument) ds.GetXmlDocument ()).InnerXml;
  164. HtmlDiff.AssertAreEqual (originalxml, derivedxml, "Loading xml");
  165. }
  166. [Test]
  167. public void GetXmlDocument ()
  168. {
  169. DSPoker p = new DSPoker ();
  170. p.Data = data;
  171. XmlDocument doc = p.GetXmlDocument ();
  172. HtmlDiff.AssertAreEqual (data, doc.InnerXml, "GetXmlDocument");
  173. }
  174. [Test]
  175. [Category ("NunitWeb")]
  176. [Category ("NotWorking")]
  177. public void XPath ()
  178. {
  179. Page page = new Page ();
  180. XmlDataSource ds = new XmlDataSource ();
  181. ds.ID = "ds";
  182. ds.Data = @"<?xml version=""1.0"" encoding=""utf-8""?>
  183. <bookstore xmlns:bk=""urn:samples"">
  184. <book genre=""novel"" publicationdate=""1999"" bk:ISBN=""0192100262"">
  185. <title>Pride and Prejudice</title>
  186. <author>
  187. <first-name>Jane</first-name>
  188. <last-name>Austen</last-name>
  189. </author>
  190. <price>24.95</price>""
  191. </book>
  192. <book genre=""novel"" publicationdate=""1985"" bk:ISBN=""0771008139"">
  193. <title>The Handmaid's Tale</title>
  194. <author>
  195. <first-name>Margaret</first-name>
  196. <last-name>Atwood</last-name>
  197. </author>
  198. <price>29.95</price>
  199. </book>
  200. </bookstore>";
  201. DataList list = new DataList ();
  202. page.Controls.Add (list);
  203. page.Controls.Add (ds);
  204. list.DataSourceID = "ds";
  205. list.DataBind ();
  206. Assert.AreEqual (2, list.Items.Count, "Before XPath elements");
  207. ds.XPath = "/bookstore/book [title='Pride and Prejudice']";
  208. list.DataBind ();
  209. Assert.AreEqual (1, list.Items.Count, "After XPath elements");
  210. ds.XPath = "bookstore/book [@genre='novel']";
  211. list.DataBind ();
  212. Assert.AreEqual (2, list.Items.Count, "After XPath property");
  213. }
  214. [Test]
  215. public void GetHierarchicalView ()
  216. {
  217. Page page = new Page ();
  218. DSPoker ds = new DSPoker ();
  219. ds.ID = "ds";
  220. ds.Data = @"<?xml version=""1.0"" encoding=""utf-8""?>
  221. <bookstore xmlns:bk=""urn:samples"">
  222. <book genre=""novel"" publicationdate=""1999"" bk:ISBN=""0192100262"">
  223. <title>Pride and Prejudice</title>
  224. <author>
  225. <first-name>Jane</first-name>
  226. <last-name>Austen</last-name>
  227. </author>
  228. <price>24.95</price>
  229. </book>
  230. <book genre=""novel"" publicationdate=""1985"" bk:ISBN=""0771008139"">
  231. <title>The Handmaid's Tale</title>
  232. <author>
  233. <first-name>Margaret</first-name>
  234. <last-name>Atwood</last-name>
  235. </author>
  236. <price>29.95</price>
  237. </book>
  238. </bookstore>";
  239. HierarchicalDataSourceView view = ds.DoGetHierarchicalView ("");
  240. IHierarchicalEnumerable num = view.Select ();
  241. foreach (object obj in num) {
  242. IHierarchyData hdata = num.GetHierarchyData (obj);
  243. XmlElement element = (XmlElement) hdata.Item;
  244. Assert.AreEqual ("bookstore", element.Name, "RootElementName");
  245. Assert.AreEqual ("Pride and PrejudiceJaneAusten24.95The Handmaid's TaleMargaretAtwood29.95", element.InnerText, "InnerText");
  246. Assert.AreEqual (2, element.ChildNodes.Count, "ChildElementNodes");
  247. }
  248. }
  249. [Test]
  250. [Category ("NunitWeb")]
  251. [Category ("NotWorking")] //NotImplementedException
  252. public void Transform ()
  253. {
  254. string origin = @"<form name=""form1"" method=""post"" action=""XMLDataSourceTest1.aspx"" id=""form1"">
  255. <div>
  256. <input type=""hidden"" name=""__VIEWSTATE"" id=""__VIEWSTATE"" value=""/wEPDwUKLTQyMTUyMDUzNQ9kFgICAw9kFgICAw8WAh4LXyFJdGVtQ291bnQCARYCZg9kFgJmDxUDBTEyMzQ1BFRvZGQEUm93ZWRk9AOJvfc/t+h2W5vJ8AYx34Ds9jA="" />
  257. </div><div>
  258. <h2>Order</h2><hr>
  259. <table>
  260. <tr>
  261. <td>Customer</td>
  262. <td><font color=""blue"">12345</font></td>
  263. <td>Todd</td>
  264. <td>Rowe</td>
  265. </tr>
  266. </table>
  267. <hr></div></form>";
  268. string result = new WebTest ("XMLDataSourceTest1.aspx").Run();
  269. HtmlDiff.AssertAreEqual (origin, HtmlDiff.GetControlFromPageHtml(result) , "TransformFail");
  270. }
  271. [Test]
  272. [Category ("NunitWeb")]
  273. [Category ("NotWorking")] //NotImplementedException
  274. public void TransformFile ()
  275. {
  276. string origin = @"<form name=""form1"" method=""post"" action=""XMLDataSourceTest2.aspx"" id=""form1"">
  277. <div><input type=""hidden"" name=""__VIEWSTATE"" id=""__VIEWSTATE"" value=""/wEPDwUJOTQ2ODg0NTEwD2QWAgIDD2QWAgIDDxYCHgtfIUl0ZW1Db3VudAIBFgJmD2QWAmYPFQMFMTIzNDUEVG9kZARSb3dlZGRK01cIwfYACh3vzGkvlsmei3JplQ=="" /></div>
  278. <div><h2>Order</h2>
  279. <hr>
  280. <table>
  281. <tr>
  282. <td>Customer</td>
  283. <td><font color=""blue"">12345</font></td>
  284. <td>Todd</td>
  285. <td>Rowe</td>
  286. </tr>
  287. </table>
  288. <hr>
  289. </div></form>";
  290. string result = new WebTest ("XMLDataSourceTest2.aspx").Run ();
  291. HtmlDiff.AssertAreEqual (origin, HtmlDiff.GetControlFromPageHtml (result), "TransformFileFail");
  292. }
  293. [Test]
  294. [Category ("NunitWeb")]
  295. [Category ("NotWorking")]
  296. public void TransformArgumentList ()
  297. {
  298. string origin = @"<form name=""form1"" method=""post"" action=""XMLDataSourceTest3.aspx"" id=""form1"">
  299. <div>
  300. <input type=""hidden"" name=""__VIEWSTATE"" id=""__VIEWSTATE"" value=""/wEPDwUKLTQyMTUyMDUzNQ9kFgICAw9kFgICAw8WAh4LXyFJdGVtQ291bnQCARYCZg9kFgJmDxUDJjEyMzQ1cHVyY2hhc2VkIGJ5OiBNYWluc29mdCBkZXZlbG9wZXJzBFRvZGQEUm93ZWRkrPuQleD/QDM5r+J2jFbRBXLNXkM="" />
  301. </div><div>
  302. <h2>Order</h2>
  303. <hr>
  304. <table>
  305. <tr>
  306. <td>Customer</td>
  307. <td><font color=""blue"">12345purchased by: Mainsoft developers</font></td>
  308. <td>Todd</td>
  309. <td>Rowe</td>
  310. </tr>
  311. </table>
  312. <hr>
  313. </div></form>";
  314. string result = new WebTest ("XMLDataSourceTest3.aspx").Run ();
  315. HtmlDiff.AssertAreEqual (origin, HtmlDiff.GetControlFromPageHtml (result), "TransformArgumentListFail");
  316. }
  317. [Test]
  318. [Category ("NunitWeb")]
  319. [Category ("NotWorking")] // <div> expected
  320. public void Save ()
  321. {
  322. string origin = @"<form name=""form1"" method=""post"" action=""XMLDataSourceTest4.aspx"" id=""form1"">
  323. <div>
  324. <input type=""hidden"" name=""__VIEWSTATE"" id=""__VIEWSTATE"" value=""/wEPDwUJOTM3NTIxOTgxD2QWAgIDD2QWAgIDDxYCHgtfIUl0ZW1Db3VudAICFgRmD2QWAmYPFQQLVGhpc0lzQVRlc3QAAAUyNC45NWQCAQ9kFgJmDxUEE1RoZSBIYW5kbWFpZCdzIFRhbGUAAAUyOS45NWRkGq6R82J7BSf9/XWMvLgdDdRVqwM="" />
  325. </div><div>
  326. <h2>BookStore</h2><hr>
  327. <table>
  328. <tr>
  329. <td>Book</td>
  330. <td><font color=""blue"">ThisIsATest</font></td>
  331. <td></td>
  332. <td></td>
  333. <td>24.95</td>
  334. </tr>
  335. </table><hr>
  336. <h2>BookStore</h2><hr>
  337. <table>
  338. <tr>
  339. <td>Book</td>
  340. <td><font color=""blue"">The Handmaid's Tale</font></td>
  341. <td></td>
  342. <td></td>
  343. <td>29.95</td>
  344. </tr>
  345. </table><hr></div></form>";
  346. string result = new WebTest ("XMLDataSourceTest4.aspx").Run ();
  347. HtmlDiff.AssertAreEqual (origin, HtmlDiff.GetControlFromPageHtml (result), "TransformArgumentListFail");
  348. }
  349. [Test]
  350. [Category ("NotWorking")]
  351. [ExpectedException (typeof (NullReferenceException))]
  352. public void GetXmlDocumentException ()
  353. {
  354. DSPoker p = new DSPoker ();
  355. p.GetXmlDocument ();
  356. }
  357. [TestFixtureTearDown]
  358. public void TearDown ()
  359. {
  360. WebTest.Unload ();
  361. }
  362. }
  363. }
  364. #endif