diff options
author | Gert Driesen <drieseng@users.sourceforge.net> | 2009-01-05 00:45:09 +0300 |
---|---|---|
committer | Gert Driesen <drieseng@users.sourceforge.net> | 2009-01-05 00:45:09 +0300 |
commit | a2589359cd01f47290eac86bcecc761bc55758c7 (patch) | |
tree | 017f5f8c44e3ec5a6b7ba3efd3042616d110011a /mcs/class/System.Data/Test | |
parent | 8f1133573205b8b7932162e205cd0711c863fdfe (diff) |
* SqlCommandBuilderTest.cs: Improved tests to also check
behavior of RefreshSchema.
* SqlDataReaderTest.cs: Added tests for GetBytes.
svn path=/trunk/mcs/; revision=122398
Diffstat (limited to 'mcs/class/System.Data/Test')
3 files changed, 404 insertions, 41 deletions
diff --git a/mcs/class/System.Data/Test/ProviderTests/System.Data.SqlClient/ChangeLog b/mcs/class/System.Data/Test/ProviderTests/System.Data.SqlClient/ChangeLog index 5b4a66dc9b4..507346e9c33 100644 --- a/mcs/class/System.Data/Test/ProviderTests/System.Data.SqlClient/ChangeLog +++ b/mcs/class/System.Data/Test/ProviderTests/System.Data.SqlClient/ChangeLog @@ -1,3 +1,9 @@ +2009-01-04 Gert Driesen <drieseng@users.sourceforge.net> + + * SqlCommandBuilderTest.cs: Improved tests to also check + behavior of RefreshSchema. + * SqlDataReaderTest.cs: Added tests for GetBytes. + 2009-01-03 Gert Driesen <drieseng@users.sourceforge.net> * SqlCommandBuilderTest.cs: Improve Get*Command tests. diff --git a/mcs/class/System.Data/Test/ProviderTests/System.Data.SqlClient/SqlCommandBuilderTest.cs b/mcs/class/System.Data/Test/ProviderTests/System.Data.SqlClient/SqlCommandBuilderTest.cs index d8a1ffa51d6..b9a55a0bf38 100644 --- a/mcs/class/System.Data/Test/ProviderTests/System.Data.SqlClient/SqlCommandBuilderTest.cs +++ b/mcs/class/System.Data/Test/ProviderTests/System.Data.SqlClient/SqlCommandBuilderTest.cs @@ -76,11 +76,11 @@ namespace MonoTests.System.Data #endif Assert.AreSame (conn, cmd.Connection, "#A2"); AssertInsertParameters (cmd, false, "#A3:"); + Assert.AreSame (cmd, cb.GetInsertCommand (), "#A4"); - cb = new SqlCommandBuilder (da); + cb.RefreshSchema (); cb.QuotePrefix = "\""; cmd = cb.GetInsertCommand (); - #if NET_2_0 Assert.AreEqual ("INSERT INTO \"employee] (\"id], " + "\"fname], \"lname]) VALUES (@p1, @p2, @p3)", @@ -92,8 +92,9 @@ namespace MonoTests.System.Data #endif Assert.AreSame (conn, cmd.Connection, "#B2"); AssertInsertParameters (cmd, false, "#B3:"); + Assert.AreSame (cmd, cb.GetInsertCommand (), "#B4"); - cb = new SqlCommandBuilder (da); + cb.RefreshSchema (); #if NET_2_0 cb.QuoteSuffix = "\""; #else @@ -101,36 +102,17 @@ namespace MonoTests.System.Data #endif cmd = cb.GetInsertCommand (); #if NET_2_0 - Assert.AreEqual ("INSERT INTO [employee\" ([id\", " - + "[fname\", [lname\") VALUES (@p1, @p2, @p3)", + Assert.AreEqual ("INSERT INTO \"employee\" (\"id\", " + + "\"fname\", \"lname\") VALUES (@p1, @p2, @p3)", cmd.CommandText, "#C1"); #else - Assert.AreEqual ("INSERT INTO employeeŽ( idŽ , " + - "fnameŽ , lnameŽ ) VALUES ( @p1 , @p2 , @p3 )", + Assert.AreEqual ("INSERT INTO \"employeeŽ( \"idŽ , " + + "\"fnameŽ , \"lnameŽ ) VALUES ( @p1 , @p2 , @p3 )", cmd.CommandText, "#C1"); #endif Assert.AreSame (conn, cmd.Connection, "#C2"); AssertInsertParameters (cmd, false, "#C3"); - - cb = new SqlCommandBuilder (da); - cb.QuotePrefix = "\""; -#if NET_2_0 - cb.QuoteSuffix = "\""; -#else - cb.QuoteSuffix = "Ž"; -#endif - cmd = cb.GetInsertCommand (); -#if NET_2_0 - Assert.AreEqual ("INSERT INTO \"employee\" (\"id\", " + - "\"fname\", \"lname\") VALUES (@p1, @p2, @p3)", - cmd.CommandText, "#D1"); -#else - Assert.AreEqual ("INSERT INTO \"employeeŽ( \"idŽ , " + - "\"fnameŽ , \"lnameŽ ) VALUES ( @p1 , @p2 , @p3 )", - cmd.CommandText, "#D1"); -#endif - Assert.AreSame (conn, cmd.Connection, "#D2"); - AssertInsertParameters (cmd, false, "#D3:"); + Assert.AreSame (cmd, cb.GetInsertCommand (), "#C4"); } finally { if (cmd != null) cmd.Dispose (); @@ -254,17 +236,64 @@ namespace MonoTests.System.Data "[fname] = @p2, [lname] = @p3 WHERE (([id] = @p4) " + "AND ([fname] = @p5) AND ((@p6 = 1 " + "AND [lname] IS NULL) OR ([lname] = @p7)))", - cmd.CommandText, "#1"); + cmd.CommandText, "#A1"); #else Assert.AreEqual ("UPDATE employee SET id = @p1 , " + "fname = @p2 , lname = @p3 WHERE ( (id = @p4) " + "AND ((@p5 = 1 AND fname IS NULL) OR " + "(fname = @p6)) AND ((@p7 = 1 AND " + "lname IS NULL) OR (lname = @p8)) )", - cmd.CommandText, "#1"); + cmd.CommandText, "#A1"); #endif - Assert.AreSame (conn, cmd.Connection, "#2"); - AssertUpdateParameters (cmd, false, "#3:"); + Assert.AreSame (conn, cmd.Connection, "#A2"); + AssertUpdateParameters (cmd, false, "#A3:"); + Assert.AreSame (cmd, cb.GetUpdateCommand (), "#A4"); + + cb.RefreshSchema (); + cb.QuotePrefix = "\""; + cmd = cb.GetUpdateCommand (); +#if NET_2_0 + Assert.AreEqual ("UPDATE \"employee] SET \"id] = @p1, " + + "\"fname] = @p2, \"lname] = @p3 WHERE ((\"id] = @p4) " + + "AND (\"fname] = @p5) AND ((@p6 = 1 " + + "AND \"lname] IS NULL) OR (\"lname] = @p7)))", + cmd.CommandText, "#B1"); +#else + Assert.AreEqual ("UPDATE \"employee SET \"id = @p1 , " + + "\"fname = @p2 , \"lname = @p3 WHERE ( (\"id = @p4) " + + "AND ((@p5 = 1 AND \"fname IS NULL) OR " + + "(\"fname = @p6)) AND ((@p7 = 1 AND " + + "\"lname IS NULL) OR (\"lname = @p8)) )", + cmd.CommandText, "#B1"); +#endif + Assert.AreSame (conn, cmd.Connection, "#B2"); + AssertUpdateParameters (cmd, false, "#B3:"); + Assert.AreSame (cmd, cb.GetUpdateCommand (), "#B4"); + + cb.RefreshSchema (); +#if NET_2_0 + cb.QuoteSuffix = "\""; +#else + cb.QuoteSuffix = "Ž"; +#endif + cmd = cb.GetUpdateCommand (); +#if NET_2_0 + Assert.AreEqual ("UPDATE \"employee\" SET \"id\" = @p1, " + + "\"fname\" = @p2, \"lname\" = @p3 WHERE ((\"id\" = @p4) " + + "AND (\"fname\" = @p5) AND ((@p6 = 1 " + + "AND \"lname\" IS NULL) OR (\"lname\" = @p7)))", + cmd.CommandText, "#C1"); +#else + Assert.AreEqual ("UPDATE \"employeeŽ SET \"idŽ = @p1 , " + + "\"fnameŽ = @p2 , \"lnameŽ = @p3 WHERE ( (\"idŽ = @p4) " + + "AND ((@p5 = 1 AND \"fnameŽ IS NULL) OR " + + "(\"fnameŽ = @p6)) AND ((@p7 = 1 AND " + + "\"lnameŽ IS NULL) OR (\"lnameŽ = @p8)) )", + cmd.CommandText, "#C1"); +#endif + Assert.AreSame (conn, cmd.Connection, "#C2"); + AssertUpdateParameters (cmd, false, "#C3:"); + Assert.AreSame (cmd, cb.GetUpdateCommand (), "#C4"); } finally { if (cmd != null) cmd.Dispose (); @@ -622,16 +651,61 @@ namespace MonoTests.System.Data Assert.AreEqual ("DELETE FROM [employee] WHERE " + "(([id] = @p1) AND ([fname] = @p2) AND " + "((@p3 = 1 AND [lname] IS NULL) OR " + - "([lname] = @p4)))", cmd.CommandText, "#1"); + "([lname] = @p4)))", cmd.CommandText, "#A1"); #else Assert.AreEqual ("DELETE FROM employee WHERE ( " + "(id = @p1) AND ((@p2 = 1 AND fname IS NULL) " + "OR (fname = @p3)) AND ((@p4 = 1 AND " + "lname IS NULL) OR (lname = @p5)) )", - cmd.CommandText, "#1"); + cmd.CommandText, "#A1"); #endif - Assert.AreSame (conn, cmd.Connection, "#2"); - AssertDeleteParameters (cmd, false, "#3:"); + Assert.AreSame (conn, cmd.Connection, "#A2"); + AssertDeleteParameters (cmd, false, "#A3:"); + Assert.AreSame (cmd, cb.GetDeleteCommand (), "#A4"); + + cb.RefreshSchema (); + cb.QuotePrefix = "\""; + cmd = cb.GetDeleteCommand (); + +#if NET_2_0 + Assert.AreEqual ("DELETE FROM \"employee] WHERE " + + "((\"id] = @p1) AND (\"fname] = @p2) AND " + + "((@p3 = 1 AND \"lname] IS NULL) OR " + + "(\"lname] = @p4)))", cmd.CommandText, "#B1"); +#else + Assert.AreEqual ("DELETE FROM \"employee WHERE ( " + + "(\"id = @p1) AND ((@p2 = 1 AND \"fname IS NULL) " + + "OR (\"fname = @p3)) AND ((@p4 = 1 AND " + + "\"lname IS NULL) OR (\"lname = @p5)) )", + cmd.CommandText, "#B1"); +#endif + Assert.AreSame (conn, cmd.Connection, "#B2"); + AssertDeleteParameters (cmd, false, "#B3:"); + Assert.AreSame (cmd, cb.GetDeleteCommand (), "#B4"); + + cb.RefreshSchema (); +#if NET_2_0 + cb.QuoteSuffix = "\""; +#else + cb.QuoteSuffix = "Ž"; +#endif + cmd = cb.GetDeleteCommand (); + +#if NET_2_0 + Assert.AreEqual ("DELETE FROM \"employee\" WHERE " + + "((\"id\" = @p1) AND (\"fname\" = @p2) AND " + + "((@p3 = 1 AND \"lname\" IS NULL) OR " + + "(\"lname\" = @p4)))", cmd.CommandText, "#C1"); +#else + Assert.AreEqual ("DELETE FROM \"employeeŽ WHERE ( " + + "(\"idŽ = @p1) AND ((@p2 = 1 AND \"fnameŽ IS NULL) " + + "OR (\"fnameŽ = @p3)) AND ((@p4 = 1 AND " + + "\"lnameŽ IS NULL) OR (\"lnameŽ = @p5)) )", + cmd.CommandText, "#C1"); +#endif + Assert.AreSame (conn, cmd.Connection, "#C2"); + AssertDeleteParameters (cmd, false, "#C3:"); + Assert.AreSame (cmd, cb.GetDeleteCommand (), "#C4"); } finally { if (cmd != null) cmd.Dispose (); @@ -734,6 +808,7 @@ namespace MonoTests.System.Data "@Original_lname)))", cmd.CommandText, "#A1"); Assert.AreSame (conn, cmd.Connection, "#A2"); AssertDeleteParameters (cmd, true, "#A3:"); + Assert.AreSame (cmd, cb.GetDeleteCommand (true), "#A4"); cmd = cb.GetDeleteCommand (false); Assert.AreEqual ("DELETE FROM [employee] WHERE " + @@ -743,6 +818,7 @@ namespace MonoTests.System.Data "@Original_lname)))", cmd.CommandText, "#B1"); Assert.AreSame (conn, cmd.Connection, "#B2"); AssertDeleteParameters (cmd, true, "#B3:"); + Assert.AreSame (cmd, cb.GetDeleteCommand (false), "#B4"); cb = new SqlCommandBuilder (da); cmd = cb.GetDeleteCommand (false); @@ -752,6 +828,7 @@ namespace MonoTests.System.Data "([lname] = @p4)))", cmd.CommandText, "#C1"); Assert.AreSame (conn, cmd.Connection, "#C2"); AssertDeleteParameters (cmd, false, "#C3:"); + Assert.AreSame (cmd, cb.GetDeleteCommand (false), "#C4"); cmd = cb.GetDeleteCommand (true); Assert.AreEqual ("DELETE FROM [employee] WHERE " + @@ -761,7 +838,7 @@ namespace MonoTests.System.Data "@Original_lname)))", cmd.CommandText, "#D1"); Assert.AreSame (conn, cmd.Connection, "#D2"); AssertDeleteParameters (cmd, true, "#D3:"); - + Assert.AreSame (cmd, cb.GetDeleteCommand (false), "#D4"); } finally { if (cmd != null) cmd.Dispose (); diff --git a/mcs/class/System.Data/Test/ProviderTests/System.Data.SqlClient/SqlDataReaderTest.cs b/mcs/class/System.Data/Test/ProviderTests/System.Data.SqlClient/SqlDataReaderTest.cs index c6eb98b7ac6..db6ea6aecf3 100644 --- a/mcs/class/System.Data/Test/ProviderTests/System.Data.SqlClient/SqlDataReaderTest.cs +++ b/mcs/class/System.Data/Test/ProviderTests/System.Data.SqlClient/SqlDataReaderTest.cs @@ -464,9 +464,12 @@ namespace MonoTests.System.Data.SqlClient } #else try { - reader.GetBytes (0,0,null,0,0); + reader.GetBytes (0, 0, null, 0, 0); Assert.Fail ("#1"); - }catch (InvalidCastException) { + }catch (InvalidCastException ex) { + Assert.AreEqual (typeof (InvalidCastException), ex.GetType (), "#2"); + Assert.IsNull (ex.InnerException, "#3"); + Assert.AreEqual ((new InvalidCastException ()).Message, ex.Message, "#4"); } finally { reader.Close (); } @@ -807,6 +810,7 @@ namespace MonoTests.System.Data.SqlClient int offset = 0; long ret = 0; long count = 0; + do { ret = reader.GetBytes (0, offset, val, offset, 50); offset += (int) ret; @@ -819,10 +823,10 @@ namespace MonoTests.System.Data.SqlClient } [Test] - public void GetBytes_Binary () + public void GetBytes_Type_Binary () { - cmd.CommandText = "Select type_binary,type_varbinary,type_blob "; - cmd.CommandText += "from binary_family where id=1"; + cmd.CommandText = "Select type_binary, type_varbinary, " + + "type_blob from binary_family where id = 1"; reader = cmd.ExecuteReader (); reader.Read (); byte[] binary = (byte[])reader.GetValue (0); @@ -876,6 +880,282 @@ namespace MonoTests.System.Data.SqlClient } [Test] + public void GetBytes_Type_DateTime () + { + cmd.CommandText = "SELECT type_datetime FROM datetime_family where id = 1"; + + using (IDataReader reader = cmd.ExecuteReader (CommandBehavior.SequentialAccess)) { + Assert.IsTrue (reader.Read ()); + + try { + reader.GetBytes (0, 0, null, 0, 0); + Assert.Fail ("#A1"); + } catch (InvalidCastException ex) { + // Invalid attempt to GetBytes on column + // 'type_datetime'. + // The GetBytes function can only be used + // on columns of type Text, NText, or Image + Assert.AreEqual (typeof (InvalidCastException), ex.GetType (), "#A2"); + Assert.IsNull (ex.InnerException, "#A3"); + Assert.IsNotNull (ex.Message, "#A4"); + Assert.IsTrue (ex.Message.IndexOf ("'type_datetime'") != -1, "#A5:" + ex.Message); + Assert.IsTrue (ex.Message.IndexOf ("GetBytes") != -1, "#A6:" + ex.Message); + Assert.IsTrue (ex.Message.IndexOf ("Text") != -1, "#A7:" + ex.Message); + Assert.IsTrue (ex.Message.IndexOf ("NText") != -1, "#A8:" + ex.Message); + Assert.IsTrue (ex.Message.IndexOf ("Image") != -1, "#A9:" + ex.Message); + } + } + + using (IDataReader reader = cmd.ExecuteReader ()) { + Assert.IsTrue (reader.Read ()); + + try { + reader.GetBytes (0, 0, null, 0, 0); + Assert.Fail ("#B1"); + } catch (InvalidCastException ex) { + // Invalid attempt to GetBytes on column + // 'type_datetime'. + // The GetBytes function can only be used + // on columns of type Text, NText, or Image + Assert.AreEqual (typeof (InvalidCastException), ex.GetType (), "#B2"); + Assert.IsNull (ex.InnerException, "#B3"); + Assert.IsNotNull (ex.Message, "#B4"); + Assert.IsTrue (ex.Message.IndexOf ("'type_datetime'") != -1, "#B5:" + ex.Message); + Assert.IsTrue (ex.Message.IndexOf ("GetBytes") != -1, "#B6:" + ex.Message); + Assert.IsTrue (ex.Message.IndexOf ("Text") != -1, "#B7:" + ex.Message); + Assert.IsTrue (ex.Message.IndexOf ("NText") != -1, "#B8:" + ex.Message); + Assert.IsTrue (ex.Message.IndexOf ("Image") != -1, "#B9:" + ex.Message); + } + } + + cmd.CommandText = "SELECT type_datetime FROM datetime_family where id = 4"; + + using (IDataReader reader = cmd.ExecuteReader (CommandBehavior.SequentialAccess)) { + Assert.IsTrue (reader.Read ()); + + try { + reader.GetBytes (0, 0, null, 0, 0); + Assert.Fail ("#C1"); + } catch (InvalidCastException ex) { + // Invalid attempt to GetBytes on column + // 'type_datetime'. + // The GetBytes function can only be used + // on columns of type Text, NText, or Image + Assert.AreEqual (typeof (InvalidCastException), ex.GetType (), "#C2"); + Assert.IsNull (ex.InnerException, "#C3"); + Assert.IsNotNull (ex.Message, "#C4"); + Assert.IsTrue (ex.Message.IndexOf ("'type_datetime'") != -1, "#C5:" + ex.Message); + Assert.IsTrue (ex.Message.IndexOf ("GetBytes") != -1, "#C6:" + ex.Message); + Assert.IsTrue (ex.Message.IndexOf ("Text") != -1, "#C7:" + ex.Message); + Assert.IsTrue (ex.Message.IndexOf ("NText") != -1, "#C8:" + ex.Message); + Assert.IsTrue (ex.Message.IndexOf ("Image") != -1, "#C9:" + ex.Message); + } + } + + using (IDataReader reader = cmd.ExecuteReader ()) { + Assert.IsTrue (reader.Read ()); + + try { + reader.GetBytes (0, 0, null, 0, 0); + Assert.Fail ("#D1"); + } catch (InvalidCastException ex) { + // Invalid attempt to GetBytes on column + // 'type_datetime'. + // The GetBytes function can only be used + // on columns of type Text, NText, or Image + Assert.AreEqual (typeof (InvalidCastException), ex.GetType (), "#D2"); + Assert.IsNull (ex.InnerException, "#D3"); + Assert.IsNotNull (ex.Message, "#D4"); + Assert.IsTrue (ex.Message.IndexOf ("'type_datetime'") != -1, "#D5:" + ex.Message); + Assert.IsTrue (ex.Message.IndexOf ("GetBytes") != -1, "#D6:" + ex.Message); + Assert.IsTrue (ex.Message.IndexOf ("Text") != -1, "#D7:" + ex.Message); + Assert.IsTrue (ex.Message.IndexOf ("NText") != -1, "#D8:" + ex.Message); + Assert.IsTrue (ex.Message.IndexOf ("Image") != -1, "#D9:" + ex.Message); + } + } + } + + [Test] + public void GetBytes_Type_Text () + { + long len; + byte [] buffer; + byte [] expected; + + cmd.CommandText = "SELECT type_text FROM string_family order by id asc"; + + using (IDataReader reader = cmd.ExecuteReader (CommandBehavior.SequentialAccess)) { + expected = new byte [] { 0x74, 0x65, 0x78, + 0x74 }; + + Assert.IsTrue (reader.Read (), "#A1"); + len = reader.GetBytes (0, 0, null, 0, 0); + Assert.AreEqual (4, len, "#A2"); + buffer = new byte [len]; + len = reader.GetBytes (0, 0, buffer, 0, (int) len); + Assert.AreEqual (4, len, "#A3"); + Assert.AreEqual (expected, buffer, "#A4"); + + expected = new byte [] { 0x00, 0x00, 0x6f, 0x6e, + 0x67, 0x00 }; + + Assert.IsTrue (reader.Read (), "#B1"); + len = reader.GetBytes (0, 0, null, 0, 0); + Assert.AreEqual (270, len, "#B2"); + buffer = new byte [6]; + len = reader.GetBytes (0, 1, buffer, 2, 3); + Assert.AreEqual (3, len, "#B3"); + Assert.AreEqual (expected, buffer, "#B4"); + + expected = new byte [0]; + + Assert.IsTrue (reader.Read (), "#C1"); + len = reader.GetBytes (0, 0, null, 0, 0); + Assert.AreEqual (0, len, "#C2"); + buffer = new byte [len]; + len = reader.GetBytes (0, 0, buffer, 0, 0); + Assert.AreEqual (0, len, "#C3"); + Assert.AreEqual (expected, buffer, "#C4"); + + Assert.IsTrue (reader.Read (), "#D1"); +#if NET_2_0 + try { + reader.GetBytes (0, 0, null, 0, 0); + Assert.Fail ("#D2"); + } catch (SqlNullValueException) { + } +#else + len = reader.GetBytes (0, 0, null, 0, 0); + Assert.AreEqual (0, len, "#D2"); +#endif + } + + using (IDataReader reader = cmd.ExecuteReader ()) { + expected = new byte [] { 0x74, 0x65, 0x78, + 0x74 }; + + Assert.IsTrue (reader.Read (), "#E1"); +#if NET_2_0 + len = reader.GetBytes (0, 0, null, 0, 0); + Assert.AreEqual (4, len, "#E2"); + buffer = new byte [len]; + len = reader.GetBytes (0, 0, buffer, 0, (int) len); + Assert.AreEqual (4, len, "#E3"); + Assert.AreEqual (expected, buffer, "#E4"); +#else + try { + reader.GetBytes (0, 0, null, 0, 0); + Assert.Fail ("#E2"); + } catch (InvalidCastException ex) { + Assert.AreEqual (typeof (InvalidCastException), ex.GetType (), "#E3"); + Assert.IsNull (ex.InnerException, "#E4"); + Assert.AreEqual ((new InvalidCastException ()).Message, ex.Message, "#E5"); + } +#endif + + expected = new byte [] { 0x00, 0x00, 0x6f, 0x6e, + 0x67, 0x00 }; + + Assert.IsTrue (reader.Read (), "#F1"); +#if NET_2_0 + len = reader.GetBytes (0, 0, null, 0, 0); + Assert.AreEqual (270, len, "#F2"); + buffer = new byte [6]; + len = reader.GetBytes (0, 1, buffer, 2, 3); + Assert.AreEqual (3, len, "#F3"); + Assert.AreEqual (expected, buffer, "#F4"); +#else + try { + reader.GetBytes (0, 0, null, 0, 0); + Assert.Fail ("#F2"); + } catch (InvalidCastException ex) { + Assert.AreEqual (typeof (InvalidCastException), ex.GetType (), "#F3"); + Assert.IsNull (ex.InnerException, "#F4"); + Assert.AreEqual ((new InvalidCastException ()).Message, ex.Message, "#F5"); + } +#endif + + expected = new byte [0]; + + Assert.IsTrue (reader.Read (), "#G1"); +#if NET_2_0 + len = reader.GetBytes (0, 0, null, 0, 0); + Assert.AreEqual (0, len, "#G2"); + buffer = new byte [len]; + len = reader.GetBytes (0, 0, buffer, 0, 0); + Assert.AreEqual (0, len, "#G3"); + Assert.AreEqual (expected, buffer, "#G4"); +#else + try { + reader.GetBytes (0, 0, null, 0, 0); + Assert.Fail ("#G2"); + } catch (InvalidCastException ex) { + Assert.AreEqual (typeof (InvalidCastException), ex.GetType (), "#G3"); + Assert.IsNull (ex.InnerException, "#G4"); + Assert.AreEqual ((new InvalidCastException ()).Message, ex.Message, "#G5"); + } +#endif + + Assert.IsTrue (reader.Read (), "#H1"); +#if NET_2_0 + try { + reader.GetBytes (0, 0, new byte [0], 0, 0); + Assert.Fail ("#H2"); + } catch (NullReferenceException) { + } + try { + reader.GetBytes (0, 0, null, 0, 0); + Assert.Fail ("#H3"); + } catch (NullReferenceException) { + } +#else + try { + reader.GetBytes (0, 0, null, 0, 3); + Assert.Fail ("#H2"); + } catch (InvalidCastException ex) { + Assert.AreEqual (typeof (InvalidCastException), ex.GetType (), "#H3"); + Assert.IsNull (ex.InnerException, "#H4"); + Assert.AreEqual ((new InvalidCastException ()).Message, ex.Message, "#H5"); + } +#endif + } + } + + [Test] + public void GetChar () + { + cmd.CommandText = "SELECT type_char FROM string_family where id = 1"; + + using (IDataReader reader = cmd.ExecuteReader (CommandBehavior.SequentialAccess)) { + Assert.IsTrue (reader.Read ()); + + try { + reader.GetChar (0); + Assert.Fail ("#A1"); + } catch (NotSupportedException ex) { + Assert.AreEqual (typeof (NotSupportedException), ex.GetType (), "#A2"); + Assert.IsNull (ex.InnerException, "#A3"); + Assert.IsNotNull (ex.Message, "#A4"); + Assert.AreEqual ((new NotSupportedException ()).Message, ex.Message, "#A5"); + } + } + + using (IDataReader reader = cmd.ExecuteReader ()) { + Assert.IsTrue (reader.Read ()); + + try { + reader.GetChar (0); + Assert.Fail ("#B1"); + } catch (NotSupportedException ex) { + Assert.AreEqual (typeof (NotSupportedException), ex.GetType (), "#B2"); + Assert.IsNull (ex.InnerException, "#B3"); + Assert.IsNotNull (ex.Message, "#B4"); + Assert.AreEqual ((new NotSupportedException ()).Message, ex.Message, "#B5"); + } + } + } + + [Test] public void GetChars () { cmd.CommandText = "Select type_char, type_varchar,type_text, type_ntext "; |