X-Git-Url: http://wien.tomnetworks.com/gitweb/?a=blobdiff_plain;f=mcs%2Fclass%2FSystem.Web%2FTest%2FSystem.Web.UI.WebControls%2FSqlDataSourceTest.cs;h=9c2e62598fd40b8a2cb1e736322c7d751c60d8b3;hb=2d9719613c7e20621cdf4c3789ad370cbb8d91a1;hp=2ce56fd7098e4505d81a8790abc17c1d94b363fa;hpb=b2262f41726a89c8209facb3ea9e4be9582422b5;p=mono.git diff --git a/mcs/class/System.Web/Test/System.Web.UI.WebControls/SqlDataSourceTest.cs b/mcs/class/System.Web/Test/System.Web.UI.WebControls/SqlDataSourceTest.cs index 2ce56fd7098..9c2e62598fd 100644 --- a/mcs/class/System.Web/Test/System.Web.UI.WebControls/SqlDataSourceTest.cs +++ b/mcs/class/System.Web/Test/System.Web.UI.WebControls/SqlDataSourceTest.cs @@ -1,190 +1,958 @@ -// -// Tests for System.Web.UI.WebControls.SqlDataSource -// -// Author: -// Chris Toshok (toshok@novell.com) -// - -// -// Copyright (C) 2005 Novell, Inc (http://www.novell.com) -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -#if NET_2_0 - -using NUnit.Framework; -using System; -using System.Configuration; -using System.Data.Common; -using System.IO; -using System.Globalization; -using System.Web; -using System.Web.UI; -using System.Web.UI.WebControls; - -namespace MonoTests.System.Web.UI.WebControls -{ - class SqlPoker : SqlDataSource { - public SqlPoker () - { - TrackViewState (); - } - - public object SaveToViewState () - { - return SaveViewState (); - } - - public void LoadFromViewState (object savedState) - { - LoadViewState (savedState); - } - } - - [TestFixture] - public class SqlDataSourceTest { - [Test] - public void Defaults () - { - SqlPoker sql = new SqlPoker (); - - Assert.AreEqual ("", sql.CacheKeyDependency, "A1"); - Assert.IsTrue (sql.CancelSelectOnNullParameter, "A2"); - Assert.AreEqual(ConflictOptions.OverwriteChanges, sql.ConflictDetection, "A3"); - Assert.AreEqual(SqlDataSourceCommandType.Text, sql.DeleteCommandType, "A4"); - Assert.AreEqual(SqlDataSourceCommandType.Text, sql.InsertCommandType, "A5"); - Assert.AreEqual(SqlDataSourceCommandType.Text, sql.SelectCommandType, "A6"); - Assert.AreEqual(SqlDataSourceCommandType.Text, sql.UpdateCommandType, "A7"); - Assert.AreEqual ("{0}", sql.OldValuesParameterFormatString, "A8"); - Assert.AreEqual ("", sql.SqlCacheDependency, "A9"); - Assert.AreEqual ("", sql.SortParameterName, "A10"); - Assert.AreEqual (0, sql.CacheDuration, "A11"); - Assert.AreEqual (DataSourceCacheExpiry.Absolute, sql.CacheExpirationPolicy, "A12"); - Assert.IsFalse (sql.EnableCaching, "A13"); - Assert.AreEqual ("", sql.ProviderName, "A14"); - Assert.AreEqual ("", sql.ConnectionString, "A15"); - Assert.AreEqual (SqlDataSourceMode.DataSet, sql.DataSourceMode, "A16"); - Assert.AreEqual ("", sql.DeleteCommand, "A17"); - Assert.IsNotNull (sql.DeleteParameters, "A18"); - Assert.AreEqual (0, sql.DeleteParameters.Count, "A18.1"); - Assert.IsNotNull (sql.FilterParameters, "A19"); - Assert.AreEqual (0, sql.FilterParameters.Count, "A19.1"); - Assert.AreEqual ("", sql.InsertCommand, "A20"); - Assert.IsNotNull (sql.InsertParameters, "A21"); - Assert.AreEqual (0, sql.InsertParameters.Count, "A21.1"); - Assert.AreEqual ("", sql.SelectCommand, "A22"); - Assert.IsNotNull (sql.SelectParameters, "A23"); - Assert.AreEqual (0, sql.SelectParameters.Count, "A23.1"); - Assert.AreEqual ("", sql.UpdateCommand, "A24"); - Assert.IsNotNull (sql.UpdateParameters, "A25"); - Assert.AreEqual (0, sql.UpdateParameters.Count, "A25.1"); - Assert.AreEqual ("", sql.FilterExpression, "A26"); - } - - // WARNING!!!!!! This information will be saved into viewstate only in mono implementation . - - [Test] - [Category ("NotWorking")] - public void ViewState () - { - SqlPoker sql = new SqlPoker (); - - sql.CacheKeyDependency = "hi"; - sql.CancelSelectOnNullParameter = false; - sql.ConflictDetection = ConflictOptions.CompareAllValues; - sql.DeleteCommandType = SqlDataSourceCommandType.StoredProcedure; - sql.InsertCommandType = SqlDataSourceCommandType.StoredProcedure; - sql.SelectCommandType = SqlDataSourceCommandType.StoredProcedure; - sql.UpdateCommandType = SqlDataSourceCommandType.StoredProcedure; - sql.OldValuesParameterFormatString = "{1}"; - sql.SqlCacheDependency = "hi"; - sql.SortParameterName = "hi"; - sql.CacheDuration = 1; - sql.CacheExpirationPolicy = DataSourceCacheExpiry.Sliding; - sql.EnableCaching = true; - sql.DataSourceMode = SqlDataSourceMode.DataReader; - sql.DeleteCommand = "DELETE foo"; - sql.InsertCommand = "INSERT foo"; - sql.SelectCommand = "SELECT foo"; - sql.UpdateCommand = "UPDATE foo"; - sql.FilterExpression = "hi"; - - Assert.AreEqual ("hi", sql.CacheKeyDependency, "A1"); - Assert.IsFalse (sql.CancelSelectOnNullParameter, "A2"); - Assert.AreEqual (ConflictOptions.CompareAllValues, sql.ConflictDetection, "A3"); - Assert.AreEqual(SqlDataSourceCommandType.StoredProcedure, sql.DeleteCommandType, "A4"); - Assert.AreEqual(SqlDataSourceCommandType.StoredProcedure, sql.InsertCommandType, "A5"); - Assert.AreEqual(SqlDataSourceCommandType.StoredProcedure, sql.SelectCommandType, "A6"); - Assert.AreEqual(SqlDataSourceCommandType.StoredProcedure, sql.UpdateCommandType, "A7"); - Assert.AreEqual ("{1}", sql.OldValuesParameterFormatString, "A8"); - Assert.AreEqual ("hi", sql.SqlCacheDependency, "A9"); - Assert.AreEqual ("hi", sql.SortParameterName, "A10"); - Assert.AreEqual (1, sql.CacheDuration, "A11"); - Assert.AreEqual (DataSourceCacheExpiry.Sliding, sql.CacheExpirationPolicy, "A12"); - Assert.IsTrue (sql.EnableCaching, "A13"); - Assert.AreEqual (SqlDataSourceMode.DataReader, sql.DataSourceMode, "A16"); - Assert.AreEqual ("DELETE foo", sql.DeleteCommand, "A17"); - Assert.AreEqual ("INSERT foo", sql.InsertCommand, "A20"); - Assert.AreEqual ("SELECT foo", sql.SelectCommand, "A22"); - Assert.AreEqual ("UPDATE foo", sql.UpdateCommand, "A24"); - Assert.AreEqual ("hi", sql.FilterExpression, "A26"); - - object state = sql.SaveToViewState(); - - sql = new SqlPoker (); - sql.LoadFromViewState (state); - - Assert.AreEqual("", sql.CacheKeyDependency, "B1"); - Assert.IsTrue(sql.CancelSelectOnNullParameter, "B2"); - Assert.AreEqual(ConflictOptions.OverwriteChanges, sql.ConflictDetection, "B3"); - Assert.AreEqual(SqlDataSourceCommandType.Text, sql.DeleteCommandType, "B4"); - Assert.AreEqual(SqlDataSourceCommandType.Text, sql.InsertCommandType, "B5"); - Assert.AreEqual(SqlDataSourceCommandType.Text, sql.SelectCommandType, "B6"); - Assert.AreEqual(SqlDataSourceCommandType.Text, sql.UpdateCommandType, "B7"); - Assert.AreEqual("{0}", sql.OldValuesParameterFormatString, "B8"); - Assert.AreEqual("", sql.SqlCacheDependency, "B9"); - Assert.AreEqual("", sql.SortParameterName, "B10"); - Assert.AreEqual(0, sql.CacheDuration, "B11"); - Assert.AreEqual(DataSourceCacheExpiry.Absolute, sql.CacheExpirationPolicy, "B12"); - Assert.IsFalse(sql.EnableCaching, "B13"); - Assert.AreEqual("", sql.ProviderName, "B14"); - Assert.AreEqual("", sql.ConnectionString, "B15"); - Assert.AreEqual(SqlDataSourceMode.DataSet, sql.DataSourceMode, "B16"); - Assert.AreEqual("", sql.DeleteCommand, "B17"); - Assert.IsNotNull(sql.DeleteParameters, "B18"); - Assert.AreEqual(0, sql.DeleteParameters.Count, "B18.1"); - Assert.IsNotNull(sql.FilterParameters, "B19"); - Assert.AreEqual(0, sql.FilterParameters.Count, "B19.1"); - Assert.AreEqual("", sql.InsertCommand, "B20"); - Assert.IsNotNull(sql.InsertParameters, "B21"); - Assert.AreEqual(0, sql.InsertParameters.Count, "B21.1"); - Assert.AreEqual("", sql.SelectCommand, "B22"); - Assert.IsNotNull(sql.SelectParameters, "B23"); - Assert.AreEqual(0, sql.SelectParameters.Count, "B23.1"); - Assert.AreEqual("", sql.UpdateCommand, "B24"); - Assert.IsNotNull(sql.UpdateParameters, "B25"); - Assert.AreEqual(0, sql.UpdateParameters.Count, "B25.1"); - Assert.AreEqual("", sql.FilterExpression, "B26"); - } - } -} - -#endif +// +// Tests for System.Web.UI.WebControls.SqlDataSource +// +// Author: +// Chris Toshok (toshok@novell.com) +// + +// +// Copyright (C) 2005 Novell, Inc (http://www.novell.com) +// +// Permission is hereby granted, free of charge, to any person obtaining +// a copy of this software and associated documentation files (the +// "Software"), to deal in the Software without restriction, including +// without limitation the rights to use, copy, modify, merge, publish, +// distribute, sublicense, and/or sell copies of the Software, and to +// permit persons to whom the Software is furnished to do so, subject to +// the following conditions: +// +// The above copyright notice and this permission notice shall be +// included in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +// + +#if NET_2_0 + +using NUnit.Framework; +using System; +using System.Configuration; +using System.Data.Common; +using System.Data.SqlClient; +using System.IO; +using System.Globalization; +using System.Web; +using System.Web.UI; +using System.Web.UI.WebControls; +using System.Collections; +using System.Text; +using System.Data; + +namespace MonoTests.System.Web.UI.WebControls +{ + class SqlPoker : SqlDataSource + { + public SqlPoker () + { + TrackViewState (); + } + + public object SaveToViewState () + { + return SaveViewState (); + } + + public void LoadFromViewState (object savedState) + { + LoadViewState (savedState); + } + + public void DoRaiseDataSourceChangedEvent () + { + base.RaiseDataSourceChangedEvent(new EventArgs()); + } + } + + class CustomSqlDataSourceView : SqlDataSourceView + { + public CustomSqlDataSourceView (SqlDataSource owner,string name,HttpContext context):base(owner,name,context) + { + } + + public new int ExecuteDelete (global::System.Collections.IDictionary keys, global::System.Collections.IDictionary oldValues) + { + return base.ExecuteDelete (keys, oldValues); + } + + public new int ExecuteInsert (global::System.Collections.IDictionary values) + { + return base.ExecuteInsert (values); + } + + public new global::System.Collections.IEnumerable ExecuteSelect (DataSourceSelectArguments arguments) + { + return base.ExecuteSelect (arguments); + } + + public new int ExecuteUpdate (global::System.Collections.IDictionary keys, global::System.Collections.IDictionary values, global::System.Collections.IDictionary oldValues) + { + return base.ExecuteUpdate (keys, values, oldValues); + } + + + } + + [TestFixture] + public class SqlDataSourceTest + { + [SetUp] + public void SetUp () + { + SqlDataSourceTest.CustomEventParameterCollection = null; + SqlDataSourceTest.PassedParameters = ""; + } + + [Test] + public void Defaults () + { + SqlPoker sql = new SqlPoker (); + Assert.AreEqual ("", sql.CacheKeyDependency, "A1"); + Assert.IsTrue (sql.CancelSelectOnNullParameter, "A2"); + Assert.AreEqual (ConflictOptions.OverwriteChanges, sql.ConflictDetection, "A3"); + Assert.AreEqual (SqlDataSourceCommandType.Text, sql.DeleteCommandType, "A4"); + Assert.AreEqual (SqlDataSourceCommandType.Text, sql.InsertCommandType, "A5"); + Assert.AreEqual (SqlDataSourceCommandType.Text, sql.SelectCommandType, "A6"); + Assert.AreEqual (SqlDataSourceCommandType.Text, sql.UpdateCommandType, "A7"); + Assert.AreEqual ("{0}", sql.OldValuesParameterFormatString, "A8"); + Assert.AreEqual ("", sql.SqlCacheDependency, "A9"); + Assert.AreEqual ("", sql.SortParameterName, "A10"); + Assert.AreEqual (0, sql.CacheDuration, "A11"); + Assert.AreEqual (DataSourceCacheExpiry.Absolute, sql.CacheExpirationPolicy, "A12"); + Assert.IsFalse (sql.EnableCaching, "A13"); + Assert.AreEqual ("", sql.ProviderName, "A14"); + Assert.AreEqual ("", sql.ConnectionString, "A15"); + Assert.AreEqual (SqlDataSourceMode.DataSet, sql.DataSourceMode, "A16"); + Assert.AreEqual ("", sql.DeleteCommand, "A17"); + Assert.IsNotNull (sql.DeleteParameters, "A18"); + Assert.AreEqual (0, sql.DeleteParameters.Count, "A18.1"); + Assert.IsNotNull (sql.FilterParameters, "A19"); + Assert.AreEqual (0, sql.FilterParameters.Count, "A19.1"); + Assert.AreEqual ("", sql.InsertCommand, "A20"); + Assert.IsNotNull (sql.InsertParameters, "A21"); + Assert.AreEqual (0, sql.InsertParameters.Count, "A21.1"); + Assert.AreEqual ("", sql.SelectCommand, "A22"); + Assert.IsNotNull (sql.SelectParameters, "A23"); + Assert.AreEqual (0, sql.SelectParameters.Count, "A23.1"); + Assert.AreEqual ("", sql.UpdateCommand, "A24"); + Assert.IsNotNull (sql.UpdateParameters, "A25"); + Assert.AreEqual (0, sql.UpdateParameters.Count, "A25.1"); + Assert.AreEqual ("", sql.FilterExpression, "A26"); + } + + [Test] + public void ViewState () + { + SqlPoker sql = new SqlPoker (); + + sql.CacheKeyDependency = "hi"; + sql.CancelSelectOnNullParameter = false; + sql.ConflictDetection = ConflictOptions.CompareAllValues; + sql.DeleteCommandType = SqlDataSourceCommandType.StoredProcedure; + sql.InsertCommandType = SqlDataSourceCommandType.StoredProcedure; + sql.SelectCommandType = SqlDataSourceCommandType.StoredProcedure; + sql.UpdateCommandType = SqlDataSourceCommandType.StoredProcedure; + sql.OldValuesParameterFormatString = "{1}"; + sql.SqlCacheDependency = "hi"; + sql.SortParameterName = "hi"; + sql.CacheDuration = 1; + sql.CacheExpirationPolicy = DataSourceCacheExpiry.Sliding; + sql.EnableCaching = true; + sql.DataSourceMode = SqlDataSourceMode.DataReader; + sql.DeleteCommand = "DELETE foo"; + sql.InsertCommand = "INSERT foo"; + sql.SelectCommand = "SELECT foo"; + sql.UpdateCommand = "UPDATE foo"; + sql.FilterExpression = "hi"; + + Assert.AreEqual ("hi", sql.CacheKeyDependency, "A1"); + Assert.IsFalse (sql.CancelSelectOnNullParameter, "A2"); + Assert.AreEqual (ConflictOptions.CompareAllValues, sql.ConflictDetection, "A3"); + Assert.AreEqual (SqlDataSourceCommandType.StoredProcedure, sql.DeleteCommandType, "A4"); + Assert.AreEqual (SqlDataSourceCommandType.StoredProcedure, sql.InsertCommandType, "A5"); + Assert.AreEqual (SqlDataSourceCommandType.StoredProcedure, sql.SelectCommandType, "A6"); + Assert.AreEqual (SqlDataSourceCommandType.StoredProcedure, sql.UpdateCommandType, "A7"); + Assert.AreEqual ("{1}", sql.OldValuesParameterFormatString, "A8"); + Assert.AreEqual ("hi", sql.SqlCacheDependency, "A9"); + Assert.AreEqual ("hi", sql.SortParameterName, "A10"); + Assert.AreEqual (1, sql.CacheDuration, "A11"); + Assert.AreEqual (DataSourceCacheExpiry.Sliding, sql.CacheExpirationPolicy, "A12"); + Assert.IsTrue (sql.EnableCaching, "A13"); + Assert.AreEqual (SqlDataSourceMode.DataReader, sql.DataSourceMode, "A16"); + Assert.AreEqual ("DELETE foo", sql.DeleteCommand, "A17"); + Assert.AreEqual ("INSERT foo", sql.InsertCommand, "A20"); + Assert.AreEqual ("SELECT foo", sql.SelectCommand, "A22"); + Assert.AreEqual ("UPDATE foo", sql.UpdateCommand, "A24"); + Assert.AreEqual ("hi", sql.FilterExpression, "A26"); + + object state = sql.SaveToViewState (); + Assert.IsNull (state, "ViewState is null"); + + sql = new SqlPoker (); + sql.LoadFromViewState (state); + + Assert.AreEqual ("", sql.CacheKeyDependency, "B1"); + Assert.IsTrue (sql.CancelSelectOnNullParameter, "B2"); + Assert.AreEqual (ConflictOptions.OverwriteChanges, sql.ConflictDetection, "B3"); + Assert.AreEqual (SqlDataSourceCommandType.Text, sql.DeleteCommandType, "B4"); + Assert.AreEqual (SqlDataSourceCommandType.Text, sql.InsertCommandType, "B5"); + Assert.AreEqual (SqlDataSourceCommandType.Text, sql.SelectCommandType, "B6"); + Assert.AreEqual (SqlDataSourceCommandType.Text, sql.UpdateCommandType, "B7"); + Assert.AreEqual ("{0}", sql.OldValuesParameterFormatString, "B8"); + Assert.AreEqual ("", sql.SqlCacheDependency, "B9"); + Assert.AreEqual ("", sql.SortParameterName, "B10"); + Assert.AreEqual (0, sql.CacheDuration, "B11"); + Assert.AreEqual (DataSourceCacheExpiry.Absolute, sql.CacheExpirationPolicy, "B12"); + Assert.IsFalse (sql.EnableCaching, "B13"); + Assert.AreEqual (SqlDataSourceMode.DataSet, sql.DataSourceMode, "B16"); + Assert.AreEqual ("", sql.DeleteCommand, "B17"); + Assert.IsNotNull (sql.DeleteParameters, "B18"); + Assert.AreEqual (0, sql.DeleteParameters.Count, "B18.1"); + Assert.IsNotNull (sql.FilterParameters, "B19"); + Assert.AreEqual (0, sql.FilterParameters.Count, "B19.1"); + Assert.AreEqual ("", sql.InsertCommand, "B20"); + Assert.IsNotNull (sql.InsertParameters, "B21"); + Assert.AreEqual (0, sql.InsertParameters.Count, "B21.1"); + Assert.AreEqual ("", sql.SelectCommand, "B22"); + Assert.IsNotNull (sql.SelectParameters, "B23"); + Assert.AreEqual (0, sql.SelectParameters.Count, "B23.1"); + Assert.AreEqual ("", sql.UpdateCommand, "B24"); + Assert.IsNotNull (sql.UpdateParameters, "B25"); + Assert.AreEqual (0, sql.UpdateParameters.Count, "B25.1"); + Assert.AreEqual ("", sql.FilterExpression, "B26"); + } + + // Help parameter for Asserts + private static SqlParameterCollection CustomEventParameterCollection; + private static string PassedParameters; + + [Test] + public void ReturnValueParameter () + { + SqlPoker sql = new SqlPoker (); + sql.ConnectionString = "Data Source=fake\\SQLEXPRESS;Initial Catalog=Northwind;User ID=sa"; + sql.ProviderName = "System.Data.SqlClient"; + CustomSqlDataSourceView view = new CustomSqlDataSourceView (sql, "TestView", null); + view.SelectCommandType = SqlDataSourceCommandType.Text; + view.SelectCommand = "SELECT * FROM products WHERE ProductID = @ProductID;"; + view.OldValuesParameterFormatString = "origin_{0}"; + + view.SelectParameters.Add (new Parameter ("ProductID", TypeCode.Int32, "10")); + Parameter myReturn = new Parameter ("myReturn", TypeCode.Int32); + myReturn.Direction = ParameterDirection.ReturnValue; + view.SelectParameters.Add (myReturn); + + view.Selecting += new SqlDataSourceSelectingEventHandler (view_Selecting); + view.Select (new DataSourceSelectArguments ()); + + Assert.IsNotNull (CustomEventParameterCollection, "Select event not fired"); + Assert.AreEqual (2, CustomEventParameterCollection.Count, "Parameter count"); + Assert.IsNotNull (CustomEventParameterCollection ["@myReturn"], "Parameter name"); + } + + [Test] + public void ExecuteSelect () + { + SqlPoker sql = new SqlPoker(); + sql.ConnectionString = "Data Source=fake\\SQLEXPRESS;Initial Catalog=Northwind;User ID=sa"; + sql.ProviderName = "System.Data.SqlClient"; + CustomSqlDataSourceView view = new CustomSqlDataSourceView (sql, "TestView", null); + view.SelectCommandType = SqlDataSourceCommandType.Text; + view.SelectCommand = "SELECT * FROM products WHERE ProductID = @ProductID;"; + view.OldValuesParameterFormatString = "origin_{0}"; + + view.SelectParameters.Add (new Parameter ("ProductID", TypeCode.Int32, "10")); + view.Selecting += new SqlDataSourceSelectingEventHandler (view_Selecting); + view.Select (new DataSourceSelectArguments ()); + Assert.IsNotNull (CustomEventParameterCollection, "Select event not fired"); + Assert.AreEqual (1, CustomEventParameterCollection.Count, "Parameter count"); + Assert.AreEqual ("@ProductID", CustomEventParameterCollection[0].ParameterName, "Parameter name"); + Assert.AreEqual (10, CustomEventParameterCollection[0].Value, "Parameter value"); + } + + [Test] + public void ExecuteSelect2 () + { + SqlPoker sql = new SqlPoker (); + sql.ConnectionString = "Data Source=fake\\SQLEXPRESS;Initial Catalog=Northwind;User ID=sa"; + sql.ProviderName = "System.Data.SqlClient"; + sql.DataSourceMode = SqlDataSourceMode.DataReader; + CustomSqlDataSourceView view = new CustomSqlDataSourceView (sql, "TestView", null); + view.SelectCommandType = SqlDataSourceCommandType.Text; + view.SelectCommand = "SELECT * FROM products WHERE ProductID = @ProductID;"; + view.OldValuesParameterFormatString = "origin_{0}"; + + view.SelectParameters.Add (new Parameter ("ProductID", TypeCode.Int32, "10")); + view.Selecting += new SqlDataSourceSelectingEventHandler (view_Selecting); + view.Select (new DataSourceSelectArguments ()); + Assert.IsNotNull (CustomEventParameterCollection, "Select event not fired"); + Assert.AreEqual (1, CustomEventParameterCollection.Count, "Parameter count"); + Assert.AreEqual ("@ProductID", CustomEventParameterCollection [0].ParameterName, "Parameter name"); + Assert.AreEqual (10, CustomEventParameterCollection [0].Value, "Parameter value"); + } + + [Test] + public void ExecuteUpdate () + { + SqlPoker sql = new SqlPoker (); + sql.ConnectionString = "Data Source=fake\\SQLEXPRESS;Initial Catalog=Northwind;User ID=sa"; + sql.ProviderName = "System.Data.SqlClient"; + CustomSqlDataSourceView view = new CustomSqlDataSourceView (sql, "TestView", null); + view.SelectCommandType = SqlDataSourceCommandType.Text; + view.SelectCommand = "SELECT * FROM products WHERE ProductID = @ProductID;"; + view.UpdateCommandType = SqlDataSourceCommandType.Text; + view.UpdateCommand = "UPDATE Table1 SET UserName = @UserName WHERE UserId = @UserId"; + view.OldValuesParameterFormatString = "origin_{0}"; + view.Updating += new SqlDataSourceCommandEventHandler (view_Updating); + view.UpdateParameters.Add (new Parameter ("UserName", TypeCode.String, "TestUser")); + view.UpdateParameters.Add (new Parameter ("UserId", TypeCode.Int32, "1")); + view.Update (null, null, null); + Assert.IsNotNull (CustomEventParameterCollection, "Update event not fired"); + Assert.AreEqual (2, CustomEventParameterCollection.Count, "Parameter count"); + Assert.AreEqual ("@UserName", CustomEventParameterCollection[0].ParameterName, "Parameter name#1"); + Assert.AreEqual ("TestUser", CustomEventParameterCollection[0].Value, "Parameter value#1"); + Assert.AreEqual ("@UserId", CustomEventParameterCollection[1].ParameterName, "Parameter name#2"); + Assert.AreEqual (1, CustomEventParameterCollection[1].Value, "Parameter value#2"); + } + + [Test] + public void ExecuteInsert () + { + SqlPoker sql = new SqlPoker (); + sql.ConnectionString = "Data Source=fake\\SQLEXPRESS;Initial Catalog=Northwind;User ID=sa"; + sql.ProviderName = "System.Data.SqlClient"; + CustomSqlDataSourceView view = new CustomSqlDataSourceView (sql, "TestView", null); + view.SelectCommandType = SqlDataSourceCommandType.Text; + view.SelectCommand = "SELECT * FROM products WHERE ProductID = @ProductID;"; + view.InsertCommandType = SqlDataSourceCommandType.Text; + view.InsertCommand = "INSERT INTO Table1 (UserId, UserName) VALUES ({0},{1})"; + view.InsertParameters.Add (new Parameter ("UserId", TypeCode.Int32, "15")); + view.InsertParameters.Add (new Parameter ("UserName", TypeCode.String, "newuser")); + view.OldValuesParameterFormatString = "origin_{0}"; + view.Inserting += new SqlDataSourceCommandEventHandler (view_Inserting); + view.Insert (null); + Assert.IsNotNull (CustomEventParameterCollection, "Insert event not fired"); + Assert.AreEqual (2, CustomEventParameterCollection.Count, "Parameter count"); + Assert.AreEqual ("@UserId", CustomEventParameterCollection[0].ParameterName, "Parameter name#2"); + Assert.AreEqual (15, CustomEventParameterCollection[0].Value, "Parameter value#2"); + Assert.AreEqual ("@UserName", CustomEventParameterCollection[1].ParameterName, "Parameter name#1"); + Assert.AreEqual ("newuser", CustomEventParameterCollection[1].Value, "Parameter value#1"); + } + + [Test] + public void ExecuteInsertWithCollection () + { + SqlPoker sql = new SqlPoker (); + sql.ConnectionString = "Data Source=fake\\SQLEXPRESS;Initial Catalog=Northwind;User ID=sa"; + sql.ProviderName = "System.Data.SqlClient"; + CustomSqlDataSourceView view = new CustomSqlDataSourceView (sql, "TestView", null); + view.SelectCommandType = SqlDataSourceCommandType.Text; + view.SelectCommand = "SELECT * FROM products WHERE ProductID = @ProductID;"; + view.InsertCommandType = SqlDataSourceCommandType.Text; + view.InsertCommand = "INSERT INTO products (UserId, UserName) VALUES ({0},{1})"; + view.InsertParameters.Add (new Parameter ("UserId", TypeCode.Int32, "15")); + view.InsertParameters.Add (new Parameter ("UserName", TypeCode.String, "newuser")); + view.OldValuesParameterFormatString = "origin_{0}"; + view.Inserting += new SqlDataSourceCommandEventHandler (view_Inserting); + Hashtable value = new Hashtable (); + value.Add ("Description", "TestDescription"); + view.Insert (value); + Assert.IsNotNull (CustomEventParameterCollection, "Insert event not fired"); + Assert.AreEqual (3, CustomEventParameterCollection.Count, "Parameter count"); + Assert.AreEqual ("@UserId", CustomEventParameterCollection[0].ParameterName, "Parameter name#1"); + Assert.AreEqual (15, CustomEventParameterCollection[0].Value, "Parameter value#1"); + Assert.AreEqual ("@UserName", CustomEventParameterCollection[1].ParameterName, "Parameter name#2"); + Assert.AreEqual ("newuser", CustomEventParameterCollection[1].Value, "Parameter value#2"); + Assert.AreEqual ("@Description", CustomEventParameterCollection[2].ParameterName, "Parameter name#3"); + Assert.AreEqual ("TestDescription", CustomEventParameterCollection[2].Value, "Parameter value#3"); + } + + [Test] + public void ExecuteDelete () + { + SqlPoker sql = new SqlPoker (); + sql.ConnectionString = "Data Source=fake\\SQLEXPRESS;Initial Catalog=Northwind;User ID=sa"; + sql.ProviderName = "System.Data.SqlClient"; + CustomSqlDataSourceView view = new CustomSqlDataSourceView (sql, "TestView", null); + view.SelectCommandType = SqlDataSourceCommandType.Text; + view.SelectCommand = "SELECT * FROM products WHERE ProductID = @ProductID;"; + view.DeleteCommandType = SqlDataSourceCommandType.Text; + view.DeleteCommand = "DELETE * FROM products WHERE ProductID = @ProductID;"; + view.DeleteParameters.Add (new Parameter ("ProductId", TypeCode.Int32, "15")); + view.OldValuesParameterFormatString = "origin_{0}"; + view.Deleting += new SqlDataSourceCommandEventHandler (view_Deleting); + view.Delete (null, null); + Assert.IsNotNull (CustomEventParameterCollection, "Delete event not fired"); + Assert.AreEqual (1, CustomEventParameterCollection.Count, "Parameter count"); + Assert.AreEqual ("@ProductId", CustomEventParameterCollection[0].ParameterName, "Parameter name#1"); + Assert.AreEqual (15, CustomEventParameterCollection[0].Value, "Parameter value#1"); + } + + [Test] + public void ExecuteDeleteWithOldValues () + { + SqlPoker sql = new SqlPoker (); + sql.ConnectionString = "Data Source=fake\\SQLEXPRESS;Initial Catalog=Northwind;User ID=sa"; + sql.ProviderName = "System.Data.SqlClient"; + CustomSqlDataSourceView view = new CustomSqlDataSourceView (sql, "TestView", null); + view.SelectCommandType = SqlDataSourceCommandType.Text; + view.SelectCommand = "SELECT * FROM products WHERE ProductID = @ProductID;"; + view.DeleteCommandType = SqlDataSourceCommandType.Text; + view.DeleteCommand = "DELETE * FROM products WHERE ProductID = @ProductID;"; + view.DeleteParameters.Add (new Parameter ("ProductID", TypeCode.Int32, "15")); + view.OldValuesParameterFormatString = "origin_{0}"; + view.ConflictDetection = ConflictOptions.CompareAllValues; + view.Deleting += new SqlDataSourceCommandEventHandler (view_Deleting); + Hashtable oldvalue = new Hashtable (); + oldvalue.Add ("ProductID", 10); + view.Delete (null,oldvalue ); + Assert.IsNotNull (CustomEventParameterCollection, "Delete event not fired"); + Assert.AreEqual (1, CustomEventParameterCollection.Count, "Parameter count"); + Assert.AreEqual ("@origin_ProductID", CustomEventParameterCollection[0].ParameterName, "Parameter name#2"); + Assert.AreEqual (10, CustomEventParameterCollection[0].Value, "Parameter value#2"); + } + + [Test] + public void ExecuteDeleteWithMergedOldValues () + { + SqlPoker sql = new SqlPoker (); + sql.ConnectionString = "Data Source=fake\\SQLEXPRESS;Initial Catalog=Northwind;User ID=sa"; + sql.ProviderName = "System.Data.SqlClient"; + CustomSqlDataSourceView view = new CustomSqlDataSourceView (sql, "TestView", null); + view.SelectCommandType = SqlDataSourceCommandType.Text; + view.SelectCommand = "SELECT * FROM products WHERE ProductID = @ProductID;"; + view.DeleteCommandType = SqlDataSourceCommandType.Text; + view.DeleteCommand = "DELETE * FROM products WHERE ProductID = @ProductID;"; + view.DeleteParameters.Add (new Parameter ("ProductId", TypeCode.Int32, "15")); + view.OldValuesParameterFormatString = "origin_{0}"; + view.ConflictDetection = ConflictOptions.CompareAllValues; + view.Deleting += new SqlDataSourceCommandEventHandler (view_Deleting); + Hashtable oldvalue = new Hashtable (); + oldvalue.Add ("Desc", "Description"); + view.Delete (null, oldvalue); + Assert.IsNotNull (CustomEventParameterCollection, "Delete event not fired"); + Assert.AreEqual (2, CustomEventParameterCollection.Count, "Parameter count"); + Assert.AreEqual ("@ProductId", CustomEventParameterCollection[0].ParameterName, "Parameter name#1"); + Assert.AreEqual (15, CustomEventParameterCollection[0].Value, "Parameter value#1"); + Assert.AreEqual ("@origin_Desc", CustomEventParameterCollection[1].ParameterName, "Parameter name#2"); + Assert.AreEqual ("Description", CustomEventParameterCollection[1].Value, "Parameter value#2"); + } + + [Test] + public void ExecuteDeleteWithMergedValues () + { + SqlPoker sql = new SqlPoker (); + sql.ConnectionString = "Data Source=fake\\SQLEXPRESS;Initial Catalog=Northwind;User ID=sa"; + sql.ProviderName = "System.Data.SqlClient"; + CustomSqlDataSourceView view = new CustomSqlDataSourceView (sql, "TestView", null); + view.SelectCommandType = SqlDataSourceCommandType.Text; + view.SelectCommand = "SELECT * FROM products WHERE ProductID = @ProductID;"; + view.DeleteCommandType = SqlDataSourceCommandType.Text; + view.DeleteCommand = "DELETE * FROM products WHERE ProductID = @ProductID;"; + view.DeleteParameters.Add (new Parameter ("ProductId", TypeCode.Int32, "15")); + view.OldValuesParameterFormatString = "origin_{0}"; + view.Deleting += new SqlDataSourceCommandEventHandler (view_Deleting); + Hashtable value = new Hashtable (); + value.Add ("Desc", "Description"); + view.Delete (value, null); + Assert.IsNotNull (CustomEventParameterCollection, "Delete event not fired"); + Assert.AreEqual (2, CustomEventParameterCollection.Count, "Parameter count"); + Assert.AreEqual ("@ProductId", CustomEventParameterCollection[0].ParameterName, "Parameter name#1"); + Assert.AreEqual (15, CustomEventParameterCollection[0].Value, "Parameter value#1"); + Assert.AreEqual ("@origin_Desc", CustomEventParameterCollection[1].ParameterName, "Parameter name#2"); + Assert.AreEqual ("Description", CustomEventParameterCollection[1].Value, "Parameter value#2"); + } + + [Test] + public void ExecuteDelete_KeysAndOldValues_OverwriteChanges () + { + SqlPoker sql = new SqlPoker (); + sql.ConnectionString = "Data Source=fake\\SQLEXPRESS;Initial Catalog=Northwind;User ID=sa"; + sql.ProviderName = "System.Data.SqlClient"; + CustomSqlDataSourceView view = new CustomSqlDataSourceView (sql, "TestView", null); + IDictionary keys; + IDictionary values; + IDictionary oldValues; + InitializeView (view, out keys, out values, out oldValues); + + view.ConflictDetection = ConflictOptions.OverwriteChanges; + + view.Delete (keys, oldValues); + + Assert.IsNotNull (CustomEventParameterCollection, "KeysAndOldValues_OverwriteChanges"); + Assert.AreEqual ("String:@origin_ProductID=k_10", PassedParameters, "KeysAndOldValues_OverwriteChanges Values"); + } + + [Test] + public void ExecuteDelete_KeysAndOldValues_CompareAllValues () + { + SqlPoker sql = new SqlPoker (); + sql.ConnectionString = "Data Source=fake\\SQLEXPRESS;Initial Catalog=Northwind;User ID=sa"; + sql.ProviderName = "System.Data.SqlClient"; + CustomSqlDataSourceView view = new CustomSqlDataSourceView (sql, "TestView", null); + IDictionary keys; + IDictionary values; + IDictionary oldValues; + InitializeView (view, out keys, out values, out oldValues); + + view.ConflictDetection = ConflictOptions.CompareAllValues; + + view.Delete (keys, oldValues); + + Assert.IsNotNull (CustomEventParameterCollection, "KeysAndOldValues_CompareAllValues"); + Assert.AreEqual ("String:@origin_ProductID=ov_10, String:@origin_Description=ov_Beautifull, String:@origin_Name=ov_ColorTV", PassedParameters, "KeysAndOldValues_CompareAllValues Values"); + } + + [Test] + public void ExecuteDelete_KeysAndOldValues_CompareAllValues2 () + { + SqlPoker sql = new SqlPoker (); + sql.ConnectionString = "Data Source=fake\\SQLEXPRESS;Initial Catalog=Northwind;User ID=sa"; + sql.ProviderName = "System.Data.SqlClient"; + CustomSqlDataSourceView view = new CustomSqlDataSourceView (sql, "TestView", null); + IDictionary keys; + IDictionary values; + IDictionary oldValues; + InitializeView (view, out keys, out values, out oldValues); + view.DeleteParameters.Add ("origin_ProductID", "po_10"); + + view.ConflictDetection = ConflictOptions.CompareAllValues; + + view.Delete (keys, oldValues); + + Assert.IsNotNull (CustomEventParameterCollection, "ExecuteDelete_KeysAndOldValues_CompareAllValues2"); + string [] expectedParams = new string [] + { + "String:@origin_ProductID=ov_10", + "String:@origin_Description=ov_Beautifull", + "String:@origin_Name=ov_ColorTV" + }; + string [] actualValues = PassedParameters.Split (new string [] { ", " }, StringSplitOptions.RemoveEmptyEntries); + Assert.AreEqual (expectedParams.Length, actualValues.Length, "ExecuteDelete_KeysAndOldValues_CompareAllValues2 Params count"); + ValidatePassedParams (expectedParams, actualValues, "ExecuteDelete_KeysAndOldValues_CompareAllValues2 expecte '{0}'"); + } + + private static void ValidatePassedParams (string [] expectedParams, string [] actualValues, string errorMessageFormat) + { + foreach (string eps in expectedParams) { + bool found = false; + foreach (string aps in actualValues) { + if (eps == aps) { + found = true; + break; + } + } + Assert.IsTrue (found, String.Format (errorMessageFormat, eps)); + } + } + + private void InitializeView (CustomSqlDataSourceView view, out IDictionary keys, out IDictionary values, out IDictionary oldValues) + { + view.SelectCommandType = SqlDataSourceCommandType.Text; + view.SelectCommand = "SELECT * FROM products WHERE ProductID = @ProductID;"; + view.SelectParameters.Add (new Parameter ("ProductID", TypeCode.String, "p_10")); + view.Selecting += new SqlDataSourceSelectingEventHandler (view_Selecting); + + view.DeleteCommandType = SqlDataSourceCommandType.Text; + view.DeleteCommand = "DELETE * FROM products WHERE ProductID = @ProductID;"; + view.DeleteParameters.Add (new Parameter ("ProductID", TypeCode.String, "p_10")); + view.Deleting += new SqlDataSourceCommandEventHandler (view_Deleting); + + view.InsertCommandType = SqlDataSourceCommandType.Text; + view.InsertCommand = "INSERT INTO products (ProductID, Name, Description) VALUES (@ProductID, @Name, @Description)"; + view.InsertParameters.Add (new Parameter ("ProductID", TypeCode.String, "p_15")); + view.InsertParameters.Add (new Parameter ("Name", TypeCode.String, "p_NewProduct")); + view.InsertParameters.Add (new Parameter ("Description", TypeCode.String, "p_Description")); + view.Inserting += new SqlDataSourceCommandEventHandler (view_Inserting); + + view.UpdateCommandType = SqlDataSourceCommandType.Text; + view.UpdateCommand = "UPDATE products SET Name = @Name, Description = @Description WHERE ProductID = @ProductID"; + view.UpdateParameters.Add (new Parameter ("ProductID", TypeCode.String, "p_15")); + view.UpdateParameters.Add (new Parameter ("Name", TypeCode.String, "p_UpdatedProduct")); + view.UpdateParameters.Add (new Parameter ("Description", TypeCode.String, "p_UpdatedDescription")); + view.Updating += new SqlDataSourceCommandEventHandler (view_Updating); + + view.OldValuesParameterFormatString = "origin_{0}"; + + keys = new Hashtable (); + values = new Hashtable (); + oldValues = new Hashtable (); + + keys.Add ("ProductID", "k_10"); + + values.Add ("ProductID", "n_10"); + values.Add ("Name", "n_ColorTV"); + values.Add ("Description", "n_Beautifull"); + + oldValues.Add ("ProductID", "ov_10"); + oldValues.Add ("Name", "ov_ColorTV"); + oldValues.Add ("Description", "ov_Beautifull"); + } + + [Test] + public void ExecuteUpdateWithOldValues () + { + SqlPoker sql = new SqlPoker (); + sql.ConnectionString = "Data Source=fake\\SQLEXPRESS;Initial Catalog=Northwind;User ID=sa"; + sql.ProviderName = "System.Data.SqlClient"; + CustomSqlDataSourceView view = new CustomSqlDataSourceView (sql, "TestView", null); + view.SelectCommandType = SqlDataSourceCommandType.Text; + view.SelectCommand = "SELECT * FROM products WHERE ProductID = @ProductID;"; + view.UpdateCommandType = SqlDataSourceCommandType.Text; + view.UpdateCommand = "UPDATE Table1 SET UserName = @UserName WHERE UserId = @UserId"; + view.OldValuesParameterFormatString = "origin_{0}"; + view.ConflictDetection = ConflictOptions.CompareAllValues; + view.Updating += new SqlDataSourceCommandEventHandler (view_Updating); + view.UpdateParameters.Add (new Parameter ("UserName", TypeCode.String, "TestUser")); + view.UpdateParameters.Add (new Parameter ("UserId", TypeCode.Int32, "1")); + Hashtable oldvalue = new Hashtable (); + oldvalue.Add ("UserId", 2); + view.Update (null, null, oldvalue); + Assert.IsNotNull (CustomEventParameterCollection, "Update event not fired"); + Assert.AreEqual (3, CustomEventParameterCollection.Count, "Parameter count"); + Assert.AreEqual ("@UserName", CustomEventParameterCollection[0].ParameterName, "Parameter name#1"); + Assert.AreEqual ("TestUser", CustomEventParameterCollection[0].Value, "Parameter value#1"); + Assert.AreEqual ("@UserId", CustomEventParameterCollection[1].ParameterName, "Parameter name#2"); + Assert.AreEqual (1, CustomEventParameterCollection[1].Value, "Parameter value#2"); + Assert.AreEqual ("@origin_UserId", CustomEventParameterCollection[2].ParameterName, "Parameter name#3"); + Assert.AreEqual (2, CustomEventParameterCollection[2].Value, "Parameter value#3"); + } + + [Test] + public void ExecuteUpdateWithOverwriteParameters () + { + SqlPoker sql = new SqlPoker (); + sql.ConnectionString = "Data Source=fake\\SQLEXPRESS;Initial Catalog=Northwind;User ID=sa"; + sql.ProviderName = "System.Data.SqlClient"; + CustomSqlDataSourceView view = new CustomSqlDataSourceView (sql, "TestView", null); + view.SelectCommandType = SqlDataSourceCommandType.Text; + view.SelectCommand = "SELECT * FROM products WHERE ProductID = @ProductID;"; + view.UpdateCommandType = SqlDataSourceCommandType.Text; + view.UpdateCommand = "UPDATE Table1 SET UserName = @UserName WHERE UserId = @UserId"; + view.OldValuesParameterFormatString = "origin_{0}"; + view.ConflictDetection = ConflictOptions.OverwriteChanges; + view.Updating += new SqlDataSourceCommandEventHandler (view_Updating); + view.UpdateParameters.Add (new Parameter ("UserName", TypeCode.String, "TestUser")); + view.UpdateParameters.Add (new Parameter ("UserId", TypeCode.Int32, "1")); + Hashtable value = new Hashtable (); + value.Add ("UserId", 2); + view.Update (value, null, null); + Assert.IsNotNull (CustomEventParameterCollection, "Update event not fired"); + Assert.AreEqual (2, CustomEventParameterCollection.Count, "Parameter count"); + Assert.AreEqual ("@UserName", CustomEventParameterCollection[0].ParameterName, "Parameter name#1"); + Assert.AreEqual ("TestUser", CustomEventParameterCollection[0].Value, "Parameter value#1"); + Assert.AreEqual ("@origin_UserId", CustomEventParameterCollection[1].ParameterName, "Parameter name#2"); + Assert.AreEqual (2, CustomEventParameterCollection[1].Value, "Parameter value#2"); + } + + [Test] + public void ExecuteUpdateWithMargeParameters () + { + SqlPoker sql = new SqlPoker (); + sql.ConnectionString = "Data Source=fake\\SQLEXPRESS;Initial Catalog=Northwind;User ID=sa"; + sql.ProviderName = "System.Data.SqlClient"; + CustomSqlDataSourceView view = new CustomSqlDataSourceView (sql, "TestView", null); + view.SelectCommandType = SqlDataSourceCommandType.Text; + view.SelectCommand = "SELECT * FROM products WHERE ProductID = @ProductID;"; + view.UpdateCommandType = SqlDataSourceCommandType.Text; + view.UpdateCommand = "UPDATE Table1 SET UserName = @UserName WHERE UserId = @UserId"; + view.OldValuesParameterFormatString = "origin_{0}"; + view.ConflictDetection = ConflictOptions.OverwriteChanges; + view.Updating += new SqlDataSourceCommandEventHandler (view_Updating); + view.UpdateParameters.Add (new Parameter ("UserName", TypeCode.String, "TestUser")); + view.UpdateParameters.Add (new Parameter ("UserId", TypeCode.Int32, "1")); + Hashtable value = new Hashtable (); + value.Add ("UserLName", "TestLName"); + view.Update (null, value, null); + Assert.IsNotNull (CustomEventParameterCollection, "Update event not fired"); + Assert.AreEqual (3, CustomEventParameterCollection.Count, "Parameter count"); + Assert.AreEqual ("@UserName", CustomEventParameterCollection[0].ParameterName, "Parameter name#1"); + Assert.AreEqual ("TestUser", CustomEventParameterCollection[0].Value, "Parameter value#1"); + Assert.AreEqual ("@UserId", CustomEventParameterCollection[1].ParameterName, "Parameter name#2"); + Assert.AreEqual (1, CustomEventParameterCollection[1].Value, "Parameter value#2"); + Assert.AreEqual ("@UserLName", CustomEventParameterCollection[2].ParameterName, "Parameter name#3"); + Assert.AreEqual ("TestLName", CustomEventParameterCollection[2].Value, "Parameter value#3"); + } + + [Test] + public void ExecuteUpdate_KeysValuesAndOldValues_OverwriteChanges () + { + SqlPoker sql = new SqlPoker (); + sql.ConnectionString = "Data Source=fake\\SQLEXPRESS;Initial Catalog=Northwind;User ID=sa"; + sql.ProviderName = "System.Data.SqlClient"; + CustomSqlDataSourceView view = new CustomSqlDataSourceView (sql, "TestView", null); + IDictionary keys; + IDictionary values; + IDictionary oldValues; + InitializeView (view, out keys, out values, out oldValues); + + view.ConflictDetection = ConflictOptions.OverwriteChanges; + + view.Update (keys, values, oldValues); + + Assert.IsNotNull (CustomEventParameterCollection, "ExecuteUpdate_KeysValuesAndOldValues_OverwriteChanges"); + string [] expectedParams = new string [] + { + "String:@ProductID=n_10", + "String:@Name=n_ColorTV", + "String:@Description=n_Beautifull", + "String:@origin_ProductID=k_10" + }; + string [] actualValues = PassedParameters.Split (new string [] { ", " }, StringSplitOptions.RemoveEmptyEntries); + Assert.AreEqual (expectedParams.Length, actualValues.Length, "ExecuteDelete_KeysAndOldValues_CompareAllValues2 Params count"); + ValidatePassedParams (expectedParams, actualValues, "ExecuteDelete_KeysAndOldValues_CompareAllValues2 expecte '{0}'"); + } + + [Test] + public void ExecuteUpdate_KeysValuesAndOldValues_CompareAllValues () + { + SqlPoker sql = new SqlPoker (); + sql.ConnectionString = "Data Source=fake\\SQLEXPRESS;Initial Catalog=Northwind;User ID=sa"; + sql.ProviderName = "System.Data.SqlClient"; + CustomSqlDataSourceView view = new CustomSqlDataSourceView (sql, "TestView", null); + IDictionary keys; + IDictionary values; + IDictionary oldValues; + InitializeView (view, out keys, out values, out oldValues); + + view.ConflictDetection = ConflictOptions.CompareAllValues; + + view.Update (keys, values, oldValues); + + Assert.IsNotNull (CustomEventParameterCollection, "ExecuteUpdate_KeysValuesAndOldValues_CompareAllValues"); + string [] expectedParams = new string [] + { + "String:@ProductID=n_10", + "String:@Name=n_ColorTV", + "String:@Description=n_Beautifull", + "String:@origin_ProductID=ov_10", + "String:@origin_Name=ov_ColorTV", + "String:@origin_Description=ov_Beautifull", + }; + string [] actualValues = PassedParameters.Split (new string [] { ", " }, StringSplitOptions.RemoveEmptyEntries); + Assert.AreEqual (expectedParams.Length, actualValues.Length, "ExecuteDelete_KeysAndOldValues_CompareAllValues2 Params count"); + ValidatePassedParams (expectedParams, actualValues, "ExecuteDelete_KeysAndOldValues_CompareAllValues2 expecte '{0}'"); + } + + void view_Updating (object sender, SqlDataSourceCommandEventArgs e) + { + SqlDataSourceTest.CustomEventParameterCollection = (SqlParameterCollection) e.Command.Parameters; + SqlDataSourceTest.PassedParameters = FormatParameters (SqlDataSourceTest.CustomEventParameterCollection); + e.Cancel = true; + } + + void view_Selecting (object sender, SqlDataSourceSelectingEventArgs e) + { + SqlDataSourceTest.CustomEventParameterCollection = (SqlParameterCollection) e.Command.Parameters; + SqlDataSourceTest.PassedParameters = FormatParameters (SqlDataSourceTest.CustomEventParameterCollection); + e.Cancel = true; + } + + void view_Inserting (object sender, SqlDataSourceCommandEventArgs e) + { + SqlDataSourceTest.CustomEventParameterCollection = (SqlParameterCollection) e.Command.Parameters; + SqlDataSourceTest.PassedParameters = FormatParameters (SqlDataSourceTest.CustomEventParameterCollection); + e.Cancel = true; + } + + void view_Deleting (object sender, SqlDataSourceCommandEventArgs e) + { + SqlDataSourceTest.CustomEventParameterCollection = (SqlParameterCollection) e.Command.Parameters; + SqlDataSourceTest.PassedParameters = FormatParameters (SqlDataSourceTest.CustomEventParameterCollection); + e.Cancel = true; + } + + private string FormatParameters (SqlParameterCollection sqlParameterCollection) + { + StringBuilder sb = new StringBuilder (); + foreach (SqlParameter p in sqlParameterCollection) { + if (sb.Length > 0) { + sb.Append (", "); + } + sb.AppendFormat ("{0}:{1}={2}", p.DbType, p.ParameterName, p.Value); + } + return sb.ToString (); + } + + #region help_results + class eventAssert + { + private static int _testcounter; + private static bool _eventChecker; + private eventAssert () + { + _testcounter = 0; + } + + public static bool eventChecker + { + get + { + throw new NotImplementedException (); + } + set + { + _eventChecker = value; + } + } + + static private void testAdded () + { + _testcounter++; + _eventChecker = false; + } + + public static void IsTrue (string msg) + { + Assert.IsTrue (_eventChecker, msg + "#" + _testcounter); + testAdded (); + + } + + public static void IsFalse (string msg) + { + Assert.IsFalse (_eventChecker, msg + "#" + _testcounter); + testAdded (); + } + } + #endregion + + [Test] + [Category ("NotWorking")] + public void SqlDataSource_DataSourceViewChanged () + { + SqlPoker sql = new SqlPoker (); + ((IDataSource) sql).DataSourceChanged += new EventHandler (SqlDataSourceTest_DataSourceChanged); + + sql.DoRaiseDataSourceChangedEvent (); + eventAssert.IsTrue ("SqlDataSourceView"); // Assert include counter the first is zero + sql.CacheKeyDependency = "hi"; + eventAssert.IsFalse ("SqlDataSourceView"); + sql.CancelSelectOnNullParameter = false; + eventAssert.IsFalse ("SqlDataSourceView"); + sql.ConflictDetection = ConflictOptions.CompareAllValues; + eventAssert.IsFalse ("SqlDataSourceView"); + sql.DeleteCommandType = SqlDataSourceCommandType.StoredProcedure; + eventAssert.IsFalse ("SqlDataSourceView"); + sql.InsertCommandType = SqlDataSourceCommandType.StoredProcedure; + eventAssert.IsFalse ("SqlDataSourceView"); + sql.SelectCommandType = SqlDataSourceCommandType.StoredProcedure; + eventAssert.IsFalse ("SqlDataSourceView"); + sql.UpdateCommandType = SqlDataSourceCommandType.StoredProcedure; + eventAssert.IsFalse ("SqlDataSourceView"); + sql.OldValuesParameterFormatString = "{1}"; + eventAssert.IsFalse ("SqlDataSourceView"); + sql.SqlCacheDependency = "hi"; + eventAssert.IsFalse ("SqlDataSourceView"); + sql.SortParameterName = "hi"; + eventAssert.IsFalse ("SqlDataSourceView"); + sql.CacheDuration = 1; + eventAssert.IsFalse ("SqlDataSourceView"); + sql.CacheExpirationPolicy = DataSourceCacheExpiry.Sliding; + eventAssert.IsFalse ("SqlDataSourceView"); + sql.EnableCaching = true; + eventAssert.IsFalse ("SqlDataSourceView"); + sql.DataSourceMode = SqlDataSourceMode.DataReader; + eventAssert.IsTrue ("SqlDataSourceView"); + sql.DeleteCommand = "DELETE foo"; + eventAssert.IsFalse ("SqlDataSourceView"); + sql.InsertCommand = "INSERT foo"; + eventAssert.IsFalse ("SqlDataSourceView"); + sql.SelectCommand = "SELECT foo"; + eventAssert.IsFalse ("SqlDataSourceView"); + sql.UpdateCommand = "UPDATE foo"; + eventAssert.IsFalse ("SqlDataSourceView"); + sql.FilterExpression = "hi"; + eventAssert.IsFalse ("SqlDataSourceView"); + } + + void SqlDataSourceTest_DataSourceChanged (object sender, EventArgs e) + { + eventAssert.eventChecker = true; + } + + //exceptions + [Test] + [ExpectedException (typeof (NotSupportedException))] + public void ExecuteUpdateException () + { + SqlPoker sql = new SqlPoker (); + sql.ConnectionString = "Data Source=fake\\SQLEXPRESS;Initial Catalog=Northwind;User ID=sa"; + sql.ProviderName = "System.Data.SqlClient"; + CustomSqlDataSourceView view = new CustomSqlDataSourceView (sql, "TestView", null); + view.Update (null, null, null); + } + + [Test] + [ExpectedException (typeof (NotSupportedException))] + public void ExecuteDeleteException () + { + SqlPoker sql = new SqlPoker (); + sql.ConnectionString = "Data Source=fake\\SQLEXPRESS;Initial Catalog=Northwind;User ID=sa"; + sql.ProviderName = "System.Data.SqlClient"; + CustomSqlDataSourceView view = new CustomSqlDataSourceView (sql, "TestView", null); + view.Delete (null, null); + } + + [Test] + [ExpectedException (typeof (NotSupportedException))] + public void ExecuteInsertException () + { + SqlPoker sql = new SqlPoker (); + sql.ConnectionString = "Data Source=fake\\SQLEXPRESS;Initial Catalog=Northwind;User ID=sa"; + sql.ProviderName = "System.Data.SqlClient"; + CustomSqlDataSourceView view = new CustomSqlDataSourceView (sql, "TestView", null); + view.SelectCommandType = SqlDataSourceCommandType.Text; + view.SelectCommand = "SELECT * FROM products WHERE ProductID = @ProductID;"; + view.Insert (null); + } + + [Test] //ConflictOptions.CompareAllValues must include old value collection + [ExpectedException (typeof (InvalidOperationException))] + public void ExecuteUpdateWithOldValuesException () + { + SqlPoker sql = new SqlPoker (); + sql.ConnectionString = "Data Source=fake\\SQLEXPRESS;Initial Catalog=Northwind;User ID=sa"; + sql.ProviderName = "System.Data.SqlClient"; + CustomSqlDataSourceView view = new CustomSqlDataSourceView (sql, "TestView", null); + view.SelectCommandType = SqlDataSourceCommandType.Text; + view.SelectCommand = "SELECT * FROM products WHERE ProductID = @ProductID;"; + view.UpdateCommandType = SqlDataSourceCommandType.Text; + view.UpdateCommand = "UPDATE Table1 SET UserName = @UserName WHERE UserId = @UserId"; + view.OldValuesParameterFormatString = "origin_{0}"; + view.ConflictDetection = ConflictOptions.CompareAllValues; + view.Updating += new SqlDataSourceCommandEventHandler (view_Updating); + view.UpdateParameters.Add (new Parameter ("UserName", TypeCode.String, "TestUser")); + view.UpdateParameters.Add (new Parameter ("UserId", TypeCode.Int32, "1")); + view.Update (null, null, null); + } + + [Test] //ConflictOptions.CompareAllValues must include old value collection + [ExpectedException (typeof (InvalidOperationException))] + public void ExecuteDeleteWithOldValuesException () + { + SqlPoker sql = new SqlPoker (); + sql.ConnectionString = "Data Source=fake\\SQLEXPRESS;Initial Catalog=Northwind;User ID=sa"; + sql.ProviderName = "System.Data.SqlClient"; + CustomSqlDataSourceView view = new CustomSqlDataSourceView (sql, "TestView", null); + view.SelectCommandType = SqlDataSourceCommandType.Text; + view.SelectCommand = "SELECT * FROM products WHERE ProductID = @ProductID;"; + view.DeleteCommandType = SqlDataSourceCommandType.Text; + view.DeleteCommand = "DELETE * FROM products WHERE ProductID = @ProductID;"; + view.DeleteParameters.Add (new Parameter ("ProductId", TypeCode.Int32, "15")); + view.OldValuesParameterFormatString = "origin_{0}"; + view.ConflictDetection = ConflictOptions.CompareAllValues; + view.Deleting += new SqlDataSourceCommandEventHandler (view_Deleting); + Hashtable oldvalue = new Hashtable (); + oldvalue.Add ("ProductID", 10); + view.Delete (null, null); + } + } +} + +#endif