SqlCommandTest.cs: Added testcase for bug #66630.
authorGert Driesen <drieseng@users.sourceforge.net>
Mon, 1 Nov 2004 13:44:40 +0000 (13:44 -0000)
committerGert Driesen <drieseng@users.sourceforge.net>
Mon, 1 Nov 2004 13:44:40 +0000 (13:44 -0000)
svn path=/trunk/mcs/; revision=35527

mcs/class/System.Data/Test/System.Data.SqlClient/ChangeLog
mcs/class/System.Data/Test/System.Data.SqlClient/SqlCommandTest.cs

index a565c4994adbbacd1a7f166e992240f51e7c38cb..29d09e0e5e2282396218f3ada44a287c954dffc2 100644 (file)
@@ -1,3 +1,6 @@
+2004-11-01 Gert Driesen <drieseng@users.sourceforge.net>
+       * SqlCommandTest.cs: Added testcase for bug #66630.
+
 2004-10-30 Umadevi S <sumadevi@novell.com>
        * SqlDataAdapterTest.cs - Added testcase for nullguid
 
index 3e925cbeeec9b07c510590777b84d8d10bf1d541..257e3b31ce081027a5a53882f9281081330c9753 100644 (file)
 \r
 using System;\r
 using System.Data;\r
-using System.Data.Common;
+using System.Data.Common;\r
 using System.Data.SqlClient;\r
 \r
 using NUnit.Framework;\r
 \r
