diff options
author | Gert Driesen <drieseng@users.sourceforge.net> | 2009-01-19 00:06:07 +0300 |
---|---|---|
committer | Gert Driesen <drieseng@users.sourceforge.net> | 2009-01-19 00:06:07 +0300 |
commit | 4efbca7c6de5732228ffd54a22c0e948ea4fb580 (patch) | |
tree | 01aefa7ca425c1b384e6f570cb6035b8abc3c7ca /mcs/class/System.Data/Test | |
parent | 36453ac9b008bed4411cac8cc13628e2161f3e31 (diff) |
* DataReaderTest.cs: Added indexer tests. Added/improved GetBytes
tests.
* IDbCommandTest.cs: Added test for ExecuteReader with CommandText
that is not initialized. Improved ExecuteScalar test.
svn path=/trunk/mcs/; revision=123750
Diffstat (limited to 'mcs/class/System.Data/Test')
3 files changed, 426 insertions, 25 deletions
diff --git a/mcs/class/System.Data/Test/ProviderTests/ProviderIndependant/ChangeLog b/mcs/class/System.Data/Test/ProviderTests/ProviderIndependant/ChangeLog index 11b7fe826b6..24e930d7180 100644 --- a/mcs/class/System.Data/Test/ProviderTests/ProviderIndependant/ChangeLog +++ b/mcs/class/System.Data/Test/ProviderTests/ProviderIndependant/ChangeLog @@ -1,3 +1,10 @@ +2009-01-18 Gert Driesen <drieseng@users.sourceforge.net> + + * DataReaderTest.cs: Added indexer tests. Added/improved GetBytes + tests. + * IDbCommandTest.cs: Added test for ExecuteReader with CommandText + that is not initialized. Improved ExecuteScalar test. + 2009-01-03 Gert Driesen <drieseng@users.sourceforge.net> * DataReaderTest.cs: Added tests for GetValue. Improved test diff --git a/mcs/class/System.Data/Test/ProviderTests/ProviderIndependant/DataReaderTest.cs b/mcs/class/System.Data/Test/ProviderTests/ProviderIndependant/DataReaderTest.cs index 253c7b277d6..65147f1b473 100644 --- a/mcs/class/System.Data/Test/ProviderTests/ProviderIndependant/DataReaderTest.cs +++ b/mcs/class/System.Data/Test/ProviderTests/ProviderIndependant/DataReaderTest.cs @@ -540,7 +540,7 @@ namespace MonoTests.System.Data } [Test] - public void GetOrdinal_Name_DoesNotExist () + public void GetOrdinal_Name_NotFound () { IDataReader reader = null; @@ -686,6 +686,292 @@ namespace MonoTests.System.Data } } + [Test] // this [Int32] + public void Indexer1 () + { + IDataReader reader = null; + + try { + cmd.CommandText = "SELECT * FROM employee WHERE lname='kumar'"; + reader = cmd.ExecuteReader (); + Assert.IsTrue (reader.Read ()); + Assert.AreEqual (1, reader [0], "#0"); + Assert.AreEqual ("suresh", reader [1], "#1"); + Assert.AreEqual ("kumar", reader [2], "#2"); + Assert.AreEqual (new DateTime (1978, 8, 22), reader [3], "#3"); + Assert.AreEqual (new DateTime (2001, 3, 12), reader [4], "#4"); + Assert.AreEqual ("suresh@gmail.com", reader [5], "#5"); + } finally { + if (reader != null) + reader.Close (); + } + } + + [Test] // this [Int32] + public void Indexer1_Reader_Closed () + { + IDataReader reader = null; + + try { + cmd.CommandText = "select fname from employee"; + reader = cmd.ExecuteReader (); + reader.Read (); + reader.Close (); + + try { + object value = reader [0]; + Assert.Fail ("#A1:" + value); + } catch (InvalidOperationException ex) { + // No data exists for the row/column + Assert.AreEqual (typeof (InvalidOperationException), ex.GetType (), "#A2"); + Assert.IsNull (ex.InnerException, "#A3"); + Assert.IsNotNull (ex.Message, "#A4"); + } + + reader = cmd.ExecuteReader (); + reader.Close (); + + try { + object value = reader [0]; + Assert.Fail ("#B1:" + value); + } catch (InvalidOperationException ex) { + // No data exists for the row/column + Assert.AreEqual (typeof (InvalidOperationException), ex.GetType (), "#B2"); + Assert.IsNull (ex.InnerException, "#B3"); + Assert.IsNotNull (ex.Message, "#B4"); + } + } finally { + if (reader != null) + reader.Close (); + } + } + + [Test] // this [Int32] + public void Indexer1_Reader_NoData () + { + IDataReader reader = null; + + try { + cmd.CommandText = "select fname from employee WHERE lname='kumar'"; + reader = cmd.ExecuteReader (); + try { + object value = reader [0]; + Assert.Fail ("#A1:" + value); + } catch (InvalidOperationException ex) { + // No data exists for the row/column + Assert.AreEqual (typeof (InvalidOperationException), ex.GetType (), "#A2"); + Assert.IsNull (ex.InnerException, "#A3"); + Assert.IsNotNull (ex.Message, "#A4"); + } + + Assert.IsTrue (reader.Read ()); + Assert.IsFalse (reader.Read ()); + + try { + object value = reader [0]; + Assert.Fail ("#B1:" + value); + } catch (InvalidOperationException ex) { + // No data exists for the row/column + Assert.AreEqual (typeof (InvalidOperationException), ex.GetType (), "#B2"); + Assert.IsNull (ex.InnerException, "#B3"); + Assert.IsNotNull (ex.Message, "#B4"); + } + } finally { + if (reader != null) + reader.Close (); + } + } + + [Test] // this [Int32] + public void Indexer1_Value_Invalid () + { + IDataReader reader = null; + + try { + cmd.CommandText = "select fname from employee"; + reader = cmd.ExecuteReader (); + Assert.IsTrue (reader.Read ()); + try { + object value = reader [-1]; + Assert.Fail ("#A1:" + value); + } catch (IndexOutOfRangeException ex) { + // Index was outside the bounds of the array + Assert.AreEqual (typeof (IndexOutOfRangeException), ex.GetType (), "#A2"); + Assert.IsNull (ex.InnerException, "#A3"); + Assert.IsNotNull (ex.Message, "#A4"); + } + + try { + object value = reader [1]; + Assert.Fail ("#B1:" + value); + } catch (IndexOutOfRangeException ex) { + // Index was outside the bounds of the array + Assert.AreEqual (typeof (IndexOutOfRangeException), ex.GetType (), "#B2"); + Assert.IsNull (ex.InnerException, "#B3"); + Assert.IsNotNull (ex.Message, "#B4"); + } + } finally { + if (reader != null) + reader.Close (); + } + } + + [Test] // this [String] + public void Indexer2 () + { + IDataReader reader = null; + + try { + cmd.CommandText = "SELECT * FROM employee WHERE lname='kumar'"; + reader = cmd.ExecuteReader (); + Assert.IsTrue (reader.Read ()); + Assert.AreEqual (1, reader ["id"], "id"); + Assert.AreEqual ("suresh", reader ["fname"], "fname"); + Assert.AreEqual ("kumar", reader ["lname"], "lname"); + Assert.AreEqual (new DateTime (1978, 8, 22), reader ["doB"], "doB"); + Assert.AreEqual (new DateTime (2001, 3, 12), reader ["doj"], "doj"); + Assert.AreEqual ("suresh@gmail.com", reader ["EmaiL"], "EmaiL"); + Assert.AreEqual (1, reader ["iD"], "iD"); + Assert.AreEqual ("suresh@gmail.com", reader ["eMail"], "eMail"); + } finally { + if (reader != null) + reader.Close (); + } + } + + [Test] // this [String] + public void Indexer2_Reader_Closed () + { + IDataReader reader = null; + + try { + cmd.CommandText = "select fname from employee"; + reader = cmd.ExecuteReader (); + reader.Read (); + reader.Close (); + + try { + object value = reader ["fname"]; + Assert.Fail ("#A1:" + value); + } catch (InvalidOperationException ex) { + // No data exists for the row/column + Assert.AreEqual (typeof (InvalidOperationException), ex.GetType (), "#A2"); + Assert.IsNull (ex.InnerException, "#A3"); + Assert.IsNotNull (ex.Message, "#A4"); + } + + reader = cmd.ExecuteReader (); + reader.Close (); + + try { + object value = reader ["fname"]; + Assert.Fail ("#B1:" + value); + } catch (InvalidOperationException ex) { + // No data exists for the row/column + Assert.AreEqual (typeof (InvalidOperationException), ex.GetType (), "#B2"); + Assert.IsNull (ex.InnerException, "#B3"); + Assert.IsNotNull (ex.Message, "#B4"); + } + } finally { + if (reader != null) + reader.Close (); + } + } + + [Test] // this [String] + public void Indexer2_Reader_NoData () + { + IDataReader reader = null; + + try { + cmd.CommandText = "select fname from employee WHERE lname='kumar'"; + reader = cmd.ExecuteReader (); + + try { + object value = reader ["fname"]; + Assert.Fail ("#A1:" + value); + } catch (InvalidOperationException ex) { + // No data exists for the row/column + Assert.AreEqual (typeof (InvalidOperationException), ex.GetType (), "#A2"); + Assert.IsNull (ex.InnerException, "#A3"); + Assert.IsNotNull (ex.Message, "#A4"); + } + + Assert.IsTrue (reader.Read ()); + Assert.IsFalse (reader.Read ()); + + try { + object value = reader ["fname"]; + Assert.Fail ("#B1:" + value); + } catch (InvalidOperationException ex) { + // No data exists for the row/column + Assert.AreEqual (typeof (InvalidOperationException), ex.GetType (), "#B2"); + Assert.IsNull (ex.InnerException, "#B3"); + Assert.IsNotNull (ex.Message, "#B4"); + } + } finally { + if (reader != null) + reader.Close (); + } + } + + [Test] // this [String] + public void Indexer2_Value_NotFound () + { + IDataReader reader = null; + + try { + cmd.CommandText = "select fname from employee"; + reader = cmd.ExecuteReader (); + Assert.IsTrue (reader.Read ()); + try { + object value = reader ["address"]; + Assert.Fail ("#A1:" + value); + } catch (IndexOutOfRangeException ex) { + // Index was outside the bounds of the array + Assert.AreEqual (typeof (IndexOutOfRangeException), ex.GetType (), "#A2"); + Assert.IsNull (ex.InnerException, "#A3"); + Assert.IsNotNull (ex.Message, "#A4"); + } + + try { + object value = reader [string.Empty]; + Assert.Fail ("#B1:" + value); + } catch (IndexOutOfRangeException ex) { + // Index was outside the bounds of the array + Assert.AreEqual (typeof (IndexOutOfRangeException), ex.GetType (), "#B2"); + Assert.IsNull (ex.InnerException, "#B3"); + Assert.IsNotNull (ex.Message, "#B4"); + } + } finally { + if (reader != null) + reader.Close (); + } + } + + [Test] // this [String] + public void Indexer2_Value_Null () + { + IDataReader reader = null; + + try { + cmd.CommandText = "select fname from employee"; + reader = cmd.ExecuteReader (); + try { + object value = reader [(string) null]; + Assert.Fail ("#1:" + value); + } catch (ArgumentNullException ex) { + Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#2"); + Assert.IsNull (ex.InnerException, "#3"); + Assert.IsNotNull (ex.Message, "#4"); + Assert.AreEqual ("fieldName", ex.ParamName, "#5"); + } + } finally { + if (reader != null) + reader.Close (); + } + } + [Test] public void IsClosed_Command_Disposed () { @@ -1828,12 +2114,10 @@ namespace MonoTests.System.Data [Test] public void GetBytes () { + byte [] expected = new byte [] { 0x32, 0x56, 0x00, 0x44, 0x22 }; cmd.CommandText = "SELECT type_blob FROM binary_family where id = 1"; - CommandBehavior behavior; - - behavior = CommandBehavior.SingleResult | CommandBehavior.SequentialAccess; - using (IDataReader reader = cmd.ExecuteReader (behavior)) { + using (IDataReader reader = cmd.ExecuteReader (CommandBehavior.SequentialAccess)) { Assert.IsTrue (reader.Read (), "#A1"); // Get By Parts for the column blob @@ -1850,12 +2134,11 @@ namespace MonoTests.System.Data count += ret; } while (count < totalsize); - Assert.AreEqual (5, count, "#A2"); - Assert.AreEqual (new byte [] { 0x32, 0x56, 0x00, 0x44, 0x22 }, val, "#A3"); + Assert.AreEqual (expected.Length, count, "#A2"); + Assert.AreEqual (expected, val, "#A3"); } - behavior = CommandBehavior.SingleResult; - using (IDataReader reader = cmd.ExecuteReader (behavior)) { + using (IDataReader reader = cmd.ExecuteReader ()) { Assert.IsTrue (reader.Read (), "#B1"); // Get By Parts for the column blob @@ -1873,20 +2156,40 @@ namespace MonoTests.System.Data count += ret; } while (count < totalsize); - Assert.AreEqual (5, count, "#B2"); - Assert.AreEqual (new byte [] { 0x32, 0x56, 0x00, 0x44, 0x22 }, val, "#B3"); + Assert.AreEqual (expected.Length, count, "#B2"); + Assert.AreEqual (expected, val, "#B3"); } - behavior = CommandBehavior.SingleResult; - using (IDataReader reader = cmd.ExecuteReader (behavior)) { - Assert.IsTrue (reader.Read (), "#D1"); + // buffer size > (buffer offset + length) > remaining data + using (IDataReader reader = cmd.ExecuteReader (CommandBehavior.SequentialAccess)) { + Assert.IsTrue (reader.Read ()); long totalsize = reader.GetBytes (0, 0, null, 0, 0); + byte [] val = new byte [totalsize + 5]; + int buffer_offset = 3; - byte [] val = new byte [totalsize]; - long ret = reader.GetBytes (0, 0L, val, 0, (int) (totalsize * 2)); - Assert.AreEqual (totalsize, ret, "#D2"); - Assert.AreEqual (new byte [] { 0x32, 0x56, 0x00, 0x44, 0x22 }, val, "#D3"); + long ret = reader.GetBytes (0, 0, val, buffer_offset, (int) totalsize); + Assert.AreEqual (expected.Length, ret, "#C1"); + for (int i = 0; i < buffer_offset; i++) + Assert.AreEqual (0x00, val [i], "#C2:" + i); + for (int i = 0; i < totalsize; i++) + Assert.AreEqual (expected [i], val [buffer_offset + i], "#C3:" + i); + } + + // buffer size > (buffer offset + length) > remaining data + using (IDataReader reader = cmd.ExecuteReader ()) { + Assert.IsTrue (reader.Read ()); + + long totalsize = reader.GetBytes (0, 0, null, 0, 0); + byte [] val = new byte [totalsize + 5]; + int buffer_offset = 3; + + long ret = reader.GetBytes (0, 0, val, buffer_offset, (int) totalsize); + Assert.AreEqual (expected.Length, ret, "#D1"); + for (int i = 0; i < buffer_offset; i++) + Assert.AreEqual (0x00, val [i], "#D2:" + i); + for (int i = 0; i < totalsize; i++) + Assert.AreEqual (expected [i], val [buffer_offset + i], "#D3:" + i); } /* FIXME: dataIndex is currently ignored */ @@ -1985,7 +2288,7 @@ namespace MonoTests.System.Data using (IDataReader reader = cmd.ExecuteReader (CommandBehavior.SequentialAccess)) { Assert.IsTrue (reader.Read (), "#E1"); - Assert.AreEqual (5, reader.GetBytes (0, 5, null, 3, 4), "#E2"); + Assert.AreEqual (5, reader.GetBytes (0, 5, null, 3, 8), "#E2"); Assert.IsTrue (reader.Read (), "#F1"); Assert.AreEqual (275, reader.GetBytes (0, 5, null, 3, 4), "#F2"); @@ -2055,7 +2358,7 @@ namespace MonoTests.System.Data using (IDataReader reader = cmd.ExecuteReader ()) { Assert.IsTrue (reader.Read (), "#M1"); - Assert.AreEqual (5, reader.GetBytes (0, 5, null, 3, 4), "#M2"); + Assert.AreEqual (5, reader.GetBytes (0, 5, null, 3, 8), "#M2"); Assert.IsTrue (reader.Read (), "#N1"); Assert.AreEqual (275, reader.GetBytes (0, 5, null, 3, 4), "#N2"); @@ -2093,6 +2396,48 @@ namespace MonoTests.System.Data } [Test] + public void GetBytes_DataIndex_Overflow () + { + cmd.CommandText = "SELECT type_blob FROM binary_family where id = 2"; + + using (IDataReader reader = cmd.ExecuteReader (CommandBehavior.SequentialAccess)) { + Assert.IsTrue (reader.Read ()); + + long totalsize = reader.GetBytes (0, 0, null, 0, 0); + byte [] val = new byte [totalsize * 2]; + long ret; + + // dataIndex > total size, length = 0 + ret = reader.GetBytes (0, totalsize + 5, val, 0, 0); + Assert.AreEqual (0, ret, "#C1"); + // dataIndex > total size, length < total size + ret = reader.GetBytes (0, totalsize + 5, val, 0, 5); + Assert.AreEqual (0, ret, "#C2"); + // dataIndex > total size, length > total size + ret = reader.GetBytes (0, totalsize + 5, val, 0, (int) (totalsize + 5)); + Assert.AreEqual (0, ret, "#C3"); + } + + using (IDataReader reader = cmd.ExecuteReader ()) { + Assert.IsTrue (reader.Read ()); + + long totalsize = reader.GetBytes (0, 0, null, 0, 0); + byte [] val = new byte [totalsize * 2]; + long ret; + + // dataIndex > total size, length = 0 + ret = reader.GetBytes (0, totalsize + 5, val, 0, 0); + Assert.AreEqual (0, ret, "#B1"); + // dataIndex > total size, length < total size + ret = reader.GetBytes (0, totalsize + 5, val, 0, 5); + Assert.AreEqual (0, ret, "#B2"); + // dataIndex > total size, length > total size + ret = reader.GetBytes (0, totalsize + 5, val, 0, (int) (totalsize + 5)); + Assert.AreEqual (0, ret, "#B3"); + } + } + + [Test] public void GetBytes_DataIndex_OffSet () { cmd.CommandText = "SELECT type_blob FROM binary_family where id = 2"; diff --git a/mcs/class/System.Data/Test/ProviderTests/ProviderIndependant/IDbCommandTest.cs b/mcs/class/System.Data/Test/ProviderTests/ProviderIndependant/IDbCommandTest.cs index ce392efd6f5..79903b490a9 100644 --- a/mcs/class/System.Data/Test/ProviderTests/ProviderIndependant/IDbCommandTest.cs +++ b/mcs/class/System.Data/Test/ProviderTests/ProviderIndependant/IDbCommandTest.cs @@ -73,7 +73,7 @@ namespace MonoTests.System.Data Assert.AreEqual (typeof (InvalidOperationException), ex.GetType (), "#A2"); Assert.IsNull (ex.InnerException, "#A3"); Assert.IsNotNull (ex.Message, "#A4"); - Assert.IsTrue (ex.Message.IndexOf ("ExecuteNonQuery") != -1, "#A5:" + ex.Message); + Assert.IsTrue (ex.Message.StartsWith ("ExecuteNonQuery"), "#A5:" + ex.Message); } cmd.CommandText = string.Empty; @@ -87,7 +87,7 @@ namespace MonoTests.System.Data Assert.AreEqual (typeof (InvalidOperationException), ex.GetType (), "#B2"); Assert.IsNull (ex.InnerException, "#B3"); Assert.IsNotNull (ex.Message, "#B4"); - Assert.IsTrue (ex.Message.IndexOf ("ExecuteNonQuery") != -1, "#B5:" + ex.Message); + Assert.IsTrue (ex.Message.StartsWith ("ExecuteNonQuery"), "#B5:" + ex.Message); } cmd.CommandText = null; @@ -101,7 +101,51 @@ namespace MonoTests.System.Data Assert.AreEqual (typeof (InvalidOperationException), ex.GetType (), "#C2"); Assert.IsNull (ex.InnerException, "#C3"); Assert.IsNotNull (ex.Message, "#C4"); - Assert.IsTrue (ex.Message.IndexOf ("ExecuteNonQuery") != -1, "#C5:" + ex.Message); + Assert.IsTrue (ex.Message.StartsWith ("ExecuteNonQuery"), "#C5:" + ex.Message); + } + } + + [Test] + public void ExecuteReader_CommandText_Empty () + { + try { + cmd.ExecuteReader (); + Assert.Fail ("#A1"); + } catch (InvalidOperationException ex) { + // ExecuteReader: CommandText property + // has not been initialized + Assert.AreEqual (typeof (InvalidOperationException), ex.GetType (), "#A2"); + Assert.IsNull (ex.InnerException, "#A3"); + Assert.IsNotNull (ex.Message, "#A4"); + Assert.IsTrue (ex.Message.StartsWith ("ExecuteReader"), "#A5:" + ex.Message); + } + + cmd.CommandText = string.Empty; + + try { + cmd.ExecuteReader (); + Assert.Fail ("#B1"); + } catch (InvalidOperationException ex) { + // ExecuteReader: CommandText property + // has not been initialized + Assert.AreEqual (typeof (InvalidOperationException), ex.GetType (), "#B2"); + Assert.IsNull (ex.InnerException, "#B3"); + Assert.IsNotNull (ex.Message, "#B4"); + Assert.IsTrue (ex.Message.StartsWith ("ExecuteReader"), "#B5:" + ex.Message); + } + + cmd.CommandText = null; + + try { + cmd.ExecuteReader (); + Assert.Fail ("#C1"); + } catch (InvalidOperationException ex) { + // ExecuteReader: CommandText property + // has not been initialized + Assert.AreEqual (typeof (InvalidOperationException), ex.GetType (), "#C2"); + Assert.IsNull (ex.InnerException, "#C3"); + Assert.IsNotNull (ex.Message, "#C4"); + Assert.IsTrue (ex.Message.StartsWith ("ExecuteReader"), "#C5:" + ex.Message); } } @@ -155,12 +199,17 @@ namespace MonoTests.System.Data } [Test] - public void ExecuteScalarTest () + public void ExecuteScalar () { cmd.CommandText = "select count(*) from employee where id < 3"; Assert.AreEqual (2, (int) Convert.ChangeType (cmd.ExecuteScalar (), typeof (int)), - "#1 there should be 2 records"); + "#1"); + cmd.Dispose (); + + cmd = conn.CreateCommand (); + cmd.CommandText = "select id from employee where id = 666"; + Assert.IsNull (cmd.ExecuteScalar (), "#2"); } } } |