ObjectDataSourceViewTest.cs 30 KB

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