<29/05/07 by:yoni yonik@mainsoft.com>
[mono.git] / mcs / class / System.Web / Test / System.Web.UI.WebControls / SqlDataSourceTest.cs
1 //\r
2 // Tests for System.Web.UI.WebControls.SqlDataSource\r
3 //\r
4 // Author:\r
5 //      Chris Toshok (toshok@novell.com)\r
6 //\r
7 \r
8 //\r
9 // Copyright (C) 2005 Novell, Inc (http://www.novell.com)\r
10 //\r
11 // Permission is hereby granted, free of charge, to any person obtaining\r
12 // a copy of this software and associated documentation files (the\r
13 // "Software"), to deal in the Software without restriction, including\r
14 // without limitation the rights to use, copy, modify, merge, publish,\r
15 // distribute, sublicense, and/or sell copies of the Software, and to\r
16 // permit persons to whom the Software is furnished to do so, subject to\r
17 // the following conditions:\r
18 // \r
19 // The above copyright notice and this permission notice shall be\r
20 // included in all copies or substantial portions of the Software.\r
21 // \r
22 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,\r
23 // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\r
24 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\r
25 // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\r
26 // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\r
27 // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\r
28 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\r
29 //\r
30 \r
31 #if NET_2_0\r
32 \r
33 using NUnit.Framework;\r
34 using System;\r
35 using System.Configuration;\r
36 using System.Data.Common;\r
37 using System.Data.SqlClient;\r
38 using System.IO;\r
39 using System.Globalization;\r
40 using System.Web;\r
41 using System.Web.UI;\r
42 using System.Web.UI.WebControls;\r
43 using System.Collections;\r
44 using System.Text;\r
45 using System.Data;\r
46 \r
47 namespace MonoTests.System.Web.UI.WebControls\r
48 {\r
49         class SqlPoker : SqlDataSource\r
50         {\r
51                 public SqlPoker ()\r
52                 {\r
53                         TrackViewState ();\r
54                 }\r
55 \r
56                 public object SaveToViewState ()\r
57                 {\r
58                         return SaveViewState ();\r
59                 }\r
60 \r
61                 public void LoadFromViewState (object savedState)\r
62                 {\r
63                         LoadViewState (savedState);\r
64                 }\r
65 \r
66                 public void DoRaiseDataSourceChangedEvent ()\r
67                 {\r
68                         base.RaiseDataSourceChangedEvent(new EventArgs());\r
69                 }\r
70         }\r
71 \r
72         class CustomSqlDataSourceView : SqlDataSourceView\r
73         {\r
74                 public CustomSqlDataSourceView (SqlDataSource owner,string name,HttpContext context):base(owner,name,context)\r
75                 {\r
76                 }\r
77                 \r
78                 public new int ExecuteDelete (global::System.Collections.IDictionary keys, global::System.Collections.IDictionary oldValues)\r
79                 {\r
80                         return base.ExecuteDelete (keys, oldValues);\r
81                 }\r
82 \r
83                 public new int ExecuteInsert (global::System.Collections.IDictionary values)\r
84                 {\r
85                         return base.ExecuteInsert (values);\r
86                 }\r
87 \r
88                 public new global::System.Collections.IEnumerable ExecuteSelect (DataSourceSelectArguments arguments)\r
89                 {\r
90                         return base.ExecuteSelect (arguments);\r
91                 }\r
92 \r
93                 public new int ExecuteUpdate (global::System.Collections.IDictionary keys, global::System.Collections.IDictionary values, global::System.Collections.IDictionary oldValues)\r
94                 {\r
95                         return base.ExecuteUpdate (keys, values, oldValues);\r
96                 }\r
97 \r
98                 \r
99         }\r
100 \r
101         [TestFixture]\r
102         public class SqlDataSourceTest\r
103         {\r
104                 [SetUp]\r
105                 public void SetUp ()\r
106                 {\r
107                         SqlDataSourceTest.CustomEventParameterCollection = null;\r
108                         SqlDataSourceTest.PassedParameters = "";\r
109                 }\r
110 \r
111                 [Test]\r
112                 public void Defaults ()\r
113                 {\r
114                         SqlPoker sql = new SqlPoker ();\r
115                         Assert.AreEqual ("", sql.CacheKeyDependency, "A1");\r
116                         Assert.IsTrue (sql.CancelSelectOnNullParameter, "A2");\r
117                         Assert.AreEqual (ConflictOptions.OverwriteChanges, sql.ConflictDetection, "A3");\r
118                         Assert.AreEqual (SqlDataSourceCommandType.Text, sql.DeleteCommandType, "A4");\r
119                         Assert.AreEqual (SqlDataSourceCommandType.Text, sql.InsertCommandType, "A5");\r
120                         Assert.AreEqual (SqlDataSourceCommandType.Text, sql.SelectCommandType, "A6");\r
121                         Assert.AreEqual (SqlDataSourceCommandType.Text, sql.UpdateCommandType, "A7");\r
122                         Assert.AreEqual ("{0}", sql.OldValuesParameterFormatString, "A8");\r
123                         Assert.AreEqual ("", sql.SqlCacheDependency, "A9");\r
124                         Assert.AreEqual ("", sql.SortParameterName, "A10");\r
125                         Assert.AreEqual (0, sql.CacheDuration, "A11");\r
126                         Assert.AreEqual (DataSourceCacheExpiry.Absolute, sql.CacheExpirationPolicy, "A12");\r
127                         Assert.IsFalse (sql.EnableCaching, "A13");\r
128                         Assert.AreEqual ("", sql.ProviderName, "A14");\r
129                         Assert.AreEqual ("", sql.ConnectionString, "A15");\r
130                         Assert.AreEqual (SqlDataSourceMode.DataSet, sql.DataSourceMode, "A16");\r
131                         Assert.AreEqual ("", sql.DeleteCommand, "A17");\r
132                         Assert.IsNotNull (sql.DeleteParameters, "A18");\r
133                         Assert.AreEqual (0, sql.DeleteParameters.Count, "A18.1");\r
134                         Assert.IsNotNull (sql.FilterParameters, "A19");\r
135                         Assert.AreEqual (0, sql.FilterParameters.Count, "A19.1");\r
136                         Assert.AreEqual ("", sql.InsertCommand, "A20");\r
137                         Assert.IsNotNull (sql.InsertParameters, "A21");\r
138                         Assert.AreEqual (0, sql.InsertParameters.Count, "A21.1");\r
139                         Assert.AreEqual ("", sql.SelectCommand, "A22");\r
140                         Assert.IsNotNull (sql.SelectParameters, "A23");\r
141                         Assert.AreEqual (0, sql.SelectParameters.Count, "A23.1");\r
142                         Assert.AreEqual ("", sql.UpdateCommand, "A24");\r
143                         Assert.IsNotNull (sql.UpdateParameters, "A25");\r
144                         Assert.AreEqual (0, sql.UpdateParameters.Count, "A25.1");\r
145                         Assert.AreEqual ("", sql.FilterExpression, "A26");\r
146                 }\r
147 \r
148                 [Test]\r
149                 public void ViewState ()\r
150                 {\r
151                         SqlPoker sql = new SqlPoker ();\r
152 \r
153                         sql.CacheKeyDependency = "hi";\r
154                         sql.CancelSelectOnNullParameter = false;\r
155                         sql.ConflictDetection = ConflictOptions.CompareAllValues;\r
156                         sql.DeleteCommandType = SqlDataSourceCommandType.StoredProcedure;\r
157                         sql.InsertCommandType = SqlDataSourceCommandType.StoredProcedure;\r
158                         sql.SelectCommandType = SqlDataSourceCommandType.StoredProcedure;\r
159                         sql.UpdateCommandType = SqlDataSourceCommandType.StoredProcedure;\r
160                         sql.OldValuesParameterFormatString = "{1}";\r
161                         sql.SqlCacheDependency = "hi";\r
162                         sql.SortParameterName = "hi";\r
163                         sql.CacheDuration = 1;\r
164                         sql.CacheExpirationPolicy = DataSourceCacheExpiry.Sliding;\r
165                         sql.EnableCaching = true;\r
166                         sql.DataSourceMode = SqlDataSourceMode.DataReader;\r
167                         sql.DeleteCommand = "DELETE foo";\r
168                         sql.InsertCommand = "INSERT foo";\r
169                         sql.SelectCommand = "SELECT foo";\r
170                         sql.UpdateCommand = "UPDATE foo";\r
171                         sql.FilterExpression = "hi";\r
172 \r
173                         Assert.AreEqual ("hi", sql.CacheKeyDependency, "A1");\r
174                         Assert.IsFalse (sql.CancelSelectOnNullParameter, "A2");\r
175                         Assert.AreEqual (ConflictOptions.CompareAllValues, sql.ConflictDetection, "A3");\r
176                         Assert.AreEqual (SqlDataSourceCommandType.StoredProcedure, sql.DeleteCommandType, "A4");\r
177                         Assert.AreEqual (SqlDataSourceCommandType.StoredProcedure, sql.InsertCommandType, "A5");\r
178                         Assert.AreEqual (SqlDataSourceCommandType.StoredProcedure, sql.SelectCommandType, "A6");\r
179                         Assert.AreEqual (SqlDataSourceCommandType.StoredProcedure, sql.UpdateCommandType, "A7");\r
180                         Assert.AreEqual ("{1}", sql.OldValuesParameterFormatString, "A8");\r
181                         Assert.AreEqual ("hi", sql.SqlCacheDependency, "A9");\r
182                         Assert.AreEqual ("hi", sql.SortParameterName, "A10");\r
183                         Assert.AreEqual (1, sql.CacheDuration, "A11");\r
184                         Assert.AreEqual (DataSourceCacheExpiry.Sliding, sql.CacheExpirationPolicy, "A12");\r
185                         Assert.IsTrue (sql.EnableCaching, "A13");\r
186                         Assert.AreEqual (SqlDataSourceMode.DataReader, sql.DataSourceMode, "A16");\r
187                         Assert.AreEqual ("DELETE foo", sql.DeleteCommand, "A17");\r
188                         Assert.AreEqual ("INSERT foo", sql.InsertCommand, "A20");\r
189                         Assert.AreEqual ("SELECT foo", sql.SelectCommand, "A22");\r
190                         Assert.AreEqual ("UPDATE foo", sql.UpdateCommand, "A24");\r
191                         Assert.AreEqual ("hi", sql.FilterExpression, "A26");\r
192 \r
193                         object state = sql.SaveToViewState ();\r
194                         Assert.IsNull (state, "ViewState is null");\r
195 \r
196                         sql = new SqlPoker ();\r
197                         sql.LoadFromViewState (state);\r
198 \r
199                         Assert.AreEqual ("", sql.CacheKeyDependency, "B1");\r
200                         Assert.IsTrue (sql.CancelSelectOnNullParameter, "B2");\r
201                         Assert.AreEqual (ConflictOptions.OverwriteChanges, sql.ConflictDetection, "B3");\r
202                         Assert.AreEqual (SqlDataSourceCommandType.Text, sql.DeleteCommandType, "B4");\r
203                         Assert.AreEqual (SqlDataSourceCommandType.Text, sql.InsertCommandType, "B5");\r
204                         Assert.AreEqual (SqlDataSourceCommandType.Text, sql.SelectCommandType, "B6");\r
205                         Assert.AreEqual (SqlDataSourceCommandType.Text, sql.UpdateCommandType, "B7");\r
206                         Assert.AreEqual ("{0}", sql.OldValuesParameterFormatString, "B8");\r
207                         Assert.AreEqual ("", sql.SqlCacheDependency, "B9");\r
208                         Assert.AreEqual ("", sql.SortParameterName, "B10");\r
209                         Assert.AreEqual (0, sql.CacheDuration, "B11");\r
210                         Assert.AreEqual (DataSourceCacheExpiry.Absolute, sql.CacheExpirationPolicy, "B12");\r
211                         Assert.IsFalse (sql.EnableCaching, "B13");\r
212                         Assert.AreEqual (SqlDataSourceMode.DataSet, sql.DataSourceMode, "B16");\r
213                         Assert.AreEqual ("", sql.DeleteCommand, "B17");\r
214                         Assert.IsNotNull (sql.DeleteParameters, "B18");\r
215                         Assert.AreEqual (0, sql.DeleteParameters.Count, "B18.1");\r
216                         Assert.IsNotNull (sql.FilterParameters, "B19");\r
217                         Assert.AreEqual (0, sql.FilterParameters.Count, "B19.1");\r
218                         Assert.AreEqual ("", sql.InsertCommand, "B20");\r
219                         Assert.IsNotNull (sql.InsertParameters, "B21");\r
220                         Assert.AreEqual (0, sql.InsertParameters.Count, "B21.1");\r
221                         Assert.AreEqual ("", sql.SelectCommand, "B22");\r
222                         Assert.IsNotNull (sql.SelectParameters, "B23");\r
223                         Assert.AreEqual (0, sql.SelectParameters.Count, "B23.1");\r
224                         Assert.AreEqual ("", sql.UpdateCommand, "B24");\r
225                         Assert.IsNotNull (sql.UpdateParameters, "B25");\r
226                         Assert.AreEqual (0, sql.UpdateParameters.Count, "B25.1");\r
227                         Assert.AreEqual ("", sql.FilterExpression, "B26");\r
228                 }\r
229 \r
230                 // Help parameter for Asserts\r
231                 private static SqlParameterCollection CustomEventParameterCollection;\r
232                 private static string PassedParameters;\r
233 \r
234                 [Test]\r
235                 public void ReturnValueParameter ()\r
236                 {\r
237                         SqlPoker sql = new SqlPoker ();\r
238                         sql.ConnectionString = "Data Source=fake\\SQLEXPRESS;Initial Catalog=Northwind;User ID=sa";\r
239                         sql.ProviderName = "System.Data.SqlClient";\r
240                         CustomSqlDataSourceView view = new CustomSqlDataSourceView (sql, "TestView", null);\r
241                         view.SelectCommandType = SqlDataSourceCommandType.Text;\r
242                         view.SelectCommand = "SELECT * FROM products WHERE ProductID = @ProductID;";\r
243                         view.OldValuesParameterFormatString = "origin_{0}";\r
244 \r
245                         view.SelectParameters.Add (new Parameter ("ProductID", TypeCode.Int32, "10"));\r
246                         Parameter myReturn = new Parameter ("myReturn", TypeCode.Int32);\r
247                         myReturn.Direction = ParameterDirection.ReturnValue;\r
248                         view.SelectParameters.Add (myReturn);\r
249                         \r
250                         view.Selecting += new SqlDataSourceSelectingEventHandler (view_Selecting);\r
251                         view.Select (new DataSourceSelectArguments ());\r
252                         \r
253                         Assert.IsNotNull (CustomEventParameterCollection, "Select event not fired");\r
254                         Assert.AreEqual (2, CustomEventParameterCollection.Count, "Parameter count");\r
255                         Assert.IsNotNull (CustomEventParameterCollection ["@myReturn"], "Parameter name");\r
256                 }\r
257                 \r
258                 [Test]\r
259                 public void ExecuteSelect ()\r
260                 {\r
261                         SqlPoker sql = new SqlPoker();\r
262                         sql.ConnectionString = "Data Source=fake\\SQLEXPRESS;Initial Catalog=Northwind;User ID=sa";\r
263                         sql.ProviderName = "System.Data.SqlClient";\r
264                         CustomSqlDataSourceView view = new CustomSqlDataSourceView (sql, "TestView", null);\r
265                         view.SelectCommandType = SqlDataSourceCommandType.Text;\r
266                         view.SelectCommand = "SELECT * FROM products WHERE ProductID = @ProductID;";\r
267                         view.OldValuesParameterFormatString = "origin_{0}";\r
268                 \r
269                         view.SelectParameters.Add (new Parameter ("ProductID", TypeCode.Int32, "10"));\r
270                         view.Selecting += new SqlDataSourceSelectingEventHandler (view_Selecting);\r
271                         view.Select (new DataSourceSelectArguments ());\r
272                         Assert.IsNotNull (CustomEventParameterCollection, "Select event not fired");\r
273                         Assert.AreEqual (1, CustomEventParameterCollection.Count, "Parameter count");\r
274                         Assert.AreEqual ("@ProductID", CustomEventParameterCollection[0].ParameterName, "Parameter name");\r
275                         Assert.AreEqual (10, CustomEventParameterCollection[0].Value, "Parameter value");\r
276                 }\r
277 \r
278                 [Test]\r
279                 public void ExecuteSelect2 () \r
280                 {\r
281                         SqlPoker sql = new SqlPoker ();\r
282                         sql.ConnectionString = "Data Source=fake\\SQLEXPRESS;Initial Catalog=Northwind;User ID=sa";\r
283                         sql.ProviderName = "System.Data.SqlClient";\r
284                         sql.DataSourceMode = SqlDataSourceMode.DataReader;\r
285                         CustomSqlDataSourceView view = new CustomSqlDataSourceView (sql, "TestView", null);\r
286                         view.SelectCommandType = SqlDataSourceCommandType.Text;\r
287                         view.SelectCommand = "SELECT * FROM products WHERE ProductID = @ProductID;";\r
288                         view.OldValuesParameterFormatString = "origin_{0}";\r
289 \r
290                         view.SelectParameters.Add (new Parameter ("ProductID", TypeCode.Int32, "10"));\r
291                         view.Selecting += new SqlDataSourceSelectingEventHandler (view_Selecting);\r
292                         view.Select (new DataSourceSelectArguments ());\r
293                         Assert.IsNotNull (CustomEventParameterCollection, "Select event not fired");\r
294                         Assert.AreEqual (1, CustomEventParameterCollection.Count, "Parameter count");\r
295                         Assert.AreEqual ("@ProductID", CustomEventParameterCollection [0].ParameterName, "Parameter name");\r
296                         Assert.AreEqual (10, CustomEventParameterCollection [0].Value, "Parameter value");\r
297                 }\r
298 \r
299                 [Test]\r
300                 public void ExecuteUpdate ()\r
301                 {\r
302                         SqlPoker sql = new SqlPoker ();\r
303                         sql.ConnectionString = "Data Source=fake\\SQLEXPRESS;Initial Catalog=Northwind;User ID=sa";\r
304                         sql.ProviderName = "System.Data.SqlClient";\r
305                         CustomSqlDataSourceView view = new CustomSqlDataSourceView (sql, "TestView", null);\r
306                         view.SelectCommandType = SqlDataSourceCommandType.Text;\r
307                         view.SelectCommand = "SELECT * FROM products WHERE ProductID = @ProductID;";\r
308                         view.UpdateCommandType = SqlDataSourceCommandType.Text;\r
309                         view.UpdateCommand = "UPDATE Table1 SET UserName = @UserName WHERE UserId = @UserId";\r
310                         view.OldValuesParameterFormatString = "origin_{0}";\r
311                         view.Updating += new SqlDataSourceCommandEventHandler (view_Updating);\r
312                         view.UpdateParameters.Add (new Parameter ("UserName", TypeCode.String, "TestUser"));\r
313                         view.UpdateParameters.Add (new Parameter ("UserId", TypeCode.Int32, "1"));\r
314                         view.Update (null, null, null);\r
315                         Assert.IsNotNull (CustomEventParameterCollection, "Update event not fired");\r
316                         Assert.AreEqual (2, CustomEventParameterCollection.Count, "Parameter count");\r
317                         Assert.AreEqual ("@UserName", CustomEventParameterCollection[0].ParameterName, "Parameter name#1");\r
318                         Assert.AreEqual ("TestUser", CustomEventParameterCollection[0].Value, "Parameter value#1");\r
319                         Assert.AreEqual ("@UserId", CustomEventParameterCollection[1].ParameterName, "Parameter name#2");\r
320                         Assert.AreEqual (1, CustomEventParameterCollection[1].Value, "Parameter value#2");\r
321                 }\r
322 \r
323                 [Test]\r
324                 public void ExecuteInsert ()\r
325                 {\r
326                         SqlPoker sql = new SqlPoker ();\r
327                         sql.ConnectionString = "Data Source=fake\\SQLEXPRESS;Initial Catalog=Northwind;User ID=sa";\r
328                         sql.ProviderName = "System.Data.SqlClient";\r
329                         CustomSqlDataSourceView view = new CustomSqlDataSourceView (sql, "TestView", null);\r
330                         view.SelectCommandType = SqlDataSourceCommandType.Text;\r
331                         view.SelectCommand = "SELECT * FROM products WHERE ProductID = @ProductID;";\r
332                         view.InsertCommandType = SqlDataSourceCommandType.Text;\r
333                         view.InsertCommand = "INSERT INTO Table1 (UserId, UserName) VALUES ({0},{1})";\r
334                         view.InsertParameters.Add (new Parameter ("UserId", TypeCode.Int32, "15"));\r
335                         view.InsertParameters.Add (new Parameter ("UserName", TypeCode.String, "newuser"));\r
336                         view.OldValuesParameterFormatString = "origin_{0}";\r
337                         view.Inserting += new SqlDataSourceCommandEventHandler (view_Inserting);\r
338                         view.Insert (null);\r
339                         Assert.IsNotNull (CustomEventParameterCollection, "Insert event not fired");\r
340                         Assert.AreEqual (2, CustomEventParameterCollection.Count, "Parameter count");\r
341                         Assert.AreEqual ("@UserId", CustomEventParameterCollection[0].ParameterName, "Parameter name#2");\r
342                         Assert.AreEqual (15, CustomEventParameterCollection[0].Value, "Parameter value#2");\r
343                         Assert.AreEqual ("@UserName", CustomEventParameterCollection[1].ParameterName, "Parameter name#1");\r
344                         Assert.AreEqual ("newuser", CustomEventParameterCollection[1].Value, "Parameter value#1");\r
345                 }\r
346 \r
347                 [Test]\r
348                 public void ExecuteInsertWithCollection ()\r
349                 {\r
350                         SqlPoker sql = new SqlPoker ();\r
351                         sql.ConnectionString = "Data Source=fake\\SQLEXPRESS;Initial Catalog=Northwind;User ID=sa";\r
352                         sql.ProviderName = "System.Data.SqlClient";\r
353                         CustomSqlDataSourceView view = new CustomSqlDataSourceView (sql, "TestView", null);\r
354                         view.SelectCommandType = SqlDataSourceCommandType.Text;\r
355                         view.SelectCommand = "SELECT * FROM products WHERE ProductID = @ProductID;";\r
356                         view.InsertCommandType = SqlDataSourceCommandType.Text;\r
357                         view.InsertCommand = "INSERT INTO products (UserId, UserName) VALUES ({0},{1})";\r
358                         view.InsertParameters.Add (new Parameter ("UserId", TypeCode.Int32, "15"));\r
359                         view.InsertParameters.Add (new Parameter ("UserName", TypeCode.String, "newuser"));\r
360                         view.OldValuesParameterFormatString = "origin_{0}";\r
361                         view.Inserting += new SqlDataSourceCommandEventHandler (view_Inserting);\r
362                         Hashtable value = new Hashtable ();\r
363                         value.Add ("Description", "TestDescription");\r
364                         view.Insert (value);\r
365                         Assert.IsNotNull (CustomEventParameterCollection, "Insert event not fired");\r
366                         Assert.AreEqual (3, CustomEventParameterCollection.Count, "Parameter count");\r
367                         Assert.AreEqual ("@UserId", CustomEventParameterCollection[0].ParameterName, "Parameter name#1");\r
368                         Assert.AreEqual (15, CustomEventParameterCollection[0].Value, "Parameter value#1");\r
369                         Assert.AreEqual ("@UserName", CustomEventParameterCollection[1].ParameterName, "Parameter name#2");\r
370                         Assert.AreEqual ("newuser", CustomEventParameterCollection[1].Value, "Parameter value#2");\r
371                         Assert.AreEqual ("@Description", CustomEventParameterCollection[2].ParameterName, "Parameter name#3");\r
372                         Assert.AreEqual ("TestDescription", CustomEventParameterCollection[2].Value, "Parameter value#3");\r
373                 }\r
374 \r
375                 [Test]\r
376                 public void ExecuteDelete ()\r
377                 {\r
378                         SqlPoker sql = new SqlPoker ();\r
379                         sql.ConnectionString = "Data Source=fake\\SQLEXPRESS;Initial Catalog=Northwind;User ID=sa";\r
380                         sql.ProviderName = "System.Data.SqlClient";\r
381                         CustomSqlDataSourceView view = new CustomSqlDataSourceView (sql, "TestView", null);\r
382                         view.SelectCommandType = SqlDataSourceCommandType.Text;\r
383                         view.SelectCommand = "SELECT * FROM products WHERE ProductID = @ProductID;";\r
384                         view.DeleteCommandType = SqlDataSourceCommandType.Text;\r
385                         view.DeleteCommand = "DELETE * FROM products WHERE ProductID = @ProductID;";\r
386                         view.DeleteParameters.Add (new Parameter ("ProductId", TypeCode.Int32, "15"));\r
387                         view.OldValuesParameterFormatString = "origin_{0}";\r
388                         view.Deleting += new SqlDataSourceCommandEventHandler (view_Deleting);\r
389                         view.Delete (null, null);\r
390                         Assert.IsNotNull (CustomEventParameterCollection, "Delete event not fired");\r
391                         Assert.AreEqual (1, CustomEventParameterCollection.Count, "Parameter count");\r
392                         Assert.AreEqual ("@ProductId", CustomEventParameterCollection[0].ParameterName, "Parameter name#1");\r
393                         Assert.AreEqual (15, CustomEventParameterCollection[0].Value, "Parameter value#1");\r
394                 }\r
395 \r
396                 [Test]\r
397                 public void ExecuteDeleteWithOldValues ()\r
398                 {\r
399                         SqlPoker sql = new SqlPoker ();\r
400                         sql.ConnectionString = "Data Source=fake\\SQLEXPRESS;Initial Catalog=Northwind;User ID=sa";\r
401                         sql.ProviderName = "System.Data.SqlClient";\r
402                         CustomSqlDataSourceView view = new CustomSqlDataSourceView (sql, "TestView", null);\r
403                         view.SelectCommandType = SqlDataSourceCommandType.Text;\r
404                         view.SelectCommand = "SELECT * FROM products WHERE ProductID = @ProductID;";\r
405                         view.DeleteCommandType = SqlDataSourceCommandType.Text;\r
406                         view.DeleteCommand = "DELETE * FROM products WHERE ProductID = @ProductID;";\r
407                         view.DeleteParameters.Add (new Parameter ("ProductID", TypeCode.Int32, "15"));\r
408                         view.OldValuesParameterFormatString = "origin_{0}";\r
409                         view.ConflictDetection = ConflictOptions.CompareAllValues;\r
410                         view.Deleting += new SqlDataSourceCommandEventHandler (view_Deleting);\r
411                         Hashtable oldvalue = new Hashtable ();\r
412                         oldvalue.Add ("ProductID", 10);\r
413                         view.Delete (null,oldvalue );\r
414                         Assert.IsNotNull (CustomEventParameterCollection, "Delete event not fired");\r
415                         Assert.AreEqual (1, CustomEventParameterCollection.Count, "Parameter count");\r
416                         Assert.AreEqual ("@origin_ProductID", CustomEventParameterCollection[0].ParameterName, "Parameter name#2");\r
417                         Assert.AreEqual (10, CustomEventParameterCollection[0].Value, "Parameter value#2");\r
418                 }\r
419 \r
420                 [Test]\r
421                 public void ExecuteDeleteWithMergedOldValues ()\r
422                 {\r
423                         SqlPoker sql = new SqlPoker ();\r
424                         sql.ConnectionString = "Data Source=fake\\SQLEXPRESS;Initial Catalog=Northwind;User ID=sa";\r
425                         sql.ProviderName = "System.Data.SqlClient";\r
426                         CustomSqlDataSourceView view = new CustomSqlDataSourceView (sql, "TestView", null);\r
427                         view.SelectCommandType = SqlDataSourceCommandType.Text;\r
428                         view.SelectCommand = "SELECT * FROM products WHERE ProductID = @ProductID;";\r
429                         view.DeleteCommandType = SqlDataSourceCommandType.Text;\r
430                         view.DeleteCommand = "DELETE * FROM products WHERE ProductID = @ProductID;";\r
431                         view.DeleteParameters.Add (new Parameter ("ProductId", TypeCode.Int32, "15"));\r
432                         view.OldValuesParameterFormatString = "origin_{0}";\r
433                         view.ConflictDetection = ConflictOptions.CompareAllValues;\r
434                         view.Deleting += new SqlDataSourceCommandEventHandler (view_Deleting);\r
435                         Hashtable oldvalue = new Hashtable ();\r
436                         oldvalue.Add ("Desc", "Description");\r
437                         view.Delete (null, oldvalue);\r
438                         Assert.IsNotNull (CustomEventParameterCollection, "Delete event not fired");\r
439                         Assert.AreEqual (2, CustomEventParameterCollection.Count, "Parameter count");\r
440                         Assert.AreEqual ("@ProductId", CustomEventParameterCollection[0].ParameterName, "Parameter name#1");\r
441                         Assert.AreEqual (15, CustomEventParameterCollection[0].Value, "Parameter value#1");\r
442                         Assert.AreEqual ("@origin_Desc", CustomEventParameterCollection[1].ParameterName, "Parameter name#2");\r
443                         Assert.AreEqual ("Description", CustomEventParameterCollection[1].Value, "Parameter value#2");\r
444                 }\r
445 \r
446                 [Test]\r
447                 public void ExecuteDeleteWithMergedValues ()\r
448                 {\r
449                         SqlPoker sql = new SqlPoker ();\r
450                         sql.ConnectionString = "Data Source=fake\\SQLEXPRESS;Initial Catalog=Northwind;User ID=sa";\r
451                         sql.ProviderName = "System.Data.SqlClient";\r
452                         CustomSqlDataSourceView view = new CustomSqlDataSourceView (sql, "TestView", null);\r
453                         view.SelectCommandType = SqlDataSourceCommandType.Text;\r
454                         view.SelectCommand = "SELECT * FROM products WHERE ProductID = @ProductID;";\r
455                         view.DeleteCommandType = SqlDataSourceCommandType.Text;\r
456                         view.DeleteCommand = "DELETE * FROM products WHERE ProductID = @ProductID;";\r
457                         view.DeleteParameters.Add (new Parameter ("ProductId", TypeCode.Int32, "15"));\r
458                         view.OldValuesParameterFormatString = "origin_{0}";\r
459                         view.Deleting += new SqlDataSourceCommandEventHandler (view_Deleting);\r
460                         Hashtable value = new Hashtable ();\r
461                         value.Add ("Desc", "Description");\r
462                         view.Delete (value, null);\r
463                         Assert.IsNotNull (CustomEventParameterCollection, "Delete event not fired");\r
464                         Assert.AreEqual (2, CustomEventParameterCollection.Count, "Parameter count");\r
465                         Assert.AreEqual ("@ProductId", CustomEventParameterCollection[0].ParameterName, "Parameter name#1");\r
466                         Assert.AreEqual (15, CustomEventParameterCollection[0].Value, "Parameter value#1");\r
467                         Assert.AreEqual ("@origin_Desc", CustomEventParameterCollection[1].ParameterName, "Parameter name#2");\r
468                         Assert.AreEqual ("Description", CustomEventParameterCollection[1].Value, "Parameter value#2");\r
469                 }\r
470 \r
471                 [Test]\r
472                 public void ExecuteDelete_KeysAndOldValues_OverwriteChanges () \r
473                 {\r
474                         SqlPoker sql = new SqlPoker ();\r
475                         sql.ConnectionString = "Data Source=fake\\SQLEXPRESS;Initial Catalog=Northwind;User ID=sa";\r
476                         sql.ProviderName = "System.Data.SqlClient";\r
477                         CustomSqlDataSourceView view = new CustomSqlDataSourceView (sql, "TestView", null);\r
478                         IDictionary keys;\r
479                         IDictionary values;\r
480                         IDictionary oldValues;\r
481                         InitializeView (view, out keys, out values, out oldValues);\r
482 \r
483                         view.ConflictDetection = ConflictOptions.OverwriteChanges;\r
484 \r
485                         view.Delete (keys, oldValues);\r
486 \r
487                         Assert.IsNotNull (CustomEventParameterCollection, "KeysAndOldValues_OverwriteChanges");\r
488                         Assert.AreEqual ("String:@origin_ProductID=k_10", PassedParameters, "KeysAndOldValues_OverwriteChanges Values");\r
489                 }\r
490 \r
491                 [Test]\r
492                 public void ExecuteDelete_KeysAndOldValues_CompareAllValues () \r
493                 {\r
494                         SqlPoker sql = new SqlPoker ();\r
495                         sql.ConnectionString = "Data Source=fake\\SQLEXPRESS;Initial Catalog=Northwind;User ID=sa";\r
496                         sql.ProviderName = "System.Data.SqlClient";\r
497                         CustomSqlDataSourceView view = new CustomSqlDataSourceView (sql, "TestView", null);\r
498                         IDictionary keys;\r
499                         IDictionary values;\r
500                         IDictionary oldValues;\r
501                         InitializeView (view, out keys, out values, out oldValues);\r
502 \r
503                         view.ConflictDetection = ConflictOptions.CompareAllValues;\r
504 \r
505                         view.Delete (keys, oldValues);\r
506 \r
507                         Assert.IsNotNull (CustomEventParameterCollection, "KeysAndOldValues_CompareAllValues");\r
508                         Assert.AreEqual ("String:@origin_ProductID=ov_10, String:@origin_Description=ov_Beautifull, String:@origin_Name=ov_ColorTV", PassedParameters, "KeysAndOldValues_CompareAllValues Values");\r
509                 }\r
510 \r
511                 [Test]\r
512                 public void ExecuteDelete_KeysAndOldValues_CompareAllValues2 () \r
513                 {\r
514                         SqlPoker sql = new SqlPoker ();\r
515                         sql.ConnectionString = "Data Source=fake\\SQLEXPRESS;Initial Catalog=Northwind;User ID=sa";\r
516                         sql.ProviderName = "System.Data.SqlClient";\r
517                         CustomSqlDataSourceView view = new CustomSqlDataSourceView (sql, "TestView", null);\r
518                         IDictionary keys;\r
519                         IDictionary values;\r
520                         IDictionary oldValues;\r
521                         InitializeView (view, out keys, out values, out oldValues);\r
522                         view.DeleteParameters.Add ("origin_ProductID", "po_10");\r
523 \r
524                         view.ConflictDetection = ConflictOptions.CompareAllValues;\r
525 \r
526                         view.Delete (keys, oldValues);\r
527 \r
528                         Assert.IsNotNull (CustomEventParameterCollection, "ExecuteDelete_KeysAndOldValues_CompareAllValues2");\r
529                         string [] expectedParams = new string []\r
530                                                 { \r
531                                                         "String:@origin_ProductID=ov_10", \r
532                                                         "String:@origin_Description=ov_Beautifull",\r
533                                                         "String:@origin_Name=ov_ColorTV" \r
534                                                 };\r
535                         string [] actualValues = PassedParameters.Split (new string [] { ", " }, StringSplitOptions.RemoveEmptyEntries);\r
536                         Assert.AreEqual (expectedParams.Length, actualValues.Length, "ExecuteDelete_KeysAndOldValues_CompareAllValues2 Params count");\r
537                         ValidatePassedParams (expectedParams, actualValues, "ExecuteDelete_KeysAndOldValues_CompareAllValues2 expecte '{0}'");\r
538                 }\r
539 \r
540                 private static void ValidatePassedParams (string [] expectedParams, string [] actualValues, string errorMessageFormat) \r
541                 {\r
542                         foreach (string eps in expectedParams) {\r
543                                 bool found = false;\r
544                                 foreach (string aps in actualValues) {\r
545                                         if (eps == aps) {\r
546                                                 found = true;\r
547                                                 break;\r
548                                         }\r
549                                 }\r
550                                 Assert.IsTrue (found, String.Format (errorMessageFormat, eps));\r
551                         }\r
552                 }\r
553 \r
554                 private void InitializeView (CustomSqlDataSourceView view, out IDictionary keys, out IDictionary values, out IDictionary oldValues) \r
555                 {\r
556                         view.SelectCommandType = SqlDataSourceCommandType.Text;\r
557                         view.SelectCommand = "SELECT * FROM products WHERE ProductID = @ProductID;";\r
558                         view.SelectParameters.Add (new Parameter ("ProductID", TypeCode.String, "p_10"));\r
559                         view.Selecting += new SqlDataSourceSelectingEventHandler (view_Selecting);\r
560 \r
561                         view.DeleteCommandType = SqlDataSourceCommandType.Text;\r
562                         view.DeleteCommand = "DELETE * FROM products WHERE ProductID = @ProductID;";\r
563                         view.DeleteParameters.Add (new Parameter ("ProductID", TypeCode.String, "p_10"));\r
564                         view.Deleting += new SqlDataSourceCommandEventHandler (view_Deleting);\r
565 \r
566                         view.InsertCommandType = SqlDataSourceCommandType.Text;\r
567                         view.InsertCommand = "INSERT INTO products (ProductID, Name, Description) VALUES (@ProductID, @Name, @Description)";\r
568                         view.InsertParameters.Add (new Parameter ("ProductID", TypeCode.String, "p_15"));\r
569                         view.InsertParameters.Add (new Parameter ("Name", TypeCode.String, "p_NewProduct"));\r
570                         view.InsertParameters.Add (new Parameter ("Description", TypeCode.String, "p_Description"));\r
571                         view.Inserting += new SqlDataSourceCommandEventHandler (view_Inserting);\r
572 \r
573                         view.UpdateCommandType = SqlDataSourceCommandType.Text;\r
574                         view.UpdateCommand = "UPDATE products SET Name = @Name, Description = @Description WHERE ProductID = @ProductID";\r
575                         view.UpdateParameters.Add (new Parameter ("ProductID", TypeCode.String, "p_15"));\r
576                         view.UpdateParameters.Add (new Parameter ("Name", TypeCode.String, "p_UpdatedProduct"));\r
577                         view.UpdateParameters.Add (new Parameter ("Description", TypeCode.String, "p_UpdatedDescription"));\r
578                         view.Updating += new SqlDataSourceCommandEventHandler (view_Updating);\r
579 \r
580                         view.OldValuesParameterFormatString = "origin_{0}";\r
581 \r
582                         keys = new Hashtable ();\r
583                         values = new Hashtable ();\r
584                         oldValues = new Hashtable ();\r
585 \r
586                         keys.Add ("ProductID", "k_10");\r
587 \r
588                         values.Add ("ProductID", "n_10");\r
589                         values.Add ("Name", "n_ColorTV");\r
590                         values.Add ("Description", "n_Beautifull");\r
591 \r
592                         oldValues.Add ("ProductID", "ov_10");\r
593                         oldValues.Add ("Name", "ov_ColorTV");\r
594                         oldValues.Add ("Description", "ov_Beautifull");                 \r
595                 }\r
596 \r
597                 [Test]\r
598                 public void ExecuteUpdateWithOldValues ()\r
599                 {\r
600                         SqlPoker sql = new SqlPoker ();\r
601                         sql.ConnectionString = "Data Source=fake\\SQLEXPRESS;Initial Catalog=Northwind;User ID=sa";\r
602                         sql.ProviderName = "System.Data.SqlClient";\r
603                         CustomSqlDataSourceView view = new CustomSqlDataSourceView (sql, "TestView", null);\r
604                         view.SelectCommandType = SqlDataSourceCommandType.Text;\r
605                         view.SelectCommand = "SELECT * FROM products WHERE ProductID = @ProductID;";\r
606                         view.UpdateCommandType = SqlDataSourceCommandType.Text;\r
607                         view.UpdateCommand = "UPDATE Table1 SET UserName = @UserName WHERE UserId = @UserId";\r
608                         view.OldValuesParameterFormatString = "origin_{0}";\r
609                         view.ConflictDetection = ConflictOptions.CompareAllValues;\r
610                         view.Updating += new SqlDataSourceCommandEventHandler (view_Updating);\r
611                         view.UpdateParameters.Add (new Parameter ("UserName", TypeCode.String, "TestUser"));\r
612                         view.UpdateParameters.Add (new Parameter ("UserId", TypeCode.Int32, "1"));\r
613                         Hashtable oldvalue = new Hashtable ();\r
614                         oldvalue.Add ("UserId", 2);\r
615                         view.Update (null, null, oldvalue);\r
616                         Assert.IsNotNull (CustomEventParameterCollection, "Update event not fired");\r
617                         Assert.AreEqual (3, CustomEventParameterCollection.Count, "Parameter count");\r
618                         Assert.AreEqual ("@UserName", CustomEventParameterCollection[0].ParameterName, "Parameter name#1");\r
619                         Assert.AreEqual ("TestUser", CustomEventParameterCollection[0].Value, "Parameter value#1");\r
620                         Assert.AreEqual ("@UserId", CustomEventParameterCollection[1].ParameterName, "Parameter name#2");\r
621                         Assert.AreEqual (1, CustomEventParameterCollection[1].Value, "Parameter value#2");\r
622                         Assert.AreEqual ("@origin_UserId", CustomEventParameterCollection[2].ParameterName, "Parameter name#3");\r
623                         Assert.AreEqual (2, CustomEventParameterCollection[2].Value, "Parameter value#3");\r
624                 }\r
625 \r
626                 [Test]\r
627                 public void ExecuteUpdateWithOverwriteParameters ()\r
628                 {\r
629                         SqlPoker sql = new SqlPoker ();\r
630                         sql.ConnectionString = "Data Source=fake\\SQLEXPRESS;Initial Catalog=Northwind;User ID=sa";\r
631                         sql.ProviderName = "System.Data.SqlClient";\r
632                         CustomSqlDataSourceView view = new CustomSqlDataSourceView (sql, "TestView", null);\r
633                         view.SelectCommandType = SqlDataSourceCommandType.Text;\r
634                         view.SelectCommand = "SELECT * FROM products WHERE ProductID = @ProductID;";\r
635                         view.UpdateCommandType = SqlDataSourceCommandType.Text;\r
636                         view.UpdateCommand = "UPDATE Table1 SET UserName = @UserName WHERE UserId = @UserId";\r
637                         view.OldValuesParameterFormatString = "origin_{0}";\r
638                         view.ConflictDetection = ConflictOptions.OverwriteChanges;\r
639                         view.Updating += new SqlDataSourceCommandEventHandler (view_Updating);\r
640                         view.UpdateParameters.Add (new Parameter ("UserName", TypeCode.String, "TestUser"));\r
641                         view.UpdateParameters.Add (new Parameter ("UserId", TypeCode.Int32, "1"));\r
642                         Hashtable value = new Hashtable ();\r
643                         value.Add ("UserId", 2);\r
644                         view.Update (value, null, null);\r
645                         Assert.IsNotNull (CustomEventParameterCollection, "Update event not fired");\r
646                         Assert.AreEqual (2, CustomEventParameterCollection.Count, "Parameter count");\r
647                         Assert.AreEqual ("@UserName", CustomEventParameterCollection[0].ParameterName, "Parameter name#1");\r
648                         Assert.AreEqual ("TestUser", CustomEventParameterCollection[0].Value, "Parameter value#1");\r
649                         Assert.AreEqual ("@origin_UserId", CustomEventParameterCollection[1].ParameterName, "Parameter name#2");\r
650                         Assert.AreEqual (2, CustomEventParameterCollection[1].Value, "Parameter value#2");\r
651                 }\r
652 \r
653                 [Test]\r
654                 public void ExecuteUpdateWithMargeParameters ()\r
655                 {\r
656                         SqlPoker sql = new SqlPoker ();\r
657                         sql.ConnectionString = "Data Source=fake\\SQLEXPRESS;Initial Catalog=Northwind;User ID=sa";\r
658                         sql.ProviderName = "System.Data.SqlClient";\r
659                         CustomSqlDataSourceView view = new CustomSqlDataSourceView (sql, "TestView", null);\r
660                         view.SelectCommandType = SqlDataSourceCommandType.Text;\r
661                         view.SelectCommand = "SELECT * FROM products WHERE ProductID = @ProductID;";\r
662                         view.UpdateCommandType = SqlDataSourceCommandType.Text;\r
663                         view.UpdateCommand = "UPDATE Table1 SET UserName = @UserName WHERE UserId = @UserId";\r
664                         view.OldValuesParameterFormatString = "origin_{0}";\r
665                         view.ConflictDetection = ConflictOptions.OverwriteChanges;\r
666                         view.Updating += new SqlDataSourceCommandEventHandler (view_Updating);\r
667                         view.UpdateParameters.Add (new Parameter ("UserName", TypeCode.String, "TestUser"));\r
668                         view.UpdateParameters.Add (new Parameter ("UserId", TypeCode.Int32, "1"));\r
669                         Hashtable value = new Hashtable ();\r
670                         value.Add ("UserLName", "TestLName");\r
671                         view.Update (null, value, null);\r
672                         Assert.IsNotNull (CustomEventParameterCollection, "Update event not fired");\r
673                         Assert.AreEqual (3, CustomEventParameterCollection.Count, "Parameter count");\r
674                         Assert.AreEqual ("@UserName", CustomEventParameterCollection[0].ParameterName, "Parameter name#1");\r
675                         Assert.AreEqual ("TestUser", CustomEventParameterCollection[0].Value, "Parameter value#1");\r
676                         Assert.AreEqual ("@UserId", CustomEventParameterCollection[1].ParameterName, "Parameter name#2");\r
677                         Assert.AreEqual (1, CustomEventParameterCollection[1].Value, "Parameter value#2");\r
678                         Assert.AreEqual ("@UserLName", CustomEventParameterCollection[2].ParameterName, "Parameter name#3");\r
679                         Assert.AreEqual ("TestLName", CustomEventParameterCollection[2].Value, "Parameter value#3");\r
680                 }\r
681 \r
682                 [Test]\r
683                 public void ExecuteUpdate_KeysValuesAndOldValues_OverwriteChanges () \r
684                 {\r
685                         SqlPoker sql = new SqlPoker ();\r
686                         sql.ConnectionString = "Data Source=fake\\SQLEXPRESS;Initial Catalog=Northwind;User ID=sa";\r
687                         sql.ProviderName = "System.Data.SqlClient";\r
688                         CustomSqlDataSourceView view = new CustomSqlDataSourceView (sql, "TestView", null);\r
689                         IDictionary keys;\r
690                         IDictionary values;\r
691                         IDictionary oldValues;\r
692                         InitializeView (view, out keys, out values, out oldValues);\r
693 \r
694                         view.ConflictDetection = ConflictOptions.OverwriteChanges;\r
695 \r
696                         view.Update (keys, values, oldValues);\r
697 \r
698                         Assert.IsNotNull (CustomEventParameterCollection, "ExecuteUpdate_KeysValuesAndOldValues_OverwriteChanges");\r
699                         string [] expectedParams = new string []\r
700                                                 { \r
701                                                         "String:@ProductID=n_10", \r
702                                                         "String:@Name=n_ColorTV", \r
703                                                         "String:@Description=n_Beautifull",\r
704                                                         "String:@origin_ProductID=k_10" \r
705                                                 };\r
706                         string [] actualValues = PassedParameters.Split (new string [] { ", " }, StringSplitOptions.RemoveEmptyEntries);\r
707                         Assert.AreEqual (expectedParams.Length, actualValues.Length, "ExecuteDelete_KeysAndOldValues_CompareAllValues2 Params count");\r
708                         ValidatePassedParams (expectedParams, actualValues, "ExecuteDelete_KeysAndOldValues_CompareAllValues2 expecte '{0}'");\r
709                 }\r
710 \r
711                 [Test]\r
712                 public void ExecuteUpdate_KeysValuesAndOldValues_CompareAllValues () \r
713                 {\r
714                         SqlPoker sql = new SqlPoker ();\r
715                         sql.ConnectionString = "Data Source=fake\\SQLEXPRESS;Initial Catalog=Northwind;User ID=sa";\r
716                         sql.ProviderName = "System.Data.SqlClient";\r
717                         CustomSqlDataSourceView view = new CustomSqlDataSourceView (sql, "TestView", null);\r
718                         IDictionary keys;\r
719                         IDictionary values;\r
720                         IDictionary oldValues;\r
721                         InitializeView (view, out keys, out values, out oldValues);\r
722 \r
723                         view.ConflictDetection = ConflictOptions.CompareAllValues;\r
724 \r
725                         view.Update (keys, values, oldValues);\r
726 \r
727                         Assert.IsNotNull (CustomEventParameterCollection, "ExecuteUpdate_KeysValuesAndOldValues_CompareAllValues");\r
728                         string [] expectedParams = new string []\r
729                                                 { \r
730                                                         "String:@ProductID=n_10", \r
731                                                         "String:@Name=n_ColorTV", \r
732                                                         "String:@Description=n_Beautifull",\r
733                                                         "String:@origin_ProductID=ov_10", \r
734                                                         "String:@origin_Name=ov_ColorTV", \r
735                                                         "String:@origin_Description=ov_Beautifull",\r
736                                                 };\r
737                         string [] actualValues = PassedParameters.Split (new string [] { ", " }, StringSplitOptions.RemoveEmptyEntries);\r
738                         Assert.AreEqual (expectedParams.Length, actualValues.Length, "ExecuteDelete_KeysAndOldValues_CompareAllValues2 Params count");\r
739                         ValidatePassedParams (expectedParams, actualValues, "ExecuteDelete_KeysAndOldValues_CompareAllValues2 expecte '{0}'");\r
740                 }\r
741 \r
742                 void view_Updating (object sender, SqlDataSourceCommandEventArgs e)\r
743                 {\r
744                         SqlDataSourceTest.CustomEventParameterCollection = (SqlParameterCollection) e.Command.Parameters;\r
745                         SqlDataSourceTest.PassedParameters = FormatParameters (SqlDataSourceTest.CustomEventParameterCollection);\r
746                         e.Cancel = true;\r
747                 }\r
748 \r
749                 void view_Selecting (object sender, SqlDataSourceSelectingEventArgs e)\r
750                 {\r
751                         SqlDataSourceTest.CustomEventParameterCollection = (SqlParameterCollection) e.Command.Parameters;\r
752                         SqlDataSourceTest.PassedParameters = FormatParameters (SqlDataSourceTest.CustomEventParameterCollection);\r
753                         e.Cancel = true;\r
754                 }\r
755 \r
756                 void view_Inserting (object sender, SqlDataSourceCommandEventArgs e)\r
757                 {\r
758                         SqlDataSourceTest.CustomEventParameterCollection = (SqlParameterCollection) e.Command.Parameters;\r
759                         SqlDataSourceTest.PassedParameters = FormatParameters (SqlDataSourceTest.CustomEventParameterCollection);\r
760                         e.Cancel = true;\r
761                 }\r
762 \r
763                 void view_Deleting (object sender, SqlDataSourceCommandEventArgs e)\r
764                 {\r
765                         SqlDataSourceTest.CustomEventParameterCollection = (SqlParameterCollection) e.Command.Parameters;\r
766                         SqlDataSourceTest.PassedParameters = FormatParameters (SqlDataSourceTest.CustomEventParameterCollection);\r
767                         e.Cancel = true;\r
768                 }\r
769 \r
770                 private string FormatParameters (SqlParameterCollection sqlParameterCollection) \r
771                 {\r
772                         StringBuilder sb = new StringBuilder ();\r
773                         foreach (SqlParameter p in sqlParameterCollection) {\r
774                                 if (sb.Length > 0) {\r
775                                         sb.Append (", ");\r
776                                 }\r
777                                 sb.AppendFormat ("{0}:{1}={2}", p.DbType, p.ParameterName, p.Value);\r
778                         }\r
779                         return sb.ToString ();\r
780                 }\r
781 \r
782                 #region help_results\r
783                 class eventAssert\r
784                 {\r
785                         private static int _testcounter;\r
786                         private static bool _eventChecker;\r
787                         private eventAssert ()\r
788                         {\r
789                                 _testcounter = 0;\r
790                         }\r
791 \r
792                         public static bool eventChecker\r
793                         {\r
794                                 get\r
795                                 {\r
796                                         throw new NotImplementedException ();\r
797                                 }\r
798                                 set\r
799                                 {\r
800                                         _eventChecker = value;\r
801                                 }\r
802                         }\r
803 \r
804                         static private void testAdded ()\r
805                         {\r
806                                 _testcounter++;\r
807                                 _eventChecker = false;\r
808                         }\r
809 \r
810                         public static void IsTrue (string msg)\r
811                         {\r
812                                 Assert.IsTrue (_eventChecker, msg + "#" + _testcounter);\r
813                                 testAdded ();\r
814 \r
815                         }\r
816 \r
817                         public static void IsFalse (string msg)\r
818                         {\r
819                                 Assert.IsFalse (_eventChecker, msg + "#" + _testcounter);\r
820                                 testAdded ();\r
821                         }\r
822                 }\r
823                 #endregion\r
824 \r
825                 [Test]\r
826                 [Category ("NotWorking")]\r
827                 public void SqlDataSource_DataSourceViewChanged ()\r
828                 {\r
829                         SqlPoker sql = new SqlPoker ();\r
830                         ((IDataSource) sql).DataSourceChanged += new EventHandler (SqlDataSourceTest_DataSourceChanged);\r
831 \r
832                         sql.DoRaiseDataSourceChangedEvent ();\r
833                         eventAssert.IsTrue ("SqlDataSourceView"); // Assert include counter the first is zero\r
834                         sql.CacheKeyDependency = "hi";\r
835                         eventAssert.IsFalse ("SqlDataSourceView");\r
836                         sql.CancelSelectOnNullParameter = false;\r
837                         eventAssert.IsFalse ("SqlDataSourceView");\r
838                         sql.ConflictDetection = ConflictOptions.CompareAllValues;\r
839                         eventAssert.IsFalse ("SqlDataSourceView");\r
840                         sql.DeleteCommandType = SqlDataSourceCommandType.StoredProcedure;\r
841                         eventAssert.IsFalse ("SqlDataSourceView");\r
842                         sql.InsertCommandType = SqlDataSourceCommandType.StoredProcedure;\r
843                         eventAssert.IsFalse ("SqlDataSourceView");\r
844                         sql.SelectCommandType = SqlDataSourceCommandType.StoredProcedure;\r
845                         eventAssert.IsFalse ("SqlDataSourceView");\r
846                         sql.UpdateCommandType = SqlDataSourceCommandType.StoredProcedure;\r
847                         eventAssert.IsFalse ("SqlDataSourceView");\r
848                         sql.OldValuesParameterFormatString = "{1}";\r
849                         eventAssert.IsFalse ("SqlDataSourceView");\r
850                         sql.SqlCacheDependency = "hi";\r
851                         eventAssert.IsFalse ("SqlDataSourceView");\r
852                         sql.SortParameterName = "hi";\r
853                         eventAssert.IsFalse ("SqlDataSourceView");\r
854                         sql.CacheDuration = 1;\r
855                         eventAssert.IsFalse ("SqlDataSourceView");\r
856                         sql.CacheExpirationPolicy = DataSourceCacheExpiry.Sliding;\r
857                         eventAssert.IsFalse ("SqlDataSourceView");\r
858                         sql.EnableCaching = true;\r
859                         eventAssert.IsFalse ("SqlDataSourceView");\r
860                         sql.DataSourceMode = SqlDataSourceMode.DataReader;\r
861                         eventAssert.IsTrue ("SqlDataSourceView");\r
862                         sql.DeleteCommand = "DELETE foo";\r
863                         eventAssert.IsFalse ("SqlDataSourceView");\r
864                         sql.InsertCommand = "INSERT foo";\r
865                         eventAssert.IsFalse ("SqlDataSourceView");\r
866                         sql.SelectCommand = "SELECT foo";\r
867                         eventAssert.IsFalse ("SqlDataSourceView");\r
868                         sql.UpdateCommand = "UPDATE foo";\r
869                         eventAssert.IsFalse ("SqlDataSourceView");\r
870                         sql.FilterExpression = "hi";\r
871                         eventAssert.IsFalse ("SqlDataSourceView");\r
872                 }\r
873 \r
874                 void SqlDataSourceTest_DataSourceChanged (object sender, EventArgs e)\r
875                 {\r
876                         eventAssert.eventChecker = true;\r
877                 }\r
878 \r
879                 //exceptions \r
880                 [Test]\r
881                 [ExpectedException (typeof (NotSupportedException))]\r
882                 public void ExecuteUpdateException ()\r
883                 {\r
884                         SqlPoker sql = new SqlPoker ();\r
885                         sql.ConnectionString = "Data Source=fake\\SQLEXPRESS;Initial Catalog=Northwind;User ID=sa";\r
886                         sql.ProviderName = "System.Data.SqlClient";\r
887                         CustomSqlDataSourceView view = new CustomSqlDataSourceView (sql, "TestView", null);\r
888                         view.Update (null, null, null);\r
889                 }\r
890 \r
891                 [Test]\r
892                 [ExpectedException (typeof (NotSupportedException))]\r
893                 public void ExecuteDeleteException ()\r
894                 {\r
895                         SqlPoker sql = new SqlPoker ();\r
896                         sql.ConnectionString = "Data Source=fake\\SQLEXPRESS;Initial Catalog=Northwind;User ID=sa";\r
897                         sql.ProviderName = "System.Data.SqlClient";\r
898                         CustomSqlDataSourceView view = new CustomSqlDataSourceView (sql, "TestView", null);\r
899                         view.Delete (null, null);\r
900                 }\r
901 \r
902                 [Test]\r
903                 [ExpectedException (typeof (NotSupportedException))]\r
904                 public void ExecuteInsertException ()\r
905                 {\r
906                         SqlPoker sql = new SqlPoker ();\r
907                         sql.ConnectionString = "Data Source=fake\\SQLEXPRESS;Initial Catalog=Northwind;User ID=sa";\r
908                         sql.ProviderName = "System.Data.SqlClient";\r
909                         CustomSqlDataSourceView view = new CustomSqlDataSourceView (sql, "TestView", null);\r
910                         view.SelectCommandType = SqlDataSourceCommandType.Text;\r
911                         view.SelectCommand = "SELECT * FROM products WHERE ProductID = @ProductID;";\r
912                         view.Insert (null);\r
913                 }\r
914 \r
915                 [Test]  //ConflictOptions.CompareAllValues must include old value collection\r
916                 [ExpectedException (typeof (InvalidOperationException))]\r
917                 public void ExecuteUpdateWithOldValuesException ()\r
918                 {\r
919                         SqlPoker sql = new SqlPoker ();\r
920                         sql.ConnectionString = "Data Source=fake\\SQLEXPRESS;Initial Catalog=Northwind;User ID=sa";\r
921                         sql.ProviderName = "System.Data.SqlClient";\r
922                         CustomSqlDataSourceView view = new CustomSqlDataSourceView (sql, "TestView", null);\r
923                         view.SelectCommandType = SqlDataSourceCommandType.Text;\r
924                         view.SelectCommand = "SELECT * FROM products WHERE ProductID = @ProductID;";\r
925                         view.UpdateCommandType = SqlDataSourceCommandType.Text;\r
926                         view.UpdateCommand = "UPDATE Table1 SET UserName = @UserName WHERE UserId = @UserId";\r
927                         view.OldValuesParameterFormatString = "origin_{0}";\r
928                         view.ConflictDetection = ConflictOptions.CompareAllValues;\r
929                         view.Updating += new SqlDataSourceCommandEventHandler (view_Updating);\r
930                         view.UpdateParameters.Add (new Parameter ("UserName", TypeCode.String, "TestUser"));\r
931                         view.UpdateParameters.Add (new Parameter ("UserId", TypeCode.Int32, "1"));\r
932                         view.Update (null, null, null);\r
933                 }\r
934 \r
935                 [Test] //ConflictOptions.CompareAllValues must include old value collection\r
936                 [ExpectedException (typeof (InvalidOperationException))]\r
937                 public void ExecuteDeleteWithOldValuesException ()\r
938                 {\r
939                         SqlPoker sql = new SqlPoker ();\r
940                         sql.ConnectionString = "Data Source=fake\\SQLEXPRESS;Initial Catalog=Northwind;User ID=sa";\r
941                         sql.ProviderName = "System.Data.SqlClient";\r
942                         CustomSqlDataSourceView view = new CustomSqlDataSourceView (sql, "TestView", null);\r
943                         view.SelectCommandType = SqlDataSourceCommandType.Text;\r
944                         view.SelectCommand = "SELECT * FROM products WHERE ProductID = @ProductID;";\r
945                         view.DeleteCommandType = SqlDataSourceCommandType.Text;\r
946                         view.DeleteCommand = "DELETE * FROM products WHERE ProductID = @ProductID;";\r
947                         view.DeleteParameters.Add (new Parameter ("ProductId", TypeCode.Int32, "15"));\r
948                         view.OldValuesParameterFormatString = "origin_{0}";\r
949                         view.ConflictDetection = ConflictOptions.CompareAllValues;\r
950                         view.Deleting += new SqlDataSourceCommandEventHandler (view_Deleting);\r
951                         Hashtable oldvalue = new Hashtable ();\r
952                         oldvalue.Add ("ProductID", 10);\r
953                         view.Delete (null, null);\r
954                 }\r
955         }\r
956 }\r
957 \r
958 #endif\r