Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mono/mono.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGert Driesen <drieseng@users.sourceforge.net>2009-01-05 00:45:09 +0300
committerGert Driesen <drieseng@users.sourceforge.net>2009-01-05 00:45:09 +0300
commita2589359cd01f47290eac86bcecc761bc55758c7 (patch)
tree017f5f8c44e3ec5a6b7ba3efd3042616d110011a /mcs/class/System.Data/Test
parent8f1133573205b8b7932162e205cd0711c863fdfe (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')
-rw-r--r--mcs/class/System.Data/Test/ProviderTests/System.Data.SqlClient/ChangeLog6
-rw-r--r--mcs/class/System.Data/Test/ProviderTests/System.Data.SqlClient/SqlCommandBuilderTest.cs149
-rw-r--r--mcs/class/System.Data/Test/ProviderTests/System.Data.SqlClient/SqlDataReaderTest.cs290
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 ";