* SqlCommandTest.cs: Added test for bug #470579.
authorGert Driesen <drieseng@users.sourceforge.net>
Thu, 29 Jan 2009 19:10:44 +0000 (19:10 -0000)
committerGert Driesen <drieseng@users.sourceforge.net>
Thu, 29 Jan 2009 19:10:44 +0000 (19:10 -0000)
svn path=/trunk/mcs/; revision=124992

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

index 02272f2960b316e06841c0a5afcf7b52dc0855ef..1d970e6e0ec312b9c25ff61d2f529d93af5a71d3 100644 (file)
@@ -1,3 +1,7 @@
+2009-01-29  Gert Driesen  <drieseng@users.sourceforge.net>
+
+       * SqlCommandTest.cs: Added test for bug #470579.
+
 2009-01-17  Gert Driesen  <drieseng@users.sourceforge.net>
 
        * SqlCommandBuilderTest.cs: Improved DeriveParameters test.
index 27917e42c3a1992c7444977c95ad1c5671aac812..d11854617e6e904966f01ddc564df9496c223b64 100644 (file)
@@ -145,25 +145,18 @@ namespace MonoTests.System.Data.SqlClient
                [Test] // bug #341743
                public void Dispose_Connection_Disposed ()
                {
-                       IDbConnection conn = ConnectionManager.Singleton.Connection;
+                       conn = (SqlConnection) ConnectionManager.Singleton.Connection;
                        ConnectionManager.Singleton.OpenConnection ();
 
-                       IDbCommand cmd = null;
-                       try {
-                               cmd = conn.CreateCommand ();
-                               cmd.CommandText = "SELECT 'a'";
-                               cmd.ExecuteNonQuery ();
+                       cmd = conn.CreateCommand ();
+                       cmd.CommandText = "SELECT 'a'";
+                       cmd.ExecuteNonQuery ();
 
-                               conn.Dispose ();
+                       conn.Dispose ();
 
-                               Assert.AreSame (conn, cmd.Connection, "#1");
-                               cmd.Dispose ();
-                               Assert.AreSame (conn, cmd.Connection, "#2");
-                       } finally {
-                               if (cmd != null)
-                                       cmd.Dispose ();
-                               ConnectionManager.Singleton.CloseConnection ();
-                       }
+                       Assert.AreSame (conn, cmd.Connection, "#1");
+                       cmd.Dispose ();
+                       Assert.AreSame (conn, cmd.Connection, "#2");
                }
 
                [Test]
@@ -199,7 +192,7 @@ namespace MonoTests.System.Data.SqlClient
                                Assert.AreEqual ((byte) 15, ex.Class, "#B3");
                                Assert.IsNull (ex.InnerException, "#B4");
                                Assert.IsNotNull (ex.Message, "#B5");
-                               Assert.IsTrue (ex.Message.IndexOf ("'from'") != -1, "#B6");
+                               Assert.IsTrue (ex.Message.IndexOf ("'from'") != -1, "#B6:"+ ex.Message);
                                Assert.AreEqual (156, ex.Number, "#B7");
                                Assert.AreEqual ((byte) 1, ex.State, "#B8");
                        }
@@ -268,6 +261,67 @@ namespace MonoTests.System.Data.SqlClient
                        }
                }
 
