ObjectDataSourceTest.cs 29 KB

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