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