ObjectDataSourceTest.cs 62 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749
  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 void DoRaiseDataSourceChangedEvent ()
  53. {
  54. base.RaiseDataSourceChangedEvent (new EventArgs ());
  55. }
  56. public object SaveState ()
  57. {
  58. return SaveViewState ();
  59. }
  60. public void LoadState (object o)
  61. {
  62. LoadViewState (o);
  63. }
  64. public StateBag StateBag
  65. {
  66. get { return base.ViewState; }
  67. }
  68. public string Render ()
  69. {
  70. StringWriter sw = new StringWriter ();
  71. HtmlTextWriter tw = new HtmlTextWriter (sw);
  72. Render (tw);
  73. return sw.ToString ();
  74. }
  75. public void DoOnBubbleEvent (Object source, EventArgs e)
  76. {
  77. base.OnBubbleEvent (source, e);
  78. }
  79. public object DoSaveControlState ()
  80. {
  81. return base.SaveControlState ();
  82. }
  83. public void DoLoadControlState (object savedState)
  84. {
  85. base.LoadControlState (savedState);
  86. }
  87. public new DataSourceView GetView (string viewName)
  88. {
  89. return base.GetView (viewName);
  90. }
  91. }
  92. #region Hellp_class_view
  93. public class CustomObjectDataSourceView : ObjectDataSourceView
  94. {
  95. public CustomObjectDataSourceView (ObjectDataSource owner, string name, HttpContext context)
  96. : base (owner, name, context)
  97. {
  98. }
  99. public new int ExecuteUpdate (IDictionary keys, IDictionary values, IDictionary oldValues)
  100. {
  101. return base.ExecuteUpdate (keys, values, oldValues);
  102. }
  103. public new int ExecuteDelete (IDictionary keys, IDictionary oldValues)
  104. {
  105. return base.ExecuteDelete (keys, oldValues);
  106. }
  107. public new IEnumerable ExecuteSelect (DataSourceSelectArguments arguments)
  108. {
  109. return base.ExecuteSelect (arguments);
  110. }
  111. public new int ExecuteInsert (IDictionary values)
  112. {
  113. return base.ExecuteInsert (values);
  114. }
  115. }
  116. #endregion
  117. [TestFixture]
  118. public class ObjectDataSourceTest
  119. {
  120. bool eventChecker;
  121. [TestFixtureTearDown]
  122. public void TearDown ()
  123. {
  124. WebTest.Unload ();
  125. }
  126. public static void InitObjectDataSource (ObjectDataSourcePoker ds, string action)
  127. {
  128. Parameter p1, p2, p3;
  129. switch (action) {
  130. case "insert": p1 = new Parameter ("ID", TypeCode.String, "1004");
  131. p2 = new Parameter ("fname", TypeCode.String, "David");
  132. p3 = new Parameter ("LName", TypeCode.String, "Eli");
  133. break;
  134. case "update": p1 = new Parameter ("ID", TypeCode.String, "1001");
  135. p2 = new Parameter ("FName", TypeCode.String, "David");
  136. p3 = new Parameter ("LName", TypeCode.String, "Eli");
  137. break;
  138. case "DBNull": p1 = new Parameter ("ID");
  139. p2 = new Parameter ("FName");
  140. p3 = new Parameter ("LName");
  141. break;
  142. default: p1 = new Parameter ("ID", TypeCode.String, "1001");
  143. p2 = new Parameter ("FName", TypeCode.String, "Mahesh");
  144. p3 = new Parameter ("LName", TypeCode.String, "chand");
  145. break;
  146. }
  147. ds.SelectMethod = "GetMyData";
  148. ds.DeleteMethod = "Delete";
  149. ds.InsertMethod = "Insert";
  150. ds.UpdateMethod = "Update";
  151. ds.SelectCountMethod = "SelectCount";
  152. ds.DeleteParameters.Add (p1);
  153. ds.DeleteParameters.Add (p2);
  154. ds.DeleteParameters.Add (p3);
  155. ds.InsertParameters.Add (p1);
  156. ds.InsertParameters.Add (p2);
  157. ds.InsertParameters.Add (p3);
  158. ds.UpdateParameters.Add (p1);
  159. ds.UpdateParameters.Add (p2);
  160. ds.UpdateParameters.Add (p3);
  161. ds.ID = "MyObject";
  162. ds.TypeName = typeof (MyTableObject).AssemblyQualifiedName;
  163. }
  164. //Default properties
  165. [Test]
  166. public void ObjectDataSource_DefaultProperties ()
  167. {
  168. ObjectDataSourcePoker ods = new ObjectDataSourcePoker ();
  169. Assert.AreEqual (ConflictOptions.OverwriteChanges, ods.ConflictDetection, "ConflictDetection");
  170. Assert.AreEqual ("",ods.DataObjectTypeName ,"DataObjectTypeName ");
  171. Assert.AreEqual ("", ods.DeleteMethod, "DeleteMethod");
  172. Assert.AreEqual (typeof(ParameterCollection),ods.DeleteParameters.GetType (),"DeleteParameters");
  173. Assert.AreEqual (false, ods.EnablePaging, "EnablePaging ");
  174. Assert.AreEqual ("", ods.FilterExpression, "FilterExpression ");
  175. Assert.AreEqual (typeof (ParameterCollection), ods.FilterParameters.GetType (), "FilterParameters");
  176. Assert.AreEqual ("", ods.InsertMethod, "InsertMethod ");
  177. Assert.AreEqual (typeof (ParameterCollection), ods.InsertParameters.GetType (), "InsertParameters ");
  178. Assert.AreEqual ("maximumRows", ods.MaximumRowsParameterName, "MaximumRowsParameterName");
  179. Assert.AreEqual ("{0}", ods.OldValuesParameterFormatString, "OldValuesParameterFormatString");
  180. Assert.AreEqual ("", ods.SelectCountMethod, "SelectCountMethod");
  181. Assert.AreEqual ("", ods.SelectMethod, "SelectMethod ");
  182. Assert.AreEqual (typeof (ParameterCollection), ods.SelectParameters.GetType (), "SelectParameters");
  183. Assert.AreEqual ("", ods.SortParameterName, "SortParameterName");
  184. Assert.AreEqual ("startRowIndex", ods.StartRowIndexParameterName, "StartRowIndexParameterName");
  185. Assert.AreEqual ("", ods.TypeName, "TypeName");
  186. Assert.AreEqual ("", ods.UpdateMethod, "UpdateMethod ");
  187. Assert.AreEqual (typeof (ParameterCollection), ods.UpdateParameters.GetType (), "UpdateParameters");
  188. Assert.AreEqual (0, ods.CacheDuration, "CacheDuration");
  189. Assert.AreEqual (DataSourceCacheExpiry.Absolute, ods.CacheExpirationPolicy, "CacheExpirationPolicy");
  190. Assert.AreEqual ("", ods.CacheKeyDependency, "CacheKeyDependency");
  191. Assert.AreEqual (false, ods.ConvertNullToDBNull, "ConvertNullToDBNull ");
  192. Assert.AreEqual (false, ods.EnableCaching, "EnableCaching ");
  193. Assert.AreEqual ("", ods.SqlCacheDependency, "SqlCacheDependency");
  194. }
  195. //Non default properties values
  196. [Test]
  197. public void ObjectDataSource_AssignToDefaultProperties ()
  198. {
  199. ObjectDataSourcePoker ods = new ObjectDataSourcePoker ();
  200. InitObjectDataSource (ods,"");
  201. ods.ConflictDetection = ConflictOptions.CompareAllValues;
  202. Assert.AreEqual (ConflictOptions.CompareAllValues, ods.ConflictDetection, "ConflictDetection");
  203. ods.DataObjectTypeName = "MyData";
  204. Assert.AreEqual ("MyData", ods.DataObjectTypeName, "DataObjectTypeName ");
  205. Assert.AreEqual ("Delete", ods.DeleteMethod, "DeleteMethod");
  206. Assert.AreEqual (3, ods.DeleteParameters.Count, "DeleteParameters");
  207. ods.EnablePaging = true;
  208. Assert.AreEqual (true, ods.EnablePaging, "EnablePaging ");
  209. ods.FilterExpression = "ID='{0}'";
  210. Assert.AreEqual ("ID='{0}'", ods.FilterExpression, "FilterExpression ");
  211. TextBox TextBox1=new TextBox ();
  212. TextBox1.Text ="1001";
  213. FormParameter p=new FormParameter ("ID","TextBox1");
  214. p.DefaultValue = "1002";
  215. ods.FilterParameters.Add (p);
  216. Assert.AreEqual ("ID", ods.FilterParameters[0].Name, "FilterParameters1");
  217. Assert.AreEqual ("1002", ods.FilterParameters[0].DefaultValue , "FilterParameters2");
  218. Assert.AreEqual ("TextBox1", ((FormParameter )ods.FilterParameters[0]).FormField, "FilterParameters3");
  219. Assert.AreEqual ("Insert", ods.InsertMethod, "InsertMethod ");
  220. Assert.AreEqual ("ID", ods.InsertParameters[0].Name , "InsertParameters ");
  221. ods.MaximumRowsParameterName = "SelectCount";
  222. Assert.AreEqual ("SelectCount", ods.MaximumRowsParameterName, "MaximumRowsParameterName");
  223. ods.OldValuesParameterFormatString = "ID";
  224. Assert.AreEqual ("ID", ods.OldValuesParameterFormatString, "OldValuesParameterFormatString");
  225. Assert.AreEqual ("SelectCount", ods.SelectCountMethod, "SelectCountMethod");
  226. Assert.AreEqual ("GetMyData", ods.SelectMethod, "SelectMethod ");
  227. Parameter dummy = new Parameter ();
  228. dummy.Name = "Test";
  229. ods.SelectParameters.Add (dummy);
  230. Assert.AreEqual ("Test", ods.SelectParameters[0].Name , "SelectParameters");
  231. ods.SortParameterName = "sortExpression";
  232. Assert.AreEqual ("sortExpression", ods.SortParameterName, "SortParameterName");
  233. ods.StartRowIndexParameterName = "ID";
  234. Assert.AreEqual ("ID", ods.StartRowIndexParameterName, "StartRowIndexParameterName");
  235. Assert.AreEqual (typeof (MyTableObject).AssemblyQualifiedName, ods.TypeName, "TypeName");
  236. Assert.AreEqual ("Update", ods.UpdateMethod, "UpdateMethod ");
  237. Assert.AreEqual ("FName", ods.UpdateParameters[1].Name, "UpdateParameters");
  238. ods.CacheDuration = 1000;
  239. Assert.AreEqual (1000, ods.CacheDuration, "CacheDuration");
  240. ods.CacheExpirationPolicy = DataSourceCacheExpiry.Sliding;
  241. Assert.AreEqual (DataSourceCacheExpiry.Sliding, ods.CacheExpirationPolicy, "CacheExpirationPolicy");
  242. ods.CacheKeyDependency = "ID";
  243. Assert.AreEqual ("ID", ods.CacheKeyDependency, "CacheKeyDependency");
  244. ods.ConvertNullToDBNull = true;
  245. Assert.AreEqual (true, ods.ConvertNullToDBNull, "ConvertNullToDBNull ");
  246. ods.EnableCaching = true;
  247. Assert.AreEqual (true, ods.EnableCaching, "EnableCaching ");
  248. ods.SqlCacheDependency = "Northwind:Employees";
  249. Assert.AreEqual ("Northwind:Employees", ods.SqlCacheDependency, "SqlCacheDependency");
  250. }
  251. //ViewState
  252. [Test]
  253. public void ObjectDataSource_ViewState ()
  254. {
  255. ObjectDataSourcePoker ods = new ObjectDataSourcePoker ();
  256. //InitObjectDataSource (ods,"");
  257. ods.CacheDuration = 1;
  258. ods.CacheExpirationPolicy = DataSourceCacheExpiry.Sliding;
  259. ods.CacheKeyDependency = "key";
  260. ods.ConflictDetection = ConflictOptions.CompareAllValues;
  261. ods.ConvertNullToDBNull = true;
  262. ods.DataObjectTypeName = "DataObjectType";
  263. ods.DeleteMethod = "deleteMethod";
  264. ods.EnableCaching = true;
  265. ods.EnablePaging = true;
  266. ods.FilterExpression = "filter expression";
  267. ods.InsertMethod = "insertMethod";
  268. ods.MaximumRowsParameterName = "maxRows";
  269. ods.OldValuesParameterFormatString = "old_{0}";
  270. ods.SelectCountMethod = "selectCountMethod";
  271. ods.SelectMethod = "selectMethod";
  272. ods.SortParameterName = "sortParamName";
  273. ods.SqlCacheDependency = "cacheDependency";
  274. ods.StartRowIndexParameterName = "startRow";
  275. ods.TypeName = "TypeName";
  276. ods.UpdateMethod = "updateMethod";
  277. object state = ods.SaveState ();
  278. Assert.IsNull (state, "ViewState is null");
  279. ObjectDataSourcePoker copy = new ObjectDataSourcePoker ();
  280. copy.LoadState (state);
  281. }
  282. //Properties functionality
  283. public void ObjectDataSource_ConflictDetection ()
  284. {
  285. //Not implemented
  286. }
  287. [Test]
  288. [Category ("NunitWeb")]
  289. public void ObjectDataSource_ConvertNullToDBNull ()
  290. {
  291. string html = new WebTest (PageInvoker.CreateOnLoad (new PageDelegate (ConvertNullToDBNull))).Run ();
  292. }
  293. public static void ConvertNullToDBNull (Page p)
  294. {
  295. ObjectDataSourcePoker ods = new ObjectDataSourcePoker ();
  296. InitObjectDataSource (ods,"DBNull");
  297. bool dbnull = false;
  298. ods.ConvertNullToDBNull = true;
  299. try {
  300. ods.Delete ();
  301. }
  302. catch (Exception ex) {
  303. Assert.AreEqual (true,
  304. ex.Message.Contains ("type 'System.DBNull' cannot be converted to type 'System.String'") || // dotnet
  305. ex.Message.Contains ("type System.DBNull cannot be converted to target type: System.String")); // mono
  306. dbnull = true;
  307. }
  308. Assert.AreEqual (true, dbnull, "ConvertNullToDBNull2");
  309. }
  310. [Test]
  311. [Category ("NunitWeb")]
  312. public void ObjectDataSource_FilterExpression ()
  313. {
  314. string html = new WebTest (PageInvoker.CreateOnLoad (
  315. new PageDelegate (FilterExpression))).Run ();
  316. string newHtml= HtmlDiff.GetControlFromPageHtml (html);
  317. string origHtml = "<table cellspacing=\"0\" rules=\"all\" border=\"1\" style=\"border-collapse:collapse;\">\r\n\t<tr>\r\n\t\t<td>ID</td><td>FName</td><td>LName</td>\r\n\t</tr><tr>\r\n\t\t<td>1002</td><td>Melanie</td><td>Talmadge</td>\r\n\t</tr>\r\n</table>";
  318. HtmlDiff.AssertAreEqual (origHtml, newHtml, "FilterExpression");
  319. }
  320. public static void FilterExpression (Page p)
  321. {
  322. LiteralControl lcb = new LiteralControl (HtmlDiff.BEGIN_TAG);
  323. LiteralControl lce = new LiteralControl (HtmlDiff.END_TAG);
  324. DataGrid dg = new DataGrid ();
  325. ObjectDataSourcePoker ods = new ObjectDataSourcePoker ();
  326. InitObjectDataSource (ods, "");
  327. ods.FilterExpression = "ID='1002'";
  328. p.Controls.Add (lcb);
  329. p.Controls.Add (dg);
  330. p.Controls.Add (ods);
  331. p.Controls.Add (lce);
  332. dg.DataSource = ods;
  333. dg.DataBind ();
  334. }
  335. [Test]
  336. [Category ("NunitWeb")]
  337. public void ObjectDataSource_FilterParameter ()
  338. {
  339. string html = new WebTest (PageInvoker.CreateOnLoad (
  340. new PageDelegate (FilterParameter))).Run ();
  341. string newHtml = HtmlDiff.GetControlFromPageHtml (html);
  342. string origHtml = "<table cellspacing=\"0\" rules=\"all\" border=\"1\" style=\"border-collapse:collapse;\">\r\n\t<tr>\r\n\t\t<td>ID</td><td>FName</td><td>LName</td>\r\n\t</tr><tr>\r\n\t\t<td>1003</td><td>Vinay</td><td>Bansal</td>\r\n\t</tr>\r\n</table>";
  343. HtmlDiff.AssertAreEqual (origHtml, newHtml, "FilterExpression");
  344. }
  345. public static void FilterParameter (Page p)
  346. {
  347. LiteralControl lcb = new LiteralControl (HtmlDiff.BEGIN_TAG);
  348. LiteralControl lce = new LiteralControl (HtmlDiff.END_TAG);
  349. DataGrid dg = new DataGrid ();
  350. ObjectDataSourcePoker ods = new ObjectDataSourcePoker ();
  351. InitObjectDataSource (ods, "");
  352. ods.FilterExpression = "{0}";
  353. Parameter p1 = new Parameter ("ID", TypeCode.String, "ID=1003");
  354. ods.FilterParameters.Add (p1);
  355. p.Controls.Add (lcb);
  356. p.Controls.Add (dg);
  357. p.Controls.Add (ods);
  358. p.Controls.Add (lce);
  359. dg.DataSource = ods;
  360. dg.DataBind ();
  361. }
  362. [Test]
  363. [Category ("NunitWeb")]
  364. public void ObjectDataSource_EnablePaging ()
  365. {
  366. string html = new WebTest (PageInvoker.CreateOnLoad (
  367. new PageDelegate (EnablePaging))).Run ();
  368. string newHtml = HtmlDiff.GetControlFromPageHtml (html);
  369. #if NET_4_0
  370. string origHtml = "<div>\r\n\t<table cellspacing=\"0\" rules=\"all\" border=\"1\" style=\"border-collapse:collapse;\">\r\n\t\t<tr>\r\n\t\t\t<th scope=\"col\">Name</th><th scope=\"col\">Number</th>\r\n\t\t</tr><tr>\r\n\t\t\t<td>Number0</td><td>0</td>\r\n\t\t</tr><tr>\r\n\t\t\t<td>Number1</td><td>1</td>\r\n\t\t</tr><tr>\r\n\t\t\t<td>Number2</td><td>2</td>\r\n\t\t</tr><tr>\r\n\t\t\t<td>Number3</td><td>3</td>\r\n\t\t</tr><tr>\r\n\t\t\t<td>Number4</td><td>4</td>\r\n\t\t</tr><tr>\r\n\t\t\t<td colspan=\"2\"><table>\r\n\t\t\t\t<tr>\r\n\t\t\t\t\t<td><span>1</span></td><td><a href=\"javascript:__doPostBack(&#39;ctl01&#39;,&#39;Page$2&#39;)\">2</a></td><td><a href=\"javascript:__doPostBack(&#39;ctl01&#39;,&#39;Page$3&#39;)\">3</a></td><td><a href=\"javascript:__doPostBack(&#39;ctl01&#39;,&#39;Page$4&#39;)\">4</a></td>\r\n\t\t\t\t</tr>\r\n\t\t\t</table></td>\r\n\t\t</tr>\r\n\t</table>\r\n</div>";
  371. #else
  372. string origHtml = "<div>\r\n\t<table cellspacing=\"0\" rules=\"all\" border=\"1\" style=\"border-collapse:collapse;\">\r\n\t\t<tr>\r\n\t\t\t<th scope=\"col\">Name</th><th scope=\"col\">Number</th>\r\n\t\t</tr><tr>\r\n\t\t\t<td>Number0</td><td>0</td>\r\n\t\t</tr><tr>\r\n\t\t\t<td>Number1</td><td>1</td>\r\n\t\t</tr><tr>\r\n\t\t\t<td>Number2</td><td>2</td>\r\n\t\t</tr><tr>\r\n\t\t\t<td>Number3</td><td>3</td>\r\n\t\t</tr><tr>\r\n\t\t\t<td>Number4</td><td>4</td>\r\n\t\t</tr><tr>\r\n\t\t\t<td colspan=\"2\"><table border=\"0\">\r\n\t\t\t\t<tr>\r\n\t\t\t\t\t<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>\r\n\t\t\t\t</tr>\r\n\t\t\t</table></td>\r\n\t\t</tr>\r\n\t</table>\r\n</div>";
  373. #endif
  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 = typeof (MyTableObject).AssemblyQualifiedName;
  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>\r\n\t<table cellspacing=\"0\" rules=\"all\" border=\"1\" style=\"border-collapse:collapse;\">\r\n\t\t<tr>\r\n\t\t\t<td>ID</td><td>1002</td>\r\n\t\t</tr><tr>\r\n\t\t\t<td>FName</td><td>Melanie</td>\r\n\t\t</tr><tr>\r\n\t\t\t<td>LName</td><td>Talmadge</td>\r\n\t\t</tr>\r\n\t</table>\r\n</div>";
  407. HtmlDiff.AssertAreEqual (origHtml, newHtml, "DeleteRender");
  408. }
  409. public static void DeleteMethod (Page p)
  410. {
  411. LiteralControl lcb = new LiteralControl (HtmlDiff.BEGIN_TAG);
  412. LiteralControl lce = new LiteralControl (HtmlDiff.END_TAG);
  413. MyTableObject.ds = MyTableObject.CreateDataTable ();
  414. DetailsView dv = new DetailsView ();
  415. ObjectDataSourcePoker ods = new ObjectDataSourcePoker ();
  416. ods.Deleted += new ObjectDataSourceStatusEventHandler (odc_Deleted);
  417. ods.Deleting += new ObjectDataSourceMethodEventHandler (odc_Deleting);
  418. InitObjectDataSource (ods,"");
  419. dv.Page = p;
  420. ods.Page = p;
  421. dv.DataKeyNames = new string[] { "ID" };
  422. dv.DataSource = ods;
  423. p.Controls.Add (lcb);
  424. p.Controls.Add (ods);
  425. p.Controls.Add (dv);
  426. p.Controls.Add (lce);
  427. dv.DataBind ();
  428. Assert.AreEqual (3, dv.DataItemCount, "BeforeDelete1");
  429. Assert.AreEqual (1001, dv.SelectedValue, "BeforeDelete2");
  430. Assert.AreEqual (false, deleting, "BeforeDeletingEvent");
  431. Assert.AreEqual (false, deleted, "BeforeDeletedEvent");
  432. ods.Delete ();
  433. dv.DataBind ();
  434. Assert.AreEqual (true, deleting, "AfterDeletingEvent");
  435. Assert.AreEqual (true, deleted, "AfterDeletedEvent");
  436. Assert.AreEqual (2, dv.DataItemCount, "BeforeDelete1");
  437. Assert.AreEqual (1002, dv.SelectedValue, "BeforeDelete2");
  438. }
  439. [Test]
  440. [Category ("NunitWeb")]
  441. public void ObjectDataSource_Select ()
  442. {
  443. string html = new WebTest (PageInvoker.CreateOnLoad (
  444. new PageDelegate (SelectMethod))).Run ();
  445. }
  446. public static void SelectMethod (Page p)
  447. {
  448. MyTableObject.ds = MyTableObject.CreateDataTable ();
  449. ObjectDataSourcePoker ods = new ObjectDataSourcePoker ();
  450. InitObjectDataSource (ods,"");
  451. ods.Selected += new ObjectDataSourceStatusEventHandler (odc_Selected);
  452. ods.Selecting += new ObjectDataSourceSelectingEventHandler (odc_Selecting);
  453. p.Controls.Add (ods);
  454. Assert.AreEqual (false, selecting, "BeforeSelectingEvent");
  455. Assert.AreEqual (false, selected, "BeforeSelectedEvent");
  456. IEnumerable table = (IEnumerable) ods.Select ();
  457. Assert.AreEqual (3,((DataView) table).Count, "ItemsCount");
  458. Assert.AreEqual ("Mahesh", ((DataView) table)[0].Row.ItemArray[1], "FirstItemData");
  459. Assert.AreEqual (1002, ((DataView) table)[1].Row.ItemArray[0], "SecondItemData");
  460. Assert.AreEqual ("Bansal", ((DataView) table)[2].Row.ItemArray[2], "ThirdItemData");
  461. Assert.AreEqual (true, selecting, "AfterSelectingEvent");
  462. Assert.AreEqual (true, selected, "AfterSelectedEvent");
  463. }
  464. [Test]
  465. [Category ("NunitWeb")]
  466. public void ObjectDataSource_Select_Cached ()
  467. {
  468. string html = new WebTest (PageInvoker.CreateOnLoad (
  469. new PageDelegate (SelectMethodCached))).Run ();
  470. }
  471. public static void SelectMethodCached (Page p)
  472. {
  473. MyTableObject.ds = MyTableObject.CreateDataTable ();
  474. ObjectDataSourcePoker ods = new ObjectDataSourcePoker ();
  475. ods.EnableCaching = true;
  476. InitObjectDataSource (ods, "");
  477. p.Controls.Add (ods);
  478. ods.Selecting += new ObjectDataSourceSelectingEventHandler (odc_Selecting);
  479. selecting = false;
  480. IEnumerable table = (IEnumerable) ods.Select ();
  481. Assert.AreEqual (true, selecting, "AfterSelectingEvent");
  482. selecting = false;
  483. IEnumerable table2 = (IEnumerable) ods.Select ();
  484. Assert.AreEqual (false, selecting, "AfterSelectingEvent");
  485. }
  486. [Test]
  487. [Category ("NunitWeb")]
  488. public void ObjectDataSource_Insert ()
  489. {
  490. string html = new WebTest (PageInvoker.CreateOnLoad (
  491. new PageDelegate (InsertMethod))).Run ();
  492. }
  493. public static void InsertMethod (Page p)
  494. {
  495. MyTableObject.ds = MyTableObject.CreateDataTable ();
  496. ObjectDataSourcePoker ods = new ObjectDataSourcePoker ();
  497. InitObjectDataSource (ods,"insert");
  498. ods.Inserted += new ObjectDataSourceStatusEventHandler (odc_Inserted);
  499. ods.Inserting += new ObjectDataSourceMethodEventHandler (odc_Inserting);
  500. p.Controls.Add (ods);
  501. Assert.AreEqual (3, ((DataView) ods.Select ()).Count, "BeforeInsert");
  502. Assert.AreEqual (false, inserted , "BeforeInsertedEvent");
  503. Assert.AreEqual (false, inserting , "BeforeInsertingEvent");
  504. ods.Insert ();
  505. Assert.AreEqual (4, ((DataView) ods.Select ()).Count , "AfterInsert1");
  506. Assert.AreEqual (1004,((DataView) ods.Select ())[3].Row.ItemArray[0], "AfterInsert2");
  507. Assert.AreEqual ("David", ((DataView) ods.Select ())[3].Row.ItemArray[1], "AfterInsert3");
  508. Assert.AreEqual (true, inserted, "AfterInsertedEvent");
  509. Assert.AreEqual (true, inserting, "AfterInsertingEvent");
  510. }
  511. [Test]
  512. [Category ("NunitWeb")]
  513. public void ObjectDataSource_Update ()
  514. {
  515. string html = new WebTest (PageInvoker.CreateOnLoad (
  516. new PageDelegate (UpdateMethod))).Run ();
  517. }
  518. public static void UpdateMethod (Page p)
  519. {
  520. MyTableObject.ds = MyTableObject.CreateDataTable ();
  521. ObjectDataSourcePoker ods = new ObjectDataSourcePoker ();
  522. InitObjectDataSource (ods, "update");
  523. ods.Updated += new ObjectDataSourceStatusEventHandler (odc_Updated);
  524. ods.Updating += new ObjectDataSourceMethodEventHandler (odc_Updating);
  525. p.Controls.Add (ods);
  526. Assert.AreEqual (3, ((DataView) ods.Select ()).Count, "BeforeUpdate1");
  527. Assert.AreEqual (1001, ((DataView) ods.Select ())[0].Row.ItemArray[0], "BeforeUpdate2");
  528. Assert.AreEqual ("Mahesh", ((DataView) ods.Select ())[0].Row.ItemArray[1], "BeforeUpdate3");
  529. Assert.AreEqual ("Chand", ((DataView) ods.Select ())[0].Row.ItemArray[2], "BeforeUpdate4");
  530. Assert.AreEqual (false, updated, "BeforeUpdateEvent");
  531. Assert.AreEqual (false, updating, "BeforeUpdatingEvent");
  532. ods.Update ();
  533. Assert.AreEqual (3, ((DataView) ods.Select ()).Count, "AfterUpdate1");
  534. Assert.AreEqual (1001, ((DataView) ods.Select ())[0].Row.ItemArray[0], "AfterUpdate2");
  535. Assert.AreEqual ("David", ((DataView) ods.Select ())[0].Row.ItemArray[1], "AfterUpdate3");
  536. Assert.AreEqual ("Eli", ((DataView) ods.Select ())[0].Row.ItemArray[2], "AfterUpdate4");
  537. Assert.AreEqual (true, updated, "AfterUpdateEvent");
  538. Assert.AreEqual (true, updating, "AfterUpdatingEvent");
  539. }
  540. //Events
  541. private static bool deleted = false;
  542. private static bool deleting = false;
  543. private static bool filtering = false;
  544. private static bool inserted = false;
  545. private static bool inserting = false;
  546. private static bool objectCreated = false;
  547. private static bool objectCreating = false;
  548. private static bool objectDisposing = false;
  549. private static bool selected = false;
  550. private static bool selecting = false;
  551. private static bool updated = false;
  552. private static bool updating = false;
  553. // Tests for events Select,Update,Delete and Insert include in Select,Update,Delete and Insert methods tests.
  554. [Test]
  555. [Category ("NunitWeb")]
  556. public void ObjectDataSource_Events ()
  557. {
  558. string html = new WebTest (PageInvoker.CreateOnLoad (
  559. new PageDelegate (EventsTest))).Run ();
  560. }
  561. public static void EventsTest (Page p)
  562. {
  563. MyTableObject.ds = MyTableObject.CreateDataTable ();
  564. DetailsView dv = new DetailsView ();
  565. ObjectDataSourcePoker ods = new ObjectDataSourcePoker ();
  566. ods.ObjectCreated += new ObjectDataSourceObjectEventHandler (odc_ObjectCreated);
  567. ods.ObjectCreating += new ObjectDataSourceObjectEventHandler (odc_ObjectCreating);
  568. InitObjectDataSource (ods,"");
  569. ods.FilterExpression = "ID='1001'";
  570. dv.Page = p;
  571. ods.Page = p;
  572. dv.DataKeyNames = new string[] { "ID" };
  573. dv.DataSource = ods;
  574. p.Controls.Add (ods);
  575. p.Controls.Add (dv);
  576. dv.DataBind ();
  577. ods.Filtering += new ObjectDataSourceFilteringEventHandler (odc_Filtering);
  578. Assert.AreEqual (false, filtering, "BeforeFilteringEvent");
  579. ods.Select ();
  580. Assert.AreEqual (true, filtering, "AfterFilteringEvent");
  581. ods.ObjectDisposing += new ObjectDataSourceDisposingEventHandler (odc_ObjectDisposing);
  582. //ToDo: Dispose, ObjectCreated and ObjectCreating should be tested.
  583. }
  584. static void odc_Updating (object sender, ObjectDataSourceMethodEventArgs e)
  585. {
  586. updating = true;
  587. }
  588. static void odc_Updated (object sender, ObjectDataSourceStatusEventArgs e)
  589. {
  590. updated = true;
  591. }
  592. static void odc_Selecting (object sender, ObjectDataSourceSelectingEventArgs e)
  593. {
  594. selecting = true;
  595. }
  596. static void odc_Selected (object sender, ObjectDataSourceStatusEventArgs e)
  597. {
  598. selected = true;
  599. }
  600. static void odc_ObjectDisposing (object sender, ObjectDataSourceDisposingEventArgs e)
  601. {
  602. objectDisposing = true;
  603. }
  604. static void odc_ObjectCreating (object sender, ObjectDataSourceEventArgs e)
  605. {
  606. objectCreating = true;
  607. }
  608. static void odc_ObjectCreated (object sender, ObjectDataSourceEventArgs e)
  609. {
  610. objectCreated = true;
  611. }
  612. static void odc_Inserting (object sender, ObjectDataSourceMethodEventArgs e)
  613. {
  614. inserting = true;
  615. }
  616. static void odc_Inserted (object sender, ObjectDataSourceStatusEventArgs e)
  617. {
  618. inserted = true;
  619. }
  620. static void odc_Filtering (object sender, ObjectDataSourceFilteringEventArgs e)
  621. {
  622. filtering = true;
  623. }
  624. static void odc_Deleting (object sender, ObjectDataSourceMethodEventArgs e)
  625. {
  626. deleting = true;
  627. }
  628. static void odc_Deleted (object sender, ObjectDataSourceStatusEventArgs e)
  629. {
  630. deleted = true;
  631. }
  632. [Test]
  633. public void ObjectDataSource_SelectExecute ()
  634. {
  635. ObjectDataSourcePoker ods = new ObjectDataSourcePoker ();
  636. InitObjectDataSource (ods, "");
  637. CustomObjectDataSourceView view = new CustomObjectDataSourceView (ods, "CustomView", null);
  638. view.SelectMethod = "GetMyData";
  639. view.TypeName = typeof (MyTableObject).AssemblyQualifiedName;
  640. view.SelectParameters.Add (new Parameter ("Fname", TypeCode.String, "TestSelect"));
  641. ArrayList ls =(ArrayList) view.ExecuteSelect (new DataSourceSelectArguments (""));
  642. Assert.AreEqual ("TestSelect", ls[0], "SelectExecute");
  643. }
  644. [Test]
  645. public void ObjectDataSource_SelectExecuteCaseSensitive ()
  646. {
  647. ObjectDataSourcePoker ods = new ObjectDataSourcePoker ();
  648. InitObjectDataSource (ods, "");
  649. CustomObjectDataSourceView view = new CustomObjectDataSourceView (ods, "CustomView", null);
  650. view.SelectMethod = "GetMyData";
  651. view.TypeName = typeof (MyTableObject).AssemblyQualifiedName;
  652. view.SelectParameters.Add (new Parameter ("fname", TypeCode.String, "TestSelect"));
  653. ArrayList ls = (ArrayList) view.ExecuteSelect (new DataSourceSelectArguments (""));
  654. Assert.AreEqual ("TestSelect", ls[0], "SelectExecuteCaseSensitive");
  655. }
  656. [Test]
  657. public void ObjectDataSource_DeleteExecute ()
  658. {
  659. ObjectDataSourcePoker ods = new ObjectDataSourcePoker ();
  660. InitObjectDataSource (ods, "");
  661. CustomObjectDataSourceView view = new CustomObjectDataSourceView (ods, "CustomView", null);
  662. view.TypeName = typeof (MyTableObject).AssemblyQualifiedName;
  663. view.SelectMethod = "GetMyData";
  664. view.DeleteMethod = "Delete";
  665. Parameter p1, p2, p3;
  666. p1 = new Parameter ("ID", TypeCode.String, "1001");
  667. p2 = new Parameter ("FName", TypeCode.String, "p_Mahesh");
  668. p3 = new Parameter ("LName", TypeCode.String, "p_chand");
  669. view.DeleteParameters.Add (p1);
  670. view.DeleteParameters.Add (p2);
  671. view.DeleteParameters.Add (p3);
  672. view.OldValuesParameterFormatString = "oldvalue_{0}";
  673. Hashtable keys = new Hashtable();
  674. keys.Add("ID","k_test_id");
  675. view.ExecuteDelete (keys, null);
  676. Assert.AreEqual (true, MyTableObject.DeleteWithParamsAndKeys, "DeleteExecute");
  677. Assert.AreEqual ("1001, p_Mahesh, p_chand, k_test_id", MyTableObject.UpdatePassedValues, "DeleteExecute Values");
  678. }
  679. [Test]
  680. public void ObjectDataSource_DeleteExecuteParameterCaseSensitive_1 ()
  681. {
  682. ObjectDataSourcePoker ods = new ObjectDataSourcePoker ();
  683. InitObjectDataSource (ods, "");
  684. CustomObjectDataSourceView view = new CustomObjectDataSourceView (ods, "CustomView", null);
  685. view.TypeName = typeof (MyTableObject).AssemblyQualifiedName;
  686. view.SelectMethod = "GetMyData";
  687. view.DeleteMethod = "Delete";
  688. Parameter p1, p2, p3;
  689. p1 = new Parameter ("id", TypeCode.String, "1001");
  690. p2 = new Parameter ("fname", TypeCode.String, "Mahesh");
  691. p3 = new Parameter ("lname", TypeCode.String, "chand");
  692. view.DeleteParameters.Add (p1);
  693. view.DeleteParameters.Add (p2);
  694. view.DeleteParameters.Add (p3);
  695. view.OldValuesParameterFormatString = "oldvalue_{0}";
  696. Hashtable value = new Hashtable ();
  697. value.Add ("ID", "test_id");
  698. view.ExecuteDelete (value, null);
  699. Assert.AreEqual (true, MyTableObject.DeleteWithParamsAndKeys, "DeleteExecuteParameterCaseSensitive");
  700. }
  701. [Test]
  702. public void ObjectDataSource_DeleteExecuteMethodCaseSensitive ()
  703. {
  704. ObjectDataSourcePoker ods = new ObjectDataSourcePoker ();
  705. InitObjectDataSource (ods, "");
  706. CustomObjectDataSourceView view = new CustomObjectDataSourceView (ods, "CustomView", null);
  707. view.TypeName = typeof (MyTableObject).AssemblyQualifiedName;
  708. view.SelectMethod = "GetMyData";
  709. view.DeleteMethod = "delete";
  710. Parameter p1, p2, p3;
  711. p1 = new Parameter ("ID", TypeCode.String, "1001");
  712. p2 = new Parameter ("FName", TypeCode.String, "Mahesh");
  713. p3 = new Parameter ("LName", TypeCode.String, "chand");
  714. view.DeleteParameters.Add (p1);
  715. view.DeleteParameters.Add (p2);
  716. view.DeleteParameters.Add (p3);
  717. view.OldValuesParameterFormatString = "oldvalue_{0}";
  718. Hashtable value = new Hashtable ();
  719. value.Add ("ID", "test_id");
  720. view.ExecuteDelete (value, null);
  721. Assert.AreEqual (true, MyTableObject.DeleteWithParamsAndKeys, "DeleteExecuteMethodCaseSensitive");
  722. }
  723. [Test]
  724. public void ObjectDataSource_DeleteExecuteCompareAllValues ()
  725. {
  726. ObjectDataSourcePoker ods = new ObjectDataSourcePoker ();
  727. InitObjectDataSource (ods, "");
  728. CustomObjectDataSourceView view = new CustomObjectDataSourceView (ods, "CustomView", null);
  729. view.TypeName = typeof (MyTableObject).AssemblyQualifiedName;
  730. view.SelectMethod = "GetMyData";
  731. view.DeleteMethod = "DeleteOldValues";
  732. view.ConflictDetection = ConflictOptions.CompareAllValues;
  733. Hashtable keys;
  734. Hashtable old_value;
  735. Hashtable new_value;
  736. InitializeView (view, out keys, out old_value, out new_value);
  737. view.ExecuteDelete (keys, old_value);
  738. Assert.AreEqual (true, MyTableObject.DeleteWithOldValuesCompareAllValues, "DeleteExecuteCompareAllValues");
  739. Assert.AreEqual ("ov_1001, ov_Mahesh, ov_chand", MyTableObject.UpdatePassedValues, "DeleteExecuteCompareAllValues Values");
  740. }
  741. [Test]
  742. public void ObjectDataSource_DeleteExecuteDataType ()
  743. {
  744. ObjectDataSourcePoker ods = new ObjectDataSourcePoker ();
  745. InitObjectDataSource (ods, "");
  746. CustomObjectDataSourceView view = new CustomObjectDataSourceView (ods, "CustomView", null);
  747. view.TypeName = typeof (MyTableObject).AssemblyQualifiedName;
  748. view.DataObjectTypeName = typeof (NewData).AssemblyQualifiedName;
  749. view.SelectMethod = "GetMyData";
  750. view.DeleteMethod = "Delete";
  751. view.ConflictDetection = ConflictOptions.OverwriteChanges;
  752. Hashtable keys;
  753. Hashtable old_value;
  754. Hashtable new_value;
  755. InitializeView (view, out keys, out old_value, out new_value);
  756. view.ExecuteDelete (keys, old_value);
  757. Assert.AreEqual (true, MyTableObject.DeleteWithDataObjectTypeName, "DeleteExecuteDataType");
  758. Assert.AreEqual ("k_1001, , ", MyTableObject.UpdatePassedValues, "DeleteExecuteDataType Values");
  759. }
  760. [Test]
  761. public void ObjectDataSource_DeleteExecuteDataTypeCompareAllValues ()
  762. {
  763. ObjectDataSourcePoker ods = new ObjectDataSourcePoker ();
  764. InitObjectDataSource (ods, "");
  765. CustomObjectDataSourceView view = new CustomObjectDataSourceView (ods, "CustomView", null);
  766. view.TypeName = typeof (MyTableObject).AssemblyQualifiedName;
  767. view.DataObjectTypeName = typeof (NewData).AssemblyQualifiedName;
  768. view.SelectMethod = "GetMyData";
  769. view.DeleteMethod = "Delete";
  770. view.ConflictDetection = ConflictOptions.CompareAllValues;
  771. Hashtable keys;
  772. Hashtable old_value;
  773. Hashtable new_value;
  774. InitializeView (view, out keys, out old_value, out new_value);
  775. view.ExecuteDelete (keys, old_value);
  776. Assert.AreEqual (true, MyTableObject.DeleteWithDataObjectTypeName, "DeleteExecuteDataTypeCompareAllValues");
  777. Assert.AreEqual ("ov_1001, ov_Mahesh, ov_chand", MyTableObject.UpdatePassedValues, "DeleteExecuteDataTypeCompareAllValues Values");
  778. }
  779. [Test]
  780. public void ObjectDataSource_InsertExecute_1 ()
  781. {
  782. ObjectDataSourcePoker ods = new ObjectDataSourcePoker ();
  783. InitObjectDataSource (ods, "");
  784. CustomObjectDataSourceView view = new CustomObjectDataSourceView (ods, "CustomView", null);
  785. view.TypeName = typeof (MyTableObject).AssemblyQualifiedName;
  786. view.SelectMethod = "GetMyData";
  787. view.InsertMethod = "Insert";
  788. //This hashtable ovveride
  789. Hashtable value = new Hashtable ();
  790. value.Add ("ID", "test_id");
  791. view.ExecuteInsert (value);
  792. Assert.AreEqual (true, MyTableObject.InsertWithParameters, "InsertExecute#1");
  793. }
  794. [Test]
  795. public void ObjectDataSource_InsertExecute_2 ()
  796. {
  797. ObjectDataSourcePoker ods = new ObjectDataSourcePoker ();
  798. InitObjectDataSource (ods, "");
  799. CustomObjectDataSourceView view = new CustomObjectDataSourceView (ods, "CustomView", null);
  800. view.TypeName = typeof (MyTableObject).AssemblyQualifiedName;
  801. view.SelectMethod = "GetMyData";
  802. view.InsertMethod = "Insert";
  803. Parameter p1, p2, p3;
  804. p1 = new Parameter ("ID", TypeCode.String, "1001");
  805. p2 = new Parameter ("FName", TypeCode.String, "Mahesh");
  806. p3 = new Parameter ("LName", TypeCode.String, "chand");
  807. view.InsertParameters.Add (p1);
  808. view.InsertParameters.Add (p2);
  809. view.InsertParameters.Add (p3);
  810. //This hashtable ovveride
  811. Hashtable value = new Hashtable ();
  812. value.Add ("T", "test_id");
  813. //Merge parameters
  814. view.ExecuteInsert (value);
  815. Assert.AreEqual (true, MyTableObject.InsertWithMergedParameters, "InsertExecute#2");
  816. }
  817. [Test]
  818. public void ObjectDataSource_InsertParametersCaseSensitive ()
  819. {
  820. ObjectDataSourcePoker ods = new ObjectDataSourcePoker ();
  821. InitObjectDataSource (ods, "");
  822. CustomObjectDataSourceView view = new CustomObjectDataSourceView (ods, "CustomView", null);
  823. view.TypeName = typeof (MyTableObject).AssemblyQualifiedName;
  824. view.SelectMethod = "GetMyData";
  825. view.InsertMethod = "Insert";
  826. Parameter p1, p2, p3;
  827. p1 = new Parameter ("id", TypeCode.String, "1001");
  828. p2 = new Parameter ("fname", TypeCode.String, "Mahesh");
  829. p3 = new Parameter ("lname", TypeCode.String, "chand");
  830. view.InsertParameters.Add (p1);
  831. view.InsertParameters.Add (p2);
  832. view.InsertParameters.Add (p3);
  833. //This hashtable ovveride
  834. Hashtable value = new Hashtable ();
  835. value.Add ("t", "test_id");
  836. //Merge parameters
  837. view.ExecuteInsert (value);
  838. Assert.AreEqual (true, MyTableObject.InsertWithMergedParameters, "InsertParametersCaseSensitive");
  839. }
  840. [Test]
  841. public void ObjectDataSource_UpdateExecute_1()
  842. {
  843. ObjectDataSourcePoker ods = new ObjectDataSourcePoker ();
  844. InitObjectDataSource (ods, "");
  845. CustomObjectDataSourceView view = new CustomObjectDataSourceView (ods, "CustomView", null);
  846. view.TypeName = typeof (MyTableObject).AssemblyQualifiedName;
  847. view.SelectMethod = "GetMyData";
  848. view.UpdateMethod = "Update";
  849. Parameter p1, p2, p3;
  850. p1 = new Parameter ("ID", TypeCode.String, "1001");
  851. p2 = new Parameter ("FName", TypeCode.String, "Mahesh");
  852. p3 = new Parameter ("LName", TypeCode.String, "chand");
  853. view.UpdateParameters.Add (p1);
  854. view.UpdateParameters.Add (p2);
  855. view.UpdateParameters.Add (p3);
  856. view.OldValuesParameterFormatString = "oldvalue_{0}";
  857. Hashtable value = new Hashtable ();
  858. value.Add ("P", "1000");
  859. view.ExecuteUpdate (value, null, null);
  860. Assert.AreEqual (true, MyTableObject.UpdateWithOldValueCollection, "UpdateExecute#1");
  861. }
  862. [Test]
  863. public void ObjectDataSource_UpdateExecute_2 ()
  864. {
  865. ObjectDataSourcePoker ods = new ObjectDataSourcePoker ();
  866. InitObjectDataSource (ods, "");
  867. CustomObjectDataSourceView view = new CustomObjectDataSourceView (ods, "CustomView", null);
  868. view.TypeName = typeof (MyTableObject).AssemblyQualifiedName;
  869. view.SelectMethod = "GetMyData";
  870. view.UpdateMethod = "TryUpdate";
  871. Parameter p1, p2, p3;
  872. p1 = new Parameter ("ID", TypeCode.String, "1001");
  873. p2 = new Parameter ("FName", TypeCode.String, "Mahesh");
  874. p3 = new Parameter ("LName", TypeCode.String, "chand");
  875. view.UpdateParameters.Add (p1);
  876. view.UpdateParameters.Add (p2);
  877. view.UpdateParameters.Add (p3);
  878. view.OldValuesParameterFormatString = "oldvalue_{0}";
  879. Hashtable value = new Hashtable ();
  880. value.Add ("P", "1001");
  881. view.ExecuteUpdate (null, value, null);
  882. Assert.AreEqual (true, MyTableObject.UpdateWithMergedCollection, "UpdateExecute#2");
  883. }
  884. [Test]
  885. public void ObjectDataSource_UpdateExecute_CompareAllValues ()
  886. {
  887. ObjectDataSourcePoker ods = new ObjectDataSourcePoker ();
  888. InitObjectDataSource (ods, "");
  889. CustomObjectDataSourceView view = new CustomObjectDataSourceView (ods, "CustomView", null);
  890. view.TypeName = typeof (MyTableObject).AssemblyQualifiedName;
  891. view.SelectMethod = "GetMyData";
  892. view.UpdateMethod = "TryUpdate_1";
  893. Parameter p1, p2, p3;
  894. p1 = new Parameter ("ID", TypeCode.String, "1001");
  895. p2 = new Parameter ("FName", TypeCode.String, "Mahesh");
  896. p3 = new Parameter ("LName", TypeCode.String, "chand");
  897. view.UpdateParameters.Add (p1);
  898. view.UpdateParameters.Add (p2);
  899. view.UpdateParameters.Add (p3);
  900. view.OldValuesParameterFormatString = "oldvalue_{0}";
  901. view.ConflictDetection = ConflictOptions.CompareAllValues;
  902. Hashtable value = new Hashtable ();
  903. value.Add ("ID", "1001");
  904. view.ConflictDetection = ConflictOptions.CompareAllValues;
  905. view.ExecuteUpdate (null,null, value);
  906. Assert.AreEqual (true, MyTableObject.UpdateWithCompareAllValues, "CompareAllValues");
  907. }
  908. private static void InitializeView (CustomObjectDataSourceView view, out Hashtable keys, out Hashtable old_value, out Hashtable new_value)
  909. {
  910. Parameter p1, p2, p3, p4;
  911. p1 = new Parameter ("oldvalue_ID", TypeCode.String, "p_1001");
  912. p2 = new Parameter ("FName", TypeCode.String, "p_Mahesh");
  913. p3 = new Parameter ("LName", TypeCode.String, "p_chand");
  914. view.UpdateParameters.Add (p1);
  915. view.UpdateParameters.Add (p2);
  916. view.UpdateParameters.Add (p3);
  917. p4 = new Parameter ("oldvalue_ID", TypeCode.String, "p_1001");
  918. view.DeleteParameters.Add (p4);
  919. view.OldValuesParameterFormatString = "oldvalue_{0}";
  920. keys = new Hashtable ();
  921. keys.Add ("ID", "k_1001");
  922. old_value = new Hashtable ();
  923. old_value.Add ("ID", "ov_1001");
  924. old_value.Add ("FName", "ov_Mahesh");
  925. old_value.Add ("LName", "ov_chand");
  926. new_value = new Hashtable ();
  927. new_value.Add ("ID", "n_1001");
  928. new_value.Add ("FName", "n_Mahesh");
  929. new_value.Add ("LName", "n_chand");
  930. }
  931. [Test]
  932. public void ObjectDataSource_UpdateExecute_CompareAllValues2 ()
  933. {
  934. ObjectDataSourcePoker ods = new ObjectDataSourcePoker ();
  935. InitObjectDataSource (ods, "");
  936. CustomObjectDataSourceView view = new CustomObjectDataSourceView (ods, "CustomView", null);
  937. view.TypeName = typeof (MyTableObject).AssemblyQualifiedName;
  938. view.SelectMethod = "GetMyData";
  939. view.UpdateMethod = "UpdateCompareAllValues";
  940. view.ConflictDetection = ConflictOptions.CompareAllValues;
  941. Hashtable keys;
  942. Hashtable old_value;
  943. Hashtable new_value;
  944. InitializeView (view, out keys, out old_value, out new_value);
  945. view.ExecuteUpdate (keys, new_value, old_value);
  946. Assert.AreEqual (true, MyTableObject.UpdateCompareAllValuesCalled, "CompareAllValues2");
  947. Assert.AreEqual ("n_1001, n_Mahesh, n_chand, k_1001, ov_Mahesh, ov_chand", MyTableObject.UpdatePassedValues, "CompareAllValues2 Values");
  948. }
  949. [Test]
  950. public void ObjectDataSource_UpdateExecute_OverwriteChanges ()
  951. {
  952. ObjectDataSourcePoker ods = new ObjectDataSourcePoker ();
  953. InitObjectDataSource (ods, "");
  954. CustomObjectDataSourceView view = new CustomObjectDataSourceView (ods, "CustomView", null);
  955. view.TypeName = typeof (MyTableObject).AssemblyQualifiedName;
  956. view.SelectMethod = "GetMyData";
  957. view.UpdateMethod = "UpdateOverwriteChanges";
  958. view.ConflictDetection = ConflictOptions.OverwriteChanges;
  959. Hashtable keys;
  960. Hashtable old_value;
  961. Hashtable new_value;
  962. InitializeView (view, out keys, out old_value, out new_value);
  963. view.ExecuteUpdate (keys, new_value, old_value);
  964. Assert.AreEqual (true, MyTableObject.UpdateOverwriteChangesCalled, "OverwriteChanges");
  965. Assert.AreEqual ("n_1001, n_Mahesh, n_chand, k_1001", MyTableObject.UpdatePassedValues, "OverwriteChanges Values");
  966. }
  967. [Test]
  968. public void ObjectDataSource_UpdateExecute_DataObjectTypeName ()
  969. {
  970. ObjectDataSourcePoker ods = new ObjectDataSourcePoker ();
  971. InitObjectDataSource (ods, "");
  972. CustomObjectDataSourceView view = new CustomObjectDataSourceView (ods, "CustomView", null);
  973. view.TypeName = typeof (MyTableObject).AssemblyQualifiedName;
  974. view.DataObjectTypeName = typeof (NewData).AssemblyQualifiedName;
  975. view.SelectMethod = "GetMyData";
  976. view.UpdateMethod = "Update";
  977. view.OldValuesParameterFormatString = "oldvalue_{0}";
  978. view.ExecuteUpdate (null, null, null);
  979. Assert.AreEqual (true, MyTableObject.UpdateWithDataObjectTypeName, "UpdateExecute_DataObjectTypeName");
  980. Assert.AreEqual (", , ", MyTableObject.UpdatePassedValues, "UpdateExecute_DataObjectTypeName Values");
  981. }
  982. [Test]
  983. public void ObjectDataSource_UpdateExecute_DataObjectTypeName2 ()
  984. {
  985. ObjectDataSourcePoker ods = new ObjectDataSourcePoker ();
  986. InitObjectDataSource (ods, "");
  987. CustomObjectDataSourceView view = new CustomObjectDataSourceView (ods, "CustomView", null);
  988. view.TypeName = typeof (MyTableObject).AssemblyQualifiedName;
  989. view.DataObjectTypeName = typeof (NewData).AssemblyQualifiedName;
  990. view.SelectMethod = "GetMyData";
  991. view.UpdateMethod = "Update";
  992. view.OldValuesParameterFormatString = "oldvalue_{0}";
  993. view.ConflictDetection = ConflictOptions.OverwriteChanges;
  994. Hashtable keys;
  995. Hashtable old_value;
  996. Hashtable new_value;
  997. InitializeView (view, out keys, out old_value, out new_value);
  998. view.ExecuteUpdate (keys, new_value, old_value);
  999. Assert.AreEqual (true, MyTableObject.UpdateWithDataObjectTypeName, "UpdateExecute_DataObjectTypeName2");
  1000. Assert.AreEqual ("n_1001, n_Mahesh, n_chand", MyTableObject.UpdatePassedValues, "UpdateExecute_DataObjectTypeName Values");
  1001. }
  1002. [Test]
  1003. public void ObjectDataSource_UpdateExecute_DataObjectTypeNameCompareAllValues ()
  1004. {
  1005. ObjectDataSourcePoker ods = new ObjectDataSourcePoker ();
  1006. InitObjectDataSource (ods, "");
  1007. CustomObjectDataSourceView view = new CustomObjectDataSourceView (ods, "CustomView", null);
  1008. view.TypeName = typeof (MyTableObject).AssemblyQualifiedName;
  1009. view.DataObjectTypeName = typeof (NewData).AssemblyQualifiedName;
  1010. view.SelectMethod = "GetMyData";
  1011. view.UpdateMethod = "Update";
  1012. view.OldValuesParameterFormatString = "oldvalue_{0}";
  1013. view.ConflictDetection = ConflictOptions.CompareAllValues;
  1014. Hashtable keys;
  1015. Hashtable old_value;
  1016. Hashtable new_value;
  1017. InitializeView (view, out keys, out old_value, out new_value);
  1018. view.ExecuteUpdate (keys, new_value, old_value);
  1019. Assert.AreEqual (true, MyTableObject.UpdateWithDataObjectTypeNameAllValues, "UpdateExecute_DataObjectTypeNameCompareAllValues");
  1020. Assert.AreEqual ("n_1001, n_Mahesh, n_chand, k_1001, ov_Mahesh, ov_chand", MyTableObject.UpdatePassedValues, "UpdateExecute_DataObjectTypeName Values");
  1021. }
  1022. [Test]
  1023. public void ObjectDataSource_DataSourceChanged ()
  1024. {
  1025. ObjectDataSourcePoker ods = new ObjectDataSourcePoker ();
  1026. InitObjectDataSource (ods, "");
  1027. ((IDataSource) ods).DataSourceChanged += new EventHandler (ObjectDataSourceTest_DataSourceChanged);
  1028. // Check if event raised
  1029. ods.DoRaiseDataSourceChangedEvent ();
  1030. Assert.IsTrue (eventChecker, "DataSourceChanged#1");
  1031. eventChecker = false;
  1032. ods.ConflictDetection = ConflictOptions.CompareAllValues;
  1033. Assert.IsFalse (eventChecker, "DataSourceChanged#2");
  1034. eventChecker = false;
  1035. ods.DataObjectTypeName = "MyData";
  1036. Assert.IsFalse (eventChecker, "DataSourceChanged#3");
  1037. eventChecker = false;
  1038. ods.EnablePaging = true;
  1039. Assert.IsFalse (eventChecker, "DataSourceChanged#4");
  1040. eventChecker = false;
  1041. ods.FilterExpression = "ID='{0}'";
  1042. Assert.IsFalse (eventChecker, "DataSourceChanged#5");
  1043. eventChecker = false;
  1044. TextBox TextBox1 = new TextBox ();
  1045. TextBox1.Text = "1001";
  1046. FormParameter p = new FormParameter ("ID", "TextBox1");
  1047. p.DefaultValue = "1002";
  1048. ods.FilterParameters.Add (p);
  1049. Assert.IsFalse (eventChecker, "DataSourceChanged#6");
  1050. eventChecker = false;
  1051. ods.MaximumRowsParameterName = "SelectCount";
  1052. Assert.IsFalse (eventChecker, "DataSourceChanged#7");
  1053. eventChecker = false;
  1054. ods.OldValuesParameterFormatString = "ID";
  1055. Assert.IsFalse (eventChecker, "DataSourceChanged#8");
  1056. eventChecker = false;
  1057. Parameter dummy = new Parameter ();
  1058. dummy.Name = "Test";
  1059. ods.SelectParameters.Add (dummy);
  1060. Assert.IsFalse (eventChecker, "DataSourceChanged#9");
  1061. eventChecker = false;
  1062. ods.SortParameterName = "sortExpression";
  1063. Assert.IsFalse (eventChecker, "DataSourceChanged#10");
  1064. eventChecker = false;
  1065. ods.StartRowIndexParameterName = "ID";
  1066. Assert.IsFalse (eventChecker, "DataSourceChanged#11");
  1067. eventChecker = false;
  1068. ods.CacheDuration = 1000;
  1069. Assert.IsFalse (eventChecker, "DataSourceChanged#12");
  1070. eventChecker = false;
  1071. ods.CacheExpirationPolicy = DataSourceCacheExpiry.Sliding;
  1072. Assert.IsFalse (eventChecker, "DataSourceChanged#13");
  1073. eventChecker = false;
  1074. ods.CacheKeyDependency = "ID";
  1075. Assert.IsFalse (eventChecker, "DataSourceChanged#14");
  1076. eventChecker = false;
  1077. ods.ConvertNullToDBNull = true;
  1078. Assert.IsFalse (eventChecker, "DataSourceChanged#15");
  1079. eventChecker = false;
  1080. ods.EnableCaching = true;
  1081. Assert.IsFalse (eventChecker, "DataSourceChanged#16");
  1082. eventChecker = false;
  1083. ods.SqlCacheDependency = "Northwind:Employees";
  1084. Assert.IsFalse (eventChecker, "DataSourceChanged#17");
  1085. }
  1086. void ObjectDataSourceTest_DataSourceChanged (object sender, EventArgs e)
  1087. {
  1088. eventChecker = true;
  1089. }
  1090. //Excpetions
  1091. [Test] // Note: on ConflictOptions.CompareAllValues old values cannot be null;
  1092. [ExpectedException (typeof (InvalidOperationException))]
  1093. public void ObjectDataSource_UpdateExecute_CompareAllValues_Exception ()
  1094. {
  1095. ObjectDataSourcePoker ods = new ObjectDataSourcePoker ();
  1096. InitObjectDataSource (ods, "");
  1097. CustomObjectDataSourceView view = new CustomObjectDataSourceView (ods, "CustomView", null);
  1098. view.TypeName = typeof (MyTableObject).AssemblyQualifiedName;
  1099. view.SelectMethod = "GetMyData";
  1100. view.UpdateMethod = "TryUpdate_1";
  1101. Parameter p1, p2, p3;
  1102. p1 = new Parameter ("ID", TypeCode.String, "1001");
  1103. p2 = new Parameter ("FName", TypeCode.String, "Mahesh");
  1104. p3 = new Parameter ("LName", TypeCode.String, "chand");
  1105. view.UpdateParameters.Add (p1);
  1106. view.UpdateParameters.Add (p2);
  1107. view.UpdateParameters.Add (p3);
  1108. view.OldValuesParameterFormatString = "oldvalue_{0}";
  1109. view.ConflictDetection = ConflictOptions.CompareAllValues;
  1110. view.ExecuteUpdate (null, null, null);
  1111. }
  1112. [Test]
  1113. [ExpectedException (typeof (InvalidOperationException))]
  1114. public void ObjectDataSource_UpdateExecute_3 ()
  1115. {
  1116. ObjectDataSourcePoker ods = new ObjectDataSourcePoker ();
  1117. InitObjectDataSource (ods, "");
  1118. CustomObjectDataSourceView view = new CustomObjectDataSourceView (ods, "CustomView", null);
  1119. view.TypeName = typeof (MyTableObject).AssemblyQualifiedName;
  1120. view.SelectMethod = "GetMyData";
  1121. view.UpdateMethod = "Update";
  1122. Parameter p1, p2, p3;
  1123. p1 = new Parameter ("ID", TypeCode.String, "1001");
  1124. p2 = new Parameter ("FName", TypeCode.String, "Mahesh");
  1125. p3 = new Parameter ("LName", TypeCode.String, "chand");
  1126. view.UpdateParameters.Add (p1);
  1127. view.UpdateParameters.Add (p2);
  1128. view.UpdateParameters.Add (p3);
  1129. view.OldValuesParameterFormatString = "oldvalue_{0}";
  1130. Hashtable value = new Hashtable ();
  1131. value.Add ("ID", "1000");
  1132. view.ExecuteUpdate (value, null, null);
  1133. }
  1134. [Test]
  1135. [ExpectedException (typeof (InvalidOperationException))]
  1136. public void ObjectDataSource_InsertParameterException ()
  1137. {
  1138. ObjectDataSourcePoker ods = new ObjectDataSourcePoker ();
  1139. InitObjectDataSource (ods, "");
  1140. CustomObjectDataSourceView view = new CustomObjectDataSourceView (ods, "CustomView", null);
  1141. view.TypeName = typeof (MyTableObject).AssemblyQualifiedName;
  1142. view.SelectMethod = "GetMyData";
  1143. view.InsertMethod = "Insert";
  1144. Parameter p1, p2, p3;
  1145. p1 = new Parameter ("id", TypeCode.String, "1001");
  1146. p2 = new Parameter ("fname", TypeCode.String, "Mahesh");
  1147. p3 = new Parameter ("lname", TypeCode.String, "chand");
  1148. view.InsertParameters.Add (p1);
  1149. view.InsertParameters.Add (p2);
  1150. view.InsertParameters.Add (p3);
  1151. //This hashtable ovveride
  1152. Hashtable value = new Hashtable ();
  1153. value.Add ("z", "test_id");
  1154. //Merge parameters
  1155. view.ExecuteInsert (value);
  1156. Assert.AreEqual (true, MyTableObject.InsertWithMergedParameters, "InsertExecute");
  1157. }
  1158. [Test]
  1159. [ExpectedException (typeof (InvalidOperationException))]
  1160. public void ObjectDataSource_DeleteExecuteMethodParameterException()
  1161. {
  1162. ObjectDataSourcePoker ods = new ObjectDataSourcePoker ();
  1163. InitObjectDataSource (ods, "");
  1164. CustomObjectDataSourceView view = new CustomObjectDataSourceView (ods, "CustomView", null);
  1165. view.TypeName = typeof (MyTableObject).AssemblyQualifiedName;
  1166. view.SelectMethod = "GetMyData";
  1167. view.DeleteMethod = "delete";
  1168. Parameter p1, p2, p3;
  1169. p1 = new Parameter ("ID", TypeCode.String, "1001");
  1170. view.DeleteParameters.Add (p1);
  1171. view.OldValuesParameterFormatString = "oldvalue_{0}";
  1172. Hashtable value = new Hashtable ();
  1173. value.Add ("ID", "test_id");
  1174. view.ExecuteDelete (value, null);
  1175. }
  1176. [Test]
  1177. [ExpectedException (typeof (InvalidOperationException))]
  1178. public void ObjectDataSource_DeleteExecuteOldValueException ()
  1179. {
  1180. ObjectDataSourcePoker ods = new ObjectDataSourcePoker ();
  1181. InitObjectDataSource (ods, "");
  1182. CustomObjectDataSourceView view = new CustomObjectDataSourceView (ods, "CustomView", null);
  1183. view.TypeName = typeof (MyTableObject).AssemblyQualifiedName;
  1184. view.SelectMethod = "GetMyData";
  1185. view.DeleteMethod = "Delete";
  1186. Parameter p1, p2, p3;
  1187. p1 = new Parameter ("ID", TypeCode.String, "1001");
  1188. p2 = new Parameter ("FName", TypeCode.String, "Mahesh");
  1189. p3 = new Parameter ("LName", TypeCode.String, "chand");
  1190. view.DeleteParameters.Add (p1);
  1191. view.DeleteParameters.Add (p2);
  1192. view.DeleteParameters.Add (p3);
  1193. view.OldValuesParameterFormatString = "oldvalue_{0}";
  1194. Hashtable value = new Hashtable ();
  1195. value.Add ("ID", "test_id");
  1196. value.Add ("FName", "test_FName");
  1197. view.ExecuteDelete (value, null);
  1198. Assert.AreEqual (true, MyTableObject.DeleteWithParamsAndKeys, "DeleteExecute");
  1199. }
  1200. [Test]
  1201. [ExpectedException (typeof (InvalidOperationException))]
  1202. public void ObjectDataSource_SelectExecuteException_1 ()
  1203. {
  1204. ObjectDataSourcePoker ods = new ObjectDataSourcePoker ();
  1205. InitObjectDataSource (ods, "");
  1206. CustomObjectDataSourceView view = new CustomObjectDataSourceView (ods, "CustomView", null);
  1207. view.SelectMethod = "GetMyData";
  1208. view.TypeName = typeof (MyTableObject).AssemblyQualifiedName;
  1209. view.SelectParameters.Add (new Parameter ("Name", TypeCode.String, "TestSelect"));
  1210. IEnumerable res = view.ExecuteSelect (new DataSourceSelectArguments (""));
  1211. }
  1212. [ExpectedException (typeof (InvalidOperationException))]
  1213. public void ObjectDataSource_SelectExecuteException_2 ()
  1214. {
  1215. ObjectDataSourcePoker ods = new ObjectDataSourcePoker ();
  1216. InitObjectDataSource (ods, "");
  1217. CustomObjectDataSourceView view = new CustomObjectDataSourceView (ods, "CustomView", null);
  1218. view.SelectMethod = "Fake";
  1219. view.TypeName = typeof (MyTableObject).AssemblyQualifiedName;
  1220. view.SelectParameters.Add (new Parameter ("Fname", TypeCode.String, "TestSelect"));
  1221. IEnumerable res = view.ExecuteSelect (new DataSourceSelectArguments (""));
  1222. }
  1223. [Test]
  1224. [ExpectedException (typeof (NotSupportedException))]
  1225. [Category ("NunitWeb")]
  1226. public void ObjectDataSource_EnableCachingException ()
  1227. {
  1228. string html = new WebTest (PageInvoker.CreateOnLoad (
  1229. new PageDelegate (EnableCachingException))).Run ();
  1230. }
  1231. public static void EnableCachingException (Page p)
  1232. {
  1233. MyTableObject.ds = MyTableObject.CreateDataTable ();
  1234. ObjectDataSourcePoker ods = new ObjectDataSourcePoker ();
  1235. InitObjectDataSource (ods, "");
  1236. ods.SelectMethod = "SelectException";
  1237. ods.EnableCaching = true;
  1238. p.Controls.Add (ods);
  1239. IEnumerable table = (IEnumerable) ods.Select ();
  1240. }
  1241. [Test]
  1242. [ExpectedException (typeof (NotSupportedException))]
  1243. [Category ("NunitWeb")]
  1244. public void ObjectDataSource_FilterExpressionException ()
  1245. {
  1246. string html = new WebTest (PageInvoker.CreateOnLoad (
  1247. new PageDelegate (FilterExpressionException))).Run ();
  1248. }
  1249. public static void FilterExpressionException (Page p)
  1250. {
  1251. MyTableObject.ds = MyTableObject.CreateDataTable ();
  1252. ObjectDataSourcePoker ods = new ObjectDataSourcePoker ();
  1253. InitObjectDataSource (ods, "");
  1254. ods.SelectMethod = "SelectException";
  1255. ods.FilterExpression = "ID='1001'";
  1256. p.Controls.Add (ods);
  1257. IEnumerable table = (IEnumerable) ods.Select ();
  1258. }
  1259. }
  1260. # region Object_Data_Source_DAL
  1261. public class MyTableObject
  1262. {
  1263. public static DataTable ds = CreateDataTable ();
  1264. public MyTableObject ()
  1265. {
  1266. ResetEventCheckers ();
  1267. }
  1268. public static DataTable GetMyData ()
  1269. {
  1270. return ds;
  1271. }
  1272. public static ArrayList GetMyData (string Fname)
  1273. {
  1274. ArrayList ar = new ArrayList ();
  1275. ar.Add (Fname);
  1276. return ar;
  1277. }
  1278. public static DbDataReader SelectException ()
  1279. {
  1280. return new DataTableReader (new DataTable ());
  1281. }
  1282. public static int SelectCount ()
  1283. {
  1284. return 20;
  1285. }
  1286. public static DataTable Delete (string ID, string FName, string LName)
  1287. {
  1288. DataRow dr = ds.Rows.Find (ID);
  1289. ds.Rows.Remove (dr);
  1290. return ds;
  1291. }
  1292. public static DataTable Delete (string ID, string FName, string LName, string oldvalue_ID)
  1293. {
  1294. DeleteWithParamsAndKeys = true;
  1295. UpdatePassedValues = String.Join (", ", new string [] { ID, FName, LName, oldvalue_ID });
  1296. DataRow dr = ds.Rows.Find (ID);
  1297. try {
  1298. ds.Rows.Remove (dr); }
  1299. catch{}
  1300. return ds;
  1301. }
  1302. public static DataTable DeleteOldValues (string oldvalue_ID, string oldvalue_FName, string oldvalue_LName)
  1303. {
  1304. DeleteWithOldValuesCompareAllValues = true;
  1305. UpdatePassedValues = String.Join (", ", new string [] { oldvalue_ID, oldvalue_FName, oldvalue_LName });
  1306. return ds;
  1307. }
  1308. public static DataTable Delete (NewData anyName)
  1309. {
  1310. UpdatePassedValues = String.Join (", ", new string [] { anyName.ID, anyName.FName, anyName.LName });
  1311. DeleteWithDataObjectTypeName = true;
  1312. return ds;
  1313. }
  1314. public static bool DeleteWithParamsAndKeys;
  1315. public static bool DeleteWithOldValuesCompareAllValues;
  1316. public static bool DeleteWithDataObjectTypeName;
  1317. public static bool UpdateWithOldValueCollection;
  1318. public static bool UpdateWithMergedCollection;
  1319. public static bool InsertWithParameters;
  1320. public static bool InsertWithMergedParameters;
  1321. public static bool UpdateWithCompareAllValues;
  1322. public static bool UpdateWithDataObjectTypeName;
  1323. public static bool UpdateWithDataObjectTypeNameAllValues;
  1324. public static bool UpdateCompareAllValuesCalled;
  1325. public static bool UpdateOverwriteChangesCalled;
  1326. public static string UpdatePassedValues;
  1327. private void ResetEventCheckers()
  1328. {
  1329. DeleteWithParamsAndKeys = false;
  1330. DeleteWithOldValuesCompareAllValues = false;
  1331. DeleteWithDataObjectTypeName = false;
  1332. InsertWithParameters = false;
  1333. InsertWithMergedParameters = false;
  1334. UpdateWithOldValueCollection = false;
  1335. UpdateWithMergedCollection = false;
  1336. UpdateWithCompareAllValues = false;
  1337. UpdateWithDataObjectTypeName = false;
  1338. UpdateWithDataObjectTypeNameAllValues = false;
  1339. UpdateCompareAllValuesCalled = false;
  1340. UpdateOverwriteChangesCalled = false;
  1341. UpdatePassedValues = "";
  1342. }
  1343. public static DataTable Update (string ID, string FName, string LName)
  1344. {
  1345. DataRow dr = ds.Rows.Find (ID);
  1346. if (dr == null) {
  1347. Label lbl = new Label ();
  1348. lbl.Text = "ID doesn't exist. update only FName and LName";
  1349. return ds;
  1350. }
  1351. dr["FName"] = FName;
  1352. dr["LName"] = LName;
  1353. return ds;
  1354. }
  1355. public static DataTable TryUpdate_1 (string ID, string FName, string LName, string oldvalue_ID)
  1356. {
  1357. UpdateWithCompareAllValues = true;
  1358. return ds;
  1359. }
  1360. public static DataTable TryUpdate (string ID, string FName, string LName, string P)
  1361. {
  1362. UpdateWithMergedCollection = true;
  1363. return ds;
  1364. }
  1365. public static DataTable Update (string ID, string FName, string LName, string oldvalue_P )
  1366. {
  1367. UpdateWithOldValueCollection = true;
  1368. return ds;
  1369. }
  1370. public static DataTable Update (NewData data)
  1371. {
  1372. UpdatePassedValues = String.Join (", ", new string [] { data.ID, data.FName, data.LName});
  1373. UpdateWithDataObjectTypeName = true;
  1374. return ds;
  1375. }
  1376. public static DataTable Update (NewData data, NewData oldvalue_data)
  1377. {
  1378. UpdatePassedValues = String.Join (", ", new string [] { data.ID, data.FName, data.LName, oldvalue_data.ID, oldvalue_data.FName, oldvalue_data.LName });
  1379. UpdateWithDataObjectTypeNameAllValues = true;
  1380. return ds;
  1381. }
  1382. public static DataTable UpdateCompareAllValues (string ID, string FName, string LName,
  1383. string oldvalue_ID, string oldvalue_FName, string oldvalue_LName)
  1384. {
  1385. UpdatePassedValues = String.Join (", ", new string [] {ID, FName, LName, oldvalue_ID, oldvalue_FName, oldvalue_LName });
  1386. UpdateCompareAllValuesCalled = true;
  1387. return ds;
  1388. }
  1389. public static DataTable UpdateOverwriteChanges (string ID, string FName, string LName, string oldvalue_ID)
  1390. {
  1391. UpdatePassedValues = String.Join (", ", new string [] { ID, FName, LName, oldvalue_ID });
  1392. UpdateOverwriteChangesCalled = true;
  1393. return ds;
  1394. }
  1395. public static DataTable Insert (string ID)
  1396. {
  1397. InsertWithParameters = true;
  1398. return ds;
  1399. }
  1400. public static DataTable Insert (string ID, string FName, string LName,string T)
  1401. {
  1402. InsertWithMergedParameters = true;
  1403. return ds;
  1404. }
  1405. public static DataTable Insert (string ID, string FName, string LName)
  1406. {
  1407. DataRow dr = ds.NewRow ();
  1408. dr["ID"] = ID;
  1409. dr["FName"] = FName;
  1410. dr["LName"] = LName;
  1411. ds.Rows.Add (dr);
  1412. return ds;
  1413. }
  1414. public static DataTable CreateDataTable ()
  1415. {
  1416. DataTable aTable = new DataTable ("A");
  1417. DataColumn dtCol;
  1418. DataRow dtRow;
  1419. // Create ID column and add to the DataTable.
  1420. dtCol = new DataColumn ();
  1421. dtCol.DataType = Type.GetType ("System.Int32");
  1422. dtCol.ColumnName = "ID";
  1423. dtCol.AutoIncrement = true;
  1424. dtCol.Caption = "ID";
  1425. dtCol.ReadOnly = true;
  1426. dtCol.Unique = true;
  1427. // Add the column to the DataColumnCollection.
  1428. aTable.Columns.Add (dtCol);
  1429. // Create Name column and add to the table
  1430. dtCol = new DataColumn ();
  1431. dtCol.DataType = Type.GetType ("System.String");
  1432. dtCol.ColumnName = "FName";
  1433. dtCol.AutoIncrement = false;
  1434. dtCol.Caption = "First Name";
  1435. dtCol.ReadOnly = false;
  1436. dtCol.Unique = false;
  1437. aTable.Columns.Add (dtCol);
  1438. // Create Last Name column and add to the table.
  1439. dtCol = new DataColumn ();
  1440. dtCol.DataType = Type.GetType ("System.String");
  1441. dtCol.ColumnName = "LName";
  1442. dtCol.AutoIncrement = false;
  1443. dtCol.Caption = "Last Name";
  1444. dtCol.ReadOnly = false;
  1445. dtCol.Unique = false;
  1446. aTable.Columns.Add (dtCol);
  1447. // Create three rows to the table
  1448. dtRow = aTable.NewRow ();
  1449. dtRow["ID"] = 1001;
  1450. dtRow["FName"] = "Mahesh";
  1451. dtRow["LName"] = "Chand";
  1452. aTable.Rows.Add (dtRow);
  1453. dtRow = aTable.NewRow ();
  1454. dtRow["ID"] = 1002;
  1455. dtRow["FName"] = "Melanie";
  1456. dtRow["LName"] = "Talmadge";
  1457. aTable.Rows.Add (dtRow);
  1458. dtRow = aTable.NewRow ();
  1459. dtRow["ID"] = 1003;
  1460. dtRow["FName"] = "Vinay";
  1461. dtRow["LName"] = "Bansal";
  1462. aTable.Rows.Add (dtRow);
  1463. aTable.PrimaryKey = new DataColumn[] { aTable.Columns["ID"] };
  1464. return aTable;
  1465. }
  1466. public static DataTable SelectForPaging (int startIndex, int maxRows)
  1467. {
  1468. DataTable table = new DataTable ();
  1469. table.Columns.Add ("Name", typeof (string));
  1470. table.Columns.Add ("Number", typeof (int));
  1471. int current;
  1472. for (int i = 0; i < maxRows; i++) {
  1473. current = i + startIndex;
  1474. table.Rows.Add (new object[] { "Number" + current.ToString (), current });
  1475. }
  1476. return table;
  1477. }
  1478. }
  1479. #endregion
  1480. #region DataObjectTypeName
  1481. public class NewData
  1482. {
  1483. private string IDValue;
  1484. private string FNameValue;
  1485. private string LNameValue;
  1486. public string LName
  1487. {
  1488. get { return LNameValue; }
  1489. set { LNameValue = value; }
  1490. }
  1491. public string FName
  1492. {
  1493. get { return FNameValue; }
  1494. set { FNameValue = value; }
  1495. }
  1496. public string ID
  1497. {
  1498. get { return IDValue; }
  1499. set { IDValue = value; }
  1500. }
  1501. }
  1502. #endregion
  1503. }
  1504. #endif