ObjectDataSourceTest.cs 30 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923
  1. //
  2. // Tests for System.Web.UI.WebControls.FormView.cs
  3. //
  4. // Author:
  5. // Merav Sudri ([email protected])
  6. //
  7. //
  8. // Copyright (C) 2005 Novell, Inc (http://www.novell.com)
  9. //
  10. // Permission is hereby granted, free of charge, to any person obtaining
  11. // a copy of this software and associated documentation files (the
  12. // "Software"), to deal in the Software without restriction, including
  13. // without limitation the rights to use, copy, modify, merge, publish,
  14. // distribute, sublicense, and/or sell copies of the Software, and to
  15. // permit persons to whom the Software is furnished to do so, subject to
  16. // the following conditions:
  17. //
  18. // The above copyright notice and this permission notice shall be
  19. // included in all copies or substantial portions of the Software.
  20. //
  21. // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
  22. // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
  23. // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
  24. // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
  25. // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
  26. // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
  27. // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
  28. //
  29. #if NET_2_0
  30. using NUnit.Framework;
  31. using System;
  32. using System.Threading;
  33. using System.Data;
  34. using System.Data.Common;
  35. using System.IO;
  36. using System.Drawing;
  37. using System.Collections;
  38. using System.Globalization;
  39. using System.Web;
  40. using System.Web.UI;
  41. using System.Web.UI.WebControls;
  42. using MonoTests.SystemWeb.Framework;
  43. using MonoTests.stand_alone.WebHarness;
  44. namespace MonoTests.System.Web.UI.WebControls
  45. {
  46. public class ObjectDataSourcePoker : ObjectDataSource
  47. {
  48. public ObjectDataSourcePoker () // constructor
  49. {
  50. TrackViewState ();
  51. }
  52. public object SaveState ()
  53. {
  54. return SaveViewState ();
  55. }
  56. public void LoadState (object o)
  57. {
  58. LoadViewState (o);
  59. }
  60. public StateBag StateBag
  61. {
  62. get { return base.ViewState; }
  63. }
  64. public string Render ()
  65. {
  66. StringWriter sw = new StringWriter ();
  67. HtmlTextWriter tw = new HtmlTextWriter (sw);
  68. Render (tw);
  69. return sw.ToString ();
  70. }
  71. public void DoOnBubbleEvent (Object source, EventArgs e)
  72. {
  73. base.OnBubbleEvent (source, e);
  74. }
  75. public object DoSaveControlState ()
  76. {
  77. return base.SaveControlState ();
  78. }
  79. public void DoLoadControlState (object savedState)
  80. {
  81. base.LoadControlState (savedState);
  82. }
  83. }
  84. [TestFixture]
  85. public class ObjectDataSourceTest
  86. {
  87. [TestFixtureSetUp]
  88. public void setup ()
  89. {
  90. Thread.Sleep (100);
  91. }
  92. [TestFixtureTearDown]
  93. public void TearDown ()
  94. {
  95. WebTest.Unload ();
  96. }
  97. public static void InitObjectDataSource (ObjectDataSourcePoker ds, string action)
  98. {
  99. Parameter p1, p2, p3;
  100. switch (action) {
  101. case "insert": p1 = new Parameter ("ID", TypeCode.String, "1004");
  102. p2 = new Parameter ("FName", TypeCode.String, "David");
  103. p3 = new Parameter ("LName", TypeCode.String, "Eli");
  104. break;
  105. case "update": p1 = new Parameter ("ID", TypeCode.String, "1001");
  106. p2 = new Parameter ("FName", TypeCode.String, "David");
  107. p3 = new Parameter ("LName", TypeCode.String, "Eli");
  108. break;
  109. case "DBNull": p1 = new Parameter ("ID");
  110. p2 = new Parameter ("FName");
  111. p3 = new Parameter ("LName");
  112. break;
  113. default: p1 = new Parameter ("ID", TypeCode.String, "1001");
  114. p2 = new Parameter ("FName", TypeCode.String, "Mahesh");
  115. p3 = new Parameter ("LName", TypeCode.String, "chand");
  116. break;
  117. }
  118. ds.SelectMethod = "GetMyData";
  119. ds.DeleteMethod = "Delete";
  120. ds.InsertMethod = "Insert";
  121. ds.UpdateMethod = "Update";
  122. ds.SelectCountMethod = "SelectCount";
  123. ds.DeleteParameters.Add (p1);
  124. ds.DeleteParameters.Add (p2);
  125. ds.DeleteParameters.Add (p3);
  126. ds.InsertParameters.Add (p1);
  127. ds.InsertParameters.Add (p2);
  128. ds.InsertParameters.Add (p3);
  129. ds.UpdateParameters.Add (p1);
  130. ds.UpdateParameters.Add (p2);
  131. ds.UpdateParameters.Add (p3);
  132. ds.ID = "MyObject";
  133. ds.TypeName = "MonoTests.System.Web.UI.WebControls.MyTableObject";
  134. }
  135. //Default properties
  136. [Test]
  137. public void ObjectDataSource_DefaultProperties ()
  138. {
  139. ObjectDataSourcePoker ods = new ObjectDataSourcePoker ();
  140. Assert.AreEqual (ConflictOptions.OverwriteChanges, ods.ConflictDetection, "ConflictDetection");
  141. Assert.AreEqual ("",ods.DataObjectTypeName ,"DataObjectTypeName ");
  142. Assert.AreEqual ("", ods.DeleteMethod, "DeleteMethod");
  143. Assert.AreEqual (typeof(ParameterCollection),ods.DeleteParameters.GetType (),"DeleteParameters");
  144. Assert.AreEqual (false, ods.EnablePaging, "EnablePaging ");
  145. Assert.AreEqual ("", ods.FilterExpression, "FilterExpression ");
  146. Assert.AreEqual (typeof (ParameterCollection), ods.FilterParameters.GetType (), "FilterParameters");
  147. Assert.AreEqual ("", ods.InsertMethod, "InsertMethod ");
  148. Assert.AreEqual (typeof (ParameterCollection), ods.InsertParameters.GetType (), "InsertParameters ");
  149. Assert.AreEqual ("maximumRows", ods.MaximumRowsParameterName, "MaximumRowsParameterName");
  150. Assert.AreEqual ("{0}", ods.OldValuesParameterFormatString, "OldValuesParameterFormatString");
  151. Assert.AreEqual ("", ods.SelectCountMethod, "SelectCountMethod");
  152. Assert.AreEqual ("", ods.SelectMethod, "SelectMethod ");
  153. Assert.AreEqual (typeof (ParameterCollection), ods.SelectParameters.GetType (), "SelectParameters");
  154. Assert.AreEqual ("", ods.SortParameterName, "SortParameterName");
  155. Assert.AreEqual ("startRowIndex", ods.StartRowIndexParameterName, "StartRowIndexParameterName");
  156. Assert.AreEqual ("", ods.TypeName, "TypeName");
  157. Assert.AreEqual ("", ods.UpdateMethod, "UpdateMethod ");
  158. Assert.AreEqual (typeof (ParameterCollection), ods.UpdateParameters.GetType (), "UpdateParameters");
  159. }
  160. [Test]
  161. public void ObjectDataSource_NotWorkingDefaultProperties ()
  162. {
  163. ObjectDataSourcePoker ods = new ObjectDataSourcePoker ();
  164. Assert.AreEqual (0, ods.CacheDuration, "CacheDuration");
  165. Assert.AreEqual (DataSourceCacheExpiry.Absolute, ods.CacheExpirationPolicy, "CacheExpirationPolicy");
  166. Assert.AreEqual ("", ods.CacheKeyDependency, "CacheKeyDependency");
  167. Assert.AreEqual (false, ods.ConvertNullToDBNull, "ConvertNullToDBNull ");
  168. Assert.AreEqual (false, ods.EnableCaching, "EnableCaching ");
  169. Assert.AreEqual ("", ods.SqlCacheDependency, "SqlCacheDependency");
  170. }
  171. //Non default properties values
  172. [Test]
  173. public void ObjectDataSource_AssignToDefaultProperties ()
  174. {
  175. ObjectDataSourcePoker ods = new ObjectDataSourcePoker ();
  176. InitObjectDataSource (ods,"");
  177. ods.ConflictDetection = ConflictOptions.CompareAllValues;
  178. Assert.AreEqual (ConflictOptions.CompareAllValues, ods.ConflictDetection, "ConflictDetection");
  179. ods.DataObjectTypeName = "MyData";
  180. Assert.AreEqual ("MyData", ods.DataObjectTypeName, "DataObjectTypeName ");
  181. Assert.AreEqual ("Delete", ods.DeleteMethod, "DeleteMethod");
  182. Assert.AreEqual (3, ods.DeleteParameters.Count, "DeleteParameters");
  183. ods.EnablePaging = true;
  184. Assert.AreEqual (true, ods.EnablePaging, "EnablePaging ");
  185. ods.FilterExpression = "ID='{0}'";
  186. Assert.AreEqual ("ID='{0}'", ods.FilterExpression, "FilterExpression ");
  187. TextBox TextBox1=new TextBox ();
  188. TextBox1.Text ="1001";
  189. FormParameter p=new FormParameter ("ID","TextBox1");
  190. p.DefaultValue = "1002";
  191. ods.FilterParameters.Add (p);
  192. Assert.AreEqual ("ID", ods.FilterParameters[0].Name, "FilterParameters1");
  193. Assert.AreEqual ("1002", ods.FilterParameters[0].DefaultValue , "FilterParameters2");
  194. Assert.AreEqual ("TextBox1", ((FormParameter )ods.FilterParameters[0]).FormField, "FilterParameters3");
  195. Assert.AreEqual ("Insert", ods.InsertMethod, "InsertMethod ");
  196. Assert.AreEqual ("ID", ods.InsertParameters[0].Name , "InsertParameters ");
  197. ods.MaximumRowsParameterName = "SelectCount";
  198. Assert.AreEqual ("SelectCount", ods.MaximumRowsParameterName, "MaximumRowsParameterName");
  199. ods.OldValuesParameterFormatString = "ID";
  200. Assert.AreEqual ("ID", ods.OldValuesParameterFormatString, "OldValuesParameterFormatString");
  201. Assert.AreEqual ("SelectCount", ods.SelectCountMethod, "SelectCountMethod");
  202. Assert.AreEqual ("GetMyData", ods.SelectMethod, "SelectMethod ");
  203. Parameter dummy = new Parameter ();
  204. dummy.Name = "Test";
  205. ods.SelectParameters.Add (dummy);
  206. Assert.AreEqual ("Test", ods.SelectParameters[0].Name , "SelectParameters");
  207. ods.SortParameterName = "sortExpression";
  208. Assert.AreEqual ("sortExpression", ods.SortParameterName, "SortParameterName");
  209. ods.StartRowIndexParameterName = "ID";
  210. Assert.AreEqual ("ID", ods.StartRowIndexParameterName, "StartRowIndexParameterName");
  211. Assert.AreEqual ("MonoTests.System.Web.UI.WebControls.MyTableObject", ods.TypeName, "TypeName");
  212. Assert.AreEqual ("Update", ods.UpdateMethod, "UpdateMethod ");
  213. Assert.AreEqual ("FName", ods.UpdateParameters[1].Name, "UpdateParameters");
  214. }
  215. [Test]
  216. public void ObjectDataSource_NotWorkingAssignToDefaultProperties ()
  217. {
  218. ObjectDataSourcePoker ods = new ObjectDataSourcePoker ();
  219. ods.CacheDuration = 1000;
  220. Assert.AreEqual (1000, ods.CacheDuration, "CacheDuration");
  221. ods.CacheExpirationPolicy = DataSourceCacheExpiry.Sliding;
  222. Assert.AreEqual (DataSourceCacheExpiry.Sliding, ods.CacheExpirationPolicy, "CacheExpirationPolicy");
  223. ods.CacheKeyDependency = "ID";
  224. Assert.AreEqual ("ID", ods.CacheKeyDependency, "CacheKeyDependency");
  225. ods.ConvertNullToDBNull = true;
  226. Assert.AreEqual (true, ods.ConvertNullToDBNull, "ConvertNullToDBNull ");
  227. ods.EnableCaching = true;
  228. Assert.AreEqual (true, ods.EnableCaching, "EnableCaching ");
  229. ods.SqlCacheDependency = "Northwind:Employees";
  230. Assert.AreEqual ("Northwind:Employees", ods.SqlCacheDependency, "SqlCacheDependency");
  231. }
  232. //ViewState
  233. [Test]
  234. public void ObjectDataSource_ViewState ()
  235. {
  236. ObjectDataSourcePoker ods = new ObjectDataSourcePoker ();
  237. //InitObjectDataSource (ods,"");
  238. ObjectDataSourcePoker copy = new ObjectDataSourcePoker ();
  239. FormParameter p = new FormParameter ("ID", "TextBox1");
  240. p.DefaultValue = "1002";
  241. ods.FilterParameters.Add (p);
  242. Parameter p1 = new Parameter ("ID", TypeCode.String, "1001");
  243. Parameter p2 = new Parameter ("FName", TypeCode.String, "Mahesh");
  244. ods.SelectParameters.Add (p1);
  245. ods.SelectParameters.Add (p2);
  246. object state = ods.SaveState ();
  247. copy.LoadState (state);
  248. Assert.AreEqual ("ID", copy.FilterParameters [0].Name, "ViewStateFilterParameters1");
  249. Assert.AreEqual ("1002", copy.FilterParameters [0].DefaultValue, "ViewStateFilterParameters2");
  250. Assert.AreEqual ("1001", copy.SelectParameters[0].DefaultValue, "ViewStateSelectParameters1");
  251. Assert.AreEqual (2, copy.SelectParameters.Count , "ViewStateSelectParameters2");
  252. }
  253. //Properties functionality
  254. public void ObjectDataSource_ConflictDetection ()
  255. {
  256. //Not implemented
  257. }
  258. [Test]
  259. [Category("NotWorking")]
  260. [Category ("NunitWeb")]
  261. public void ObjectDataSource_ConvertNullToDBNull ()
  262. {
  263. string html = new WebTest (PageInvoker.CreateOnLoad (new PageDelegate (ConvertNullToDBNull))).Run ();
  264. }
  265. public static void ConvertNullToDBNull (Page p)
  266. {
  267. ObjectDataSourcePoker ods = new ObjectDataSourcePoker ();
  268. InitObjectDataSource (ods,"DBNull");
  269. bool dbnull = false;
  270. ods.ConvertNullToDBNull = true;
  271. try {
  272. ods.Delete ();
  273. }
  274. catch (Exception ex) {
  275. Assert.AreEqual (true,
  276. ex.Message.Contains ("type 'System.DBNull' cannot be converted to type 'System.String'") || // dotnet
  277. ex.Message.Contains ("Value cannot be null."), "ConvertNullToDBNull"); // mono
  278. dbnull = true;
  279. }
  280. Assert.AreEqual (true, dbnull, "ConvertNullToDBNull2");
  281. }
  282. [Test]
  283. [Category ("NunitWeb")]
  284. public void ObjectDataSource_FilterExpression ()
  285. {
  286. string html = new WebTest (PageInvoker.CreateOnLoad (
  287. new PageDelegate (FilterExpression))).Run ();
  288. string newHtml= HtmlDiff.GetControlFromPageHtml (html);
  289. string origHtml = @"<table cellspacing=""0"" rules=""all"" border=""1"" style=""border-collapse:collapse;"">
  290. <tr>
  291. <td>ID</td><td>FName</td><td>LName</td>
  292. </tr><tr>
  293. <td>1002</td><td>Melanie</td><td>Talmadge</td>
  294. </tr>
  295. </table>";
  296. HtmlDiff.AssertAreEqual (origHtml, newHtml, "FilterExpression");
  297. }
  298. public static void FilterExpression (Page p)
  299. {
  300. LiteralControl lcb = new LiteralControl (HtmlDiff.BEGIN_TAG);
  301. LiteralControl lce = new LiteralControl (HtmlDiff.END_TAG);
  302. DataGrid dg = new DataGrid ();
  303. ObjectDataSourcePoker ods = new ObjectDataSourcePoker ();
  304. InitObjectDataSource (ods, "");
  305. ods.FilterExpression = "ID='1002'";
  306. p.Controls.Add (lcb);
  307. p.Controls.Add (dg);
  308. p.Controls.Add (ods);
  309. p.Controls.Add (lce);
  310. dg.DataSourceID = "MyObject";
  311. dg.DataBind ();
  312. }
  313. [Test]
  314. [Category ("NunitWeb")]
  315. public void ObjectDataSource_FilterParameter ()
  316. {
  317. string html = new WebTest (PageInvoker.CreateOnLoad (
  318. new PageDelegate (FilterParameter))).Run ();
  319. string newHtml = HtmlDiff.GetControlFromPageHtml (html);
  320. string origHtml = @"<table cellspacing=""0"" rules=""all"" border=""1"" style=""border-collapse:collapse;"">
  321. <tr>
  322. <td>ID</td><td>FName</td><td>LName</td>
  323. </tr><tr>
  324. <td>1003</td><td>Vinay</td><td>Bansal</td>
  325. </tr>
  326. </table>";
  327. HtmlDiff.AssertAreEqual (origHtml, newHtml, "FilterExpression");
  328. }
  329. public static void FilterParameter (Page p)
  330. {
  331. LiteralControl lcb = new LiteralControl (HtmlDiff.BEGIN_TAG);
  332. LiteralControl lce = new LiteralControl (HtmlDiff.END_TAG);
  333. DataGrid dg = new DataGrid ();
  334. ObjectDataSourcePoker ods = new ObjectDataSourcePoker ();
  335. InitObjectDataSource (ods, "");
  336. ods.FilterExpression = "{0}";
  337. Parameter p1 = new Parameter ("ID", TypeCode.String, "ID=1003");
  338. ods.FilterParameters.Add (p1);
  339. p.Controls.Add (lcb);
  340. p.Controls.Add (dg);
  341. p.Controls.Add (ods);
  342. p.Controls.Add (lce);
  343. dg.DataSourceID = "MyObject";
  344. dg.DataBind ();
  345. }
  346. [Test]
  347. [Category ("NunitWeb")]
  348. [Category ("NotWorking")]
  349. public void ObjectDataSource_EnablePaging ()
  350. {
  351. string html = new WebTest (PageInvoker.CreateOnLoad (
  352. new PageDelegate (EnablePaging))).Run ();
  353. string newHtml = HtmlDiff.GetControlFromPageHtml (html);
  354. string origHtml = @"<div>
  355. <table cellspacing=""0"" rules=""all"" border=""1"" style=""border-collapse:collapse;"">
  356. <tr>
  357. <th scope=""col"">Name</th><th scope=""col"">Number</th>
  358. </tr><tr>
  359. <td>Number0</td><td>0</td>
  360. </tr><tr>
  361. <td>Number1</td><td>1</td>
  362. </tr><tr>
  363. <td>Number2</td><td>2</td>
  364. </tr><tr>
  365. <td>Number3</td><td>3</td>
  366. </tr><tr>
  367. <td>Number4</td><td>4</td>
  368. </tr><tr>
  369. <td colspan=""2""><table border=""0"">
  370. <tr>
  371. <td><span>1</span></td><td><a href=""javascript:__doPostBack('ctl01','Page$2')"">2</a></td><td><a href=""javascript:__doPostBack('ctl01','Page$3')"">3</a></td><td><a href=""javascript:__doPostBack('ctl01','Page$4')"">4</a></td>
  372. </tr>
  373. </table></td>
  374. </tr>
  375. </table>
  376. </div>";
  377. HtmlDiff.AssertAreEqual (origHtml, newHtml, "EnablePaging");
  378. }
  379. public static void EnablePaging (Page p)
  380. {
  381. LiteralControl lcb = new LiteralControl (HtmlDiff.BEGIN_TAG);
  382. LiteralControl lce = new LiteralControl (HtmlDiff.END_TAG);
  383. GridView gv = new GridView ();
  384. ObjectDataSourcePoker ods = new ObjectDataSourcePoker ();
  385. ods.ID = "ObjectDataSource1";
  386. ods.TypeName = "MonoTests.System.Web.UI.WebControls.MyTableObject";
  387. ods.SelectMethod = "SelectForPaging";
  388. ods.EnablePaging = true;
  389. ods.SelectCountMethod = "SelectCount";
  390. ods.MaximumRowsParameterName = "maxRows";
  391. ods.StartRowIndexParameterName = "startIndex";
  392. gv.AllowPaging = true;
  393. gv.PageSize = 5;
  394. p.Controls.Add (lcb);
  395. p.Controls.Add (gv);
  396. p.Controls.Add (ods);
  397. p.Controls.Add (lce);
  398. gv.DataSourceID = "ObjectDataSource1";
  399. gv.DataBind ();
  400. }
  401. //public methods
  402. [Test]
  403. [Category ("NunitWeb")]
  404. public void ObjectDataSource_Delete ()
  405. {
  406. string html = new WebTest (PageInvoker.CreateOnLoad (
  407. new PageDelegate (DeleteMethod))).Run ();
  408. string newHtml = HtmlDiff.GetControlFromPageHtml (html);
  409. string origHtml = @"<div>
  410. <table cellspacing=""0"" rules=""all"" border=""1"" style=""border-collapse:collapse;"">
  411. <tr>
  412. <td>ID</td><td>1002</td>
  413. </tr><tr>
  414. <td>FName</td><td>Melanie</td>
  415. </tr><tr>
  416. <td>LName</td><td>Talmadge</td>
  417. </tr>
  418. </table>
  419. </div>";
  420. HtmlDiff.AssertAreEqual (origHtml, newHtml, "DeleteRender");
  421. }
  422. public static void DeleteMethod (Page p)
  423. {
  424. LiteralControl lcb = new LiteralControl (HtmlDiff.BEGIN_TAG);
  425. LiteralControl lce = new LiteralControl (HtmlDiff.END_TAG);
  426. MyTableObject.ds = MyTableObject.CreateDataTable ();
  427. DetailsView dv = new DetailsView ();
  428. ObjectDataSourcePoker ods = new ObjectDataSourcePoker ();
  429. ods.Deleted += new ObjectDataSourceStatusEventHandler (odc_Deleted);
  430. ods.Deleting += new ObjectDataSourceMethodEventHandler (odc_Deleting);
  431. InitObjectDataSource (ods,"");
  432. dv.Page = p;
  433. ods.Page = p;
  434. dv.DataKeyNames = new string[] { "ID" };
  435. dv.DataSource = ods;
  436. p.Controls.Add (lcb);
  437. p.Controls.Add (ods);
  438. p.Controls.Add (dv);
  439. p.Controls.Add (lce);
  440. dv.DataBind ();
  441. Assert.AreEqual (3, dv.DataItemCount, "BeforeDelete1");
  442. Assert.AreEqual (1001, dv.SelectedValue, "BeforeDelete2");
  443. Assert.AreEqual (false, deleting, "BeforeDeletingEvent");
  444. Assert.AreEqual (false, deleted, "BeforeDeletedEvent");
  445. ods.Delete ();
  446. dv.DataBind ();
  447. Assert.AreEqual (true, deleting, "AfterDeletingEvent");
  448. Assert.AreEqual (true, deleted, "AfterDeletedEvent");
  449. Assert.AreEqual (2, dv.DataItemCount, "BeforeDelete1");
  450. Assert.AreEqual (1002, dv.SelectedValue, "BeforeDelete2");
  451. }
  452. [Test]
  453. [Category ("NunitWeb")]
  454. public void ObjectDataSource_Select ()
  455. {
  456. string html = new WebTest (PageInvoker.CreateOnLoad (
  457. new PageDelegate (SelectMethod))).Run ();
  458. }
  459. public static void SelectMethod (Page p)
  460. {
  461. MyTableObject.ds = MyTableObject.CreateDataTable ();
  462. ObjectDataSourcePoker ods = new ObjectDataSourcePoker ();
  463. InitObjectDataSource (ods,"");
  464. ods.Selected += new ObjectDataSourceStatusEventHandler (odc_Selected);
  465. ods.Selecting += new ObjectDataSourceSelectingEventHandler (odc_Selecting);
  466. p.Controls.Add (ods);
  467. Assert.AreEqual (false, selecting, "BeforeSelectingEvent");
  468. Assert.AreEqual (false, selected, "BeforeSelectedEvent");
  469. IEnumerable table = (IEnumerable) ods.Select ();
  470. Assert.AreEqual (3,((DataView) table).Count, "ItemsCount");
  471. Assert.AreEqual ("Mahesh", ((DataView) table)[0].Row.ItemArray[1], "FirstItemData");
  472. Assert.AreEqual (1002, ((DataView) table)[1].Row.ItemArray[0], "SecondItemData");
  473. Assert.AreEqual ("Bansal", ((DataView) table)[2].Row.ItemArray[2], "ThirdItemData");
  474. Assert.AreEqual (true, selecting, "AfterSelectingEvent");
  475. Assert.AreEqual (true, selected, "AfterSelectedEvent");
  476. }
  477. [Test]
  478. [Category ("NunitWeb")]
  479. public void ObjectDataSource_Select_Cached ()
  480. {
  481. string html = new WebTest (PageInvoker.CreateOnLoad (
  482. new PageDelegate (SelectMethodCached))).Run ();
  483. }
  484. public static void SelectMethodCached (Page p)
  485. {
  486. MyTableObject.ds = MyTableObject.CreateDataTable ();
  487. ObjectDataSourcePoker ods = new ObjectDataSourcePoker ();
  488. ods.EnableCaching = true;
  489. InitObjectDataSource (ods, "");
  490. p.Controls.Add (ods);
  491. ods.Selecting += new ObjectDataSourceSelectingEventHandler (odc_Selecting);
  492. selecting = false;
  493. IEnumerable table = (IEnumerable) ods.Select ();
  494. Assert.AreEqual (true, selecting, "AfterSelectingEvent");
  495. selecting = false;
  496. IEnumerable table2 = (IEnumerable) ods.Select ();
  497. Assert.AreEqual (false, selecting, "AfterSelectingEvent");
  498. }
  499. [Test]
  500. [Category ("NunitWeb")]
  501. public void ObjectDataSource_Insert ()
  502. {
  503. string html = new WebTest (PageInvoker.CreateOnLoad (
  504. new PageDelegate (InsertMethod))).Run ();
  505. }
  506. public static void InsertMethod (Page p)
  507. {
  508. MyTableObject.ds = MyTableObject.CreateDataTable ();
  509. ObjectDataSourcePoker ods = new ObjectDataSourcePoker ();
  510. InitObjectDataSource (ods,"insert");
  511. ods.Inserted += new ObjectDataSourceStatusEventHandler (odc_Inserted);
  512. ods.Inserting += new ObjectDataSourceMethodEventHandler (odc_Inserting);
  513. p.Controls.Add (ods);
  514. Assert.AreEqual (3, ((DataView) ods.Select ()).Count, "BeforeInsert");
  515. Assert.AreEqual (false, inserted , "BeforeInsertedEvent");
  516. Assert.AreEqual (false, inserting , "BeforeInsertingEvent");
  517. ods.Insert ();
  518. Assert.AreEqual (4, ((DataView) ods.Select ()).Count , "AfterInsert1");
  519. Assert.AreEqual (1004,((DataView) ods.Select ())[3].Row.ItemArray[0], "AfterInsert2");
  520. Assert.AreEqual ("David", ((DataView) ods.Select ())[3].Row.ItemArray[1], "AfterInsert3");
  521. Assert.AreEqual (true, inserted, "AfterInsertedEvent");
  522. Assert.AreEqual (true, inserting, "AfterInsertingEvent");
  523. }
  524. [Test]
  525. [Category ("NunitWeb")]
  526. public void ObjectDataSource_Update ()
  527. {
  528. string html = new WebTest (PageInvoker.CreateOnLoad (
  529. new PageDelegate (UpdateMethod))).Run ();
  530. }
  531. public static void UpdateMethod (Page p)
  532. {
  533. MyTableObject.ds = MyTableObject.CreateDataTable ();
  534. ObjectDataSourcePoker ods = new ObjectDataSourcePoker ();
  535. InitObjectDataSource (ods, "update");
  536. ods.Updated += new ObjectDataSourceStatusEventHandler (odc_Updated);
  537. ods.Updating += new ObjectDataSourceMethodEventHandler (odc_Updating);
  538. p.Controls.Add (ods);
  539. Assert.AreEqual (3, ((DataView) ods.Select ()).Count, "BeforeUpdate1");
  540. Assert.AreEqual (1001, ((DataView) ods.Select ())[0].Row.ItemArray[0], "BeforeUpdate2");
  541. Assert.AreEqual ("Mahesh", ((DataView) ods.Select ())[0].Row.ItemArray[1], "BeforeUpdate3");
  542. Assert.AreEqual ("Chand", ((DataView) ods.Select ())[0].Row.ItemArray[2], "BeforeUpdate4");
  543. Assert.AreEqual (false, updated, "BeforeUpdateEvent");
  544. Assert.AreEqual (false, updating, "BeforeUpdatingEvent");
  545. ods.Update ();
  546. Assert.AreEqual (3, ((DataView) ods.Select ()).Count, "AfterUpdate1");
  547. Assert.AreEqual (1001, ((DataView) ods.Select ())[0].Row.ItemArray[0], "AfterUpdate2");
  548. Assert.AreEqual ("David", ((DataView) ods.Select ())[0].Row.ItemArray[1], "AfterUpdate3");
  549. Assert.AreEqual ("Eli", ((DataView) ods.Select ())[0].Row.ItemArray[2], "AfterUpdate4");
  550. Assert.AreEqual (true, updated, "AfterUpdateEvent");
  551. Assert.AreEqual (true, updating, "AfterUpdatingEvent");
  552. }
  553. //Events
  554. private static bool deleted = false;
  555. private static bool deleting = false;
  556. private static bool filtering = false;
  557. private static bool inserted = false;
  558. private static bool inserting = false;
  559. private static bool objectCreated = false;
  560. private static bool objectCreating = false;
  561. private static bool objectDisposing = false;
  562. private static bool selected = false;
  563. private static bool selecting = false;
  564. private static bool updated = false;
  565. private static bool updating = false;
  566. // Tests for events Select,Update,Delete and Insert include in Select,Update,Delete and Insert methods tests.
  567. [Test]
  568. [Category ("NunitWeb")]
  569. public void ObjectDataSource_Events ()
  570. {
  571. string html = new WebTest (PageInvoker.CreateOnLoad (
  572. new PageDelegate (EventsTest))).Run ();
  573. }
  574. public static void EventsTest (Page p)
  575. {
  576. MyTableObject.ds = MyTableObject.CreateDataTable ();
  577. DetailsView dv = new DetailsView ();
  578. ObjectDataSourcePoker ods = new ObjectDataSourcePoker ();
  579. ods.ObjectCreated += new ObjectDataSourceObjectEventHandler (odc_ObjectCreated);
  580. ods.ObjectCreating += new ObjectDataSourceObjectEventHandler (odc_ObjectCreating);
  581. InitObjectDataSource (ods,"");
  582. ods.FilterExpression = "ID='1001'";
  583. dv.Page = p;
  584. ods.Page = p;
  585. dv.DataKeyNames = new string[] { "ID" };
  586. dv.DataSource = ods;
  587. p.Controls.Add (ods);
  588. p.Controls.Add (dv);
  589. dv.DataBind ();
  590. ods.Filtering += new ObjectDataSourceFilteringEventHandler (odc_Filtering);
  591. Assert.AreEqual (false, filtering, "BeforeFilteringEvent");
  592. ods.Select ();
  593. Assert.AreEqual (true, filtering, "AfterFilteringEvent");
  594. ods.ObjectDisposing += new ObjectDataSourceDisposingEventHandler (odc_ObjectDisposing);
  595. //ToDo: Dispose, ObjectCreated and ObjectCreating should be tested.
  596. }
  597. static void odc_Updating (object sender, ObjectDataSourceMethodEventArgs e)
  598. {
  599. updating = true;
  600. }
  601. static void odc_Updated (object sender, ObjectDataSourceStatusEventArgs e)
  602. {
  603. updated = true;
  604. }
  605. static void odc_Selecting (object sender, ObjectDataSourceSelectingEventArgs e)
  606. {
  607. selecting = true;
  608. }
  609. static void odc_Selected (object sender, ObjectDataSourceStatusEventArgs e)
  610. {
  611. selected = true;
  612. }
  613. static void odc_ObjectDisposing (object sender, ObjectDataSourceDisposingEventArgs e)
  614. {
  615. objectDisposing = true;
  616. }
  617. static void odc_ObjectCreating (object sender, ObjectDataSourceEventArgs e)
  618. {
  619. objectCreating = true;
  620. }
  621. static void odc_ObjectCreated (object sender, ObjectDataSourceEventArgs e)
  622. {
  623. objectCreated = true;
  624. }
  625. static void odc_Inserting (object sender, ObjectDataSourceMethodEventArgs e)
  626. {
  627. inserting = true;
  628. }
  629. static void odc_Inserted (object sender, ObjectDataSourceStatusEventArgs e)
  630. {
  631. inserted = true;
  632. }
  633. static void odc_Filtering (object sender, ObjectDataSourceFilteringEventArgs e)
  634. {
  635. filtering = true;
  636. }
  637. static void odc_Deleting (object sender, ObjectDataSourceMethodEventArgs e)
  638. {
  639. deleting = true;
  640. }
  641. static void odc_Deleted (object sender, ObjectDataSourceStatusEventArgs e)
  642. {
  643. deleted = true;
  644. }
  645. //Excpetions
  646. [Test]
  647. [ExpectedException (typeof (NotSupportedException))]
  648. [Category ("NunitWeb")]
  649. public void ObjectDataSource_EnableCachingException ()
  650. {
  651. string html = new WebTest (PageInvoker.CreateOnLoad (
  652. new PageDelegate (EnableCachingException))).Run ();
  653. }
  654. public static void EnableCachingException (Page p)
  655. {
  656. MyTableObject.ds = MyTableObject.CreateDataTable ();
  657. ObjectDataSourcePoker ods = new ObjectDataSourcePoker ();
  658. InitObjectDataSource (ods, "");
  659. ods.SelectMethod = "SelectException";
  660. ods.EnableCaching = true;
  661. p.Controls.Add (ods);
  662. IEnumerable table = (IEnumerable) ods.Select ();
  663. }
  664. [Test]
  665. [ExpectedException (typeof (NotSupportedException))]
  666. [Category ("NunitWeb")]
  667. public void ObjectDataSource_FilterExpressionException ()
  668. {
  669. string html = new WebTest (PageInvoker.CreateOnLoad (
  670. new PageDelegate (FilterExpressionException))).Run ();
  671. }
  672. public static void FilterExpressionException (Page p)
  673. {
  674. MyTableObject.ds = MyTableObject.CreateDataTable ();
  675. ObjectDataSourcePoker ods = new ObjectDataSourcePoker ();
  676. InitObjectDataSource (ods, "");
  677. ods.SelectMethod = "SelectException";
  678. ods.FilterExpression = "ID='1001'";
  679. p.Controls.Add (ods);
  680. IEnumerable table = (IEnumerable) ods.Select ();
  681. }
  682. }
  683. public class MyTableObject
  684. {
  685. public static DataTable ds = CreateDataTable ();
  686. public static DataTable GetMyData ()
  687. {
  688. return ds;
  689. }
  690. public static DbDataReader SelectException ()
  691. {
  692. return new DataTableReader (new DataTable ());
  693. }
  694. public static int SelectCount ()
  695. {
  696. return 20;
  697. }
  698. public static DataTable Delete (string ID, string FName, string LName)
  699. {
  700. DataRow dr = ds.Rows.Find (ID);
  701. ds.Rows.Remove (dr);
  702. return ds;
  703. }
  704. public static DataTable Update (string ID, string FName, string LName)
  705. {
  706. DataRow dr = ds.Rows.Find (ID);
  707. if (dr == null) {
  708. Label lbl = new Label ();
  709. lbl.Text = "ID doesn't exist. update only FName and LName";
  710. return ds;
  711. }
  712. dr["FName"] = FName;
  713. dr["LName"] = LName;
  714. return ds;
  715. }
  716. public static DataTable Insert (string ID, string FName, string LName)
  717. {
  718. DataRow dr = ds.NewRow ();
  719. dr["ID"] = ID;
  720. dr["FName"] = FName;
  721. dr["LName"] = LName;
  722. ds.Rows.Add (dr);
  723. return ds;
  724. }
  725. public static DataTable CreateDataTable ()
  726. {
  727. DataTable aTable = new DataTable ("A");
  728. DataColumn dtCol;
  729. DataRow dtRow;
  730. // Create ID column and add to the DataTable.
  731. dtCol = new DataColumn ();
  732. dtCol.DataType = Type.GetType ("System.Int32");
  733. dtCol.ColumnName = "ID";
  734. dtCol.AutoIncrement = true;
  735. dtCol.Caption = "ID";
  736. dtCol.ReadOnly = true;
  737. dtCol.Unique = true;
  738. // Add the column to the DataColumnCollection.
  739. aTable.Columns.Add (dtCol);
  740. // Create Name column and add to the table
  741. dtCol = new DataColumn ();
  742. dtCol.DataType = Type.GetType ("System.String");
  743. dtCol.ColumnName = "FName";
  744. dtCol.AutoIncrement = false;
  745. dtCol.Caption = "First Name";
  746. dtCol.ReadOnly = false;
  747. dtCol.Unique = false;
  748. aTable.Columns.Add (dtCol);
  749. // Create Last Name column and add to the table.
  750. dtCol = new DataColumn ();
  751. dtCol.DataType = Type.GetType ("System.String");
  752. dtCol.ColumnName = "LName";
  753. dtCol.AutoIncrement = false;
  754. dtCol.Caption = "Last Name";
  755. dtCol.ReadOnly = false;
  756. dtCol.Unique = false;
  757. aTable.Columns.Add (dtCol);
  758. // Create three rows to the table
  759. dtRow = aTable.NewRow ();
  760. dtRow["ID"] = 1001;
  761. dtRow["FName"] = "Mahesh";
  762. dtRow["LName"] = "Chand";
  763. aTable.Rows.Add (dtRow);
  764. dtRow = aTable.NewRow ();
  765. dtRow["ID"] = 1002;
  766. dtRow["FName"] = "Melanie";
  767. dtRow["LName"] = "Talmadge";
  768. aTable.Rows.Add (dtRow);
  769. dtRow = aTable.NewRow ();
  770. dtRow["ID"] = 1003;
  771. dtRow["FName"] = "Vinay";
  772. dtRow["LName"] = "Bansal";
  773. aTable.Rows.Add (dtRow);
  774. aTable.PrimaryKey = new DataColumn[] { aTable.Columns["ID"] };
  775. return aTable;
  776. }
  777. public static DataTable SelectForPaging (int startIndex, int maxRows)
  778. {
  779. DataTable table = new DataTable ();
  780. table.Columns.Add ("Name", typeof (string));
  781. table.Columns.Add ("Number", typeof (int));
  782. int current;
  783. for (int i = 0; i < maxRows; i++) {
  784. current = i + startIndex;
  785. table.Rows.Add (new object[] { "Number" + current.ToString (), current });
  786. }
  787. return table;
  788. }
  789. }
  790. }
  791. #endif