+               [Test]
+               public void ExecuteScalar_CommandText_Empty ()
+               {
+                       conn = (SqlConnection) ConnectionManager.Singleton.Connection;
+                       ConnectionManager.Singleton.OpenConnection ();
+
+                       cmd = conn.CreateCommand ();
+
+                       try {
+                               cmd.ExecuteScalar ();
+                               Assert.Fail ("#A1");
+                       } catch (InvalidOperationException ex) {
+                               // ExecuteScalar: CommandText property
+                               // has not been initialized
+                               Assert.AreEqual (typeof (InvalidOperationException), ex.GetType (), "#A2");
+                               Assert.IsNull (ex.InnerException, "#A3");
+                               Assert.IsNotNull (ex.Message, "#A4");
+#if NET_2_0
+                               Assert.IsTrue (ex.Message.StartsWith ("ExecuteScalar"), "#A5:" + ex.Message);
+#else
+                               Assert.IsTrue (ex.Message.StartsWith ("ExecuteReader"), "#A5:" + ex.Message);
+#endif
+                       }
+
+                       cmd.CommandText = string.Empty;
+
+                       try {
+                               cmd.ExecuteScalar ();
+                               Assert.Fail ("#B1");
+                       } catch (InvalidOperationException ex) {
+                               // ExecuteScalar: CommandText property
+                               // has not been initialized
+                               Assert.AreEqual (typeof (InvalidOperationException), ex.GetType (), "#B2");
+                               Assert.IsNull (ex.InnerException, "#B3");
+                               Assert.IsNotNull (ex.Message, "#B4");
+#if NET_2_0
+                               Assert.IsTrue (ex.Message.StartsWith ("ExecuteScalar"), "#B5:" + ex.Message);
+#else
+                               Assert.IsTrue (ex.Message.StartsWith ("ExecuteReader"), "#B5:" + ex.Message);
+#endif
+                       }
+
+                       cmd.CommandText = null;
+
+                       try {
+                               cmd.ExecuteScalar ();
+                               Assert.Fail ("#C1");
+                       } catch (InvalidOperationException ex) {
+                               // ExecuteScalar: CommandText property
+                               // has not been initialized
+                               Assert.AreEqual (typeof (InvalidOperationException), ex.GetType (), "#C2");
+                               Assert.IsNull (ex.InnerException, "#C3");
+                               Assert.IsNotNull (ex.Message, "#C4");
+#if NET_2_0
+                               Assert.IsTrue (ex.Message.StartsWith ("ExecuteScalar"), "#C5:" + ex.Message);
+#else
+                               Assert.IsTrue (ex.Message.StartsWith ("ExecuteReader"), "#C5:" + ex.Message);
+#endif
+                       }
+               }
+
                [Test]
                public void ExecuteScalar_Connection_PendingTransaction ()
                {
@@ -315,7 +369,7 @@ namespace MonoTests.System.Data.SqlClient
                                Assert.AreEqual ((byte) 16, ex.Class, "#3");
                                Assert.IsNull (ex.InnerException, "#4");
                                Assert.IsNotNull (ex.Message, "#5");
-                               Assert.IsTrue (ex.Message.IndexOf ("'InvalidQuery'") != -1, "#6");
+                               Assert.IsTrue (ex.Message.IndexOf ("'InvalidQuery'") != -1, "#6:" + ex.Message);
                                Assert.AreEqual (2812, ex.Number, "#7");
                                Assert.AreEqual ((byte) 62, ex.State, "#8");
                        }
@@ -539,7 +593,7 @@ namespace MonoTests.System.Data.SqlClient
                                Assert.AreEqual ((byte) 16, ex.Class, "#A3");
                                Assert.IsNull (ex.InnerException, "#A4");
                                Assert.IsNotNull (ex.Message, "#A5");
-                               Assert.IsTrue (ex.Message.IndexOf ("'id1'") != -1, "#A6");
+                               Assert.IsTrue (ex.Message.IndexOf ("'id1'") != -1, "#A6:" + ex.Message);
                                Assert.AreEqual (207, ex.Number, "#A7");
                                Assert.AreEqual ((byte) 1, ex.State, "#A8");
                        }
@@ -766,7 +820,7 @@ namespace MonoTests.System.Data.SqlClient
                                Assert.AreEqual ((byte) 16, ex.Class, "#3");
                                Assert.IsNull (ex.InnerException, "#4");
                                Assert.IsNotNull (ex.Message, "#5");
-                               Assert.IsTrue (ex.Message.IndexOf ("'InvalidQuery'") != -1, "#6");
+                               Assert.IsTrue (ex.Message.IndexOf ("'InvalidQuery'") != -1, "#6:" + ex.Message);
                                Assert.AreEqual (2812, ex.Number, "#7");
                                Assert.AreEqual ((byte) 62, ex.State, "#8");
                        }
