2 // Tests for System.Web.UI.WebControls.ObjectDataSourceView
5 // Chris Toshok (toshok@novell.com)
6 // Konstantin Triger (kostat@mainsoft.com)
7 // Yoni Klain (yonik@mainsoft.com)
11 // Copyright (C) 2006 Novell, Inc (http://www.novell.com)
13 // Permission is hereby granted, free of charge, to any person obtaining
14 // a copy of this software and associated documentation files (the
15 // "Software"), to deal in the Software without restriction, including
16 // without limitation the rights to use, copy, modify, merge, publish,
17 // distribute, sublicense, and/or sell copies of the Software, and to
18 // permit persons to whom the Software is furnished to do so, subject to
19 // the following conditions:
21 // The above copyright notice and this permission notice shall be
22 // included in all copies or substantial portions of the Software.
24 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
25 // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
26 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
27 // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
28 // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
29 // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
30 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
32 // WARNING NOTES : ALL NUNITWEB TESTS DOING UNLOAD BETWEEN TESTS FOR RELOAD
33 // OBJECT DATA SOURCE DEFAULT DATA
37 using NUnit.Framework;
40 using System.Configuration;
41 using System.Data.Common;
43 using System.Globalization;
46 using System.Web.UI.WebControls;
48 using System.Collections;
49 using MonoTests.SystemWeb.Framework;
50 using MonoTests.stand_alone.WebHarness;
51 using System.Threading;
53 namespace MonoTests.System.Web.UI.WebControls
55 class ObjectViewPoker : ObjectDataSourceView
57 public ObjectViewPoker (ObjectDataSource ds, string name, HttpContext context)
58 : base (ds, name, context)
63 public bool GetIsTrackingViewState ()
65 return base.IsTrackingViewState;
68 public object SaveToViewState ()
70 return SaveViewState ();
73 public void LoadFromViewState (object savedState)
75 LoadViewState (savedState);
78 public void DoOnDeleting (ObjectDataSourceMethodEventArgs e)
83 public void DoOnInserting (ObjectDataSourceMethodEventArgs e)
88 public void DoOnFiltering (ObjectDataSourceFilteringEventArgs e)
93 public void DoOnObjectCreating (ObjectDataSourceEventArgs e)
95 base.OnObjectCreating (e);
98 public void DoOnObjectCreated (ObjectDataSourceEventArgs e)
100 base.OnObjectCreated (e);
103 public void DoOnObjectDisposing (ObjectDataSourceDisposingEventArgs e)
105 base.OnObjectDisposing (e);
108 public void DoOnSelecting (ObjectDataSourceSelectingEventArgs e)
110 base.OnSelecting (e);
113 public void DoOnUpdating (ObjectDataSourceMethodEventArgs e)
118 public void DoOnUpdated (ObjectDataSourceStatusEventArgs e)
123 public void DoOnDeleted (ObjectDataSourceStatusEventArgs e)
128 public void DoOnInserted (ObjectDataSourceStatusEventArgs e)
133 public void DoOnSelected (ObjectDataSourceStatusEventArgs e)
138 public int DoExecuteDelete (IDictionary keys, IDictionary oldValues)
140 return base.ExecuteDelete (keys, oldValues);
143 public void DoOnDataSourceViewChanged ()
145 base.OnDataSourceViewChanged (new EventArgs ());
151 public class ObjectDataSourceViewTest
154 [TestFixtureTearDown]
155 public void TearDown ()
167 public void Defaults ()
169 ObjectDataSource ds = new ObjectDataSource ();
170 ObjectViewPoker sql = new ObjectViewPoker (ds, "DefaultView", null);
172 Assert.IsFalse (sql.CanDelete, "CanDelete");
173 Assert.IsFalse (sql.CanInsert, "CanInsert");
174 Assert.IsFalse (sql.CanPage, "CanPage");
175 Assert.IsTrue (sql.CanSort, "CanSort");
176 Assert.IsFalse (sql.CanUpdate, "CanUpdate");
177 Assert.AreEqual (ConflictOptions.OverwriteChanges, sql.ConflictDetection, "ConflictDetection");
178 Assert.IsFalse (sql.ConvertNullToDBNull, "ConvertNullToDBNull");
179 Assert.AreEqual ("", sql.DataObjectTypeName, "DataObjectTypeName");
180 Assert.AreEqual ("", sql.DeleteMethod, "DeleteMethod");
181 Assert.IsNotNull (sql.DeleteParameters, "DeleteParameters");
182 Assert.AreEqual (0, sql.DeleteParameters.Count, "DeleteParameters.Count");
183 Assert.IsFalse (sql.EnablePaging, "EnablePaging");
184 Assert.AreEqual ("", sql.InsertMethod, "InsertMethod");
185 Assert.IsNotNull (sql.InsertParameters, "InsertParameters");
186 Assert.AreEqual (0, sql.InsertParameters.Count, "InsertParameters.Count");
187 Assert.AreEqual ("", sql.FilterExpression, "FilterExpression");
188 Assert.IsNotNull (sql.FilterParameters, "FilterParameters");
189 Assert.AreEqual (0, sql.FilterParameters.Count, "FilterParameters.Count");
190 Assert.AreEqual ("maximumRows", sql.MaximumRowsParameterName, "MaximumRowsParameterName");
191 Assert.AreEqual ("", sql.SelectCountMethod, "SelectCountMethod");
192 Assert.AreEqual ("", sql.SelectMethod, "SelectMethod");
193 Assert.AreEqual ("{0}", sql.OldValuesParameterFormatString, "OldValuesParameterFormatString");
194 Assert.IsNotNull (sql.SelectParameters, "SelectParameters");
195 Assert.AreEqual (0, sql.SelectParameters.Count, "SelectParameters.Count");
196 Assert.AreEqual ("", sql.SortParameterName, "SortParameterName");
197 Assert.IsNotNull (sql.UpdateParameters, "UpdateParameters");
198 Assert.AreEqual (0, sql.UpdateParameters.Count, "UpdateParameters.Count");
199 Assert.AreEqual ("startRowIndex", sql.StartRowIndexParameterName, "StartRowIndexParameterName");
200 Assert.AreEqual ("", sql.TypeName, "TypeName");
201 Assert.AreEqual ("", sql.UpdateMethod, "UpdateMethod");
202 Assert.AreEqual (true, sql.GetIsTrackingViewState (), "IsTrackingViewState");
203 Assert.IsTrue (sql.CanRetrieveTotalRowCount, "CanRetrieveTotalRowCount");
207 public void DefaultsAssignProperties ()
210 ObjectDataSource ds = new ObjectDataSource ();
211 ObjectViewPoker sql = new ObjectViewPoker (ds, "DefaultView", null);
213 sql.ConflictDetection = ConflictOptions.CompareAllValues;
214 Assert.AreEqual (ConflictOptions.CompareAllValues, sql.ConflictDetection, "ConflictDetection");
216 sql.ConvertNullToDBNull = true;
217 Assert.IsTrue (sql.ConvertNullToDBNull, "ConvertNullToDBNull");
219 sql.DataObjectTypeName = "test";
220 Assert.AreEqual ("test", sql.DataObjectTypeName, "DataObjectTypeName");
222 sql.DeleteMethod = "test";
223 Assert.AreEqual ("test", sql.DeleteMethod, "DeleteMethod");
225 sql.EnablePaging = true;
226 Assert.IsTrue (sql.EnablePaging, "EnablePaging");
228 sql.InsertMethod = "test";
229 Assert.AreEqual ("test", sql.InsertMethod, "InsertMethod");
231 sql.FilterExpression = "test";
232 Assert.AreEqual ("test", sql.FilterExpression, "FilterExpression");
234 sql.MaximumRowsParameterName = "test";
235 Assert.AreEqual ("test", sql.MaximumRowsParameterName, "MaximumRowsParameterName");
237 sql.SelectCountMethod = "test";
238 Assert.AreEqual ("test", sql.SelectCountMethod, "SelectCountMethod");
240 sql.SelectMethod = "test";
241 Assert.AreEqual ("test", sql.SelectMethod, "SelectMethod");
243 sql.OldValuesParameterFormatString = "test";
244 Assert.AreEqual ("test", sql.OldValuesParameterFormatString, "OldValuesParameterFormatString");
246 sql.StartRowIndexParameterName = "test";
247 Assert.AreEqual ("test", sql.StartRowIndexParameterName, "StartRowIndexParameterName");
249 sql.TypeName = "test";
250 Assert.AreEqual ("test", sql.TypeName, "TypeName");
252 sql.UpdateMethod = "test";
253 Assert.AreEqual ("test", sql.UpdateMethod, "UpdateMethod");
255 Assert.AreEqual ("DefaultView", sql.Name, "Name");
260 public void ViewStateSupport ()
262 ObjectDataSourceView view;
263 MyDataSource ds = new MyDataSource ();
265 ds.ID = "ObjectDataSource2";
266 ds.TypeName = "MonoTests.System.Web.UI.WebControls.DataSourceObject";
267 ds.SelectMethod = "Select";
268 ds.SelectCountMethod = "SelectCount";
270 view = (ObjectDataSourceView) ds.DoGetView ("DefaultView");
271 ((IStateManager) view).TrackViewState ();
273 Parameter p1 = new Parameter ("test", TypeCode.String);
275 Assert.IsTrue (((IStateManager) view).IsTrackingViewState, "IsTrackingViewState");
276 Assert.IsTrue (((IStateManager) view.FilterParameters).IsTrackingViewState, "FilterParameters.IsTrackingViewState");
277 Assert.IsTrue (((IStateManager) view.SelectParameters).IsTrackingViewState, "SelecteParameters.IsTrackingViewState");
278 Assert.IsFalse (((IStateManager) view.DeleteParameters).IsTrackingViewState, "DeleteParameters.IsTrackingViewState");
279 Assert.IsFalse (((IStateManager) view.InsertParameters).IsTrackingViewState, "InsertParameters.IsTrackingViewState");
280 Assert.IsFalse (((IStateManager) view.UpdateParameters).IsTrackingViewState, "UpdateParameters.IsTrackingViewState");
282 object state = ((IStateManager) view).SaveViewState ();
283 Assert.IsNull (state, "view ViewState not null");
285 view.DeleteParameters.Add (p1);
286 view.InsertParameters.Add (p1);
287 //view.UpdateParameters.Add (p1);
289 state = ((IStateManager) view).SaveViewState ();
290 Assert.IsNull (state, "view ViewState not null");
292 view.FilterParameters.Add (p1);
293 //view.SelectParameters.Add (p1);
295 state = ((IStateManager) view).SaveViewState ();
296 Assert.IsNotNull (state, "view ViewState not null");
298 state = ((IStateManager) view.FilterParameters).SaveViewState ();
299 Assert.IsNotNull (state, "FilterParamenters ViewState not null");
300 state = ((IStateManager) view.SelectParameters).SaveViewState ();
301 Assert.IsNull (state, "SelectParameters ViewState not null");
303 state = ((IStateManager) view.DeleteParameters).SaveViewState ();
304 Assert.IsNotNull (state, "DeleteParameters ViewState not null");
305 state = ((IStateManager) view.InsertParameters).SaveViewState ();
306 Assert.IsNotNull (state, "InsertParameters ViewState not null");
307 state = ((IStateManager) view.UpdateParameters).SaveViewState ();
308 Assert.IsNull (state, "UpdateParameters ViewState not null");
312 public void ViewState ()
315 // IStateManager implementation allows public access to control state
316 // Nothing added to viewstate
318 ObjectDataSourceView view;
319 MyDataSource ds = new MyDataSource ();
321 ds.ID = "ObjectDataSource2";
322 ds.TypeName = "MonoTests.System.Web.UI.WebControls.DataSourceObject";
323 ds.SelectMethod = "Select";
324 ds.SelectCountMethod = "SelectCount";
326 view = (ObjectDataSourceView) ds.DoGetView ("DefaultView");
327 ((IStateManager) view).TrackViewState ();
329 view.ConflictDetection = ConflictOptions.CompareAllValues;
330 view.ConvertNullToDBNull = true;
331 view.DataObjectTypeName = "test";
332 view.DeleteMethod = "test";
333 view.EnablePaging = true;
334 view.InsertMethod = "test";
335 view.FilterExpression = "test";
336 view.MaximumRowsParameterName = "test";
337 view.SelectCountMethod = "test";
338 view.SelectMethod = "test";
339 view.OldValuesParameterFormatString = "test";
340 view.StartRowIndexParameterName = "test";
341 view.TypeName = "test";
342 view.UpdateMethod = "test";
344 object state = ((IStateManager) view).SaveViewState ();
345 Assert.IsNull (state, "ViewState#1");
347 ObjectDataSourceView copy = new ObjectDataSourceView (ds, "DefaultView", null);
348 ((IStateManager) copy).LoadViewState (state);
353 public void CanDelete ()
355 ObjectDataSource ds = new ObjectDataSource ();
356 ObjectViewPoker sql = new ObjectViewPoker (ds, "DefaultView", null);
358 sql.DeleteMethod = "DeleteMethod";
359 Assert.IsTrue (sql.CanDelete, "A1");
361 sql.DeleteMethod = "";
362 Assert.IsFalse (sql.CanDelete, "A2");
364 sql.DeleteMethod = null;
365 Assert.IsFalse (sql.CanDelete, "A3");
369 public void CanInsert ()
371 ObjectDataSource ds = new ObjectDataSource ();
372 ObjectViewPoker sql = new ObjectViewPoker (ds, "DefaultView", null);
374 sql.InsertMethod = "InsertMethod";
375 Assert.IsTrue (sql.CanInsert, "A1");
377 sql.InsertMethod = "";
378 Assert.IsFalse (sql.CanInsert, "A2");
380 sql.InsertMethod = null;
381 Assert.IsFalse (sql.CanInsert, "A3");
385 public void CanUpdate ()
387 ObjectDataSource ds = new ObjectDataSource ();
388 ObjectViewPoker sql = new ObjectViewPoker (ds, "DefaultView", null);
390 sql.UpdateMethod = "UpdateMethod";
391 Assert.IsTrue (sql.CanUpdate, "A1");
393 sql.UpdateMethod = "";
394 Assert.IsFalse (sql.CanUpdate, "A2");
396 sql.UpdateMethod = null;
397 Assert.IsFalse (sql.CanUpdate, "A3");
401 public void CanRetrieveTotalRowCount ()
403 ObjectDataSource ds = new ObjectDataSource ();
404 ObjectDataSourceView view = new ObjectDataSourceView (ds, "DefaultView", null);
406 Assert.IsFalse (view.CanPage, "CanPage#1");
407 Assert.IsTrue (view.CanRetrieveTotalRowCount, "CanRetrieveTotalRowCount#1");
409 view.EnablePaging = true;
410 Assert.IsTrue (view.CanPage, "CanPage#2");
411 Assert.IsFalse (view.CanRetrieveTotalRowCount, "CanRetrieveTotalRowCount#2");
413 view.SelectCountMethod = "SelectCountMethod";
414 Assert.IsTrue (view.CanPage, "CanPage#3");
415 Assert.IsTrue (view.CanRetrieveTotalRowCount, "CanRetrieveTotalRowCount#3");
417 view.EnablePaging = false;
418 Assert.IsFalse (view.CanPage, "CanPage#4");
419 Assert.IsTrue (view.CanRetrieveTotalRowCount, "CanRetrieveTotalRowCount#4");
423 public void OldValuesParameterFormatString ()
425 ObjectDataSource ds = new ObjectDataSource ();
427 Assert.AreEqual ("{0}", ds.OldValuesParameterFormatString, "A1");
429 ds.OldValuesParameterFormatString = "hi {0}";
431 ObjectViewPoker sql = new ObjectViewPoker (ds, "DefaultView", null);
433 Assert.AreEqual ("{0}", sql.OldValuesParameterFormatString, "A2");
435 ds.OldValuesParameterFormatString = "hi {0}";
437 Assert.AreEqual ("{0}", sql.OldValuesParameterFormatString, "A3");
439 ds.OldValuesParameterFormatString = "{0}";
440 sql.OldValuesParameterFormatString = "hi {0}";
442 Assert.AreEqual ("{0}", ds.OldValuesParameterFormatString, "A4");
446 [Category("NunitWeb")]
447 public void DeleteMethod ()
449 WebTest t = new WebTest (PageInvoker.CreateOnLoad (delete));
450 string html = t.Run ();
451 Assert.AreEqual (-1, html.IndexOf("Yonik"), "ObjectDataSourceViewDelete");
454 public static void delete (Page p)
456 LiteralControl lcb = new LiteralControl (HtmlDiff.BEGIN_TAG);
457 LiteralControl lce = new LiteralControl (HtmlDiff.END_TAG);
458 ObjectDataSourceView view;
459 GridView grid = new GridView ();
460 MyDataSource ds = new MyDataSource ();
461 ds.ID = "ObjectDataSource2";
463 ds.TypeName = "MonoTests.System.Web.UI.WebControls.DataSourceObject";
464 ds.SelectMethod = "Select";
465 ds.DeleteMethod = "Delete";
466 ds.InsertMethod = "Insert";
467 ds.UpdateMethod = "Update";
468 Parameter p1 = new Parameter ("ID", TypeCode.String);
469 Parameter p2 = new Parameter ("FName", TypeCode.String);
470 Parameter p3 = new Parameter ("LName", TypeCode.String);
471 ds.DeleteParameters.Add (p1);
472 ds.DeleteParameters.Add (p2);
473 ds.DeleteParameters.Add (p3);
475 grid.DataKeyNames = new string[] { "ID", "FName", "LName" };
476 grid.DataSourceID = "ObjectDataSource2";
477 p.Form.Controls.Add (lcb);
478 p.Form.Controls.Add (ds);
479 p.Form.Controls.Add (grid);
480 p.Form.Controls.Add (lce);
481 view = (ObjectDataSourceView) ds.DoGetView ("DefaultView");
482 view.Deleting += new ObjectDataSourceMethodEventHandler (Event);
484 DataSourceObject.InitDS ();
486 Hashtable table = new Hashtable ();
487 table.Add ("ID", "1001");
488 table.Add ("FName", "Yonik");
489 table.Add ("LName", "Laim");
490 view.Delete (table, null);
491 Assert.AreEqual (true, view.CanDelete, "CanDelete");
492 Assert.AreEqual ("Delete", view.DeleteMethod, "DeleteMethod");
493 Assert.AreEqual (3, view.DeleteParameters.Count, "DeleteParameters.Count");
494 Assert.AreEqual ("ID", view.DeleteParameters[0].Name, "DeleteParametersName#1");
495 Assert.AreEqual ("FName", view.DeleteParameters[1].Name, "DeleteParametersName#2");
496 Assert.AreEqual ("LName", view.DeleteParameters[2].Name, "DeleteParametersName#3");
497 ObjectDataSourceViewTest.Eventassert ("Delete event has not fired");
502 [Category ("NunitWeb")]
503 public void SelectMethod ()
505 WebTest t = new WebTest (PageInvoker.CreateOnLoad (select));
506 string html = t.Run ();
508 string origin = "<div>\r\n\t<table cellspacing=\"0\" rules=\"all\" border=\"1\" id=\"Grid\" style=\"border-collapse:collapse;\">\r\n\t\t<tr>\r\n\t\t\t<th scope=\"col\">ID</th><th scope=\"col\">FName</th><th scope=\"col\">LName</th>\r\n\t\t</tr><tr>\r\n\t\t\t<td>1001</td><td>Mahesh</td><td>Chand</td>\r\n\t\t</tr>\r\n\t</table>\r\n</div>";
510 string origin = "<div>\r\n\t<table cellspacing=\"0\" rules=\"all\" border=\"1\" id=\"Grid\" style=\"border-collapse:collapse;\">\r\n\t\t<tr>\r\n\t\t\t<th scope=\"col\">ID</th><th scope=\"col\">FName</th><th scope=\"col\">LName</th>\r\n\t\t</tr><tr>\r\n\t\t\t<td>1001</td><td>Mahesh</td><td>Chand</td>\r\n\t\t</tr>\r\n\t</table>\r\n</div>";
512 string renderedHtml = HtmlDiff.GetControlFromPageHtml (html);
513 HtmlDiff.AssertAreEqual (origin, renderedHtml, "ObjectDataSourceViewSelect");
516 public static void select (Page p)
518 LiteralControl lcb = new LiteralControl (HtmlDiff.BEGIN_TAG);
519 LiteralControl lce = new LiteralControl (HtmlDiff.END_TAG);
520 ObjectDataSourceView view;
521 GridView grid = new GridView ();
522 MyDataSource ds = new MyDataSource ();
523 ds.ID = "ObjectDataSource2";
524 ds.TypeName = "MonoTests.System.Web.UI.WebControls.DataSourceObject";
525 ds.SelectMethod = "Select";
528 grid.DataKeyNames = new string[] { "ID" };
529 grid.DataSourceID = "ObjectDataSource2";
530 p.Form.Controls.Add (lcb);
531 p.Form.Controls.Add (ds);
532 p.Form.Controls.Add (grid);
533 p.Form.Controls.Add (lce);
534 view = (ObjectDataSourceView) ds.DoGetView ("DefaultView");
535 view.Selecting += new ObjectDataSourceSelectingEventHandler (view_Selecting);
537 DataSourceObject.InitDS ();
539 DataView view1 = (DataView) view.Select (new DataSourceSelectArguments ());
540 Assert.AreEqual (1, view1.Count, "SelectedRowsCount");
541 Assert.AreEqual (1001, view1[0].Row["ID"], "SelectedRowsValue#1");
542 Assert.AreEqual ("Mahesh", view1[0].Row["FName"], "SelectedRowsValue#2");
543 Assert.AreEqual ("Chand", view1[0].Row["LName"], "SelectedRowsValue#3");
544 ObjectDataSourceViewTest.Eventassert ("Select event has not fired");
548 [Category ("NunitWeb")]
549 public void SelectCountMethod ()
551 // This method will render grid view with paging
552 // Note : ObjectDataSource will return page counter 5 hard coded
553 WebTest t = new WebTest (PageInvoker.CreateOnLoad (selectcount));
554 string html = t.Run ();
556 string origin = "<div>\r\n\t<table cellspacing=\"0\" rules=\"all\" border=\"1\" id=\"Grid\" style=\"border-collapse:collapse;\">\r\n\t\t<tr>\r\n\t\t\t<th scope=\"col\">ID</th><th scope=\"col\">FName</th><th scope=\"col\">LName</th>\r\n\t\t</tr><tr>\r\n\t\t\t<td>1001</td><td>Mahesh</td><td>Chand</td>\r\n\t\t</tr><tr>\r\n\t\t\t<td colspan=\"3\"><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('Grid','Page$2')\">2</a></td><td><a href=\"javascript:__doPostBack('Grid','Page$3')\">3</a></td><td><a href=\"javascript:__doPostBack('Grid','Page$4')\">4</a></td><td><a href=\"javascript:__doPostBack('Grid','Page$5')\">5</a></td>\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>";
558 string origin = "<div>\r\n\t<table cellspacing=\"0\" rules=\"all\" border=\"1\" id=\"Grid\" style=\"border-collapse:collapse;\">\r\n\t\t<tr>\r\n\t\t\t<th scope=\"col\">ID</th><th scope=\"col\">FName</th><th scope=\"col\">LName</th>\r\n\t\t</tr><tr>\r\n\t\t\t<td>1001</td><td>Mahesh</td><td>Chand</td>\r\n\t\t</tr><tr>\r\n\t\t\t<td colspan=\"3\"><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('Grid','Page$2')\">2</a></td><td><a href=\"javascript:__doPostBack('Grid','Page$3')\">3</a></td><td><a href=\"javascript:__doPostBack('Grid','Page$4')\">4</a></td><td><a href=\"javascript:__doPostBack('Grid','Page$5')\">5</a></td>\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>";
560 string renderedHtml = HtmlDiff.GetControlFromPageHtml (html);
561 HtmlDiff.AssertAreEqual (origin, renderedHtml, "ObjectDataSourceViewSelectCount");
564 public static void selectcount (Page p)
566 // This method will render grid view with paging
567 // Note : ObjectDataSource will return page counter 5 hard coded
569 LiteralControl lcb = new LiteralControl (HtmlDiff.BEGIN_TAG);
570 LiteralControl lce = new LiteralControl (HtmlDiff.END_TAG);
571 ObjectDataSourceView view;
572 GridView grid = new GridView ();
573 MyDataSource ds = new MyDataSource ();
574 ds.ID = "ObjectDataSource2";
575 ds.EnablePaging = true;
576 ds.TypeName = "MonoTests.System.Web.UI.WebControls.DataSourceObject";
577 ds.SelectMethod = "Select";
578 ds.SelectCountMethod = "SelectCount";
582 grid.DataKeyNames = new string[] { "ID" };
583 grid.DataSourceID = "ObjectDataSource2";
584 grid.AllowPaging = true;
587 p.Form.Controls.Add (lcb);
588 p.Form.Controls.Add (ds);
589 p.Form.Controls.Add (grid);
590 p.Form.Controls.Add (lce);
591 view = (ObjectDataSourceView) ds.DoGetView ("DefaultView");
592 Assert.IsTrue (view.CanRetrieveTotalRowCount, "CanRetrieveTotalRowCount");
597 [Category ("NunitWeb")]
598 public void InsertMethod ()
600 WebTest t = new WebTest (PageInvoker.CreateOnLoad (insert));
601 string html = t.Run ();
602 string origin = "<div>\r\n\t<table cellspacing=\"0\" rules=\"all\" border=\"1\" id=\"Grid\" style=\"border-collapse:collapse;\">\r\n\t\t<tr>\r\n\t\t\t<th scope=\"col\">ID</th><th scope=\"col\">FName</th><th scope=\"col\">LName</th>\r\n\t\t</tr><tr>\r\n\t\t\t<td>1001</td><td>Mahesh</td><td>Chand</td>\r\n\t\t</tr><tr>\r\n\t\t\t<td>1000</td><td>Yonik</td><td>Laim</td>\r\n\t\t</tr>\r\n\t</table>\r\n</div>";
603 string renderedHtml = HtmlDiff.GetControlFromPageHtml (html);
604 HtmlDiff.AssertAreEqual (origin, renderedHtml, "ObjectDataSourceViewInsert");
607 public static void insert (Page p)
609 DataSourceObject.InitDS ();
611 LiteralControl lcb = new LiteralControl (HtmlDiff.BEGIN_TAG);
612 LiteralControl lce = new LiteralControl (HtmlDiff.END_TAG);
613 ObjectDataSourceView view;
614 GridView grid = new GridView ();
615 MyDataSource ds = new MyDataSource ();
616 ds.ID = "ObjectDataSource1";
617 ds.TypeName = "MonoTests.System.Web.UI.WebControls.DataSourceObject";
618 ds.SelectMethod = "Select";
619 ds.InsertMethod = "Insert";
622 Parameter p1 = new Parameter ("ID", TypeCode.String);
623 Parameter p2 = new Parameter ("FName", TypeCode.String);
624 Parameter p3 = new Parameter ("LName", TypeCode.String);
626 ds.InsertParameters.Add (p1);
627 ds.InsertParameters.Add (p2);
628 ds.InsertParameters.Add (p3);
631 grid.DataSourceID = "ObjectDataSource1";
632 p.Form.Controls.Add (lcb);
633 p.Form.Controls.Add (ds);
634 p.Form.Controls.Add (grid);
635 p.Form.Controls.Add (lce);
636 view = (ObjectDataSourceView) ds.DoGetView ("DefaultView");
637 view.Inserting += new ObjectDataSourceMethodEventHandler (Event);
639 Hashtable table = new Hashtable ();
640 table.Add ("ID", "1000");
641 table.Add ("FName", "Yonik");
642 table.Add ("LName", "Laim");
644 Assert.AreEqual (true, view.CanInsert, "CanInsert");
645 Assert.AreEqual ("Insert", view.InsertMethod, "InsertMethod");
646 Assert.AreEqual (3, view.InsertParameters.Count, "InsertParameters.Count");
647 Assert.AreEqual ("ID", view.InsertParameters[0].Name, "InsertParametersName#1");
648 Assert.AreEqual ("FName", view.InsertParameters[1].Name, "InsertParametersName#2");
649 Assert.AreEqual ("LName", view.InsertParameters[2].Name, "InsertParametersName#3");
650 ObjectDataSourceViewTest.Eventassert ("Insert event has not fired");
654 [Category ("NunitWeb")]
655 public void UpdateMethod ()
657 WebTest t = new WebTest (PageInvoker.CreateOnLoad (update));
658 string html = t.Run ();
659 string origin = "<div>\r\n\t<table cellspacing=\"0\" rules=\"all\" border=\"1\" id=\"Grid\" style=\"border-collapse:collapse;\">\r\n\t\t<tr>\r\n\t\t\t<th scope=\"col\">ID</th><th scope=\"col\">FName</th><th scope=\"col\">LName</th>\r\n\t\t</tr><tr>\r\n\t\t\t<td>1001</td><td>Yonik</td><td>Laim</td>\r\n\t\t</tr>\r\n\t</table>\r\n</div>";
660 string renderedHtml = HtmlDiff.GetControlFromPageHtml (html);
661 HtmlDiff.AssertAreEqual (origin, renderedHtml, "ObjectDataSourceViewUpdate");
664 public static void update (Page p)
666 LiteralControl lcb = new LiteralControl (HtmlDiff.BEGIN_TAG);
667 LiteralControl lce = new LiteralControl (HtmlDiff.END_TAG);
668 ObjectDataSourceView view;
669 GridView grid = new GridView ();
670 MyDataSource ds = new MyDataSource ();
671 ds.ID = "ObjectDataSource1";
672 ds.TypeName = "MonoTests.System.Web.UI.WebControls.DataSourceObject";
674 ds.SelectMethod = "Select";
675 ds.DeleteMethod = "Delete";
676 ds.InsertMethod = "Insert";
677 ds.UpdateMethod = "Update";
679 Parameter p1 = new Parameter ("ID", TypeCode.String);
680 Parameter p2 = new Parameter ("FName", TypeCode.String);
681 Parameter p3 = new Parameter ("LName", TypeCode.String);
683 ds.UpdateParameters.Add (p1);
684 ds.UpdateParameters.Add (p2);
685 ds.UpdateParameters.Add (p3);
688 grid.DataSourceID = "ObjectDataSource1";
689 p.Form.Controls.Add (lcb);
690 p.Form.Controls.Add (ds);
691 p.Form.Controls.Add (grid);
692 p.Form.Controls.Add (lce);
693 view = (ObjectDataSourceView) ds.DoGetView ("defaultView");
694 view.Updating += new ObjectDataSourceMethodEventHandler (Event);
696 DataSourceObject.InitDS ();
698 Hashtable table = new Hashtable ();
699 table.Add ("ID", "1001");
700 table.Add ("FName", "Yonik");
701 table.Add ("LName", "Laim");
702 view.Update (null, table, null);
703 Assert.AreEqual (true, view.CanUpdate, "CanUpdate");
704 Assert.AreEqual ("Update", view.UpdateMethod, "UpdateMethod");
705 Assert.AreEqual (3, view.UpdateParameters.Count, "UpdateParameters.Count");
706 Assert.AreEqual ("ID", view.UpdateParameters[0].Name, "UpdateParametersName#1");
707 Assert.AreEqual ("FName", view.UpdateParameters[1].Name, "UpdateParametersName#2");
708 Assert.AreEqual ("LName", view.UpdateParameters[2].Name, "UpdateParametersName#3");
709 ObjectDataSourceViewTest.Eventassert ("Update event has not fired");
715 public void UpdateEvent ()
717 ObjectViewPoker view = new ObjectViewPoker (new ObjectDataSource (), "", null);
718 view.Updating += new ObjectDataSourceMethodEventHandler (Event);
719 view.DoOnUpdating (new ObjectDataSourceMethodEventArgs (null));
720 Eventassert ("UpdateEvent");
721 view.Updated += new ObjectDataSourceStatusEventHandler (view_Status);
722 view.DoOnUpdated (new ObjectDataSourceStatusEventArgs (null, null));
723 Eventassert ("UpdateEvent");
727 public void SelectEvent ()
729 ObjectViewPoker view = new ObjectViewPoker (new ObjectDataSource (), "", null);
730 view.Selecting += new ObjectDataSourceSelectingEventHandler (view_Selecting);
731 view.DoOnSelecting (new ObjectDataSourceSelectingEventArgs (null, new DataSourceSelectArguments (), false));
732 Eventassert ("SelectingEvent");
733 view.Selected += new ObjectDataSourceStatusEventHandler (view_Status);
734 view.DoOnSelected (new ObjectDataSourceStatusEventArgs (null, null));
735 Eventassert ("SelectedEvent");
739 public void InsertEvent ()
741 ObjectViewPoker view = new ObjectViewPoker (new ObjectDataSource (), "", null);
742 view.Inserting += new ObjectDataSourceMethodEventHandler (Event);
743 view.DoOnInserting (new ObjectDataSourceMethodEventArgs (null));
744 Eventassert ("InsertingEvent");
745 view.Inserted += new ObjectDataSourceStatusEventHandler (view_Status);
746 view.DoOnInserted (new ObjectDataSourceStatusEventArgs (null, null));
747 Eventassert ("InsertedEvent");
751 public void DeleteEvent ()
753 ObjectViewPoker view = new ObjectViewPoker (new ObjectDataSource (), "", null);
754 view.Deleting += new ObjectDataSourceMethodEventHandler (Event);
755 view.DoOnDeleting (new ObjectDataSourceMethodEventArgs (null));
756 Eventassert ("DeletingEvent");
757 view.Deleted += new ObjectDataSourceStatusEventHandler (view_Status);
758 view.DoOnDeleted (new ObjectDataSourceStatusEventArgs (null, null));
759 Eventassert ("DeletedEvent");
763 public void FilterEvent ()
765 ObjectViewPoker view = new ObjectViewPoker (new ObjectDataSource (), "", null);
766 view.Filtering += new ObjectDataSourceFilteringEventHandler (view_Filtering);
767 view.DoOnFiltering (new ObjectDataSourceFilteringEventArgs (null));
768 Eventassert ("FilterEvent");
772 public void ObjectCreatingEvent ()
774 ObjectViewPoker view = new ObjectViewPoker (new ObjectDataSource (), "", null);
775 view.ObjectCreating += new ObjectDataSourceObjectEventHandler (view_ObjectCreate);
776 view.DoOnObjectCreating (new ObjectDataSourceEventArgs (null));
777 Eventassert ("ObjectCreatingEvent");
778 view.ObjectCreated += new ObjectDataSourceObjectEventHandler (view_ObjectCreate);
779 view.DoOnObjectCreated (new ObjectDataSourceEventArgs (null));
780 Eventassert ("ObjectCreatedEvent");
781 view.ObjectDisposing += new ObjectDataSourceDisposingEventHandler (view_ObjectDisposing);
785 public void ObjectDisposing ()
787 ObjectViewPoker view = new ObjectViewPoker (new ObjectDataSource (), "", null);
788 view.ObjectDisposing += new ObjectDataSourceDisposingEventHandler (view_ObjectDisposing);
789 view.DoOnObjectDisposing (new ObjectDataSourceDisposingEventArgs (null));
790 Eventassert ("ObjectDisposing");
793 IEnumerable returnedData;
794 void SelectCallback (IEnumerable data)
799 [Test] // bug #471767
800 public void SelectReturnsObjectArray ()
802 ObjectDataSource ds = new ObjectDataSource ();
803 ds.TypeName=typeof(DataSourceObject).AssemblyQualifiedName;
804 ds.SelectMethod="SelectObject";
806 DataSourceView dsv = ((IDataSource)ds).GetView (String.Empty);
807 dsv.Select (DataSourceSelectArguments.Empty, new DataSourceViewSelectCallback (SelectCallback));
808 Assert.IsTrue (returnedData != null, "#A1");
809 Assert.AreEqual (typeof (object[]), returnedData.GetType (), "#A2");
811 object[] data = returnedData as object[];
812 Assert.AreEqual (1, data.Length, "#A3");
813 Assert.AreEqual (typeof (MyCustomDataObject), data [0].GetType (), "#A4");
819 MatchParamsToOldValues,
823 public class DummyDataSourceObject
825 public static IEnumerable Select (string filter)
827 if (eventsCalled == null) {
828 eventsCalled = new ArrayList ();
830 eventsCalled.Add (String.Format ("Select(filter = {0})", filter));
831 return new string [] { "one", "two", "three" };
834 public static int Update (string ID)
836 if (eventsCalled == null) {
837 eventsCalled = new ArrayList ();
839 eventsCalled.Add (String.Format ("Update(ID = {0})", ID));
843 public static int Update (string ID, string oldvalue_ID)
845 if (eventsCalled == null) {
846 eventsCalled = new ArrayList ();
848 eventsCalled.Add (String.Format ("Update(ID = {0}, oldvalue_ID = {1})", ID, oldvalue_ID));
852 public static int UpdateOther (string ID, string OtherValue, string oldvalue_ID)
854 if (eventsCalled == null) {
855 eventsCalled = new ArrayList ();
857 eventsCalled.Add (String.Format ("UpdateOther(ID = {0}, OtherValue = {1}, oldvalue_ID = {2})", ID, OtherValue, oldvalue_ID));
861 public static int Insert (string ID)
863 if (eventsCalled == null) {
864 eventsCalled = new ArrayList ();
866 eventsCalled.Add (String.Format ("Insert(ID = {0})", ID));
870 public static int Insert (string ID, string oldvalue_ID)
872 if (eventsCalled == null) {
873 eventsCalled = new ArrayList ();
875 eventsCalled.Add (String.Format ("Insert(ID = {0}, oldvalue_ID = {1})", ID, oldvalue_ID));
879 public static int InsertOther (string ID, string OtherValue)
881 if (eventsCalled == null) {
882 eventsCalled = new ArrayList ();
884 eventsCalled.Add (String.Format ("InsertOther(ID = {0}, OtherValue = {1})", ID, OtherValue));
888 public static int Delete (string ID, string oldvalue_ID)
890 if (eventsCalled == null) {
891 eventsCalled = new ArrayList ();
893 eventsCalled.Add (String.Format ("Delete(ID = {0}, oldvalue_ID = {1})", ID, oldvalue_ID));
897 public static int Delete (string oldvalue_ID)
899 if (eventsCalled == null) {
900 eventsCalled = new ArrayList ();
902 eventsCalled.Add (String.Format ("Delete(oldvalue_ID = {0})", oldvalue_ID));
906 public static int DeleteOther (string oldvalue_ID, string OtherValue)
908 if (eventsCalled == null) {
909 eventsCalled = new ArrayList ();
911 eventsCalled.Add (String.Format ("DeleteOther(oldvalue_ID = {0}, OtherValue = {1})", oldvalue_ID, OtherValue));
916 public class AlwaysChangingParameter : Parameter
920 public AlwaysChangingParameter (string name, TypeCode type, string defaultValue)
921 : base (name, type, defaultValue)
929 protected override object Evaluate (HttpContext context, Control control)
932 return String.Format ("{0}{1}", DefaultValue, evaluateCount);
939 private static int _testcounter;
940 private static bool _eventChecker;
941 private eventAssert ()
946 public static bool eventChecker
950 throw new NotImplementedException ();
954 _eventChecker = value;
958 static private void testAdded ()
961 _eventChecker = false;
964 public static void IsTrue (string msg)
966 Assert.IsTrue (_eventChecker, msg + "#" + _testcounter);
971 public static void IsFalse (string msg)
973 Assert.IsFalse (_eventChecker, msg + "#" + _testcounter);
980 public void ObjectDataSourceView_DataSourceViewChanged ()
982 ObjectDataSource ds = new ObjectDataSource ();
983 ObjectViewPoker sql = new ObjectViewPoker (ds, "DefaultView", null);
984 sql.DataSourceViewChanged += new EventHandler (sql_DataSourceViewChanged);
986 sql.DoOnDataSourceViewChanged ();
987 eventAssert.IsTrue ("DataSourceViewChanged");
989 sql.ConflictDetection = ConflictOptions.CompareAllValues;
990 eventAssert.IsTrue ("DataSourceViewChanged");
992 sql.ConvertNullToDBNull = true;
993 eventAssert.IsFalse ("DataSourceViewChanged");
995 sql.DataObjectTypeName = "test";
996 eventAssert.IsTrue ("DataSourceViewChanged");
998 sql.DeleteMethod = "test";
999 eventAssert.IsFalse ("DataSourceViewChanged");
1001 sql.EnablePaging = true;
1002 eventAssert.IsTrue ("DataSourceViewChanged");
1004 sql.InsertMethod = "test";
1005 eventAssert.IsFalse ("DataSourceViewChanged");
1007 sql.FilterExpression = "test";
1008 eventAssert.IsTrue ("DataSourceViewChanged");
1010 sql.MaximumRowsParameterName = "test";
1011 eventAssert.IsTrue ("DataSourceViewChanged");
1013 sql.SelectCountMethod = "test";
1014 eventAssert.IsTrue ("DataSourceViewChanged");
1016 sql.SelectMethod = "test";
1017 eventAssert.IsTrue ("DataSourceViewChanged");
1019 sql.OldValuesParameterFormatString = "test";
1020 eventAssert.IsTrue ("DataSourceViewChanged");
1022 sql.StartRowIndexParameterName = "test";
1023 eventAssert.IsTrue ("DataSourceViewChanged");
1025 sql.TypeName = "test";
1026 eventAssert.IsTrue ("DataSourceViewChanged");
1028 sql.UpdateMethod = "test";
1029 eventAssert.IsFalse ("DataSourceViewChanged");
1032 void sql_DataSourceViewChanged (object sender, EventArgs e)
1034 eventAssert.eventChecker = true;
1038 public void SelectCountMethod_DataSourceViewChanged ()
1040 ObjectViewPoker view = new ObjectViewPoker (new ObjectDataSource (), "", null);
1041 view.DataSourceViewChanged += new EventHandler (view_DataSourceViewChanged);
1043 Assert.AreEqual ("", view.SelectCountMethod);
1044 view.SelectCountMethod = null;
1045 Assert.AreEqual (1, eventsCalled.Count);
1046 Assert.AreEqual ("view_DataSourceViewChanged", eventsCalled [0]);
1047 Assert.AreEqual ("", view.SelectCountMethod);
1049 view.SelectCountMethod = null;
1050 Assert.AreEqual (2, eventsCalled.Count);
1051 Assert.AreEqual ("view_DataSourceViewChanged", eventsCalled [1]);
1052 Assert.AreEqual ("", view.SelectCountMethod);
1054 view.SelectCountMethod = "";
1055 Assert.AreEqual (2, eventsCalled.Count);
1059 public void SelectMethod_DataSourceViewChanged2 ()
1061 ObjectViewPoker view = new ObjectViewPoker (new ObjectDataSource (), "", null);
1062 view.DataSourceViewChanged += new EventHandler (view_DataSourceViewChanged);
1064 Assert.AreEqual ("", view.SelectMethod);
1065 view.SelectMethod = null;
1066 Assert.AreEqual (1, eventsCalled.Count);
1067 Assert.AreEqual ("view_DataSourceViewChanged", eventsCalled [0]);
1068 Assert.AreEqual ("", view.SelectMethod);
1070 view.SelectMethod = null;
1071 Assert.AreEqual (2, eventsCalled.Count);
1072 Assert.AreEqual ("view_DataSourceViewChanged", eventsCalled [1]);
1073 Assert.AreEqual ("", view.SelectMethod);
1075 view.SelectMethod = "";
1076 Assert.AreEqual (2, eventsCalled.Count);
1080 public void SelectMethod_DataSourceViewChanged1 ()
1082 ObjectViewPoker view = new ObjectViewPoker (new ObjectDataSource (), "", null);
1083 view.DataSourceViewChanged+=new EventHandler(view_DataSourceViewChanged);
1085 view.SelectMethod = "select_1";
1086 Assert.AreEqual (1, eventsCalled.Count);
1087 Assert.AreEqual ("view_DataSourceViewChanged", eventsCalled [0]);
1089 view.SelectMethod = "select_2";
1090 Assert.AreEqual (2, eventsCalled.Count);
1091 Assert.AreEqual ("view_DataSourceViewChanged", eventsCalled [1]);
1093 view.SelectMethod = "select_2";
1094 Assert.AreEqual (2, eventsCalled.Count);
1096 view.SelectCountMethod = "selectCount_1";
1097 Assert.AreEqual (3, eventsCalled.Count);
1098 Assert.AreEqual ("view_DataSourceViewChanged", eventsCalled [2]);
1100 view.SelectCountMethod = "selectCount_2";
1101 Assert.AreEqual (4, eventsCalled.Count);
1102 Assert.AreEqual ("view_DataSourceViewChanged", eventsCalled [3]);
1104 view.SelectCountMethod = "selectCount_2";
1105 Assert.AreEqual (4, eventsCalled.Count);
1108 private static void InitializeView (ObjectViewPoker view, InitViewType initType, out Hashtable keys, out Hashtable old_value, out Hashtable new_value)
1110 view.TypeName = typeof (DummyDataSourceObject).AssemblyQualifiedName;
1111 view.OldValuesParameterFormatString = "oldvalue_{0}";
1112 view.SelectMethod = "Select";
1113 if (initType == InitViewType.DontMatchParams) {
1114 view.UpdateMethod = "UpdateOther";
1115 view.InsertMethod = "InsertOther";
1116 view.DeleteMethod = "DeleteOther";
1119 view.UpdateMethod = "Update";
1120 view.InsertMethod = "Insert";
1121 view.DeleteMethod = "Delete";
1124 Parameter selectParameter = null;
1125 Parameter insertParameter = null;
1126 Parameter updateParameter = null;
1127 Parameter deleteParameter = null;
1129 selectParameter = new AlwaysChangingParameter ("filter", TypeCode.String, "p_ValueSelect");
1130 view.SelectParameters.Add (selectParameter);
1133 case InitViewType.MatchParamsToOldValues:
1134 insertParameter = new AlwaysChangingParameter ("oldvalue_ID", TypeCode.String, "p_OldValueInsert");
1135 view.InsertParameters.Add (insertParameter);
1136 updateParameter = new AlwaysChangingParameter ("oldvalue_ID", TypeCode.String, "p_OldValueUpdate");
1137 view.UpdateParameters.Add (updateParameter);
1138 deleteParameter = new AlwaysChangingParameter ("oldvalue_ID", TypeCode.String, "p_OldValueDelete");
1139 view.DeleteParameters.Add (deleteParameter);
1142 case InitViewType.MatchParamsToValues:
1143 insertParameter = new AlwaysChangingParameter ("ID", TypeCode.String, "p_ValueInsert");
1144 view.InsertParameters.Add (insertParameter);
1145 updateParameter = new AlwaysChangingParameter ("ID", TypeCode.String, "p_ValueUpdate");
1146 view.UpdateParameters.Add (updateParameter);
1147 deleteParameter = new AlwaysChangingParameter ("ID", TypeCode.String, "p_ValueDelete");
1148 view.DeleteParameters.Add (deleteParameter);
1151 case InitViewType.DontMatchParams:
1152 insertParameter = new AlwaysChangingParameter ("OtherValue", TypeCode.String, "p_OtherValueInsert");
1153 view.InsertParameters.Add (insertParameter);
1154 updateParameter = new AlwaysChangingParameter ("OtherValue", TypeCode.String, "p_OtherValueUpdate");
1155 view.UpdateParameters.Add (updateParameter);
1156 deleteParameter = new AlwaysChangingParameter ("OtherValue", TypeCode.String, "p_OtherValueDelete");
1157 view.DeleteParameters.Add (deleteParameter);
1161 view.SelectParameters.ParametersChanged += new EventHandler (SelectParameters_ParametersChanged);
1162 view.InsertParameters.ParametersChanged += new EventHandler (InsertParameters_ParametersChanged);
1163 view.UpdateParameters.ParametersChanged += new EventHandler (UpdateParameters_ParametersChanged);
1164 view.DeleteParameters.ParametersChanged += new EventHandler (DeleteParameters_ParametersChanged);
1166 keys = new Hashtable ();
1167 keys.Add ("ID", "k_1001");
1169 old_value = new Hashtable ();
1170 old_value.Add ("ID", "ov_1001");
1172 new_value = new Hashtable ();
1173 new_value.Add ("ID", "n_1001");
1175 view.DataSourceViewChanged += new EventHandler (view_DataSourceViewChanged);
1178 private static IList eventsCalled;
1180 static void view_DataSourceViewChanged (object sender, EventArgs e)
1182 if (eventsCalled == null) {
1183 eventsCalled = new ArrayList ();
1185 eventsCalled.Add ("view_DataSourceViewChanged");
1188 static void SelectParameters_ParametersChanged (object sender, EventArgs e)
1190 if (eventsCalled == null) {
1191 eventsCalled = new ArrayList ();
1193 eventsCalled.Add ("SelectParameters_ParametersChanged");
1196 static void InsertParameters_ParametersChanged (object sender, EventArgs e)
1198 if (eventsCalled == null) {
1199 eventsCalled = new ArrayList ();
1201 eventsCalled.Add ("InsertParameters_ParametersChanged");
1204 static void UpdateParameters_ParametersChanged (object sender, EventArgs e)
1206 if (eventsCalled == null) {
1207 eventsCalled = new ArrayList ();
1209 eventsCalled.Add ("UpdateParameters_ParametersChanged");
1212 static void DeleteParameters_ParametersChanged (object sender, EventArgs e)
1214 if (eventsCalled == null) {
1215 eventsCalled = new ArrayList ();
1217 eventsCalled.Add ("DeleteParameters_ParametersChanged");
1221 public void ParametersAndViewChangedEvent_Select ()
1223 ObjectViewPoker view = new ObjectViewPoker (new ObjectDataSource (), "", null);
1224 Hashtable keys = null;
1225 Hashtable old_values = null;
1226 Hashtable new_values = null;
1227 InitializeView (view, InitViewType.MatchParamsToValues, out keys, out old_values, out new_values);
1229 view.Select (DataSourceSelectArguments.Empty);
1231 Assert.IsNotNull (eventsCalled, "Events not raized");
1232 Assert.AreEqual (3, eventsCalled.Count, "Events Count");
1233 Assert.AreEqual ("view_DataSourceViewChanged", eventsCalled [0], "view_DataSourceViewChanged");
1234 Assert.AreEqual ("SelectParameters_ParametersChanged", eventsCalled [1], "SelectParameters_ParametersChanged");
1235 Assert.AreEqual ("Select(filter = p_ValueSelect1)", eventsCalled [2], "DataSource Method params");
1239 public void ParametersAndViewChangedEvent_MatchInsert ()
1241 ObjectViewPoker view = new ObjectViewPoker (new ObjectDataSource (), "", null);
1242 Hashtable keys = null;
1243 Hashtable old_values = null;
1244 Hashtable new_values = null;
1245 InitializeView (view, InitViewType.MatchParamsToValues, out keys, out old_values, out new_values);
1247 view.Insert (new_values);
1249 Assert.IsNotNull (eventsCalled, "Events not raized");
1250 Assert.AreEqual (3, eventsCalled.Count, "Events Count");
1251 Assert.AreEqual ("InsertParameters_ParametersChanged", eventsCalled [0], "InsertParameters_ParametersChanged");
1252 Assert.AreEqual ("Insert(ID = n_1001)", eventsCalled [1], "DataSource Method params");
1253 Assert.AreEqual ("view_DataSourceViewChanged", eventsCalled [2], "view_DataSourceViewChanged");
1257 public void ParametersAndViewChangedEvent_MatchOldInsert ()
1259 ObjectViewPoker view = new ObjectViewPoker (new ObjectDataSource (), "", null);
1260 Hashtable keys = null;
1261 Hashtable old_values = null;
1262 Hashtable new_values = null;
1263 InitializeView (view, InitViewType.MatchParamsToOldValues, out keys, out old_values, out new_values);
1265 view.Insert (new_values);
1267 Assert.IsNotNull (eventsCalled, "Events not raized");
1268 Assert.AreEqual (3, eventsCalled.Count, "Events Count");
1269 Assert.AreEqual ("InsertParameters_ParametersChanged", eventsCalled [0], "InsertParameters_ParametersChanged");
1270 Assert.AreEqual ("Insert(ID = n_1001, oldvalue_ID = p_OldValueInsert1)", eventsCalled [1], "DataSource Method params");
1271 Assert.AreEqual ("view_DataSourceViewChanged", eventsCalled [2], "view_DataSourceViewChanged");
1275 public void ParametersAndViewChangedEvent_DontMatchInsert ()
1277 ObjectViewPoker view = new ObjectViewPoker (new ObjectDataSource (), "", null);
1278 Hashtable keys = null;
1279 Hashtable old_values = null;
1280 Hashtable new_values = null;
1281 InitializeView (view, InitViewType.DontMatchParams, out keys, out old_values, out new_values);
1283 view.Insert (new_values);
1285 Assert.IsNotNull (eventsCalled, "Events not raized");
1286 Assert.AreEqual (3, eventsCalled.Count, "Events Count");
1287 Assert.AreEqual ("InsertParameters_ParametersChanged", eventsCalled [0], "InsertParameters_ParametersChanged");
1288 Assert.AreEqual ("InsertOther(ID = n_1001, OtherValue = p_OtherValueInsert1)", eventsCalled [1], "DataSource Method params");
1289 Assert.AreEqual ("view_DataSourceViewChanged", eventsCalled [2], "view_DataSourceViewChanged");
1293 public void ParametersAndViewChangedEvent_MatchUpdate ()
1295 ObjectViewPoker view = new ObjectViewPoker (new ObjectDataSource (), "", null);
1296 Hashtable keys = null;
1297 Hashtable old_values = null;
1298 Hashtable new_values = null;
1299 InitializeView (view, InitViewType.MatchParamsToValues, out keys, out old_values, out new_values);
1301 view.Update (keys, new_values, old_values);
1303 Assert.IsNotNull (eventsCalled, "Events not raized");
1304 Assert.AreEqual (3, eventsCalled.Count, "Events Count");
1305 Assert.AreEqual ("UpdateParameters_ParametersChanged", eventsCalled [0], "UpdateParameters_ParametersChanged");
1306 Assert.AreEqual ("Update(ID = n_1001, oldvalue_ID = k_1001)", eventsCalled [1], "DataSource Method params");
1307 Assert.AreEqual ("view_DataSourceViewChanged", eventsCalled [2], "view_DataSourceViewChanged");
1311 public void ParametersAndViewChangedEvent_MatchOldUpdate ()
1313 ObjectViewPoker view = new ObjectViewPoker (new ObjectDataSource (), "", null);
1314 Hashtable keys = null;
1315 Hashtable old_values = null;
1316 Hashtable new_values = null;
1317 InitializeView (view, InitViewType.MatchParamsToOldValues, out keys, out old_values, out new_values);
1319 view.Update (keys, new_values, old_values);
1321 Assert.IsNotNull (eventsCalled, "Events not raized");
1322 Assert.AreEqual (3, eventsCalled.Count, "Events Count");
1323 Assert.AreEqual ("UpdateParameters_ParametersChanged", eventsCalled [0], "UpdateParameters_ParametersChanged");
1324 Assert.AreEqual ("Update(ID = n_1001, oldvalue_ID = k_1001)", eventsCalled [1], "DataSource Method params");
1325 Assert.AreEqual ("view_DataSourceViewChanged", eventsCalled [2], "view_DataSourceViewChanged");
1329 public void ParametersAndViewChangedEvent_DontMatchUpdate ()
1331 ObjectViewPoker view = new ObjectViewPoker (new ObjectDataSource (), "", null);
1332 Hashtable keys = null;
1333 Hashtable old_values = null;
1334 Hashtable new_values = null;
1335 InitializeView (view, InitViewType.DontMatchParams, out keys, out old_values, out new_values);
1337 view.Update (keys, new_values, old_values);
1339 Assert.IsNotNull (eventsCalled, "Events not raized");
1340 Assert.AreEqual (3, eventsCalled.Count, "Events Count");
1341 Assert.AreEqual ("UpdateParameters_ParametersChanged", eventsCalled [0], "UpdateParameters_ParametersChanged");
1342 Assert.AreEqual ("UpdateOther(ID = n_1001, OtherValue = p_OtherValueUpdate1, oldvalue_ID = k_1001)", eventsCalled [1], "DataSource Method params");
1343 Assert.AreEqual ("view_DataSourceViewChanged", eventsCalled [2], "view_DataSourceViewChanged");
1347 public void ParametersAndViewChangedEvent_MatchDelete ()
1349 ObjectViewPoker view = new ObjectViewPoker (new ObjectDataSource (), "", null);
1350 Hashtable keys = null;
1351 Hashtable old_values = null;
1352 Hashtable new_values = null;
1353 InitializeView (view, InitViewType.MatchParamsToValues, out keys, out old_values, out new_values);
1355 view.Delete (keys, old_values);
1357 Assert.IsNotNull (eventsCalled, "Events not raized");
1358 Assert.AreEqual (3, eventsCalled.Count, "Events Count");
1359 Assert.AreEqual ("DeleteParameters_ParametersChanged", eventsCalled [0], "DeleteParameters_ParametersChanged");
1360 Assert.AreEqual ("Delete(ID = p_ValueDelete1, oldvalue_ID = k_1001)", eventsCalled [1], "DataSource Method params");
1361 Assert.AreEqual ("view_DataSourceViewChanged", eventsCalled [2], "view_DataSourceViewChanged");
1365 public void ParametersAndViewChangedEvent_MatchOldDelete ()
1367 ObjectViewPoker view = new ObjectViewPoker (new ObjectDataSource (), "", null);
1368 Hashtable keys = null;
1369 Hashtable old_values = null;
1370 Hashtable new_values = null;
1371 InitializeView (view, InitViewType.MatchParamsToOldValues, out keys, out old_values, out new_values);
1373 view.Delete (keys, old_values);
1375 Assert.IsNotNull (eventsCalled, "Events not raized");
1376 Assert.AreEqual (3, eventsCalled.Count, "Events Count");
1377 Assert.AreEqual ("DeleteParameters_ParametersChanged", eventsCalled [0], "DeleteParameters_ParametersChanged");
1378 Assert.AreEqual ("Delete(oldvalue_ID = k_1001)", eventsCalled [1], "DataSource Method params");
1379 Assert.AreEqual ("view_DataSourceViewChanged", eventsCalled [2], "view_DataSourceViewChanged");
1383 public void ParametersAndViewChangedEvent_DontMatchDelete ()
1385 ObjectViewPoker view = new ObjectViewPoker (new ObjectDataSource (), "", null);
1386 Hashtable keys = null;
1387 Hashtable old_values = null;
1388 Hashtable new_values = null;
1389 InitializeView (view, InitViewType.DontMatchParams, out keys, out old_values, out new_values);
1391 view.Delete (keys, old_values);
1393 Assert.IsNotNull (eventsCalled, "Events not raized");
1394 Assert.AreEqual (3, eventsCalled.Count, "Events Count");
1395 Assert.AreEqual ("DeleteParameters_ParametersChanged", eventsCalled [0], "DeleteParameters_ParametersChanged");
1396 Assert.AreEqual ("DeleteOther(oldvalue_ID = k_1001, OtherValue = p_OtherValueDelete1)", eventsCalled [1], "DataSource Method params");
1397 Assert.AreEqual ("view_DataSourceViewChanged", eventsCalled [2], "view_DataSourceViewChanged");
1404 private static bool event_checker;
1406 private static void Eventassert (string message)
1408 Assert.IsTrue (ObjectDataSourceViewTest.event_checker, message);
1409 ObjectDataSourceViewTest.event_checker = false;
1412 static void Event (object sender, ObjectDataSourceMethodEventArgs e)
1414 ObjectDataSourceViewTest.event_checker = true;
1417 static void view_Selecting (object sender, ObjectDataSourceSelectingEventArgs e)
1419 event_checker = true;
1422 void view_Filtering (object sender, ObjectDataSourceFilteringEventArgs e)
1424 event_checker = true;
1427 void view_ObjectCreate (object sender, ObjectDataSourceEventArgs e)
1429 event_checker = true;
1432 void view_Status (object sender, ObjectDataSourceStatusEventArgs e)
1434 event_checker = true;
1437 void view_ObjectDisposing (object sender, ObjectDataSourceDisposingEventArgs e)
1439 event_checker = true;
1442 private class MyDataSource : ObjectDataSource
1444 public DataSourceView DoGetView (string viewName)
1446 return base.GetView (viewName);
1449 public void DoTrackViewState ()
1451 base.TrackViewState ();
1456 public class MyCustomDataObject
1460 public class DataSourceObject
1462 private static int maximumRows;
1463 public static DataTable ds = CreateDataTable ();
1464 public static void InitDS ()
1466 ds = CreateDataTable ();
1468 public static DataTable Select ()
1473 public static MyCustomDataObject SelectObject ()
1475 return new MyCustomDataObject ();
1478 [Sys.ComponentModel.DataObjectMethod(Sys.ComponentModel.DataObjectMethodType.Select, false)]
1479 public static DataTable Select (int maximumRows, short startRowIndex) {
1480 Assert.Fail ("Should not be called since not default Select DataObjectMethod");
1484 [Sys.ComponentModel.DataObjectMethod(Sys.ComponentModel.DataObjectMethodType.Select, true)]
1485 public static DataTable Select (int maximumRows, int startRowIndex)
1487 DataSourceObject.maximumRows = maximumRows;
1488 if (ds.Rows.Count > maximumRows) {
1489 DataTable temp = ds.Clone ();
1491 while (i < maximumRows && startRowIndex <= ds.Rows.Count) {
1492 object[] o = ds.Rows[startRowIndex].ItemArray;
1502 public static DataTable Delete (string ID, string FName, string LName)
1504 DataRow dr = ds.Rows.Find (ID);
1506 ds.Rows.Remove (dr);
1511 public static DataTable Insert (string ID, string FName, string LName)
1513 DataRow dr = ds.NewRow ();
1515 dr["FName"] = FName;
1516 dr["LName"] = LName;
1521 public static DataTable Update (string ID, string FName, string LName)
1523 foreach (DataRow row in ds.Rows) {
1524 if (row["ID"].ToString () == ID) {
1525 row["FName"] = FName;
1526 row["LName"] = LName;
1533 public static int SelectCount ()
1536 //Note: This is return 5 only for test goal
1540 public static DataTable CreateDataTable ()
1542 DataTable aTable = new DataTable ("A");
1546 // Create ID column and add to the DataTable.
1547 dtCol = new DataColumn ();
1548 dtCol.DataType = Type.GetType ("System.Int32");
1549 dtCol.ColumnName = "ID";
1550 dtCol.AutoIncrement = true;
1551 dtCol.Caption = "ID";
1552 dtCol.ReadOnly = true;
1553 dtCol.Unique = true;
1554 aTable.Columns.Add (dtCol);
1556 // Create Name column and add to the table
1557 dtCol = new DataColumn ();
1558 dtCol.DataType = Type.GetType ("System.String");
1559 dtCol.ColumnName = "FName";
1560 dtCol.AutoIncrement = false;
1561 dtCol.Caption = "First Name";
1562 dtCol.ReadOnly = false;
1563 dtCol.Unique = false;
1564 aTable.Columns.Add (dtCol);
1566 // Create Last Name column and add to the table.
1567 dtCol = new DataColumn ();
1568 dtCol.DataType = Type.GetType ("System.String");
1569 dtCol.ColumnName = "LName";
1570 dtCol.AutoIncrement = false;
1571 dtCol.Caption = "Last Name";
1572 dtCol.ReadOnly = false;
1573 dtCol.Unique = false;
1574 aTable.Columns.Add (dtCol);
1576 // Create three rows to the table
1577 dtRow = aTable.NewRow ();
1579 dtRow["FName"] = "Mahesh";
1580 dtRow["LName"] = "Chand";
1581 aTable.Rows.Add (dtRow);
1583 aTable.PrimaryKey = new DataColumn[] { aTable.Columns["ID"] };