-namespace MonoTests.System.Data.SqlClient
-{\r
+namespace MonoTests.System.Data.SqlClient {\r
+       [TestFixture]\r
+       public class SqlCommandTest : MSSqlTestClient {\r
+               [SetUp]\r
+               public void GetReady () {\r
+                       OpenConnection ();\r
+               }\r
 \r
-  [TestFixture]\r
-  public class SqlCommandTest : MSSqlTestClient {\r
-          \r
-          [SetUp]\r
-          public void GetReady () {\r
-                OpenConnection ();\r
-          }\r
+               [TearDown]\r
+               public void Clean () {\r
+                       CloseConnection ();\r
+               }\r
 \r
-          [TearDown]\r
-          public void Clean () {\r
-               CloseConnection ();\r
-          }
-
-         /**
-         This is required to be run only once, call this from the GetReady.    
-         **/
-         private void setup(){
-               string createquery = "CREATE PROCEDURE sp_insert @TestPar1 varchar(50),@BirthDate datetime as insert into Employees(LastName,FirstName) VALUES('SSS','uuuu') ";
-               SqlCommand cmd = new SqlCommand();
-               cmd.Connection = conn;
-               cmd.CommandText = createquery;
-               int ret =cmd.ExecuteNonQuery();
-         }
-               
-
-        [Test]\r
-         /**
-         The below test expects the stored procedure sp_insert in the database.
-         **/   
-          public void ExecuteNonQueryTest () {
-               try    {
-                       SqlCommand cmd = new SqlCommand();
-                       cmd.Connection = conn;
-                       cmd.CommandText = "sp_insert";
-                       cmd.CommandType = CommandType.StoredProcedure;
-                       Object TestPar = System.DBNull.Value;
-                       cmd.Parameters.Add("@TestPar1",SqlDbType.Int);
-                       cmd.Parameters["@TestPar1"].Value = TestPar;
-                       cmd.Parameters.Add("@BirthDate",DateTime.Now);
-                       Assert.AreEqual(-1,cmd.ExecuteNonQuery());
-                }\r
-               catch  (Exception e) {
-                       Assert.Fail("A#01 Got an exception");
-                       Console.WriteLine(e.Message);
-                       Console.WriteLine(e.StackTrace);
-                               
-               }
-                 
-               finally { // try/catch is necessary to gracefully close connections\r
-                       
-                        CloseConnection ();\r
-                }\r
-          }\r
+               private void CreateInsertEmployeeSP() {\r
+                       string createquery = "CREATE PROCEDURE #Insert_Employee @TestPar1 varchar(50),@BirthDate datetime as insert into Employees(LastName,FirstName) VALUES('SSS','uuuu') ";\r
+                       SqlCommand cmd = new SqlCommand();\r
+                       cmd.Connection = conn;\r
+                       cmd.CommandText = createquery;\r
+                       cmd.ExecuteNonQuery();\r
+               }\r
+\r
+               private void CreateBug66630SP() {\r
+                       SqlCommand cmd = conn.CreateCommand();\r
+                       cmd.CommandType = CommandType.Text;\r
+                       cmd.CommandText = "CREATE PROCEDURE #Bug66630 (" \r
+                               + "@Status smallint = 7"\r
+                               + ")"\r
+                               + "AS" + Environment.NewLine\r
+                               + "BEGIN" + Environment.NewLine\r
+                               + "SELECT CAST(5 AS int), @Status" + Environment.NewLine\r
+                               + "END";\r
+                       cmd.ExecuteNonQuery();\r
+               }\r
+\r
+               [Test]\r
+               public void ExecuteNonQueryTest () {\r
+                       // create temp sp here, should normally be created in Setup of test 
+                       // case, but cannot be done right now because of ug #68978
+                       CreateInsertEmployeeSP();
 
+                       try {\r
+                               SqlCommand cmd = new SqlCommand();\r
+                               cmd.Connection = conn;\r
+                               cmd.CommandText = "#Insert_Employee";\r
+                               cmd.CommandType = CommandType.StoredProcedure;\r
+                               Object TestPar = System.DBNull.Value;\r
+                               cmd.Parameters.Add("@TestPar1", SqlDbType.Int);\r
+                               cmd.Parameters["@TestPar1"].Value = TestPar;\r
+                               cmd.Parameters.Add("@BirthDate", DateTime.Now);\r
+                               Assert.AreEqual(-1,cmd.ExecuteNonQuery());\r
+                       } catch (Exception e) {\r
+                               Assert.Fail("A#01 Got an exception");\r
+                               Console.WriteLine(e.Message);\r
+                               Console.WriteLine(e.StackTrace);\r
+                       } finally {\r
+                               // gracefully close connection\r
+                               CloseConnection ();\r
+                       }\r
+               }\r
+\r
+               /**\r
+                * Verifies whether an enum value is converted to a numeric value when\r
+                * used as value for a numeric parameter (bug #66630)\r
+                */\r
+               [Test]\r
+               public void EnumParameterTest() {\r
+                       // create temp sp here, should normally be created in Setup of test 
+                       // case, but cannot be done right now because of ug #68978
+                       CreateBug66630SP();
 
-        [Test]
-        /**
-        The below test does not need a connection but since the setup opens the connection
-        i will need to close it
-        **/
-        public void CloneTest() {
-       
-                       SqlCommand cmd = new SqlCommand();
-                       cmd.Connection = null;
-                       cmd.CommandText = "sp_insert";
-                       cmd.CommandType = CommandType.StoredProcedure;
-                       Object TestPar = System.DBNull.Value;
-                       cmd.Parameters.Add("@TestPar1",SqlDbType.Int);
-                       cmd.Parameters["@TestPar1"].Value = TestPar;
-                       cmd.Parameters.Add("@BirthDate",DateTime.Now);
-                       cmd.DesignTimeVisible = true;
-                       cmd.CommandTimeout = 100;
-                       Object clone1 = ((ICloneable)(cmd)).Clone();
-                       SqlCommand cmd1 = (SqlCommand)clone1;
-                       Assert.AreEqual(2,cmd1.Parameters.Count);
-                       Assert.AreEqual(100,cmd1.CommandTimeout);
-                       cmd1.Parameters.Add("@test",DateTime.Now);
-                       // to check that it is deep copy and not a shallow copy of the
-                       // parameter collection
-                       Assert.AreEqual(3,cmd1.Parameters.Count);
-                       Assert.AreEqual(2,cmd.Parameters.Count);
-        }
-               
-       
-    }\r
+                       SqlCommand cmd = new SqlCommand("#Bug66630", conn);\r
+                       cmd.CommandType = CommandType.StoredProcedure;\r
+                       cmd.Parameters.Add("@Status", SqlDbType.Int).Value = Status.Error;\r
+\r
+                       using (SqlDataReader dr = cmd.ExecuteReader()) {\r
+                               // one record should be returned\r
+                               Assert.IsTrue(dr.Read(), "EnumParameterTest#1");\r
+                               // we should get two field in the result\r
+                               Assert.AreEqual(2, dr.FieldCount, "EnumParameterTest#2");\r
+                               // field 1\r
+                               Assert.AreEqual("int", dr.GetDataTypeName(0), "EnumParameterTest#3");\r
+                               Assert.AreEqual(5, dr.GetInt32(0), "EnumParameterTest#4");\r
+                               // field 2\r
+                               Assert.AreEqual("smallint", dr.GetDataTypeName(1), "EnumParameterTest#5");\r
+                               Assert.AreEqual((short) Status.Error, dr.GetInt16(1), "EnumParameterTest#6");\r
+                               // only one record should be returned\r
+                               Assert.IsFalse(dr.Read(), "EnumParameterTest#7");\r
+                       }\r
+               }\r
+\r
+               [Test]\r
+               /**\r
+                * The below test does not need a connection but since the setup opens \r
+                * the connection i will need to close it\r
+                */\r
+               public void CloneTest() {\r
+                       SqlCommand cmd = new SqlCommand();\r
+                       cmd.Connection = null;\r
+                       cmd.CommandText = "sp_insert";\r
+                       cmd.CommandType = CommandType.StoredProcedure;\r
+                       Object TestPar = System.DBNull.Value;\r
+                       cmd.Parameters.Add("@TestPar1", SqlDbType.Int);\r
+                       cmd.Parameters["@TestPar1"].Value = TestPar;\r
+                       cmd.Parameters.Add("@BirthDate", DateTime.Now);\r
+                       cmd.DesignTimeVisible = true;\r
+                       cmd.CommandTimeout = 100;\r
+                       Object clone1 = ((ICloneable)(cmd)).Clone();\r
+                       SqlCommand cmd1 = (SqlCommand) clone1;\r
+                       Assert.AreEqual(2, cmd1.Parameters.Count);\r
+                       Assert.AreEqual(100, cmd1.CommandTimeout);\r
+                       cmd1.Parameters.Add("@test", DateTime.Now);\r
+                       // to check that it is deep copy and not a shallow copy of the\r
+                       // parameter collection\r
+                       Assert.AreEqual(3, cmd1.Parameters.Count);\r
+                       Assert.AreEqual(2, cmd.Parameters.Count);\r
+               }\r
+\r
+               private enum Status { \r
+                       OK = 0,\r
+                       Error = 3\r
+               }\r
+       }\r
 }\r