ObjectDataSourceTest.cs 30 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922
  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 ("NunitWeb")]
  260. public void ObjectDataSource_ConvertNullToDBNull ()
  261. {
  262. string html = new WebTest (PageInvoker.CreateOnLoad (
  263. 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. public void ObjectDataSource_EnablePaging ()
  349. {
  350. string html = new WebTest (PageInvoker.CreateOnLoad (
  351. new PageDelegate (EnablePaging))).Run ();
  352. string newHtml = HtmlDiff.GetControlFromPageHtml (html);
  353. string origHtml = @"<div>
  354. <table cellspacing=""0"" rules=""all"" border=""1"" style=""border-collapse:collapse;"">
  355. <tr>
  356. <th scope=""col"">Name</th><th scope=""col"">Number</th>
  357. </tr><tr>
  358. <td>Number0</td><td>0</td>
  359. </tr><tr>
  360. <td>Number1</td><td>1</td>
  361. </tr><tr>
  362. <td>Number2</td><td>2</td>
  363. </tr><tr>
  364. <td>Number3</td><td>3</td>
  365. </tr><tr>
  366. <td>Number4</td><td>4</td>
  367. </tr><tr>
  368. <td colspan=""2""><table border=""0"">
  369. <tr>
  370. <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>
  371. </tr>
  372. </table></td>
  373. </tr>
  374. </table>
  375. </div>";
  376. HtmlDiff.AssertAreEqual (origHtml, newHtml, "EnablePaging");
  377. }
  378. public static void EnablePaging (Page p)
  379. {
  380. LiteralControl lcb = new LiteralControl (HtmlDiff.BEGIN_TAG);
  381. LiteralControl lce = new LiteralControl (HtmlDiff.END_TAG);
  382. GridView gv = new GridView ();
  383. ObjectDataSourcePoker ods = new ObjectDataSourcePoker ();
  384. ods.ID = "ObjectDataSource1";
  385. ods.TypeName = "MonoTests.System.Web.UI.WebControls.MyTableObject";
  386. ods.SelectMethod = "SelectForPaging";
  387. ods.EnablePaging = true;
  388. ods.SelectCountMethod = "SelectCount";
  389. ods.MaximumRowsParameterName = "maxRows";
  390. ods.StartRowIndexParameterName = "startIndex";
  391. gv.AllowPaging = true;
  392. gv.PageSize = 5;
  393. p.Controls.Add (lcb);
  394. p.Controls.Add (gv);
  395. p.Controls.Add (ods);
  396. p.Controls.Add (lce);
  397. gv.DataSourceID = "ObjectDataSource1";
  398. gv.DataBind ();
  399. }
  400. //public methods
  401. [Test]
  402. [Category ("NunitWeb")]
  403. public void ObjectDataSource_Delete ()
  404. {
  405. string html = new WebTest (PageInvoker.CreateOnLoad (
  406. new PageDelegate (DeleteMethod))).Run ();
  407. string newHtml = HtmlDiff.GetControlFromPageHtml (html);
  408. string origHtml = @"<div>
  409. <table cellspacing=""0"" rules=""all"" border=""1"" style=""border-collapse:collapse;"">
  410. <tr>
  411. <td>ID</td><td>1002</td>
  412. </tr><tr>
  413. <td>FName</td><td>Melanie</td>
  414. </tr><tr>
  415. <td>LName</td><td>Talmadge</td>
  416. </tr>
  417. </table>
  418. </div>";
  419. HtmlDiff.AssertAreEqual (origHtml, newHtml, "DeleteRender");
  420. }
  421. public static void DeleteMethod (Page p)
  422. {
  423. LiteralControl lcb = new LiteralControl (HtmlDiff.BEGIN_TAG);
  424. LiteralControl lce = new LiteralControl (HtmlDiff.END_TAG);
  425. MyTableObject.ds = MyTableObject.CreateDataTable ();
  426. DetailsView dv = new DetailsView ();
  427. ObjectDataSourcePoker ods = new ObjectDataSourcePoker ();
  428. ods.Deleted += new ObjectDataSourceStatusEventHandler (odc_Deleted);
  429. ods.Deleting += new ObjectDataSourceMethodEventHandler (odc_Deleting);
  430. InitObjectDataSource (ods,"");
  431. dv.Page = p;
  432. ods.Page = p;
  433. dv.DataKeyNames = new string[] { "ID" };
  434. dv.DataSource = ods;
  435. p.Controls.Add (lcb);
  436. p.Controls.Add (ods);
  437. p.Controls.Add (dv);
  438. p.Controls.Add (lce);
  439. dv.DataBind ();
  440. Assert.AreEqual (3, dv.DataItemCount, "BeforeDelete1");
  441. Assert.AreEqual (1001, dv.SelectedValue, "BeforeDelete2");
  442. Assert.AreEqual (false, deleting, "BeforeDeletingEvent");
  443. Assert.AreEqual (false, deleted, "BeforeDeletedEvent");
  444. ods.Delete ();
  445. dv.DataBind ();
  446. Assert.AreEqual (true, deleting, "AfterDeletingEvent");
  447. Assert.AreEqual (true, deleted, "AfterDeletedEvent");
  448. Assert.AreEqual (2, dv.DataItemCount, "BeforeDelete1");
  449. Assert.AreEqual (1002, dv.SelectedValue, "BeforeDelete2");
  450. }
  451. [Test]
  452. [Category ("NunitWeb")]
  453. public void ObjectDataSource_Select ()
  454. {
  455. string html = new WebTest (PageInvoker.CreateOnLoad (
  456. new PageDelegate (SelectMethod))).Run ();
  457. }
  458. public static void SelectMethod (Page p)
  459. {
  460. MyTableObject.ds = MyTableObject.CreateDataTable ();
  461. ObjectDataSourcePoker ods = new ObjectDataSourcePoker ();
  462. InitObjectDataSource (ods,"");
  463. ods.Selected += new ObjectDataSourceStatusEventHandler (odc_Selected);
  464. ods.Selecting += new ObjectDataSourceSelectingEventHandler (odc_Selecting);
  465. p.Controls.Add (ods);
  466. Assert.AreEqual (false, selecting, "BeforeSelectingEvent");
  467. Assert.AreEqual (false, selected, "BeforeSelectedEvent");
  468. IEnumerable table = (IEnumerable) ods.Select ();
  469. Assert.AreEqual (3,((DataView) table).Count, "ItemsCount");
  470. Assert.AreEqual ("Mahesh", ((DataView) table)[0].Row.ItemArray[1], "FirstItemData");
  471. Assert.AreEqual (1002, ((DataView) table)[1].Row.ItemArray[0], "SecondItemData");
  472. Assert.AreEqual ("Bansal", ((DataView) table)[2].Row.ItemArray[2], "ThirdItemData");
  473. Assert.AreEqual (true, selecting, "AfterSelectingEvent");
  474. Assert.AreEqual (true, selected, "AfterSelectedEvent");
  475. }
  476. [Test]
  477. [Category ("NunitWeb")]
  478. public void ObjectDataSource_Select_Cached ()
  479. {
  480. string html = new WebTest (PageInvoker.CreateOnLoad (
  481. new PageDelegate (SelectMethodCached))).Run ();
  482. }
  483. public static void SelectMethodCached (Page p)
  484. {
  485. MyTableObject.ds = MyTableObject.CreateDataTable ();
  486. ObjectDataSourcePoker ods = new ObjectDataSourcePoker ();
  487. ods.EnableCaching = true;
  488. InitObjectDataSource (ods, "");
  489. p.Controls.Add (ods);
  490. ods.Selecting += new ObjectDataSourceSelectingEventHandler (odc_Selecting);
  491. selecting = false;
  492. IEnumerable table = (IEnumerable) ods.Select ();
  493. Assert.AreEqual (true, selecting, "AfterSelectingEvent");
  494. selecting = false;
  495. IEnumerable table2 = (IEnumerable) ods.Select ();
  496. Assert.AreEqual (false, selecting, "AfterSelectingEvent");
  497. }
  498. [Test]
  499. [Category ("NunitWeb")]
  500. public void ObjectDataSource_Insert ()
  501. {
  502. string html = new WebTest (PageInvoker.CreateOnLoad (
  503. new PageDelegate (InsertMethod))).Run ();
  504. }
  505. public static void InsertMethod (Page p)
  506. {
  507. MyTableObject.ds = MyTableObject.CreateDataTable ();
  508. ObjectDataSourcePoker ods = new ObjectDataSourcePoker ();
  509. InitObjectDataSource (ods,"insert");
  510. ods.Inserted += new ObjectDataSourceStatusEventHandler (odc_Inserted);
  511. ods.Inserting += new ObjectDataSourceMethodEventHandler (odc_Inserting);
  512. p.Controls.Add (ods);
  513. Assert.AreEqual (3, ((DataView) ods.Select ()).Count, "BeforeInsert");
  514. Assert.AreEqual (false, inserted , "BeforeInsertedEvent");
  515. Assert.AreEqual (false, inserting , "BeforeInsertingEvent");
  516. ods.Insert ();
  517. Assert.AreEqual (4, ((DataView) ods.Select ()).Count , "AfterInsert1");
  518. Assert.AreEqual (1004,((DataView) ods.Select ())[3].Row.ItemArray[0], "AfterInsert2");
  519. Assert.AreEqual ("David", ((DataView) ods.Select ())[3].Row.ItemArray[1], "AfterInsert3");
  520. Assert.AreEqual (true, inserted, "AfterInsertedEvent");
  521. Assert.AreEqual (true, inserting, "AfterInsertingEvent");
  522. }
  523. [Test]
  524. [Category ("NunitWeb")]
  525. public void ObjectDataSource_Update ()
  526. {
  527. string html = new WebTest (PageInvoker.CreateOnLoad (
  528. new PageDelegate (UpdateMethod))).Run ();
  529. }
  530. public static void UpdateMethod (Page p)
  531. {
  532. MyTableObject.ds = MyTableObject.CreateDataTable ();
  533. ObjectDataSourcePoker ods = new ObjectDataSourcePoker ();
  534. InitObjectDataSource (ods, "update");
  535. ods.Updated += new ObjectDataSourceStatusEventHandler (odc_Updated);
  536. ods.Updating += new ObjectDataSourceMethodEventHandler (odc_Updating);
  537. p.Controls.Add (ods);
  538. Assert.AreEqual (3, ((DataView) ods.Select ()).Count, "BeforeUpdate1");
  539. Assert.AreEqual (1001, ((DataView) ods.Select ())[0].Row.ItemArray[0], "BeforeUpdate2");
  540. Assert.AreEqual ("Mahesh", ((DataView) ods.Select ())[0].Row.ItemArray[1], "BeforeUpdate3");
  541. Assert.AreEqual ("Chand", ((DataView) ods.Select ())[0].Row.ItemArray[2], "BeforeUpdate4");
  542. Assert.AreEqual (false, updated, "BeforeUpdateEvent");
  543. Assert.AreEqual (false, updating, "BeforeUpdatingEvent");
  544. ods.Update ();
  545. Assert.AreEqual (3, ((DataView) ods.Select ()).Count, "AfterUpdate1");
  546. Assert.AreEqual (1001, ((DataView) ods.Select ())[0].Row.ItemArray[0], "AfterUpdate2");
  547. Assert.AreEqual ("David", ((DataView) ods.Select ())[0].Row.ItemArray[1], "AfterUpdate3");
  548. Assert.AreEqual ("Eli", ((DataView) ods.Select ())[0].Row.ItemArray[2], "AfterUpdate4");
  549. Assert.AreEqual (true, updated, "AfterUpdateEvent");
  550. Assert.AreEqual (true, updating, "AfterUpdatingEvent");
  551. }
  552. //Events
  553. private static bool deleted = false;
  554. private static bool deleting = false;
  555. private static bool filtering = false;
  556. private static bool inserted = false;
  557. private static bool inserting = false;
  558. private static bool objectCreated = false;
  559. private static bool objectCreating = false;
  560. private static bool objectDisposing = false;
  561. private static bool selected = false;
  562. private static bool selecting = false;
  563. private static bool updated = false;
  564. private static bool updating = false;
  565. // Tests for events Select,Update,Delete and Insert include in Select,Update,Delete and Insert methods tests.
  566. [Test]
  567. [Category ("NunitWeb")]
  568. public void ObjectDataSource_Events ()
  569. {
  570. string html = new WebTest (PageInvoker.CreateOnLoad (
  571. new PageDelegate (EventsTest))).Run ();
  572. }
  573. public static void EventsTest (Page p)
  574. {
  575. MyTableObject.ds = MyTableObject.CreateDataTable ();
  576. DetailsView dv = new DetailsView ();
  577. ObjectDataSourcePoker ods = new ObjectDataSourcePoker ();
  578. ods.ObjectCreated += new ObjectDataSourceObjectEventHandler (odc_ObjectCreated);
  579. ods.ObjectCreating += new ObjectDataSourceObjectEventHandler (odc_ObjectCreating);
  580. InitObjectDataSource (ods,"");
  581. ods.FilterExpression = "ID='1001'";
  582. dv.Page = p;
  583. ods.Page = p;
  584. dv.DataKeyNames = new string[] { "ID" };
  585. dv.DataSource = ods;
  586. p.Controls.Add (ods);
  587. p.Controls.Add (dv);
  588. dv.DataBind ();
  589. ods.Filtering += new ObjectDataSourceFilteringEventHandler (odc_Filtering);
  590. Assert.AreEqual (false, filtering, "BeforeFilteringEvent");
  591. ods.Select ();
  592. Assert.AreEqual (true, filtering, "AfterFilteringEvent");
  593. ods.ObjectDisposing += new ObjectDataSourceDisposingEventHandler (odc_ObjectDisposing);
  594. //ToDo: Dispose, ObjectCreated and ObjectCreating should be tested.
  595. }
  596. static void odc_Updating (object sender, ObjectDataSourceMethodEventArgs e)
  597. {
  598. updating = true;
  599. }
  600. static void odc_Updated (object sender, ObjectDataSourceStatusEventArgs e)
  601. {
  602. updated = true;
  603. }
  604. static void odc_Selecting (object sender, ObjectDataSourceSelectingEventArgs e)
  605. {
  606. selecting = true;
  607. }
  608. static void odc_Selected (object sender, ObjectDataSourceStatusEventArgs e)
  609. {
  610. selected = true;
  611. }
  612. static void odc_ObjectDisposing (object sender, ObjectDataSourceDisposingEventArgs e)
  613. {
  614. objectDisposing = true;
  615. }
  616. static void odc_ObjectCreating (object sender, ObjectDataSourceEventArgs e)
  617. {
  618. objectCreating = true;
  619. }
  620. static void odc_ObjectCreated (object sender, ObjectDataSourceEventArgs e)
  621. {
  622. objectCreated = true;
  623. }
  624. static void odc_Inserting (object sender, ObjectDataSourceMethodEventArgs e)
  625. {
  626. inserting = true;
  627. }
  628. static void odc_Inserted (object sender, ObjectDataSourceStatusEventArgs e)
  629. {
  630. inserted = true;
  631. }
  632. static void odc_Filtering (object sender, ObjectDataSourceFilteringEventArgs e)
  633. {
  634. filtering = true;
  635. }
  636. static void odc_Deleting (object sender, ObjectDataSourceMethodEventArgs e)
  637. {
  638. deleting = true;
  639. }
  640. static void odc_Deleted (object sender, ObjectDataSourceStatusEventArgs e)
  641. {
  642. deleted = true;
  643. }
  644. //Excpetions
  645. [Test]
  646. [ExpectedException (typeof (NotSupportedException))]
  647. [Category ("NunitWeb")]
  648. public void ObjectDataSource_EnableCachingException ()
  649. {
  650. string html = new WebTest (PageInvoker.CreateOnLoad (
  651. new PageDelegate (EnableCachingException))).Run ();
  652. }
  653. public static void EnableCachingException (Page p)
  654. {
  655. MyTableObject.ds = MyTableObject.CreateDataTable ();
  656. ObjectDataSourcePoker ods = new ObjectDataSourcePoker ();
  657. InitObjectDataSource (ods, "");
  658. ods.SelectMethod = "SelectException";
  659. ods.EnableCaching = true;
  660. p.Controls.Add (ods);
  661. IEnumerable table = (IEnumerable) ods.Select ();
  662. }
  663. [Test]
  664. [ExpectedException (typeof (NotSupportedException))]
  665. [Category ("NunitWeb")]
  666. public void ObjectDataSource_FilterExpressionException ()
  667. {
  668. string html = new WebTest (PageInvoker.CreateOnLoad (
  669. new PageDelegate (FilterExpressionException))).Run ();
  670. }
  671. public static void FilterExpressionException (Page p)
  672. {
  673. MyTableObject.ds = MyTableObject.CreateDataTable ();
  674. ObjectDataSourcePoker ods = new ObjectDataSourcePoker ();
  675. InitObjectDataSource (ods, "");
  676. ods.SelectMethod = "SelectException";
  677. ods.FilterExpression = "ID='1001'";
  678. p.Controls.Add (ods);
  679. IEnumerable table = (IEnumerable) ods.Select ();
  680. }
  681. }
  682. public class MyTableObject
  683. {
  684. public static DataTable ds = CreateDataTable ();
  685. public static DataTable GetMyData ()
  686. {
  687. return ds;
  688. }
  689. public static DbDataReader SelectException ()
  690. {
  691. return new DataTableReader (new DataTable ());
  692. }
  693. public static int SelectCount ()
  694. {
  695. return 20;
  696. }
  697. public static DataTable Delete (string ID, string FName, string LName)
  698. {
  699. DataRow dr = ds.Rows.Find (ID);
  700. ds.Rows.Remove (dr);
  701. return ds;
  702. }
  703. public static DataTable Update (string ID, string FName, string LName)
  704. {
  705. DataRow dr = ds.Rows.Find (ID);
  706. if (dr == null) {
  707. Label lbl = new Label ();
  708. lbl.Text = "ID doesn't exist. update only FName and LName";
  709. return ds;
  710. }
  711. dr["FName"] = FName;
  712. dr["LName"] = LName;
  713. return ds;
  714. }
  715. public static DataTable Insert (string ID, string FName, string LName)
  716. {
  717. DataRow dr = ds.NewRow ();
  718. dr["ID"] = ID;
  719. dr["FName"] = FName;
  720. dr["LName"] = LName;
  721. ds.Rows.Add (dr);
  722. return ds;
  723. }
  724. public static DataTable CreateDataTable ()
  725. {
  726. DataTable aTable = new DataTable ("A");
  727. DataColumn dtCol;
  728. DataRow dtRow;
  729. // Create ID column and add to the DataTable.
  730. dtCol = new DataColumn ();
  731. dtCol.DataType = Type.GetType ("System.Int32");
  732. dtCol.ColumnName = "ID";
  733. dtCol.AutoIncrement = true;
  734. dtCol.Caption = "ID";
  735. dtCol.ReadOnly = true;
  736. dtCol.Unique = true;
  737. // Add the column to the DataColumnCollection.
  738. aTable.Columns.Add (dtCol);
  739. // Create Name column and add to the table
  740. dtCol = new DataColumn ();
  741. dtCol.DataType = Type.GetType ("System.String");
  742. dtCol.ColumnName = "FName";
  743. dtCol.AutoIncrement = false;
  744. dtCol.Caption = "First Name";
  745. dtCol.ReadOnly = false;
  746. dtCol.Unique = false;
  747. aTable.Columns.Add (dtCol);
  748. // Create Last Name column and add to the table.
  749. dtCol = new DataColumn ();
  750. dtCol.DataType = Type.GetType ("System.String");
  751. dtCol.ColumnName = "LName";
  752. dtCol.AutoIncrement = false;
  753. dtCol.Caption = "Last Name";
  754. dtCol.ReadOnly = false;
  755. dtCol.Unique = false;
  756. aTable.Columns.Add (dtCol);
  757. // Create three rows to the table
  758. dtRow = aTable.NewRow ();
  759. dtRow["ID"] = 1001;
  760. dtRow["FName"] = "Mahesh";
  761. dtRow["LName"] = "Chand";
  762. aTable.Rows.Add (dtRow);
  763. dtRow = aTable.NewRow ();
  764. dtRow["ID"] = 1002;
  765. dtRow["FName"] = "Melanie";
  766. dtRow["LName"] = "Talmadge";
  767. aTable.Rows.Add (dtRow);
  768. dtRow = aTable.NewRow ();
  769. dtRow["ID"] = 1003;
  770. dtRow["FName"] = "Vinay";
  771. dtRow["LName"] = "Bansal";
  772. aTable.Rows.Add (dtRow);
  773. aTable.PrimaryKey = new DataColumn[] { aTable.Columns["ID"] };
  774. return aTable;
  775. }
  776. public static DataTable SelectForPaging (int startIndex, int maxRows)
  777. {
  778. DataTable table = new DataTable ();
  779. table.Columns.Add ("Name", typeof (string));
  780. table.Columns.Add ("Number", typeof (int));
  781. int current;
  782. for (int i = 0; i < maxRows; i++) {
  783. current = i + startIndex;
  784. table.Rows.Add (new object[] { "Number" + current.ToString (), current });
  785. }
  786. return table;
  787. }
  788. }
  789. }
  790. #endif