ObjectDataSourceViewTest.cs 30 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949
  1. //
  2. // Tests for System.Web.UI.WebControls.ObjectDataSourceView
  3. //
  4. // Author:
  5. // Chris Toshok ([email protected])
  6. // Konstantin Triger ([email protected])
  7. // Yoni Klain ([email protected])
  8. //
  9. //
  10. // Copyright (C) 2006 Novell, Inc (http://www.novell.com)
  11. //
  12. // Permission is hereby granted, free of charge, to any person obtaining
  13. // a copy of this software and associated documentation files (the
  14. // "Software"), to deal in the Software without restriction, including
  15. // without limitation the rights to use, copy, modify, merge, publish,
  16. // distribute, sublicense, and/or sell copies of the Software, and to
  17. // permit persons to whom the Software is furnished to do so, subject to
  18. // the following conditions:
  19. //
  20. // The above copyright notice and this permission notice shall be
  21. // included in all copies or substantial portions of the Software.
  22. //
  23. // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
  24. // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
  25. // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
  26. // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
  27. // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
  28. // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
  29. // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
  30. //
  31. // WARNING NOTES : ALL NUNITWEB TESTS DOING UNLOAD BETWEEN TESTS FOR RELOAD
  32. // OBJECT DATA SOURCE DEFAULT DATA
  33. #if NET_2_0
  34. using NUnit.Framework;
  35. using System;
  36. using Sys = System;
  37. using System.Configuration;
  38. using System.Data.Common;
  39. using System.IO;
  40. using System.Globalization;
  41. using System.Web;
  42. using System.Web.UI;
  43. using System.Web.UI.WebControls;
  44. using System.Data;
  45. using System.Collections;
  46. using MonoTests.SystemWeb.Framework;
  47. using MonoTests.stand_alone.WebHarness;
  48. using System.Threading;
  49. namespace MonoTests.System.Web.UI.WebControls
  50. {
  51. class ObjectViewPoker : ObjectDataSourceView
  52. {
  53. public ObjectViewPoker (ObjectDataSource ds, string name, HttpContext context)
  54. : base (ds, name, context)
  55. {
  56. TrackViewState ();
  57. }
  58. public bool IsTrackingViewState ()
  59. {
  60. return base.IsTrackingViewState;
  61. }
  62. public object SaveToViewState ()
  63. {
  64. return SaveViewState ();
  65. }
  66. public void LoadFromViewState (object savedState)
  67. {
  68. LoadViewState (savedState);
  69. }
  70. public void DoOnDeleting (ObjectDataSourceMethodEventArgs e)
  71. {
  72. base.OnDeleting (e);
  73. }
  74. public void DoOnInserting (ObjectDataSourceMethodEventArgs e)
  75. {
  76. base.OnInserting (e);
  77. }
  78. public void DoOnFiltering (ObjectDataSourceFilteringEventArgs e)
  79. {
  80. base.OnFiltering (e);
  81. }
  82. public void DoOnObjectCreating (ObjectDataSourceEventArgs e)
  83. {
  84. base.OnObjectCreating (e);
  85. }
  86. public void DoOnObjectCreated (ObjectDataSourceEventArgs e)
  87. {
  88. base.OnObjectCreated (e);
  89. }
  90. public void DoOnObjectDisposing (ObjectDataSourceDisposingEventArgs e)
  91. {
  92. base.OnObjectDisposing (e);
  93. }
  94. public void DoOnSelecting (ObjectDataSourceSelectingEventArgs e)
  95. {
  96. base.OnSelecting (e);
  97. }
  98. public void DoOnUpdating (ObjectDataSourceMethodEventArgs e)
  99. {
  100. base.OnUpdating (e);
  101. }
  102. public void DoOnUpdated (ObjectDataSourceStatusEventArgs e)
  103. {
  104. base.OnUpdated (e);
  105. }
  106. public void DoOnDeleted (ObjectDataSourceStatusEventArgs e)
  107. {
  108. base.OnDeleted (e);
  109. }
  110. public void DoOnInserted (ObjectDataSourceStatusEventArgs e)
  111. {
  112. base.OnInserted (e);
  113. }
  114. public void DoOnSelected (ObjectDataSourceStatusEventArgs e)
  115. {
  116. base.OnSelected (e);
  117. }
  118. public int DoExecuteDelete (IDictionary keys, IDictionary oldValues)
  119. {
  120. return base.ExecuteDelete (keys, oldValues);
  121. }
  122. }
  123. [TestFixture]
  124. public class ObjectDataSourceViewTest
  125. {
  126. [TestFixtureTearDown]
  127. public void TearDown ()
  128. {
  129. WebTest.Unload ();
  130. }
  131. [Test]
  132. public void Defaults ()
  133. {
  134. ObjectDataSource ds = new ObjectDataSource ();
  135. ObjectViewPoker sql = new ObjectViewPoker (ds, "DefaultView", null);
  136. Assert.IsFalse (sql.CanDelete, "CanDelete");
  137. Assert.IsFalse (sql.CanInsert, "CanInsert");
  138. Assert.IsFalse (sql.CanPage, "CanPage");
  139. Assert.IsTrue (sql.CanSort, "CanSort");
  140. Assert.IsFalse (sql.CanUpdate, "CanUpdate");
  141. Assert.AreEqual (ConflictOptions.OverwriteChanges, sql.ConflictDetection, "ConflictDetection");
  142. Assert.IsFalse (sql.ConvertNullToDBNull, "ConvertNullToDBNull");
  143. Assert.AreEqual ("", sql.DataObjectTypeName, "DataObjectTypeName");
  144. Assert.AreEqual ("", sql.DeleteMethod, "DeleteMethod");
  145. Assert.IsNotNull (sql.DeleteParameters, "DeleteParameters");
  146. Assert.AreEqual (0, sql.DeleteParameters.Count, "DeleteParameters.Count");
  147. Assert.IsFalse (sql.EnablePaging, "EnablePaging");
  148. Assert.AreEqual ("", sql.InsertMethod, "InsertMethod");
  149. Assert.IsNotNull (sql.InsertParameters, "InsertParameters");
  150. Assert.AreEqual (0, sql.InsertParameters.Count, "InsertParameters.Count");
  151. Assert.AreEqual ("", sql.FilterExpression, "FilterExpression");
  152. Assert.IsNotNull (sql.FilterParameters, "FilterParameters");
  153. Assert.AreEqual (0, sql.FilterParameters.Count, "FilterParameters.Count");
  154. Assert.AreEqual ("maximumRows", sql.MaximumRowsParameterName, "MaximumRowsParameterName");
  155. Assert.AreEqual ("", sql.SelectCountMethod, "SelectCountMethod");
  156. Assert.AreEqual ("", sql.SelectMethod, "SelectMethod");
  157. Assert.AreEqual ("{0}", sql.OldValuesParameterFormatString, "OldValuesParameterFormatString");
  158. Assert.IsNotNull (sql.SelectParameters, "SelectParameters");
  159. Assert.AreEqual (0, sql.SelectParameters.Count, "SelectParameters.Count");
  160. Assert.AreEqual ("", sql.SortParameterName, "SortParameterName");
  161. Assert.IsNotNull (sql.UpdateParameters, "UpdateParameters");
  162. Assert.AreEqual (0, sql.UpdateParameters.Count, "UpdateParameters.Count");
  163. Assert.AreEqual ("startRowIndex", sql.StartRowIndexParameterName, "StartRowIndexParameterName");
  164. Assert.AreEqual ("", sql.TypeName, "TypeName");
  165. Assert.AreEqual ("", sql.UpdateMethod, "UpdateMethod");
  166. Assert.AreEqual (true, sql.IsTrackingViewState (), "IsTrackingViewState");
  167. }
  168. [Test]
  169. public void DefaultsNotWorking ()
  170. {
  171. ObjectDataSource ds = new ObjectDataSource ();
  172. ObjectViewPoker sql = new ObjectViewPoker (ds, "DefaultView", null);
  173. Assert.IsTrue (sql.CanRetrieveTotalRowCount, "CanRetrieveTotalRowCount");
  174. }
  175. [Test]
  176. public void DefaultsAssignProperties ()
  177. {
  178. ObjectDataSource ds = new ObjectDataSource ();
  179. ObjectViewPoker sql = new ObjectViewPoker (ds, "DefaultView", null);
  180. sql.ConflictDetection = ConflictOptions.CompareAllValues;
  181. Assert.AreEqual (ConflictOptions.CompareAllValues, sql.ConflictDetection, "ConflictDetection");
  182. sql.ConvertNullToDBNull = true;
  183. Assert.IsTrue (sql.ConvertNullToDBNull, "ConvertNullToDBNull");
  184. sql.DataObjectTypeName = "test";
  185. Assert.AreEqual ("test", sql.DataObjectTypeName, "DataObjectTypeName");
  186. sql.DeleteMethod = "test";
  187. Assert.AreEqual ("test", sql.DeleteMethod, "DeleteMethod");
  188. sql.EnablePaging = true;
  189. Assert.IsTrue (sql.EnablePaging, "EnablePaging");
  190. sql.InsertMethod = "test";
  191. Assert.AreEqual ("test", sql.InsertMethod, "InsertMethod");
  192. sql.FilterExpression = "test";
  193. Assert.AreEqual ("test", sql.FilterExpression, "FilterExpression");
  194. sql.MaximumRowsParameterName = "test";
  195. Assert.AreEqual ("test", sql.MaximumRowsParameterName, "MaximumRowsParameterName");
  196. sql.SelectCountMethod = "test";
  197. Assert.AreEqual ("test", sql.SelectCountMethod, "SelectCountMethod");
  198. sql.SelectMethod = "test";
  199. Assert.AreEqual ("test", sql.SelectMethod, "SelectMethod");
  200. sql.OldValuesParameterFormatString = "test";
  201. Assert.AreEqual ("test", sql.OldValuesParameterFormatString, "OldValuesParameterFormatString");
  202. sql.StartRowIndexParameterName = "test";
  203. Assert.AreEqual ("test", sql.StartRowIndexParameterName, "StartRowIndexParameterName");
  204. sql.TypeName = "test";
  205. Assert.AreEqual ("test", sql.TypeName, "TypeName");
  206. sql.UpdateMethod = "test";
  207. Assert.AreEqual ("test", sql.UpdateMethod, "UpdateMethod");
  208. Assert.AreEqual ("DefaultView", sql.Name, "Name");
  209. }
  210. [Test]
  211. public void ViewState ()
  212. {
  213. // Note :
  214. // IStateManager implementation allows public access to control state
  215. // Nothing added to viewstate
  216. ObjectDataSourceView view;
  217. MyDataSource ds = new MyDataSource ();
  218. ds.ID = "ObjectDataSource2";
  219. ds.TypeName = "MonoTests.System.Web.UI.WebControls.DataSourceObject";
  220. ds.SelectMethod = "Select";
  221. ds.SelectCountMethod = "SelectCount";
  222. Parameter p1 = new Parameter ("test", TypeCode.String);
  223. ds.SelectParameters.Add (p1);
  224. ds.FilterParameters.Add (p1);
  225. view = (ObjectDataSourceView) ds.DoGetView ("DefaultView");
  226. view.ConflictDetection = ConflictOptions.CompareAllValues;
  227. view.ConvertNullToDBNull = true;
  228. view.DataObjectTypeName = "test";
  229. view.DeleteMethod = "test";
  230. view.EnablePaging = true;
  231. view.InsertMethod = "test";
  232. view.FilterExpression = "test";
  233. view.MaximumRowsParameterName = "test";
  234. view.SelectCountMethod = "test";
  235. view.SelectMethod = "test";
  236. view.OldValuesParameterFormatString = "test";
  237. view.StartRowIndexParameterName = "test";
  238. view.TypeName = "test";
  239. view.UpdateMethod = "test";
  240. ((IStateManager) view).TrackViewState ();
  241. object state = ((IStateManager) view).SaveViewState ();
  242. ObjectDataSourceView copy = new ObjectDataSourceView (ds, "DefaultView", null);
  243. ((IStateManager) copy).LoadViewState (state);
  244. Assert.AreEqual (null, state, "ViewState#1");
  245. }
  246. [Test]
  247. public void CanDelete ()
  248. {
  249. ObjectDataSource ds = new ObjectDataSource ();
  250. ObjectViewPoker sql = new ObjectViewPoker (ds, "DefaultView", null);
  251. sql.DeleteMethod = "DeleteMethod";
  252. Assert.IsTrue (sql.CanDelete, "A1");
  253. sql.DeleteMethod = "";
  254. Assert.IsFalse (sql.CanDelete, "A2");
  255. sql.DeleteMethod = null;
  256. Assert.IsFalse (sql.CanDelete, "A3");
  257. }
  258. [Test]
  259. public void CanInsert ()
  260. {
  261. ObjectDataSource ds = new ObjectDataSource ();
  262. ObjectViewPoker sql = new ObjectViewPoker (ds, "DefaultView", null);
  263. sql.InsertMethod = "InsertMethod";
  264. Assert.IsTrue (sql.CanInsert, "A1");
  265. sql.InsertMethod = "";
  266. Assert.IsFalse (sql.CanInsert, "A2");
  267. sql.InsertMethod = null;
  268. Assert.IsFalse (sql.CanInsert, "A3");
  269. }
  270. [Test]
  271. public void CanUpdate ()
  272. {
  273. ObjectDataSource ds = new ObjectDataSource ();
  274. ObjectViewPoker sql = new ObjectViewPoker (ds, "DefaultView", null);
  275. sql.UpdateMethod = "UpdateMethod";
  276. Assert.IsTrue (sql.CanUpdate, "A1");
  277. sql.UpdateMethod = "";
  278. Assert.IsFalse (sql.CanUpdate, "A2");
  279. sql.UpdateMethod = null;
  280. Assert.IsFalse (sql.CanUpdate, "A3");
  281. }
  282. [Test]
  283. public void CanRetrieveTotalRowCount () {
  284. ObjectDataSource ds = new ObjectDataSource ();
  285. ObjectDataSourceView view = new ObjectDataSourceView (ds, "DefaultView", null);
  286. Assert.IsFalse (view.CanPage, "CanPage#1");
  287. Assert.IsTrue (view.CanRetrieveTotalRowCount, "CanRetrieveTotalRowCount#1");
  288. view.EnablePaging = true;
  289. Assert.IsTrue (view.CanPage, "CanPage#2");
  290. Assert.IsFalse (view.CanRetrieveTotalRowCount, "CanRetrieveTotalRowCount#2");
  291. view.SelectCountMethod = "SelectCountMethod";
  292. Assert.IsTrue (view.CanPage, "CanPage#3");
  293. Assert.IsTrue (view.CanRetrieveTotalRowCount, "CanRetrieveTotalRowCount#3");
  294. view.EnablePaging = false;
  295. Assert.IsFalse (view.CanPage, "CanPage#4");
  296. Assert.IsTrue (view.CanRetrieveTotalRowCount, "CanRetrieveTotalRowCount#4");
  297. }
  298. [Test]
  299. public void OldValuesParameterFormatString ()
  300. {
  301. ObjectDataSource ds = new ObjectDataSource ();
  302. Assert.AreEqual ("{0}", ds.OldValuesParameterFormatString, "A1");
  303. ds.OldValuesParameterFormatString = "hi {0}";
  304. ObjectViewPoker sql = new ObjectViewPoker (ds, "DefaultView", null);
  305. Assert.AreEqual ("{0}", sql.OldValuesParameterFormatString, "A2");
  306. ds.OldValuesParameterFormatString = "hi {0}";
  307. Assert.AreEqual ("{0}", sql.OldValuesParameterFormatString, "A3");
  308. ds.OldValuesParameterFormatString = "{0}";
  309. sql.OldValuesParameterFormatString = "hi {0}";
  310. Assert.AreEqual ("{0}", ds.OldValuesParameterFormatString, "A4");
  311. }
  312. [Test]
  313. [Category("NunitWeb")]
  314. public void DeleteMethod ()
  315. {
  316. WebTest t = new WebTest (PageInvoker.CreateOnLoad (delete));
  317. string html = t.Run ();
  318. Assert.AreEqual (-1, html.IndexOf("Yonik"), "ObjectDataSourceViewDelete");
  319. }
  320. public static void delete (Page p)
  321. {
  322. LiteralControl lcb = new LiteralControl (HtmlDiff.BEGIN_TAG);
  323. LiteralControl lce = new LiteralControl (HtmlDiff.END_TAG);
  324. ObjectDataSourceView view;
  325. GridView grid = new GridView ();
  326. MyDataSource ds = new MyDataSource ();
  327. ds.ID = "ObjectDataSource2";
  328. ds.TypeName = "MonoTests.System.Web.UI.WebControls.DataSourceObject";
  329. ds.SelectMethod = "Select";
  330. ds.DeleteMethod = "Delete";
  331. ds.InsertMethod = "Insert";
  332. ds.UpdateMethod = "Update";
  333. Parameter p1 = new Parameter ("ID", TypeCode.String);
  334. Parameter p2 = new Parameter ("FName", TypeCode.String);
  335. Parameter p3 = new Parameter ("LName", TypeCode.String);
  336. ds.DeleteParameters.Add (p1);
  337. ds.DeleteParameters.Add (p2);
  338. ds.DeleteParameters.Add (p3);
  339. grid.ID = "Grid";
  340. grid.DataKeyNames = new string[] { "ID", "FName", "LName" };
  341. grid.DataSourceID = "ObjectDataSource2";
  342. p.Form.Controls.Add (lcb);
  343. p.Form.Controls.Add (ds);
  344. p.Form.Controls.Add (grid);
  345. p.Form.Controls.Add (lce);
  346. view = (ObjectDataSourceView) ds.DoGetView ("DefaultView");
  347. view.Deleting += new ObjectDataSourceMethodEventHandler (Event);
  348. DataSourceObject.InitDS ();
  349. Hashtable table = new Hashtable ();
  350. table.Add ("ID", "1001");
  351. table.Add ("FName", "Yonik");
  352. table.Add ("LName", "Laim");
  353. view.Delete (table, null);
  354. Assert.AreEqual (true, view.CanDelete, "CanDelete");
  355. Assert.AreEqual ("Delete", view.DeleteMethod, "DeleteMethod");
  356. Assert.AreEqual (3, view.DeleteParameters.Count, "DeleteParameters.Count");
  357. Assert.AreEqual ("ID", view.DeleteParameters[0].Name, "DeleteParametersName#1");
  358. Assert.AreEqual ("FName", view.DeleteParameters[1].Name, "DeleteParametersName#2");
  359. Assert.AreEqual ("LName", view.DeleteParameters[2].Name, "DeleteParametersName#3");
  360. ObjectDataSourceViewTest.Eventassert ("Delete event has not fired");
  361. }
  362. [Test]
  363. [Category ("NunitWeb")]
  364. public void SelectMethod ()
  365. {
  366. WebTest t = new WebTest (PageInvoker.CreateOnLoad (select));
  367. string html = t.Run ();
  368. string origin = @"<div>
  369. <table cellspacing=""0"" rules=""all"" border=""1"" id=""Grid"" style=""border-collapse:collapse;"">
  370. <tr>
  371. <th scope=""col"">ID</th><th scope=""col"">FName</th><th scope=""col"">LName</th>
  372. </tr><tr>
  373. <td>1001</td><td>Mahesh</td><td>Chand</td>
  374. </tr>
  375. </table>
  376. </div>";
  377. HtmlDiff.AssertAreEqual (origin, HtmlDiff.GetControlFromPageHtml (html), "ObjectDataSourceViewSelect");
  378. }
  379. public static void select (Page p)
  380. {
  381. LiteralControl lcb = new LiteralControl (HtmlDiff.BEGIN_TAG);
  382. LiteralControl lce = new LiteralControl (HtmlDiff.END_TAG);
  383. ObjectDataSourceView view;
  384. GridView grid = new GridView ();
  385. MyDataSource ds = new MyDataSource ();
  386. ds.ID = "ObjectDataSource2";
  387. ds.TypeName = "MonoTests.System.Web.UI.WebControls.DataSourceObject";
  388. ds.SelectMethod = "Select";
  389. grid.ID = "Grid";
  390. grid.DataKeyNames = new string[] { "ID" };
  391. grid.DataSourceID = "ObjectDataSource2";
  392. p.Form.Controls.Add (lcb);
  393. p.Form.Controls.Add (ds);
  394. p.Form.Controls.Add (grid);
  395. p.Form.Controls.Add (lce);
  396. view = (ObjectDataSourceView) ds.DoGetView ("DefaultView");
  397. view.Selecting += new ObjectDataSourceSelectingEventHandler (view_Selecting);
  398. DataSourceObject.InitDS ();
  399. DataView view1 = (DataView) view.Select (new DataSourceSelectArguments ());
  400. Assert.AreEqual (1, view1.Count, "SelectedRowsCount");
  401. Assert.AreEqual (1001, view1[0].Row["ID"], "SelectedRowsValue#1");
  402. Assert.AreEqual ("Mahesh", view1[0].Row["FName"], "SelectedRowsValue#2");
  403. Assert.AreEqual ("Chand", view1[0].Row["LName"], "SelectedRowsValue#3");
  404. ObjectDataSourceViewTest.Eventassert ("Select event has not fired");
  405. }
  406. [Test]
  407. [Category ("NunitWeb")]
  408. public void SelectCountMethod ()
  409. {
  410. // This method will render grid view with paging
  411. // Note : ObjectDataSource will return page counter 5 hard coded
  412. WebTest t = new WebTest (PageInvoker.CreateOnLoad (selectcount));
  413. string html = t.Run ();
  414. string origin = @"<div>
  415. <table cellspacing=""0"" rules=""all"" border=""1"" id=""Grid"" style=""border-collapse:collapse;"">
  416. <tr>
  417. <th scope=""col"">ID</th><th scope=""col"">FName</th><th scope=""col"">LName</th>
  418. </tr><tr>
  419. <td>1001</td><td>Mahesh</td><td>Chand</td>
  420. </tr><tr>
  421. <td colspan=""3""><table border=""0"">
  422. <tr>
  423. <td><span>1</span></td><td><a href=""javascript:__doPostBack('Grid','Page$2')"">2</a></td><td><a href=""javascript:__doPostBack('Grid','Page$3')"">3</a></td><td><a href=""javascript:__doPostBack('Grid','Page$4')"">4</a></td><td><a href=""javascript:__doPostBack('Grid','Page$5')"">5</a></td>
  424. </tr>
  425. </table></td>
  426. </tr>
  427. </table>
  428. </div>";
  429. HtmlDiff.AssertAreEqual (origin, HtmlDiff.GetControlFromPageHtml (html), "ObjectDataSourceViewSelectCount");
  430. }
  431. public static void selectcount (Page p)
  432. {
  433. // This method will render grid view with paging
  434. // Note : ObjectDataSource will return page counter 5 hard coded
  435. LiteralControl lcb = new LiteralControl (HtmlDiff.BEGIN_TAG);
  436. LiteralControl lce = new LiteralControl (HtmlDiff.END_TAG);
  437. ObjectDataSourceView view;
  438. GridView grid = new GridView ();
  439. MyDataSource ds = new MyDataSource ();
  440. ds.ID = "ObjectDataSource2";
  441. ds.EnablePaging = true;
  442. ds.TypeName = "MonoTests.System.Web.UI.WebControls.DataSourceObject";
  443. ds.SelectMethod = "Select";
  444. ds.SelectCountMethod = "SelectCount";
  445. grid.ID = "Grid";
  446. grid.DataKeyNames = new string[] { "ID" };
  447. grid.DataSourceID = "ObjectDataSource2";
  448. grid.AllowPaging = true;
  449. grid.PageSize = 1;
  450. p.Form.Controls.Add (lcb);
  451. p.Form.Controls.Add (ds);
  452. p.Form.Controls.Add (grid);
  453. p.Form.Controls.Add (lce);
  454. view = (ObjectDataSourceView) ds.DoGetView ("DefaultView");
  455. Assert.IsTrue (view.CanRetrieveTotalRowCount, "CanRetrieveTotalRowCount");
  456. }
  457. [Test]
  458. [Category ("NunitWeb")]
  459. public void InsertMethod ()
  460. {
  461. WebTest t = new WebTest (PageInvoker.CreateOnLoad (insert));
  462. string html = t.Run ();
  463. string origin = @"<div>
  464. <table cellspacing=""0"" rules=""all"" border=""1"" id=""Grid"" style=""border-collapse:collapse;"">
  465. <tr>
  466. <th scope=""col"">ID</th><th scope=""col"">FName</th><th scope=""col"">LName</th>
  467. </tr><tr>
  468. <td>1001</td><td>Mahesh</td><td>Chand</td>
  469. </tr><tr>
  470. <td>1000</td><td>Yonik</td><td>Laim</td>
  471. </tr>
  472. </table>
  473. </div>";
  474. HtmlDiff.AssertAreEqual (origin, HtmlDiff.GetControlFromPageHtml (html), "ObjectDataSourceViewInsert");
  475. }
  476. public static void insert (Page p)
  477. {
  478. DataSourceObject.InitDS ();
  479. LiteralControl lcb = new LiteralControl (HtmlDiff.BEGIN_TAG);
  480. LiteralControl lce = new LiteralControl (HtmlDiff.END_TAG);
  481. ObjectDataSourceView view;
  482. GridView grid = new GridView ();
  483. MyDataSource ds = new MyDataSource ();
  484. ds.ID = "ObjectDataSource1";
  485. ds.TypeName = "MonoTests.System.Web.UI.WebControls.DataSourceObject";
  486. ds.SelectMethod = "Select";
  487. ds.InsertMethod = "Insert";
  488. Parameter p1 = new Parameter ("ID", TypeCode.String);
  489. Parameter p2 = new Parameter ("FName", TypeCode.String);
  490. Parameter p3 = new Parameter ("LName", TypeCode.String);
  491. ds.InsertParameters.Add (p1);
  492. ds.InsertParameters.Add (p2);
  493. ds.InsertParameters.Add (p3);
  494. grid.ID = "Grid";
  495. grid.DataSourceID = "ObjectDataSource1";
  496. p.Form.Controls.Add (lcb);
  497. p.Form.Controls.Add (ds);
  498. p.Form.Controls.Add (grid);
  499. p.Form.Controls.Add (lce);
  500. view = (ObjectDataSourceView) ds.DoGetView ("DefaultView");
  501. view.Inserting += new ObjectDataSourceMethodEventHandler (Event);
  502. Hashtable table = new Hashtable ();
  503. table.Add ("ID", "1000");
  504. table.Add ("FName", "Yonik");
  505. table.Add ("LName", "Laim");
  506. view.Insert (table);
  507. Assert.AreEqual (true, view.CanInsert, "CanInsert");
  508. Assert.AreEqual ("Insert", view.InsertMethod, "InsertMethod");
  509. Assert.AreEqual (3, view.InsertParameters.Count, "InsertParameters.Count");
  510. Assert.AreEqual ("ID", view.InsertParameters[0].Name, "InsertParametersName#1");
  511. Assert.AreEqual ("FName", view.InsertParameters[1].Name, "InsertParametersName#2");
  512. Assert.AreEqual ("LName", view.InsertParameters[2].Name, "InsertParametersName#3");
  513. ObjectDataSourceViewTest.Eventassert ("Insert event has not fired");
  514. }
  515. [Test]
  516. [Category ("NunitWeb")]
  517. public void UpdateMethod ()
  518. {
  519. WebTest t = new WebTest (PageInvoker.CreateOnLoad (update));
  520. string html = t.Run ();
  521. string origin = @"<div>
  522. <table cellspacing=""0"" rules=""all"" border=""1"" id=""Grid"" style=""border-collapse:collapse;"">
  523. <tr>
  524. <th scope=""col"">ID</th><th scope=""col"">FName</th><th scope=""col"">LName</th>
  525. </tr><tr>
  526. <td>1001</td><td>Yonik</td><td>Laim</td>
  527. </tr>
  528. </table>
  529. </div>";
  530. HtmlDiff.AssertAreEqual (origin, HtmlDiff.GetControlFromPageHtml (html), "ObjectDataSourceViewUpdate");
  531. }
  532. public static void update (Page p)
  533. {
  534. LiteralControl lcb = new LiteralControl (HtmlDiff.BEGIN_TAG);
  535. LiteralControl lce = new LiteralControl (HtmlDiff.END_TAG);
  536. ObjectDataSourceView view;
  537. GridView grid = new GridView ();
  538. MyDataSource ds = new MyDataSource ();
  539. ds.ID = "ObjectDataSource1";
  540. ds.TypeName = "MonoTests.System.Web.UI.WebControls.DataSourceObject";
  541. ds.SelectMethod = "Select";
  542. ds.DeleteMethod = "Delete";
  543. ds.InsertMethod = "Insert";
  544. ds.UpdateMethod = "Update";
  545. Parameter p1 = new Parameter ("ID", TypeCode.String);
  546. Parameter p2 = new Parameter ("FName", TypeCode.String);
  547. Parameter p3 = new Parameter ("LName", TypeCode.String);
  548. ds.UpdateParameters.Add (p1);
  549. ds.UpdateParameters.Add (p2);
  550. ds.UpdateParameters.Add (p3);
  551. grid.ID = "Grid";
  552. grid.DataSourceID = "ObjectDataSource1";
  553. p.Form.Controls.Add (lcb);
  554. p.Form.Controls.Add (ds);
  555. p.Form.Controls.Add (grid);
  556. p.Form.Controls.Add (lce);
  557. view = (ObjectDataSourceView) ds.DoGetView ("defaultView");
  558. view.Updating += new ObjectDataSourceMethodEventHandler (Event);
  559. DataSourceObject.InitDS ();
  560. Hashtable table = new Hashtable ();
  561. table.Add ("ID", "1001");
  562. table.Add ("FName", "Yonik");
  563. table.Add ("LName", "Laim");
  564. view.Update (null, table, null);
  565. Assert.AreEqual (true, view.CanUpdate, "CanUpdate");
  566. Assert.AreEqual ("Update", view.UpdateMethod, "UpdateMethod");
  567. Assert.AreEqual (3, view.UpdateParameters.Count, "UpdateParameters.Count");
  568. Assert.AreEqual ("ID", view.UpdateParameters[0].Name, "UpdateParametersName#1");
  569. Assert.AreEqual ("FName", view.UpdateParameters[1].Name, "UpdateParametersName#2");
  570. Assert.AreEqual ("LName", view.UpdateParameters[2].Name, "UpdateParametersName#3");
  571. ObjectDataSourceViewTest.Eventassert ("Update event has not fired");
  572. }
  573. //Events
  574. [Test]
  575. public void UpdateEvent ()
  576. {
  577. ObjectViewPoker view = new ObjectViewPoker (new ObjectDataSource (), "", null);
  578. view.Updating += new ObjectDataSourceMethodEventHandler (Event);
  579. view.DoOnUpdating (new ObjectDataSourceMethodEventArgs (null));
  580. Eventassert ("UpdateEvent");
  581. view.Updated += new ObjectDataSourceStatusEventHandler (view_Status);
  582. view.DoOnUpdated (new ObjectDataSourceStatusEventArgs (null, null));
  583. Eventassert ("UpdateEvent");
  584. }
  585. [Test]
  586. public void SelectEvent ()
  587. {
  588. ObjectViewPoker view = new ObjectViewPoker (new ObjectDataSource (), "", null);
  589. view.Selecting += new ObjectDataSourceSelectingEventHandler (view_Selecting);
  590. view.DoOnSelecting (new ObjectDataSourceSelectingEventArgs (null, new DataSourceSelectArguments (), false));
  591. Eventassert ("SelectingEvent");
  592. view.Selected += new ObjectDataSourceStatusEventHandler (view_Status);
  593. view.DoOnSelected (new ObjectDataSourceStatusEventArgs (null, null));
  594. Eventassert ("SelectedEvent");
  595. }
  596. [Test]
  597. public void InsertEvent ()
  598. {
  599. ObjectViewPoker view = new ObjectViewPoker (new ObjectDataSource (), "", null);
  600. view.Inserting += new ObjectDataSourceMethodEventHandler (Event);
  601. view.DoOnInserting (new ObjectDataSourceMethodEventArgs (null));
  602. Eventassert ("InsertingEvent");
  603. view.Inserted += new ObjectDataSourceStatusEventHandler (view_Status);
  604. view.DoOnInserted (new ObjectDataSourceStatusEventArgs (null, null));
  605. Eventassert ("InsertedEvent");
  606. }
  607. [Test]
  608. public void DeleteEvent ()
  609. {
  610. ObjectViewPoker view = new ObjectViewPoker (new ObjectDataSource (), "", null);
  611. view.Deleting += new ObjectDataSourceMethodEventHandler (Event);
  612. view.DoOnDeleting (new ObjectDataSourceMethodEventArgs (null));
  613. Eventassert ("DeletingEvent");
  614. view.Deleted += new ObjectDataSourceStatusEventHandler (view_Status);
  615. view.DoOnDeleted (new ObjectDataSourceStatusEventArgs (null, null));
  616. Eventassert ("DeletedEvent");
  617. }
  618. [Test]
  619. public void FilterEvent ()
  620. {
  621. ObjectViewPoker view = new ObjectViewPoker (new ObjectDataSource (), "", null);
  622. view.Filtering += new ObjectDataSourceFilteringEventHandler (view_Filtering);
  623. view.DoOnFiltering (new ObjectDataSourceFilteringEventArgs (null));
  624. Eventassert ("FilterEvent");
  625. }
  626. [Test]
  627. public void ObjectCreatingEvent ()
  628. {
  629. ObjectViewPoker view = new ObjectViewPoker (new ObjectDataSource (), "", null);
  630. view.ObjectCreating += new ObjectDataSourceObjectEventHandler (view_ObjectCreate);
  631. view.DoOnObjectCreating (new ObjectDataSourceEventArgs (null));
  632. Eventassert ("ObjectCreatingEvent");
  633. view.ObjectCreated += new ObjectDataSourceObjectEventHandler (view_ObjectCreate);
  634. view.DoOnObjectCreated (new ObjectDataSourceEventArgs (null));
  635. Eventassert ("ObjectCreatedEvent");
  636. view.ObjectDisposing += new ObjectDataSourceDisposingEventHandler (view_ObjectDisposing);
  637. }
  638. [Test]
  639. public void ObjectDisposing ()
  640. {
  641. ObjectViewPoker view = new ObjectViewPoker (new ObjectDataSource (), "", null);
  642. view.ObjectDisposing += new ObjectDataSourceDisposingEventHandler (view_ObjectDisposing);
  643. view.DoOnObjectDisposing (new ObjectDataSourceDisposingEventArgs (null));
  644. Eventassert ("ObjectDisposing");
  645. }
  646. /// <summary>
  647. /// Helper methods
  648. /// </summary>
  649. private static bool event_checker;
  650. private static void Eventassert (string message)
  651. {
  652. Assert.IsTrue (ObjectDataSourceViewTest.event_checker, message);
  653. ObjectDataSourceViewTest.event_checker = false;
  654. }
  655. static void Event (object sender, ObjectDataSourceMethodEventArgs e)
  656. {
  657. ObjectDataSourceViewTest.event_checker = true;
  658. }
  659. static void view_Selecting (object sender, ObjectDataSourceSelectingEventArgs e)
  660. {
  661. event_checker = true;
  662. }
  663. void view_Filtering (object sender, ObjectDataSourceFilteringEventArgs e)
  664. {
  665. event_checker = true;
  666. }
  667. void view_ObjectCreate (object sender, ObjectDataSourceEventArgs e)
  668. {
  669. event_checker = true;
  670. }
  671. void view_Status (object sender, ObjectDataSourceStatusEventArgs e)
  672. {
  673. event_checker = true;
  674. }
  675. void view_ObjectDisposing (object sender, ObjectDataSourceDisposingEventArgs e)
  676. {
  677. event_checker = true;
  678. }
  679. private class MyDataSource : ObjectDataSource
  680. {
  681. public DataSourceView DoGetView (string viewName)
  682. {
  683. return base.GetView (viewName);
  684. }
  685. public void DoTrackViewState ()
  686. {
  687. base.TrackViewState ();
  688. }
  689. }
  690. }
  691. public class DataSourceObject
  692. {
  693. private static int maximumRows;
  694. public static DataTable ds = CreateDataTable ();
  695. public static void InitDS ()
  696. {
  697. ds = CreateDataTable ();
  698. }
  699. public static DataTable Select ()
  700. {
  701. return ds;
  702. }
  703. [Sys.ComponentModel.DataObjectMethod(Sys.ComponentModel.DataObjectMethodType.Select, false)]
  704. public static DataTable Select (int maximumRows, short startRowIndex) {
  705. Assert.Fail ("Should not be called since not default Select DataObjectMethod");
  706. return null;
  707. }
  708. [Sys.ComponentModel.DataObjectMethod(Sys.ComponentModel.DataObjectMethodType.Select, true)]
  709. public static DataTable Select (int maximumRows, int startRowIndex)
  710. {
  711. DataSourceObject.maximumRows = maximumRows;
  712. if (ds.Rows.Count > maximumRows) {
  713. DataTable temp = ds.Clone ();
  714. int i = 0;
  715. while (i < maximumRows && startRowIndex <= ds.Rows.Count) {
  716. object[] o = ds.Rows[startRowIndex].ItemArray;
  717. temp.Rows.Add (o);
  718. i++;
  719. startRowIndex++;
  720. }
  721. return temp;
  722. }
  723. return ds;
  724. }
  725. public static DataTable Delete (string ID, string FName, string LName)
  726. {
  727. DataRow dr = ds.Rows.Find (ID);
  728. if (dr != null) {
  729. ds.Rows.Remove (dr);
  730. }
  731. return ds;
  732. }
  733. public static DataTable Insert (string ID, string FName, string LName)
  734. {
  735. DataRow dr = ds.NewRow ();
  736. dr["ID"] = ID;
  737. dr["FName"] = FName;
  738. dr["LName"] = LName;
  739. ds.Rows.Add (dr);
  740. return ds;
  741. }
  742. public static DataTable Update (string ID, string FName, string LName)
  743. {
  744. foreach (DataRow row in ds.Rows) {
  745. if (row["ID"].ToString () == ID) {
  746. row["FName"] = FName;
  747. row["LName"] = LName;
  748. }
  749. }
  750. return ds;
  751. }
  752. public static int SelectCount ()
  753. {
  754. //Note: This is return 5 only for test goal
  755. return 5;
  756. }
  757. public static DataTable CreateDataTable ()
  758. {
  759. DataTable aTable = new DataTable ("A");
  760. DataColumn dtCol;
  761. DataRow dtRow;
  762. // Create ID column and add to the DataTable.
  763. dtCol = new DataColumn ();
  764. dtCol.DataType = Type.GetType ("System.Int32");
  765. dtCol.ColumnName = "ID";
  766. dtCol.AutoIncrement = true;
  767. dtCol.Caption = "ID";
  768. dtCol.ReadOnly = true;
  769. dtCol.Unique = true;
  770. aTable.Columns.Add (dtCol);
  771. // Create Name column and add to the table
  772. dtCol = new DataColumn ();
  773. dtCol.DataType = Type.GetType ("System.String");
  774. dtCol.ColumnName = "FName";
  775. dtCol.AutoIncrement = false;
  776. dtCol.Caption = "First Name";
  777. dtCol.ReadOnly = false;
  778. dtCol.Unique = false;
  779. aTable.Columns.Add (dtCol);
  780. // Create Last Name column and add to the table.
  781. dtCol = new DataColumn ();
  782. dtCol.DataType = Type.GetType ("System.String");
  783. dtCol.ColumnName = "LName";
  784. dtCol.AutoIncrement = false;
  785. dtCol.Caption = "Last Name";
  786. dtCol.ReadOnly = false;
  787. dtCol.Unique = false;
  788. aTable.Columns.Add (dtCol);
  789. // Create three rows to the table
  790. dtRow = aTable.NewRow ();
  791. dtRow["ID"] = 1001;
  792. dtRow["FName"] = "Mahesh";
  793. dtRow["LName"] = "Chand";
  794. aTable.Rows.Add (dtRow);
  795. aTable.PrimaryKey = new DataColumn[] { aTable.Columns["ID"] };
  796. return aTable;
  797. }
  798. }
  799. }
  800. #endif