2 // Tests for System.Web.UI.WebControls.FormView.cs
5 // Merav Sudri (meravs@mainsoft.com)
8 // Copyright (C) 2005 Novell, Inc (http://www.novell.com)
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:
18 // The above copyright notice and this permission notice shall be
19 // included in all copies or substantial portions of the Software.
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.
32 using NUnit.Framework;
34 using System.Threading;
36 using System.Data.Common;
39 using System.Collections;
40 using System.Globalization;
43 using System.Web.UI.WebControls;
44 using MonoTests.SystemWeb.Framework;
45 using MonoTests.stand_alone.WebHarness;
48 namespace MonoTests.System.Web.UI.WebControls
50 public class ObjectDataSourcePoker : ObjectDataSource
52 public ObjectDataSourcePoker () // constructor
58 public void DoRaiseDataSourceChangedEvent ()
60 base.RaiseDataSourceChangedEvent (new EventArgs ());
63 public object SaveState ()
65 return SaveViewState ();
68 public void LoadState (object o)
74 public StateBag StateBag
76 get { return base.ViewState; }
79 public string Render ()
81 StringWriter sw = new StringWriter ();
82 HtmlTextWriter tw = new HtmlTextWriter (sw);
84 return sw.ToString ();
87 public void DoOnBubbleEvent (Object source, EventArgs e)
89 base.OnBubbleEvent (source, e);
92 public object DoSaveControlState ()
94 return base.SaveControlState ();
97 public void DoLoadControlState (object savedState)
99 base.LoadControlState (savedState);
102 public new DataSourceView GetView (string viewName)
104 return base.GetView (viewName);
108 #region Hellp_class_view
109 public class CustomObjectDataSourceView : ObjectDataSourceView
111 public CustomObjectDataSourceView (ObjectDataSource owner, string name, HttpContext context)
112 : base (owner, name, context)
116 public new int ExecuteUpdate (IDictionary keys, IDictionary values, IDictionary oldValues)
118 return base.ExecuteUpdate (keys, values, oldValues);
121 public new int ExecuteDelete (IDictionary keys, IDictionary oldValues)
123 return base.ExecuteDelete (keys, oldValues);
126 public new IEnumerable ExecuteSelect (DataSourceSelectArguments arguments)
128 return base.ExecuteSelect (arguments);
131 public new int ExecuteInsert (IDictionary values)
133 return base.ExecuteInsert (values);
140 public class ObjectDataSourceTest
143 [TestFixtureTearDown]
144 public void TearDown ()
149 public static void InitObjectDataSource (ObjectDataSourcePoker ds, string action)
151 Parameter p1, p2, p3;
154 case "insert": p1 = new Parameter ("ID", TypeCode.String, "1004");
155 p2 = new Parameter ("fname", TypeCode.String, "David");
156 p3 = new Parameter ("LName", TypeCode.String, "Eli");
159 case "update": p1 = new Parameter ("ID", TypeCode.String, "1001");
160 p2 = new Parameter ("FName", TypeCode.String, "David");
161 p3 = new Parameter ("LName", TypeCode.String, "Eli");
163 case "DBNull": p1 = new Parameter ("ID");
164 p2 = new Parameter ("FName");
165 p3 = new Parameter ("LName");
168 default: p1 = new Parameter ("ID", TypeCode.String, "1001");
169 p2 = new Parameter ("FName", TypeCode.String, "Mahesh");
170 p3 = new Parameter ("LName", TypeCode.String, "chand");
174 ds.SelectMethod = "GetMyData";
175 ds.DeleteMethod = "Delete";
176 ds.InsertMethod = "Insert";
177 ds.UpdateMethod = "Update";
178 ds.SelectCountMethod = "SelectCount";
179 ds.DeleteParameters.Add (p1);
180 ds.DeleteParameters.Add (p2);
181 ds.DeleteParameters.Add (p3);
182 ds.InsertParameters.Add (p1);
183 ds.InsertParameters.Add (p2);
184 ds.InsertParameters.Add (p3);
185 ds.UpdateParameters.Add (p1);
186 ds.UpdateParameters.Add (p2);
187 ds.UpdateParameters.Add (p3);
189 ds.TypeName = typeof (MyTableObject).AssemblyQualifiedName;
198 public void ObjectDataSource_DefaultProperties ()
200 ObjectDataSourcePoker ods = new ObjectDataSourcePoker ();
202 Assert.AreEqual (ConflictOptions.OverwriteChanges, ods.ConflictDetection, "ConflictDetection");
203 Assert.AreEqual ("",ods.DataObjectTypeName ,"DataObjectTypeName ");
204 Assert.AreEqual ("", ods.DeleteMethod, "DeleteMethod");
205 Assert.AreEqual (typeof(ParameterCollection),ods.DeleteParameters.GetType (),"DeleteParameters");
206 Assert.AreEqual (false, ods.EnablePaging, "EnablePaging ");
207 Assert.AreEqual ("", ods.FilterExpression, "FilterExpression ");
208 Assert.AreEqual (typeof (ParameterCollection), ods.FilterParameters.GetType (), "FilterParameters");
209 Assert.AreEqual ("", ods.InsertMethod, "InsertMethod ");
210 Assert.AreEqual (typeof (ParameterCollection), ods.InsertParameters.GetType (), "InsertParameters ");
211 Assert.AreEqual ("maximumRows", ods.MaximumRowsParameterName, "MaximumRowsParameterName");
212 Assert.AreEqual ("{0}", ods.OldValuesParameterFormatString, "OldValuesParameterFormatString");
213 Assert.AreEqual ("", ods.SelectCountMethod, "SelectCountMethod");
214 Assert.AreEqual ("", ods.SelectMethod, "SelectMethod ");
215 Assert.AreEqual (typeof (ParameterCollection), ods.SelectParameters.GetType (), "SelectParameters");
216 Assert.AreEqual ("", ods.SortParameterName, "SortParameterName");
217 Assert.AreEqual ("startRowIndex", ods.StartRowIndexParameterName, "StartRowIndexParameterName");
218 Assert.AreEqual ("", ods.TypeName, "TypeName");
219 Assert.AreEqual ("", ods.UpdateMethod, "UpdateMethod ");
220 Assert.AreEqual (typeof (ParameterCollection), ods.UpdateParameters.GetType (), "UpdateParameters");
221 Assert.AreEqual (0, ods.CacheDuration, "CacheDuration");
222 Assert.AreEqual (DataSourceCacheExpiry.Absolute, ods.CacheExpirationPolicy, "CacheExpirationPolicy");
223 Assert.AreEqual ("", ods.CacheKeyDependency, "CacheKeyDependency");
224 Assert.AreEqual (false, ods.ConvertNullToDBNull, "ConvertNullToDBNull ");
225 Assert.AreEqual (false, ods.EnableCaching, "EnableCaching ");
226 Assert.AreEqual ("", ods.SqlCacheDependency, "SqlCacheDependency");
230 //Non default properties values
233 public void ObjectDataSource_AssignToDefaultProperties ()
235 ObjectDataSourcePoker ods = new ObjectDataSourcePoker ();
236 InitObjectDataSource (ods,"");
237 ods.ConflictDetection = ConflictOptions.CompareAllValues;
238 Assert.AreEqual (ConflictOptions.CompareAllValues, ods.ConflictDetection, "ConflictDetection");
239 ods.DataObjectTypeName = "MyData";
240 Assert.AreEqual ("MyData", ods.DataObjectTypeName, "DataObjectTypeName ");
241 Assert.AreEqual ("Delete", ods.DeleteMethod, "DeleteMethod");
242 Assert.AreEqual (3, ods.DeleteParameters.Count, "DeleteParameters");
243 ods.EnablePaging = true;
244 Assert.AreEqual (true, ods.EnablePaging, "EnablePaging ");
245 ods.FilterExpression = "ID='{0}'";
246 Assert.AreEqual ("ID='{0}'", ods.FilterExpression, "FilterExpression ");
247 TextBox TextBox1=new TextBox ();
248 TextBox1.Text ="1001";
249 FormParameter p=new FormParameter ("ID","TextBox1");
250 p.DefaultValue = "1002";
251 ods.FilterParameters.Add (p);
252 Assert.AreEqual ("ID", ods.FilterParameters[0].Name, "FilterParameters1");
253 Assert.AreEqual ("1002", ods.FilterParameters[0].DefaultValue , "FilterParameters2");
254 Assert.AreEqual ("TextBox1", ((FormParameter )ods.FilterParameters[0]).FormField, "FilterParameters3");
255 Assert.AreEqual ("Insert", ods.InsertMethod, "InsertMethod ");
256 Assert.AreEqual ("ID", ods.InsertParameters[0].Name , "InsertParameters ");
257 ods.MaximumRowsParameterName = "SelectCount";
258 Assert.AreEqual ("SelectCount", ods.MaximumRowsParameterName, "MaximumRowsParameterName");
259 ods.OldValuesParameterFormatString = "ID";
260 Assert.AreEqual ("ID", ods.OldValuesParameterFormatString, "OldValuesParameterFormatString");
261 Assert.AreEqual ("SelectCount", ods.SelectCountMethod, "SelectCountMethod");
262 Assert.AreEqual ("GetMyData", ods.SelectMethod, "SelectMethod ");
263 Parameter dummy = new Parameter ();
265 ods.SelectParameters.Add (dummy);
266 Assert.AreEqual ("Test", ods.SelectParameters[0].Name , "SelectParameters");
267 ods.SortParameterName = "sortExpression";
268 Assert.AreEqual ("sortExpression", ods.SortParameterName, "SortParameterName");
269 ods.StartRowIndexParameterName = "ID";
270 Assert.AreEqual ("ID", ods.StartRowIndexParameterName, "StartRowIndexParameterName");
271 Assert.AreEqual (typeof (MyTableObject).AssemblyQualifiedName, ods.TypeName, "TypeName");
272 Assert.AreEqual ("Update", ods.UpdateMethod, "UpdateMethod ");
273 Assert.AreEqual ("FName", ods.UpdateParameters[1].Name, "UpdateParameters");
274 ods.CacheDuration = 1000;
275 Assert.AreEqual (1000, ods.CacheDuration, "CacheDuration");
276 ods.CacheExpirationPolicy = DataSourceCacheExpiry.Sliding;
277 Assert.AreEqual (DataSourceCacheExpiry.Sliding, ods.CacheExpirationPolicy, "CacheExpirationPolicy");
278 ods.CacheKeyDependency = "ID";
279 Assert.AreEqual ("ID", ods.CacheKeyDependency, "CacheKeyDependency");
280 ods.ConvertNullToDBNull = true;
281 Assert.AreEqual (true, ods.ConvertNullToDBNull, "ConvertNullToDBNull ");
282 ods.EnableCaching = true;
283 Assert.AreEqual (true, ods.EnableCaching, "EnableCaching ");
284 ods.SqlCacheDependency = "Northwind:Employees";
285 Assert.AreEqual ("Northwind:Employees", ods.SqlCacheDependency, "SqlCacheDependency");
292 public void ObjectDataSource_ViewState ()
294 ObjectDataSourcePoker ods = new ObjectDataSourcePoker ();
295 //InitObjectDataSource (ods,"");
297 ods.CacheDuration = 1;
298 ods.CacheExpirationPolicy = DataSourceCacheExpiry.Sliding;
299 ods.CacheKeyDependency = "key";
300 ods.ConflictDetection = ConflictOptions.CompareAllValues;
301 ods.ConvertNullToDBNull = true;
302 ods.DataObjectTypeName = "DataObjectType";
303 ods.DeleteMethod = "deleteMethod";
304 ods.EnableCaching = true;
305 ods.EnablePaging = true;
306 ods.FilterExpression = "filter expression";
307 ods.InsertMethod = "insertMethod";
308 ods.MaximumRowsParameterName = "maxRows";
309 ods.OldValuesParameterFormatString = "old_{0}";
310 ods.SelectCountMethod = "selectCountMethod";
311 ods.SelectMethod = "selectMethod";
312 ods.SortParameterName = "sortParamName";
313 ods.SqlCacheDependency = "cacheDependency";
314 ods.StartRowIndexParameterName = "startRow";
315 ods.TypeName = "TypeName";
316 ods.UpdateMethod = "updateMethod";
318 object state = ods.SaveState ();
319 Assert.IsNull (state, "ViewState is null");
321 ObjectDataSourcePoker copy = new ObjectDataSourcePoker ();
322 copy.LoadState (state);
326 //Properties functionality
328 public void ObjectDataSource_ConflictDetection ()
334 [Category ("NunitWeb")]
335 public void ObjectDataSource_ConvertNullToDBNull ()
337 string html = new WebTest (PageInvoker.CreateOnLoad (new PageDelegate (ConvertNullToDBNull))).Run ();
341 public static void ConvertNullToDBNull (Page p)
343 ObjectDataSourcePoker ods = new ObjectDataSourcePoker ();
344 InitObjectDataSource (ods,"DBNull");
346 ods.ConvertNullToDBNull = true;
350 catch (Exception ex) {
351 Assert.AreEqual (true,
352 ex.Message.Contains ("type 'System.DBNull' cannot be converted to type 'System.String'") || // dotnet
353 ex.Message.Contains ("type System.DBNull cannot be converted to target type: System.String")); // mono
356 Assert.AreEqual (true, dbnull, "ConvertNullToDBNull2");
360 [Category ("NunitWeb")]
361 public void ObjectDataSource_FilterExpression ()
363 string html = new WebTest (PageInvoker.CreateOnLoad (
364 new PageDelegate (FilterExpression))).Run ();
365 string newHtml= HtmlDiff.GetControlFromPageHtml (html);
366 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>";
367 HtmlDiff.AssertAreEqual (origHtml, newHtml, "FilterExpression");
371 public static void FilterExpression (Page p)
373 LiteralControl lcb = new LiteralControl (HtmlDiff.BEGIN_TAG);
374 LiteralControl lce = new LiteralControl (HtmlDiff.END_TAG);
375 DataGrid dg = new DataGrid ();
376 ObjectDataSourcePoker ods = new ObjectDataSourcePoker ();
377 InitObjectDataSource (ods, "");
378 ods.FilterExpression = "ID='1002'";
379 p.Controls.Add (lcb);
381 p.Controls.Add (ods);
382 p.Controls.Add (lce);
389 [Category ("NunitWeb")]
390 public void ObjectDataSource_FilterParameter ()
392 string html = new WebTest (PageInvoker.CreateOnLoad (
393 new PageDelegate (FilterParameter))).Run ();
394 string newHtml = HtmlDiff.GetControlFromPageHtml (html);
395 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>";
396 HtmlDiff.AssertAreEqual (origHtml, newHtml, "FilterExpression");
399 public static void FilterParameter (Page p)
401 LiteralControl lcb = new LiteralControl (HtmlDiff.BEGIN_TAG);
402 LiteralControl lce = new LiteralControl (HtmlDiff.END_TAG);
403 DataGrid dg = new DataGrid ();
404 ObjectDataSourcePoker ods = new ObjectDataSourcePoker ();
405 InitObjectDataSource (ods, "");
406 ods.FilterExpression = "{0}";
407 Parameter p1 = new Parameter ("ID", TypeCode.String, "ID=1003");
408 ods.FilterParameters.Add (p1);
409 p.Controls.Add (lcb);
411 p.Controls.Add (ods);
412 p.Controls.Add (lce);
420 [Category ("NunitWeb")]
421 public void ObjectDataSource_EnablePaging ()
423 string html = new WebTest (PageInvoker.CreateOnLoad (
424 new PageDelegate (EnablePaging))).Run ();
425 string newHtml = HtmlDiff.GetControlFromPageHtml (html);
427 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('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>";
429 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>";
431 HtmlDiff.AssertAreEqual (origHtml, newHtml, "EnablePaging");
434 public static void EnablePaging (Page p)
436 LiteralControl lcb = new LiteralControl (HtmlDiff.BEGIN_TAG);
437 LiteralControl lce = new LiteralControl (HtmlDiff.END_TAG);
438 GridView gv = new GridView ();
439 ObjectDataSourcePoker ods = new ObjectDataSourcePoker ();
440 ods.ID = "ObjectDataSource1";
441 ods.TypeName = typeof (MyTableObject).AssemblyQualifiedName;
442 ods.SelectMethod = "SelectForPaging";
443 ods.EnablePaging = true;
444 ods.SelectCountMethod = "SelectCount";
445 ods.MaximumRowsParameterName = "maxRows";
446 ods.StartRowIndexParameterName = "startIndex";
447 gv.AllowPaging = true;
449 p.Controls.Add (lcb);
451 p.Controls.Add (ods);
452 p.Controls.Add (lce);
453 gv.DataSourceID = "ObjectDataSource1";
461 [Category ("NunitWeb")]
462 public void ObjectDataSource_Delete ()
464 string html = new WebTest (PageInvoker.CreateOnLoad (
465 new PageDelegate (DeleteMethod))).Run ();
466 string newHtml = HtmlDiff.GetControlFromPageHtml (html);
467 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>";
469 HtmlDiff.AssertAreEqual (origHtml, newHtml, "DeleteRender");
472 public static void DeleteMethod (Page p)
474 LiteralControl lcb = new LiteralControl (HtmlDiff.BEGIN_TAG);
475 LiteralControl lce = new LiteralControl (HtmlDiff.END_TAG);
476 MyTableObject.ds = MyTableObject.CreateDataTable ();
477 DetailsView dv = new DetailsView ();
478 ObjectDataSourcePoker ods = new ObjectDataSourcePoker ();
479 ods.Deleted += new ObjectDataSourceStatusEventHandler (odc_Deleted);
480 ods.Deleting += new ObjectDataSourceMethodEventHandler (odc_Deleting);
481 InitObjectDataSource (ods,"");
484 dv.DataKeyNames = new string[] { "ID" };
486 p.Controls.Add (lcb);
487 p.Controls.Add (ods);
489 p.Controls.Add (lce);
491 Assert.AreEqual (3, dv.DataItemCount, "BeforeDelete1");
492 Assert.AreEqual (1001, dv.SelectedValue, "BeforeDelete2");
493 Assert.AreEqual (false, deleting, "BeforeDeletingEvent");
494 Assert.AreEqual (false, deleted, "BeforeDeletedEvent");
497 Assert.AreEqual (true, deleting, "AfterDeletingEvent");
498 Assert.AreEqual (true, deleted, "AfterDeletedEvent");
499 Assert.AreEqual (2, dv.DataItemCount, "BeforeDelete1");
500 Assert.AreEqual (1002, dv.SelectedValue, "BeforeDelete2");
504 [Category ("NunitWeb")]
505 public void ObjectDataSource_Select ()
507 string html = new WebTest (PageInvoker.CreateOnLoad (
508 new PageDelegate (SelectMethod))).Run ();
512 public static void SelectMethod (Page p)
514 MyTableObject.ds = MyTableObject.CreateDataTable ();
515 ObjectDataSourcePoker ods = new ObjectDataSourcePoker ();
516 InitObjectDataSource (ods,"");
517 ods.Selected += new ObjectDataSourceStatusEventHandler (odc_Selected);
518 ods.Selecting += new ObjectDataSourceSelectingEventHandler (odc_Selecting);
519 p.Controls.Add (ods);
520 Assert.AreEqual (false, selecting, "BeforeSelectingEvent");
521 Assert.AreEqual (false, selected, "BeforeSelectedEvent");
522 IEnumerable table = (IEnumerable) ods.Select ();
523 Assert.AreEqual (3,((DataView) table).Count, "ItemsCount");
524 Assert.AreEqual ("Mahesh", ((DataView) table)[0].Row.ItemArray[1], "FirstItemData");
525 Assert.AreEqual (1002, ((DataView) table)[1].Row.ItemArray[0], "SecondItemData");
526 Assert.AreEqual ("Bansal", ((DataView) table)[2].Row.ItemArray[2], "ThirdItemData");
527 Assert.AreEqual (true, selecting, "AfterSelectingEvent");
528 Assert.AreEqual (true, selected, "AfterSelectedEvent");
532 [Category ("NunitWeb")]
533 public void ObjectDataSource_Select_Cached ()
535 string html = new WebTest (PageInvoker.CreateOnLoad (
536 new PageDelegate (SelectMethodCached))).Run ();
540 public static void SelectMethodCached (Page p)
542 MyTableObject.ds = MyTableObject.CreateDataTable ();
543 ObjectDataSourcePoker ods = new ObjectDataSourcePoker ();
544 ods.EnableCaching = true;
545 InitObjectDataSource (ods, "");
546 p.Controls.Add (ods);
547 ods.Selecting += new ObjectDataSourceSelectingEventHandler (odc_Selecting);
550 IEnumerable table = (IEnumerable) ods.Select ();
551 Assert.AreEqual (true, selecting, "AfterSelectingEvent");
554 IEnumerable table2 = (IEnumerable) ods.Select ();
555 Assert.AreEqual (false, selecting, "AfterSelectingEvent");
558 [Category ("NunitWeb")]
559 public void ObjectDataSource_Insert ()
561 string html = new WebTest (PageInvoker.CreateOnLoad (
562 new PageDelegate (InsertMethod))).Run ();
565 public static void InsertMethod (Page p)
567 MyTableObject.ds = MyTableObject.CreateDataTable ();
568 ObjectDataSourcePoker ods = new ObjectDataSourcePoker ();
569 InitObjectDataSource (ods,"insert");
570 ods.Inserted += new ObjectDataSourceStatusEventHandler (odc_Inserted);
571 ods.Inserting += new ObjectDataSourceMethodEventHandler (odc_Inserting);
572 p.Controls.Add (ods);
573 Assert.AreEqual (3, ((DataView) ods.Select ()).Count, "BeforeInsert");
574 Assert.AreEqual (false, inserted , "BeforeInsertedEvent");
575 Assert.AreEqual (false, inserting , "BeforeInsertingEvent");
577 Assert.AreEqual (4, ((DataView) ods.Select ()).Count , "AfterInsert1");
578 Assert.AreEqual (1004,((DataView) ods.Select ())[3].Row.ItemArray[0], "AfterInsert2");
579 Assert.AreEqual ("David", ((DataView) ods.Select ())[3].Row.ItemArray[1], "AfterInsert3");
580 Assert.AreEqual (true, inserted, "AfterInsertedEvent");
581 Assert.AreEqual (true, inserting, "AfterInsertingEvent");
586 [Category ("NunitWeb")]
587 public void ObjectDataSource_Update ()
589 string html = new WebTest (PageInvoker.CreateOnLoad (
590 new PageDelegate (UpdateMethod))).Run ();
593 public static void UpdateMethod (Page p)
595 MyTableObject.ds = MyTableObject.CreateDataTable ();
596 ObjectDataSourcePoker ods = new ObjectDataSourcePoker ();
597 InitObjectDataSource (ods, "update");
598 ods.Updated += new ObjectDataSourceStatusEventHandler (odc_Updated);
599 ods.Updating += new ObjectDataSourceMethodEventHandler (odc_Updating);
600 p.Controls.Add (ods);
601 Assert.AreEqual (3, ((DataView) ods.Select ()).Count, "BeforeUpdate1");
602 Assert.AreEqual (1001, ((DataView) ods.Select ())[0].Row.ItemArray[0], "BeforeUpdate2");
603 Assert.AreEqual ("Mahesh", ((DataView) ods.Select ())[0].Row.ItemArray[1], "BeforeUpdate3");
604 Assert.AreEqual ("Chand", ((DataView) ods.Select ())[0].Row.ItemArray[2], "BeforeUpdate4");
605 Assert.AreEqual (false, updated, "BeforeUpdateEvent");
606 Assert.AreEqual (false, updating, "BeforeUpdatingEvent");
608 Assert.AreEqual (3, ((DataView) ods.Select ()).Count, "AfterUpdate1");
609 Assert.AreEqual (1001, ((DataView) ods.Select ())[0].Row.ItemArray[0], "AfterUpdate2");
610 Assert.AreEqual ("David", ((DataView) ods.Select ())[0].Row.ItemArray[1], "AfterUpdate3");
611 Assert.AreEqual ("Eli", ((DataView) ods.Select ())[0].Row.ItemArray[2], "AfterUpdate4");
612 Assert.AreEqual (true, updated, "AfterUpdateEvent");
613 Assert.AreEqual (true, updating, "AfterUpdatingEvent");
620 private static bool deleted = false;
621 private static bool deleting = false;
622 private static bool filtering = false;
623 private static bool inserted = false;
624 private static bool inserting = false;
625 private static bool objectCreated = false;
626 private static bool objectCreating = false;
627 private static bool objectDisposing = false;
628 private static bool selected = false;
629 private static bool selecting = false;
630 private static bool updated = false;
631 private static bool updating = false;
633 // Tests for events Select,Update,Delete and Insert include in Select,Update,Delete and Insert methods tests.
636 [Category ("NunitWeb")]
637 public void ObjectDataSource_Events ()
639 string html = new WebTest (PageInvoker.CreateOnLoad (
640 new PageDelegate (EventsTest))).Run ();
644 public static void EventsTest (Page p)
647 MyTableObject.ds = MyTableObject.CreateDataTable ();
648 DetailsView dv = new DetailsView ();
649 ObjectDataSourcePoker ods = new ObjectDataSourcePoker ();
650 ods.ObjectCreated += new ObjectDataSourceObjectEventHandler (odc_ObjectCreated);
651 ods.ObjectCreating += new ObjectDataSourceObjectEventHandler (odc_ObjectCreating);
652 InitObjectDataSource (ods,"");
653 ods.FilterExpression = "ID='1001'";
656 dv.DataKeyNames = new string[] { "ID" };
658 p.Controls.Add (ods);
661 ods.Filtering += new ObjectDataSourceFilteringEventHandler (odc_Filtering);
662 Assert.AreEqual (false, filtering, "BeforeFilteringEvent");
664 Assert.AreEqual (true, filtering, "AfterFilteringEvent");
665 ods.ObjectDisposing += new ObjectDataSourceDisposingEventHandler (odc_ObjectDisposing);
666 //ToDo: Dispose, ObjectCreated and ObjectCreating should be tested.
670 static void odc_Updating (object sender, ObjectDataSourceMethodEventArgs e)
675 static void odc_Updated (object sender, ObjectDataSourceStatusEventArgs e)
680 static void odc_Selecting (object sender, ObjectDataSourceSelectingEventArgs e)
685 static void odc_Selected (object sender, ObjectDataSourceStatusEventArgs e)
690 static void odc_ObjectDisposing (object sender, ObjectDataSourceDisposingEventArgs e)
692 objectDisposing = true;
695 static void odc_ObjectCreating (object sender, ObjectDataSourceEventArgs e)
697 objectCreating = true;
700 static void odc_ObjectCreated (object sender, ObjectDataSourceEventArgs e)
702 objectCreated = true;
705 static void odc_Inserting (object sender, ObjectDataSourceMethodEventArgs e)
710 static void odc_Inserted (object sender, ObjectDataSourceStatusEventArgs e)
715 static void odc_Filtering (object sender, ObjectDataSourceFilteringEventArgs e)
720 static void odc_Deleting (object sender, ObjectDataSourceMethodEventArgs e)
725 static void odc_Deleted (object sender, ObjectDataSourceStatusEventArgs e)
731 public void ObjectDataSource_SelectExecute ()
733 ObjectDataSourcePoker ods = new ObjectDataSourcePoker ();
734 InitObjectDataSource (ods, "");
735 CustomObjectDataSourceView view = new CustomObjectDataSourceView (ods, "CustomView", null);
736 view.SelectMethod = "GetMyData";
737 view.TypeName = typeof (MyTableObject).AssemblyQualifiedName;
738 view.SelectParameters.Add (new Parameter ("Fname", TypeCode.String, "TestSelect"));
739 ArrayList ls =(ArrayList) view.ExecuteSelect (new DataSourceSelectArguments (""));
740 Assert.AreEqual ("TestSelect", ls[0], "SelectExecute");
744 public void ObjectDataSource_SelectExecuteCaseSensitive ()
746 ObjectDataSourcePoker ods = new ObjectDataSourcePoker ();
747 InitObjectDataSource (ods, "");
748 CustomObjectDataSourceView view = new CustomObjectDataSourceView (ods, "CustomView", null);
749 view.SelectMethod = "GetMyData";
750 view.TypeName = typeof (MyTableObject).AssemblyQualifiedName;
751 view.SelectParameters.Add (new Parameter ("fname", TypeCode.String, "TestSelect"));
752 ArrayList ls = (ArrayList) view.ExecuteSelect (new DataSourceSelectArguments (""));
753 Assert.AreEqual ("TestSelect", ls[0], "SelectExecuteCaseSensitive");
757 public void ObjectDataSource_DeleteExecute ()
759 ObjectDataSourcePoker ods = new ObjectDataSourcePoker ();
760 InitObjectDataSource (ods, "");
761 CustomObjectDataSourceView view = new CustomObjectDataSourceView (ods, "CustomView", null);
762 view.TypeName = typeof (MyTableObject).AssemblyQualifiedName;
763 view.SelectMethod = "GetMyData";
764 view.DeleteMethod = "Delete";
765 Parameter p1, p2, p3;
766 p1 = new Parameter ("ID", TypeCode.String, "1001");
767 p2 = new Parameter ("FName", TypeCode.String, "p_Mahesh");
768 p3 = new Parameter ("LName", TypeCode.String, "p_chand");
769 view.DeleteParameters.Add (p1);
770 view.DeleteParameters.Add (p2);
771 view.DeleteParameters.Add (p3);
772 view.OldValuesParameterFormatString = "oldvalue_{0}";
774 Hashtable keys = new Hashtable();
775 keys.Add("ID","k_test_id");
776 view.ExecuteDelete (keys, null);
777 Assert.AreEqual (true, MyTableObject.DeleteWithParamsAndKeys, "DeleteExecute");
778 Assert.AreEqual ("1001, p_Mahesh, p_chand, k_test_id", MyTableObject.UpdatePassedValues, "DeleteExecute Values");
782 public void ObjectDataSource_DeleteExecuteParameterCaseSensitive_1 ()
784 ObjectDataSourcePoker ods = new ObjectDataSourcePoker ();
785 InitObjectDataSource (ods, "");
786 CustomObjectDataSourceView view = new CustomObjectDataSourceView (ods, "CustomView", null);
787 view.TypeName = typeof (MyTableObject).AssemblyQualifiedName;
788 view.SelectMethod = "GetMyData";
789 view.DeleteMethod = "Delete";
790 Parameter p1, p2, p3;
791 p1 = new Parameter ("id", TypeCode.String, "1001");
792 p2 = new Parameter ("fname", TypeCode.String, "Mahesh");
793 p3 = new Parameter ("lname", TypeCode.String, "chand");
794 view.DeleteParameters.Add (p1);
795 view.DeleteParameters.Add (p2);
796 view.DeleteParameters.Add (p3);
797 view.OldValuesParameterFormatString = "oldvalue_{0}";
799 Hashtable value = new Hashtable ();
800 value.Add ("ID", "test_id");
801 view.ExecuteDelete (value, null);
802 Assert.AreEqual (true, MyTableObject.DeleteWithParamsAndKeys, "DeleteExecuteParameterCaseSensitive");
806 public void ObjectDataSource_DeleteExecuteMethodCaseSensitive ()
808 ObjectDataSourcePoker ods = new ObjectDataSourcePoker ();
809 InitObjectDataSource (ods, "");
810 CustomObjectDataSourceView view = new CustomObjectDataSourceView (ods, "CustomView", null);
811 view.TypeName = typeof (MyTableObject).AssemblyQualifiedName;
812 view.SelectMethod = "GetMyData";
813 view.DeleteMethod = "delete";
814 Parameter p1, p2, p3;
815 p1 = new Parameter ("ID", TypeCode.String, "1001");
816 p2 = new Parameter ("FName", TypeCode.String, "Mahesh");
817 p3 = new Parameter ("LName", TypeCode.String, "chand");
818 view.DeleteParameters.Add (p1);
819 view.DeleteParameters.Add (p2);
820 view.DeleteParameters.Add (p3);
821 view.OldValuesParameterFormatString = "oldvalue_{0}";
823 Hashtable value = new Hashtable ();
824 value.Add ("ID", "test_id");
825 view.ExecuteDelete (value, null);
826 Assert.AreEqual (true, MyTableObject.DeleteWithParamsAndKeys, "DeleteExecuteMethodCaseSensitive");
830 public void ObjectDataSource_DeleteExecuteCompareAllValues ()
832 ObjectDataSourcePoker ods = new ObjectDataSourcePoker ();
833 InitObjectDataSource (ods, "");
834 CustomObjectDataSourceView view = new CustomObjectDataSourceView (ods, "CustomView", null);
835 view.TypeName = typeof (MyTableObject).AssemblyQualifiedName;
836 view.SelectMethod = "GetMyData";
837 view.DeleteMethod = "DeleteOldValues";
838 view.ConflictDetection = ConflictOptions.CompareAllValues;
842 InitializeView (view, out keys, out old_value, out new_value);
844 view.ExecuteDelete (keys, old_value);
845 Assert.AreEqual (true, MyTableObject.DeleteWithOldValuesCompareAllValues, "DeleteExecuteCompareAllValues");
846 Assert.AreEqual ("ov_1001, ov_Mahesh, ov_chand", MyTableObject.UpdatePassedValues, "DeleteExecuteCompareAllValues Values");
850 public void ObjectDataSource_DeleteExecuteDataType ()
852 ObjectDataSourcePoker ods = new ObjectDataSourcePoker ();
853 InitObjectDataSource (ods, "");
854 CustomObjectDataSourceView view = new CustomObjectDataSourceView (ods, "CustomView", null);
855 view.TypeName = typeof (MyTableObject).AssemblyQualifiedName;
856 view.DataObjectTypeName = typeof (NewData).AssemblyQualifiedName;
857 view.SelectMethod = "GetMyData";
858 view.DeleteMethod = "Delete";
859 view.ConflictDetection = ConflictOptions.OverwriteChanges;
863 InitializeView (view, out keys, out old_value, out new_value);
865 view.ExecuteDelete (keys, old_value);
866 Assert.AreEqual (true, MyTableObject.DeleteWithDataObjectTypeName, "DeleteExecuteDataType");
867 Assert.AreEqual ("k_1001, , ", MyTableObject.UpdatePassedValues, "DeleteExecuteDataType Values");
871 public void ObjectDataSource_DeleteExecuteDataTypeCompareAllValues ()
873 ObjectDataSourcePoker ods = new ObjectDataSourcePoker ();
874 InitObjectDataSource (ods, "");
875 CustomObjectDataSourceView view = new CustomObjectDataSourceView (ods, "CustomView", null);
876 view.TypeName = typeof (MyTableObject).AssemblyQualifiedName;
877 view.DataObjectTypeName = typeof (NewData).AssemblyQualifiedName;
878 view.SelectMethod = "GetMyData";
879 view.DeleteMethod = "Delete";
880 view.ConflictDetection = ConflictOptions.CompareAllValues;
884 InitializeView (view, out keys, out old_value, out new_value);
886 view.ExecuteDelete (keys, old_value);
887 Assert.AreEqual (true, MyTableObject.DeleteWithDataObjectTypeName, "DeleteExecuteDataTypeCompareAllValues");
888 Assert.AreEqual ("ov_1001, ov_Mahesh, ov_chand", MyTableObject.UpdatePassedValues, "DeleteExecuteDataTypeCompareAllValues Values");
892 public void ObjectDataSource_InsertExecute_1 ()
894 ObjectDataSourcePoker ods = new ObjectDataSourcePoker ();
895 InitObjectDataSource (ods, "");
896 CustomObjectDataSourceView view = new CustomObjectDataSourceView (ods, "CustomView", null);
897 view.TypeName = typeof (MyTableObject).AssemblyQualifiedName;
898 view.SelectMethod = "GetMyData";
899 view.InsertMethod = "Insert";
901 //This hashtable ovveride
902 Hashtable value = new Hashtable ();
903 value.Add ("ID", "test_id");
904 view.ExecuteInsert (value);
905 Assert.AreEqual (true, MyTableObject.InsertWithParameters, "InsertExecute#1");
909 public void ObjectDataSource_InsertExecute_2 ()
911 ObjectDataSourcePoker ods = new ObjectDataSourcePoker ();
912 InitObjectDataSource (ods, "");
913 CustomObjectDataSourceView view = new CustomObjectDataSourceView (ods, "CustomView", null);
914 view.TypeName = typeof (MyTableObject).AssemblyQualifiedName;
915 view.SelectMethod = "GetMyData";
916 view.InsertMethod = "Insert";
918 Parameter p1, p2, p3;
919 p1 = new Parameter ("ID", TypeCode.String, "1001");
920 p2 = new Parameter ("FName", TypeCode.String, "Mahesh");
921 p3 = new Parameter ("LName", TypeCode.String, "chand");
922 view.InsertParameters.Add (p1);
923 view.InsertParameters.Add (p2);
924 view.InsertParameters.Add (p3);
926 //This hashtable ovveride
927 Hashtable value = new Hashtable ();
928 value.Add ("T", "test_id");
931 view.ExecuteInsert (value);
932 Assert.AreEqual (true, MyTableObject.InsertWithMergedParameters, "InsertExecute#2");
936 public void ObjectDataSource_InsertParametersCaseSensitive ()
938 ObjectDataSourcePoker ods = new ObjectDataSourcePoker ();
939 InitObjectDataSource (ods, "");
940 CustomObjectDataSourceView view = new CustomObjectDataSourceView (ods, "CustomView", null);
941 view.TypeName = typeof (MyTableObject).AssemblyQualifiedName;
942 view.SelectMethod = "GetMyData";
943 view.InsertMethod = "Insert";
945 Parameter p1, p2, p3;
946 p1 = new Parameter ("id", TypeCode.String, "1001");
947 p2 = new Parameter ("fname", TypeCode.String, "Mahesh");
948 p3 = new Parameter ("lname", TypeCode.String, "chand");
949 view.InsertParameters.Add (p1);
950 view.InsertParameters.Add (p2);
951 view.InsertParameters.Add (p3);
953 //This hashtable ovveride
954 Hashtable value = new Hashtable ();
955 value.Add ("t", "test_id");
958 view.ExecuteInsert (value);
959 Assert.AreEqual (true, MyTableObject.InsertWithMergedParameters, "InsertParametersCaseSensitive");
963 public void ObjectDataSource_UpdateExecute_1()
965 ObjectDataSourcePoker ods = new ObjectDataSourcePoker ();
966 InitObjectDataSource (ods, "");
967 CustomObjectDataSourceView view = new CustomObjectDataSourceView (ods, "CustomView", null);
968 view.TypeName = typeof (MyTableObject).AssemblyQualifiedName;
969 view.SelectMethod = "GetMyData";
970 view.UpdateMethod = "Update";
971 Parameter p1, p2, p3;
972 p1 = new Parameter ("ID", TypeCode.String, "1001");
973 p2 = new Parameter ("FName", TypeCode.String, "Mahesh");
974 p3 = new Parameter ("LName", TypeCode.String, "chand");
975 view.UpdateParameters.Add (p1);
976 view.UpdateParameters.Add (p2);
977 view.UpdateParameters.Add (p3);
979 view.OldValuesParameterFormatString = "oldvalue_{0}";
980 Hashtable value = new Hashtable ();
981 value.Add ("P", "1000");
982 view.ExecuteUpdate (value, null, null);
983 Assert.AreEqual (true, MyTableObject.UpdateWithOldValueCollection, "UpdateExecute#1");
987 public void ObjectDataSource_UpdateExecute_2 ()
989 ObjectDataSourcePoker ods = new ObjectDataSourcePoker ();
990 InitObjectDataSource (ods, "");
991 CustomObjectDataSourceView view = new CustomObjectDataSourceView (ods, "CustomView", null);
992 view.TypeName = typeof (MyTableObject).AssemblyQualifiedName;
993 view.SelectMethod = "GetMyData";
994 view.UpdateMethod = "TryUpdate";
995 Parameter p1, p2, p3;
996 p1 = new Parameter ("ID", TypeCode.String, "1001");
997 p2 = new Parameter ("FName", TypeCode.String, "Mahesh");
998 p3 = new Parameter ("LName", TypeCode.String, "chand");
999 view.UpdateParameters.Add (p1);
1000 view.UpdateParameters.Add (p2);
1001 view.UpdateParameters.Add (p3);
1003 view.OldValuesParameterFormatString = "oldvalue_{0}";
1004 Hashtable value = new Hashtable ();
1005 value.Add ("P", "1001");
1007 view.ExecuteUpdate (null, value, null);
1008 Assert.AreEqual (true, MyTableObject.UpdateWithMergedCollection, "UpdateExecute#2");
1012 public void ObjectDataSource_UpdateExecute_CompareAllValues ()
1014 ObjectDataSourcePoker ods = new ObjectDataSourcePoker ();
1015 InitObjectDataSource (ods, "");
1016 CustomObjectDataSourceView view = new CustomObjectDataSourceView (ods, "CustomView", null);
1017 view.TypeName = typeof (MyTableObject).AssemblyQualifiedName;
1018 view.SelectMethod = "GetMyData";
1019 view.UpdateMethod = "TryUpdate_1";
1020 Parameter p1, p2, p3;
1021 p1 = new Parameter ("ID", TypeCode.String, "1001");
1022 p2 = new Parameter ("FName", TypeCode.String, "Mahesh");
1023 p3 = new Parameter ("LName", TypeCode.String, "chand");
1024 view.UpdateParameters.Add (p1);
1025 view.UpdateParameters.Add (p2);
1026 view.UpdateParameters.Add (p3);
1028 view.OldValuesParameterFormatString = "oldvalue_{0}";
1029 view.ConflictDetection = ConflictOptions.CompareAllValues;
1032 Hashtable value = new Hashtable ();
1033 value.Add ("ID", "1001");
1035 view.ConflictDetection = ConflictOptions.CompareAllValues;
1036 view.ExecuteUpdate (null,null, value);
1037 Assert.AreEqual (true, MyTableObject.UpdateWithCompareAllValues, "CompareAllValues");
1040 private static void InitializeView (CustomObjectDataSourceView view, out Hashtable keys, out Hashtable old_value, out Hashtable new_value)
1042 Parameter p1, p2, p3, p4;
1043 p1 = new Parameter ("oldvalue_ID", TypeCode.String, "p_1001");
1044 p2 = new Parameter ("FName", TypeCode.String, "p_Mahesh");
1045 p3 = new Parameter ("LName", TypeCode.String, "p_chand");
1046 view.UpdateParameters.Add (p1);
1047 view.UpdateParameters.Add (p2);
1048 view.UpdateParameters.Add (p3);
1050 p4 = new Parameter ("oldvalue_ID", TypeCode.String, "p_1001");
1051 view.DeleteParameters.Add (p4);
1053 view.OldValuesParameterFormatString = "oldvalue_{0}";
1055 keys = new Hashtable ();
1056 keys.Add ("ID", "k_1001");
1058 old_value = new Hashtable ();
1059 old_value.Add ("ID", "ov_1001");
1060 old_value.Add ("FName", "ov_Mahesh");
1061 old_value.Add ("LName", "ov_chand");
1063 new_value = new Hashtable ();
1064 new_value.Add ("ID", "n_1001");
1065 new_value.Add ("FName", "n_Mahesh");
1066 new_value.Add ("LName", "n_chand");
1070 public void ObjectDataSource_UpdateExecute_CompareAllValues2 ()
1072 ObjectDataSourcePoker ods = new ObjectDataSourcePoker ();
1073 InitObjectDataSource (ods, "");
1074 CustomObjectDataSourceView view = new CustomObjectDataSourceView (ods, "CustomView", null);
1075 view.TypeName = typeof (MyTableObject).AssemblyQualifiedName;
1076 view.SelectMethod = "GetMyData";
1077 view.UpdateMethod = "UpdateCompareAllValues";
1078 view.ConflictDetection = ConflictOptions.CompareAllValues;
1080 Hashtable old_value;
1081 Hashtable new_value;
1082 InitializeView (view, out keys, out old_value, out new_value);
1084 view.ExecuteUpdate (keys, new_value, old_value);
1085 Assert.AreEqual (true, MyTableObject.UpdateCompareAllValuesCalled, "CompareAllValues2");
1086 Assert.AreEqual ("n_1001, n_Mahesh, n_chand, k_1001, ov_Mahesh, ov_chand", MyTableObject.UpdatePassedValues, "CompareAllValues2 Values");
1090 public void ObjectDataSource_UpdateExecute_OverwriteChanges ()
1092 ObjectDataSourcePoker ods = new ObjectDataSourcePoker ();
1093 InitObjectDataSource (ods, "");
1094 CustomObjectDataSourceView view = new CustomObjectDataSourceView (ods, "CustomView", null);
1095 view.TypeName = typeof (MyTableObject).AssemblyQualifiedName;
1096 view.SelectMethod = "GetMyData";
1097 view.UpdateMethod = "UpdateOverwriteChanges";
1098 view.ConflictDetection = ConflictOptions.OverwriteChanges;
1100 Hashtable old_value;
1101 Hashtable new_value;
1102 InitializeView (view, out keys, out old_value, out new_value);
1104 view.ExecuteUpdate (keys, new_value, old_value);
1105 Assert.AreEqual (true, MyTableObject.UpdateOverwriteChangesCalled, "OverwriteChanges");
1106 Assert.AreEqual ("n_1001, n_Mahesh, n_chand, k_1001", MyTableObject.UpdatePassedValues, "OverwriteChanges Values");
1110 public void ObjectDataSource_UpdateExecute_DataObjectTypeName ()
1112 ObjectDataSourcePoker ods = new ObjectDataSourcePoker ();
1113 InitObjectDataSource (ods, "");
1114 CustomObjectDataSourceView view = new CustomObjectDataSourceView (ods, "CustomView", null);
1115 view.TypeName = typeof (MyTableObject).AssemblyQualifiedName;
1116 view.DataObjectTypeName = typeof (NewData).AssemblyQualifiedName;
1118 view.SelectMethod = "GetMyData";
1119 view.UpdateMethod = "Update";
1120 view.OldValuesParameterFormatString = "oldvalue_{0}";
1121 view.ExecuteUpdate (null, null, null);
1122 Assert.AreEqual (true, MyTableObject.UpdateWithDataObjectTypeName, "UpdateExecute_DataObjectTypeName");
1123 Assert.AreEqual (", , ", MyTableObject.UpdatePassedValues, "UpdateExecute_DataObjectTypeName Values");
1126 public void ObjectDataSource_UpdateExecute_DataObjectTypeName2 ()
1128 ObjectDataSourcePoker ods = new ObjectDataSourcePoker ();
1129 InitObjectDataSource (ods, "");
1130 CustomObjectDataSourceView view = new CustomObjectDataSourceView (ods, "CustomView", null);
1131 view.TypeName = typeof (MyTableObject).AssemblyQualifiedName;
1132 view.DataObjectTypeName = typeof (NewData).AssemblyQualifiedName;
1134 view.SelectMethod = "GetMyData";
1135 view.UpdateMethod = "Update";
1136 view.OldValuesParameterFormatString = "oldvalue_{0}";
1137 view.ConflictDetection = ConflictOptions.OverwriteChanges;
1139 Hashtable old_value;
1140 Hashtable new_value;
1141 InitializeView (view, out keys, out old_value, out new_value);
1143 view.ExecuteUpdate (keys, new_value, old_value);
1144 Assert.AreEqual (true, MyTableObject.UpdateWithDataObjectTypeName, "UpdateExecute_DataObjectTypeName2");
1145 Assert.AreEqual ("n_1001, n_Mahesh, n_chand", MyTableObject.UpdatePassedValues, "UpdateExecute_DataObjectTypeName Values");
1150 public void ObjectDataSource_UpdateExecute_DataObjectTypeNameCompareAllValues ()
1152 ObjectDataSourcePoker ods = new ObjectDataSourcePoker ();
1153 InitObjectDataSource (ods, "");
1154 CustomObjectDataSourceView view = new CustomObjectDataSourceView (ods, "CustomView", null);
1155 view.TypeName = typeof (MyTableObject).AssemblyQualifiedName;
1156 view.DataObjectTypeName = typeof (NewData).AssemblyQualifiedName;
1158 view.SelectMethod = "GetMyData";
1159 view.UpdateMethod = "Update";
1160 view.OldValuesParameterFormatString = "oldvalue_{0}";
1161 view.ConflictDetection = ConflictOptions.CompareAllValues;
1163 Hashtable old_value;
1164 Hashtable new_value;
1165 InitializeView (view, out keys, out old_value, out new_value);
1167 view.ExecuteUpdate (keys, new_value, old_value);
1168 Assert.AreEqual (true, MyTableObject.UpdateWithDataObjectTypeNameAllValues, "UpdateExecute_DataObjectTypeNameCompareAllValues");
1169 Assert.AreEqual ("n_1001, n_Mahesh, n_chand, k_1001, ov_Mahesh, ov_chand", MyTableObject.UpdatePassedValues, "UpdateExecute_DataObjectTypeName Values");
1173 public void ObjectDataSource_DataSourceChanged ()
1175 ObjectDataSourcePoker ods = new ObjectDataSourcePoker ();
1176 InitObjectDataSource (ods, "");
1177 ((IDataSource) ods).DataSourceChanged += new EventHandler (ObjectDataSourceTest_DataSourceChanged);
1179 // Check if event raised
1180 ods.DoRaiseDataSourceChangedEvent ();
1181 Assert.IsTrue (eventChecker, "DataSourceChanged#1");
1183 eventChecker = false;
1184 ods.ConflictDetection = ConflictOptions.CompareAllValues;
1185 Assert.IsFalse (eventChecker, "DataSourceChanged#2");
1187 eventChecker = false;
1188 ods.DataObjectTypeName = "MyData";
1189 Assert.IsFalse (eventChecker, "DataSourceChanged#3");
1191 eventChecker = false;
1192 ods.EnablePaging = true;
1193 Assert.IsFalse (eventChecker, "DataSourceChanged#4");
1195 eventChecker = false;
1196 ods.FilterExpression = "ID='{0}'";
1197 Assert.IsFalse (eventChecker, "DataSourceChanged#5");
1200 eventChecker = false;
1201 TextBox TextBox1 = new TextBox ();
1202 TextBox1.Text = "1001";
1203 FormParameter p = new FormParameter ("ID", "TextBox1");
1204 p.DefaultValue = "1002";
1205 ods.FilterParameters.Add (p);
1206 Assert.IsFalse (eventChecker, "DataSourceChanged#6");
1208 eventChecker = false;
1209 ods.MaximumRowsParameterName = "SelectCount";
1210 Assert.IsFalse (eventChecker, "DataSourceChanged#7");
1212 eventChecker = false;
1213 ods.OldValuesParameterFormatString = "ID";
1214 Assert.IsFalse (eventChecker, "DataSourceChanged#8");
1216 eventChecker = false;
1217 Parameter dummy = new Parameter ();
1218 dummy.Name = "Test";
1219 ods.SelectParameters.Add (dummy);
1220 Assert.IsFalse (eventChecker, "DataSourceChanged#9");
1222 eventChecker = false;
1223 ods.SortParameterName = "sortExpression";
1224 Assert.IsFalse (eventChecker, "DataSourceChanged#10");
1226 eventChecker = false;
1227 ods.StartRowIndexParameterName = "ID";
1228 Assert.IsFalse (eventChecker, "DataSourceChanged#11");
1230 eventChecker = false;
1231 ods.CacheDuration = 1000;
1232 Assert.IsFalse (eventChecker, "DataSourceChanged#12");
1234 eventChecker = false;
1235 ods.CacheExpirationPolicy = DataSourceCacheExpiry.Sliding;
1236 Assert.IsFalse (eventChecker, "DataSourceChanged#13");
1238 eventChecker = false;
1239 ods.CacheKeyDependency = "ID";
1240 Assert.IsFalse (eventChecker, "DataSourceChanged#14");
1242 eventChecker = false;
1243 ods.ConvertNullToDBNull = true;
1244 Assert.IsFalse (eventChecker, "DataSourceChanged#15");
1246 eventChecker = false;
1247 ods.EnableCaching = true;
1248 Assert.IsFalse (eventChecker, "DataSourceChanged#16");
1250 eventChecker = false;
1251 ods.SqlCacheDependency = "Northwind:Employees";
1252 Assert.IsFalse (eventChecker, "DataSourceChanged#17");
1255 void ObjectDataSourceTest_DataSourceChanged (object sender, EventArgs e)
1257 eventChecker = true;
1261 [Test] // Note: on ConflictOptions.CompareAllValues old values cannot be null;
1262 [ExpectedException (typeof (InvalidOperationException))]
1263 public void ObjectDataSource_UpdateExecute_CompareAllValues_Exception ()
1265 ObjectDataSourcePoker ods = new ObjectDataSourcePoker ();
1266 InitObjectDataSource (ods, "");
1267 CustomObjectDataSourceView view = new CustomObjectDataSourceView (ods, "CustomView", null);
1268 view.TypeName = typeof (MyTableObject).AssemblyQualifiedName;
1269 view.SelectMethod = "GetMyData";
1270 view.UpdateMethod = "TryUpdate_1";
1271 Parameter p1, p2, p3;
1272 p1 = new Parameter ("ID", TypeCode.String, "1001");
1273 p2 = new Parameter ("FName", TypeCode.String, "Mahesh");
1274 p3 = new Parameter ("LName", TypeCode.String, "chand");
1275 view.UpdateParameters.Add (p1);
1276 view.UpdateParameters.Add (p2);
1277 view.UpdateParameters.Add (p3);
1279 view.OldValuesParameterFormatString = "oldvalue_{0}";
1280 view.ConflictDetection = ConflictOptions.CompareAllValues;
1281 view.ExecuteUpdate (null, null, null);
1285 [ExpectedException (typeof (InvalidOperationException))]
1286 public void ObjectDataSource_UpdateExecute_3 ()
1288 ObjectDataSourcePoker ods = new ObjectDataSourcePoker ();
1289 InitObjectDataSource (ods, "");
1290 CustomObjectDataSourceView view = new CustomObjectDataSourceView (ods, "CustomView", null);
1291 view.TypeName = typeof (MyTableObject).AssemblyQualifiedName;
1292 view.SelectMethod = "GetMyData";
1293 view.UpdateMethod = "Update";
1294 Parameter p1, p2, p3;
1295 p1 = new Parameter ("ID", TypeCode.String, "1001");
1296 p2 = new Parameter ("FName", TypeCode.String, "Mahesh");
1297 p3 = new Parameter ("LName", TypeCode.String, "chand");
1298 view.UpdateParameters.Add (p1);
1299 view.UpdateParameters.Add (p2);
1300 view.UpdateParameters.Add (p3);
1302 view.OldValuesParameterFormatString = "oldvalue_{0}";
1303 Hashtable value = new Hashtable ();
1304 value.Add ("ID", "1000");
1305 view.ExecuteUpdate (value, null, null);
1309 [ExpectedException (typeof (InvalidOperationException))]
1310 public void ObjectDataSource_InsertParameterException ()
1312 ObjectDataSourcePoker ods = new ObjectDataSourcePoker ();
1313 InitObjectDataSource (ods, "");
1314 CustomObjectDataSourceView view = new CustomObjectDataSourceView (ods, "CustomView", null);
1315 view.TypeName = typeof (MyTableObject).AssemblyQualifiedName;
1316 view.SelectMethod = "GetMyData";
1317 view.InsertMethod = "Insert";
1319 Parameter p1, p2, p3;
1320 p1 = new Parameter ("id", TypeCode.String, "1001");
1321 p2 = new Parameter ("fname", TypeCode.String, "Mahesh");
1322 p3 = new Parameter ("lname", TypeCode.String, "chand");
1323 view.InsertParameters.Add (p1);
1324 view.InsertParameters.Add (p2);
1325 view.InsertParameters.Add (p3);
1327 //This hashtable ovveride
1328 Hashtable value = new Hashtable ();
1329 value.Add ("z", "test_id");
1332 view.ExecuteInsert (value);
1333 Assert.AreEqual (true, MyTableObject.InsertWithMergedParameters, "InsertExecute");
1337 [ExpectedException (typeof (InvalidOperationException))]
1338 public void ObjectDataSource_DeleteExecuteMethodParameterException()
1340 ObjectDataSourcePoker ods = new ObjectDataSourcePoker ();
1341 InitObjectDataSource (ods, "");
1342 CustomObjectDataSourceView view = new CustomObjectDataSourceView (ods, "CustomView", null);
1343 view.TypeName = typeof (MyTableObject).AssemblyQualifiedName;
1344 view.SelectMethod = "GetMyData";
1345 view.DeleteMethod = "delete";
1346 Parameter p1, p2, p3;
1347 p1 = new Parameter ("ID", TypeCode.String, "1001");
1348 view.DeleteParameters.Add (p1);
1349 view.OldValuesParameterFormatString = "oldvalue_{0}";
1350 Hashtable value = new Hashtable ();
1351 value.Add ("ID", "test_id");
1352 view.ExecuteDelete (value, null);
1356 [ExpectedException (typeof (InvalidOperationException))]
1357 public void ObjectDataSource_DeleteExecuteOldValueException ()
1359 ObjectDataSourcePoker ods = new ObjectDataSourcePoker ();
1360 InitObjectDataSource (ods, "");
1361 CustomObjectDataSourceView view = new CustomObjectDataSourceView (ods, "CustomView", null);
1362 view.TypeName = typeof (MyTableObject).AssemblyQualifiedName;
1363 view.SelectMethod = "GetMyData";
1364 view.DeleteMethod = "Delete";
1365 Parameter p1, p2, p3;
1366 p1 = new Parameter ("ID", TypeCode.String, "1001");
1367 p2 = new Parameter ("FName", TypeCode.String, "Mahesh");
1368 p3 = new Parameter ("LName", TypeCode.String, "chand");
1369 view.DeleteParameters.Add (p1);
1370 view.DeleteParameters.Add (p2);
1371 view.DeleteParameters.Add (p3);
1372 view.OldValuesParameterFormatString = "oldvalue_{0}";
1374 Hashtable value = new Hashtable ();
1375 value.Add ("ID", "test_id");
1376 value.Add ("FName", "test_FName");
1377 view.ExecuteDelete (value, null);
1378 Assert.AreEqual (true, MyTableObject.DeleteWithParamsAndKeys, "DeleteExecute");
1382 [ExpectedException (typeof (InvalidOperationException))]
1383 public void ObjectDataSource_SelectExecuteException_1 ()
1385 ObjectDataSourcePoker ods = new ObjectDataSourcePoker ();
1386 InitObjectDataSource (ods, "");
1387 CustomObjectDataSourceView view = new CustomObjectDataSourceView (ods, "CustomView", null);
1388 view.SelectMethod = "GetMyData";
1389 view.TypeName = typeof (MyTableObject).AssemblyQualifiedName;
1390 view.SelectParameters.Add (new Parameter ("Name", TypeCode.String, "TestSelect"));
1391 IEnumerable res = view.ExecuteSelect (new DataSourceSelectArguments (""));
1394 [ExpectedException (typeof (InvalidOperationException))]
1395 public void ObjectDataSource_SelectExecuteException_2 ()
1397 ObjectDataSourcePoker ods = new ObjectDataSourcePoker ();
1398 InitObjectDataSource (ods, "");
1399 CustomObjectDataSourceView view = new CustomObjectDataSourceView (ods, "CustomView", null);
1400 view.SelectMethod = "Fake";
1401 view.TypeName = typeof (MyTableObject).AssemblyQualifiedName;
1402 view.SelectParameters.Add (new Parameter ("Fname", TypeCode.String, "TestSelect"));
1403 IEnumerable res = view.ExecuteSelect (new DataSourceSelectArguments (""));
1407 [ExpectedException (typeof (NotSupportedException))]
1408 [Category ("NunitWeb")]
1409 public void ObjectDataSource_EnableCachingException ()
1411 string html = new WebTest (PageInvoker.CreateOnLoad (
1412 new PageDelegate (EnableCachingException))).Run ();
1416 public static void EnableCachingException (Page p)
1418 MyTableObject.ds = MyTableObject.CreateDataTable ();
1419 ObjectDataSourcePoker ods = new ObjectDataSourcePoker ();
1420 InitObjectDataSource (ods, "");
1421 ods.SelectMethod = "SelectException";
1422 ods.EnableCaching = true;
1423 p.Controls.Add (ods);
1424 IEnumerable table = (IEnumerable) ods.Select ();
1429 [ExpectedException (typeof (NotSupportedException))]
1430 [Category ("NunitWeb")]
1431 public void ObjectDataSource_FilterExpressionException ()
1433 string html = new WebTest (PageInvoker.CreateOnLoad (
1434 new PageDelegate (FilterExpressionException))).Run ();
1438 public static void FilterExpressionException (Page p)
1440 MyTableObject.ds = MyTableObject.CreateDataTable ();
1441 ObjectDataSourcePoker ods = new ObjectDataSourcePoker ();
1442 InitObjectDataSource (ods, "");
1443 ods.SelectMethod = "SelectException";
1444 ods.FilterExpression = "ID='1001'";
1445 p.Controls.Add (ods);
1446 IEnumerable table = (IEnumerable) ods.Select ();
1450 # region Object_Data_Source_DAL
1451 public class MyTableObject
1453 public static DataTable ds = CreateDataTable ();
1454 public MyTableObject ()
1456 ResetEventCheckers ();
1459 public static DataTable GetMyData ()
1464 public static ArrayList GetMyData (string Fname)
1466 ArrayList ar = new ArrayList ();
1471 public static DbDataReader SelectException ()
1473 return new DataTableReader (new DataTable ());
1476 public static int SelectCount ()
1482 public static DataTable Delete (string ID, string FName, string LName)
1484 DataRow dr = ds.Rows.Find (ID);
1485 ds.Rows.Remove (dr);
1490 public static DataTable Delete (string ID, string FName, string LName, string oldvalue_ID)
1492 DeleteWithParamsAndKeys = true;
1493 UpdatePassedValues = String.Join (", ", new string [] { ID, FName, LName, oldvalue_ID });
1494 DataRow dr = ds.Rows.Find (ID);
1496 ds.Rows.Remove (dr); }
1501 public static DataTable DeleteOldValues (string oldvalue_ID, string oldvalue_FName, string oldvalue_LName)
1503 DeleteWithOldValuesCompareAllValues = true;
1504 UpdatePassedValues = String.Join (", ", new string [] { oldvalue_ID, oldvalue_FName, oldvalue_LName });
1508 public static DataTable Delete (NewData anyName)
1510 UpdatePassedValues = String.Join (", ", new string [] { anyName.ID, anyName.FName, anyName.LName });
1511 DeleteWithDataObjectTypeName = true;
1515 public static bool DeleteWithParamsAndKeys;
1516 public static bool DeleteWithOldValuesCompareAllValues;
1517 public static bool DeleteWithDataObjectTypeName;
1518 public static bool UpdateWithOldValueCollection;
1519 public static bool UpdateWithMergedCollection;
1520 public static bool InsertWithParameters;
1521 public static bool InsertWithMergedParameters;
1522 public static bool UpdateWithCompareAllValues;
1523 public static bool UpdateWithDataObjectTypeName;
1524 public static bool UpdateWithDataObjectTypeNameAllValues;
1525 public static bool UpdateCompareAllValuesCalled;
1526 public static bool UpdateOverwriteChangesCalled;
1527 public static string UpdatePassedValues;
1529 private void ResetEventCheckers()
1531 DeleteWithParamsAndKeys = false;
1532 DeleteWithOldValuesCompareAllValues = false;
1533 DeleteWithDataObjectTypeName = false;
1534 InsertWithParameters = false;
1535 InsertWithMergedParameters = false;
1536 UpdateWithOldValueCollection = false;
1537 UpdateWithMergedCollection = false;
1538 UpdateWithCompareAllValues = false;
1539 UpdateWithDataObjectTypeName = false;
1540 UpdateWithDataObjectTypeNameAllValues = false;
1541 UpdateCompareAllValuesCalled = false;
1542 UpdateOverwriteChangesCalled = false;
1543 UpdatePassedValues = "";
1546 public static DataTable Update (string ID, string FName, string LName)
1548 DataRow dr = ds.Rows.Find (ID);
1550 Label lbl = new Label ();
1551 lbl.Text = "ID doesn't exist. update only FName and LName";
1554 dr["FName"] = FName;
1555 dr["LName"] = LName;
1560 public static DataTable TryUpdate_1 (string ID, string FName, string LName, string oldvalue_ID)
1562 UpdateWithCompareAllValues = true;
1567 public static DataTable TryUpdate (string ID, string FName, string LName, string P)
1569 UpdateWithMergedCollection = true;
1573 public static DataTable Update (string ID, string FName, string LName, string oldvalue_P )
1575 UpdateWithOldValueCollection = true;
1579 public static DataTable Update (NewData data)
1581 UpdatePassedValues = String.Join (", ", new string [] { data.ID, data.FName, data.LName});
1582 UpdateWithDataObjectTypeName = true;
1586 public static DataTable Update (NewData data, NewData oldvalue_data)
1588 UpdatePassedValues = String.Join (", ", new string [] { data.ID, data.FName, data.LName, oldvalue_data.ID, oldvalue_data.FName, oldvalue_data.LName });
1589 UpdateWithDataObjectTypeNameAllValues = true;
1593 public static DataTable UpdateCompareAllValues (string ID, string FName, string LName,
1594 string oldvalue_ID, string oldvalue_FName, string oldvalue_LName)
1596 UpdatePassedValues = String.Join (", ", new string [] {ID, FName, LName, oldvalue_ID, oldvalue_FName, oldvalue_LName });
1597 UpdateCompareAllValuesCalled = true;
1601 public static DataTable UpdateOverwriteChanges (string ID, string FName, string LName, string oldvalue_ID)
1603 UpdatePassedValues = String.Join (", ", new string [] { ID, FName, LName, oldvalue_ID });
1604 UpdateOverwriteChangesCalled = true;
1609 public static DataTable Insert (string ID)
1611 InsertWithParameters = true;
1615 public static DataTable Insert (string ID, string FName, string LName,string T)
1617 InsertWithMergedParameters = true;
1621 public static DataTable Insert (string ID, string FName, string LName)
1623 DataRow dr = ds.NewRow ();
1625 dr["FName"] = FName;
1626 dr["LName"] = LName;
1632 public static DataTable CreateDataTable ()
1635 DataTable aTable = new DataTable ("A");
1639 // Create ID column and add to the DataTable.
1641 dtCol = new DataColumn ();
1642 dtCol.DataType = Type.GetType ("System.Int32");
1643 dtCol.ColumnName = "ID";
1644 dtCol.AutoIncrement = true;
1645 dtCol.Caption = "ID";
1646 dtCol.ReadOnly = true;
1647 dtCol.Unique = true;
1649 // Add the column to the DataColumnCollection.
1651 aTable.Columns.Add (dtCol);
1653 // Create Name column and add to the table
1655 dtCol = new DataColumn ();
1656 dtCol.DataType = Type.GetType ("System.String");
1657 dtCol.ColumnName = "FName";
1658 dtCol.AutoIncrement = false;
1659 dtCol.Caption = "First Name";
1660 dtCol.ReadOnly = false;
1661 dtCol.Unique = false;
1662 aTable.Columns.Add (dtCol);
1665 // Create Last Name column and add to the table.
1667 dtCol = new DataColumn ();
1668 dtCol.DataType = Type.GetType ("System.String");
1669 dtCol.ColumnName = "LName";
1670 dtCol.AutoIncrement = false;
1671 dtCol.Caption = "Last Name";
1672 dtCol.ReadOnly = false;
1673 dtCol.Unique = false;
1674 aTable.Columns.Add (dtCol);
1677 // Create three rows to the table
1678 dtRow = aTable.NewRow ();
1680 dtRow["FName"] = "Mahesh";
1681 dtRow["LName"] = "Chand";
1682 aTable.Rows.Add (dtRow);
1685 dtRow = aTable.NewRow ();
1687 dtRow["FName"] = "Melanie";
1688 dtRow["LName"] = "Talmadge";
1689 aTable.Rows.Add (dtRow);
1691 dtRow = aTable.NewRow ();
1693 dtRow["FName"] = "Vinay";
1694 dtRow["LName"] = "Bansal";
1695 aTable.Rows.Add (dtRow);
1697 aTable.PrimaryKey = new DataColumn[] { aTable.Columns["ID"] };
1702 public static DataTable SelectForPaging (int startIndex, int maxRows)
1704 DataTable table = new DataTable ();
1705 table.Columns.Add ("Name", typeof (string));
1706 table.Columns.Add ("Number", typeof (int));
1708 for (int i = 0; i < maxRows; i++) {
1709 current = i + startIndex;
1710 table.Rows.Add (new object[] { "Number" + current.ToString (), current });
1720 #region DataObjectTypeName
1721 public class NewData
1723 private string IDValue;
1724 private string FNameValue;
1725 private string LNameValue;
1729 get { return LNameValue; }
1730 set { LNameValue = value; }
1735 get { return FNameValue; }
1736 set { FNameValue = value; }
1741 get { return IDValue; }
1742 set { IDValue = value; }