@@ -1514,9 +1568,17 @@ namespace MonoTests.System.Data.SqlClient
                                try {
                                        cmd.ExecuteNonQuery ();
                                        Assert.Fail ("#B1");
-                               } catch (SqlException) {
+                               } catch (SqlException ex) {
                                        // Procedure or Function '#sp_temp_insert_employee'
                                        // expects parameter '@fname', which was not supplied
+                                       Assert.AreEqual (typeof (SqlException), ex.GetType (), "#B2");
+                                       Assert.AreEqual ((byte) 16, ex.Class, "#B3");
+                                       Assert.IsNull (ex.InnerException, "#B4");
+                                       Assert.IsNotNull (ex.Message, "#B5");
+                                       Assert.IsTrue (ex.Message.IndexOf ("#sp_temp_insert_employee") != -1, "#B6:"+ ex.Message);
+                                       Assert.IsTrue (ex.Message.IndexOf ("'@fname'") != -1, "#B7:" + ex.Message);
+                                       Assert.AreEqual (201, ex.Number, "#B8");
+                                       Assert.AreEqual ((byte) 4, ex.State, "#B9");
                                }
 #endif
                        } finally {
@@ -2408,6 +2470,57 @@ namespace MonoTests.System.Data.SqlClient
                        }
                }
 
+               [Test] // bug #470579
+               public void OutputParamTest ()
+               {
+                       SqlParameter newId, id;
+
+                       conn = (SqlConnection) ConnectionManager.Singleton.Connection;
+                       ConnectionManager.Singleton.OpenConnection ();
+
+                       cmd = conn.CreateCommand ();
+                       cmd.CommandText = "set @NewId=@Id + 2";
+                       cmd.CommandType = CommandType.Text;
+                       newId = cmd.Parameters.Add ("@NewId", SqlDbType.Int);
+                       newId.Direction = ParameterDirection.Output;
+                       id = cmd.Parameters.Add ("@Id", SqlDbType.Int);
+                       id.Value = 3;
+                       cmd.ExecuteNonQuery ();
+
+                       Assert.AreEqual (5, newId.Value, "#A1");
+                       Assert.AreEqual (3, id.Value, "#A2");
+
+                       cmd = conn.CreateCommand ();
+                       cmd.CommandText = "set @NewId=@Id + 2";
+                       cmd.CommandType = CommandType.Text;
+                       newId = cmd.Parameters.Add ("NewId", SqlDbType.Int);
+                       newId.Direction = ParameterDirection.Output;
+                       id = cmd.Parameters.Add ("Id", SqlDbType.Int);
+                       id.Value = 6;
+#if NET_2_0
+                       cmd.ExecuteNonQuery ();
+
+                       Assert.AreEqual (8, newId.Value, "#B1");
+                       Assert.AreEqual (6, id.Value, "#B2");
+#else
+                       try {
+                               cmd.ExecuteNonQuery ();
+                               Assert.Fail ("#B1");
+                       } catch (SqlException ex) {
+                               // Incorrect syntax near 'NewId'.
+                               // Must declare the scalar variable "@Id"
+                               Assert.AreEqual (typeof (SqlException), ex.GetType (), "#B2");
+                               Assert.AreEqual ((byte) 15, ex.Class, "#B3");
+                               Assert.IsNull (ex.InnerException, "#B4");
+                               Assert.IsNotNull (ex.Message, "#B5");
+                               Assert.IsTrue (ex.Message.IndexOf ("'NewId'") != -1, "#B6:" + ex.Message);
+                               Assert.IsTrue (ex.Message.IndexOf ("\"@Id\"") != -1, "#B7:" + ex.Message);
+                               Assert.AreEqual (102, ex.Number, "#B8");
+                               Assert.AreEqual ((byte) 1, ex.State, "#B9");
+                       }
+#endif
+               }
+
                [Test]
                public void SmallMoney_Overflow_Max ()
                {