2 // OdbcCommandTest.cs - NUnit Test Cases for testing
3 // System.Data.Odbc.OdbcCommand
6 // Gert Driesen (drieseng@users.sourceforge.net)
8 // Copyright (c) 2007 Gert Driesen
10 // Permission is hereby granted, free of charge, to any person obtaining
11 // a copy of this software and associated documentation files (the
12 // "Software"), to deal in the Software without restriction, including
13 // without limitation the rights to use, copy, modify, merge, publish,
14 // distribute, sublicense, and/or sell copies of the Software, and to
15 // permit persons to whom the Software is furnished to do so, subject to
16 // the following conditions:
18 // The above copyright notice and this permission notice shall be
19 // included in all copies or substantial portions of the Software.
21 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
22 // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
23 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
24 // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
25 // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
26 // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
27 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
32 using System.Data.Odbc;
34 using NUnit.Framework;
36 namespace MonoTests.System.Data.Odbc
39 public class OdbcCommandTest
41 const string COMMAND_TEXT = "SELECT * FROM Authors";
43 [Test] // OdbcCommand ()
44 public void Constructor1 ()
46 OdbcCommand cmd = new OdbcCommand ();
47 Assert.AreEqual (string.Empty, cmd.CommandText, "#1");
48 Assert.AreEqual (30, cmd.CommandTimeout, "#2");
49 Assert.AreEqual (CommandType.Text, cmd.CommandType, "#3");
50 Assert.IsNull (cmd.Connection, "#4");
51 Assert.IsNull (cmd.Container, "#5");
52 Assert.IsTrue (cmd.DesignTimeVisible, "#6");
53 Assert.IsNotNull (cmd.Parameters, "#7");
54 Assert.AreEqual (0, cmd.Parameters.Count, "#8");
55 Assert.IsNull (cmd.Site, "#9");
56 Assert.IsNull (cmd.Transaction, "#10");
57 Assert.AreEqual (UpdateRowSource.Both, cmd.UpdatedRowSource, "#11");
60 [Test] // OdbcCommand (String)
61 public void Constructor2 ()
63 OdbcCommand cmd = new OdbcCommand (COMMAND_TEXT);
64 Assert.AreEqual (COMMAND_TEXT, cmd.CommandText, "#A1");
65 Assert.AreEqual (30, cmd.CommandTimeout, "#A2");
66 Assert.AreEqual (CommandType.Text, cmd.CommandType, "#A3");
67 Assert.IsNull (cmd.Connection, "#A4");
68 Assert.IsNull (cmd.Container, "#A5");
69 Assert.IsTrue (cmd.DesignTimeVisible, "#A6");
70 Assert.IsNotNull (cmd.Parameters, "#A7");
71 Assert.AreEqual (0, cmd.Parameters.Count, "#A8");
72 Assert.IsNull (cmd.Site, "#A9");
73 Assert.IsNull (cmd.Transaction, "#A10");
74 Assert.AreEqual (UpdateRowSource.Both, cmd.UpdatedRowSource, "#A11");
76 cmd = new OdbcCommand ((string) null);
77 Assert.AreEqual (string.Empty, cmd.CommandText, "#B1");
78 Assert.AreEqual (30, cmd.CommandTimeout, "#B2");
79 Assert.AreEqual (CommandType.Text, cmd.CommandType, "#B3");
80 Assert.IsNull (cmd.Connection, "#B4");
81 Assert.IsNull (cmd.Container, "#B5");
82 Assert.IsTrue (cmd.DesignTimeVisible, "#B6");
83 Assert.IsNotNull (cmd.Parameters, "#B7");
84 Assert.AreEqual (0, cmd.Parameters.Count, "#B8");
85 Assert.IsNull (cmd.Site, "#B9");
86 Assert.IsNull (cmd.Transaction, "#B10");
87 Assert.AreEqual (UpdateRowSource.Both, cmd.UpdatedRowSource, "#B11");
90 [Test] // OdbcCommand (String, OdbcConnection)
91 public void Constructor3 ()
93 OdbcConnection conn = new OdbcConnection ();
96 cmd = new OdbcCommand (COMMAND_TEXT, conn);
97 Assert.AreEqual (COMMAND_TEXT, cmd.CommandText, "#A1");
98 Assert.AreEqual (30, cmd.CommandTimeout, "#A2");
99 Assert.AreEqual (CommandType.Text, cmd.CommandType, "#A3");
100 Assert.AreSame (conn, cmd.Connection, "#A4");
101 Assert.IsNull (cmd.Container, "#A5");
102 Assert.IsTrue (cmd.DesignTimeVisible, "#A6");
103 Assert.IsNotNull (cmd.Parameters, "#A7");
104 Assert.AreEqual (0, cmd.Parameters.Count, "#A8");
105 Assert.IsNull (cmd.Site, "#A9");
106 Assert.IsNull (cmd.Transaction, "#A10");
107 Assert.AreEqual (UpdateRowSource.Both, cmd.UpdatedRowSource, "#A11");
109 cmd = new OdbcCommand ((string) null, conn);
110 Assert.AreEqual (string.Empty, cmd.CommandText, "#B1");
111 Assert.AreEqual (30, cmd.CommandTimeout, "#B2");
112 Assert.AreEqual (CommandType.Text, cmd.CommandType, "#B3");
113 Assert.AreSame (conn, cmd.Connection, "#B4");
114 Assert.IsNull (cmd.Container, "#B5");
115 Assert.IsTrue (cmd.DesignTimeVisible, "#B6");
116 Assert.IsNotNull (cmd.Parameters, "#B7");
117 Assert.AreEqual (0, cmd.Parameters.Count, "#B8");
118 Assert.IsNull (cmd.Site, "#B9");
119 Assert.IsNull (cmd.Transaction, "#B10");
120 Assert.AreEqual (UpdateRowSource.Both, cmd.UpdatedRowSource, "#B11");
122 cmd = new OdbcCommand (COMMAND_TEXT, (OdbcConnection) null);
123 Assert.AreEqual (COMMAND_TEXT, cmd.CommandText, "#C1");
124 Assert.AreEqual (30, cmd.CommandTimeout, "#C2");
125 Assert.AreEqual (CommandType.Text, cmd.CommandType, "#C3");
126 Assert.IsNull (cmd.Connection, "#C4");
127 Assert.IsNull (cmd.Container, "#C5");
128 Assert.IsTrue (cmd.DesignTimeVisible, "#C6");
129 Assert.IsNotNull (cmd.Parameters, "#C7");
130 Assert.AreEqual (0, cmd.Parameters.Count, "#C8");
131 Assert.IsNull (cmd.Site, "#C9");
132 Assert.IsNull (cmd.Transaction, "#C10");
133 Assert.AreEqual (UpdateRowSource.Both, cmd.UpdatedRowSource, "#C11");
136 [Test] // OdbcCommand (String, OdbcConnection, OdbcTransaction)
137 public void Constructor4 ()
139 OdbcConnection conn = new OdbcConnection ();
142 cmd = new OdbcCommand (COMMAND_TEXT, conn, (OdbcTransaction) null);
143 Assert.AreEqual (COMMAND_TEXT, cmd.CommandText, "#A1");
144 Assert.AreEqual (30, cmd.CommandTimeout, "#A2");
145 Assert.AreEqual (CommandType.Text, cmd.CommandType, "#A3");
146 Assert.AreSame (conn, cmd.Connection, "#A4");
147 Assert.IsNull (cmd.Container, "#A5");
148 Assert.IsTrue (cmd.DesignTimeVisible, "#A6");
149 Assert.IsNotNull (cmd.Parameters, "#A7");
150 Assert.AreEqual (0, cmd.Parameters.Count, "#A8");
151 Assert.IsNull (cmd.Site, "#A9");
152 Assert.IsNull (cmd.Transaction, "#A10");
153 Assert.AreEqual (UpdateRowSource.Both, cmd.UpdatedRowSource, "#A11");
155 cmd = new OdbcCommand ((string) null, conn, (OdbcTransaction) null);
156 Assert.AreEqual (string.Empty, cmd.CommandText, "#B1");
157 Assert.AreEqual (30, cmd.CommandTimeout, "#B2");
158 Assert.AreEqual (CommandType.Text, cmd.CommandType, "#B3");
159 Assert.AreSame (conn, cmd.Connection, "#B4");
160 Assert.IsNull (cmd.Container, "#B5");
161 Assert.IsTrue (cmd.DesignTimeVisible, "#B6");
162 Assert.IsNotNull (cmd.Parameters, "#B7");
163 Assert.AreEqual (0, cmd.Parameters.Count, "#B8");
164 Assert.IsNull (cmd.Site, "#B9");
165 Assert.IsNull (cmd.Transaction, "#B10");
166 Assert.AreEqual (UpdateRowSource.Both, cmd.UpdatedRowSource, "#B11");
168 cmd = new OdbcCommand (COMMAND_TEXT, (OdbcConnection) null, (OdbcTransaction) null);
169 Assert.AreEqual (COMMAND_TEXT, cmd.CommandText, "#C1");
170 Assert.AreEqual (30, cmd.CommandTimeout, "#C2");
171 Assert.AreEqual (CommandType.Text, cmd.CommandType, "#C3");
172 Assert.IsNull (cmd.Connection, "#C4");
173 Assert.IsNull (cmd.Container, "#C5");
174 Assert.IsTrue (cmd.DesignTimeVisible, "#C6");
175 Assert.IsNotNull (cmd.Parameters, "#C7");
176 Assert.AreEqual (0, cmd.Parameters.Count, "#C8");
177 Assert.IsNull (cmd.Site, "#C9");
178 Assert.IsNull (cmd.Transaction, "#C10");
179 Assert.AreEqual (UpdateRowSource.Both, cmd.UpdatedRowSource, "#C11");
183 public void CommandText ()
185 OdbcCommand cmd = new OdbcCommand ();
186 cmd.CommandText = COMMAND_TEXT;
187 Assert.AreSame (COMMAND_TEXT, cmd.CommandText, "#1");
188 cmd.CommandText = null;
189 Assert.AreEqual (string.Empty, cmd.CommandText, "#2");
190 cmd.CommandText = COMMAND_TEXT;
191 Assert.AreSame (COMMAND_TEXT, cmd.CommandText, "#3");
192 cmd.CommandText = string.Empty;
193 Assert.AreEqual (string.Empty, cmd.CommandText, "#4");
197 public void CommandTimeout ()
199 OdbcCommand cmd = new OdbcCommand ();
200 cmd.CommandTimeout = 10;
201 Assert.AreEqual (10, cmd.CommandTimeout, "#1");
202 cmd.CommandTimeout = 25;
203 Assert.AreEqual (25, cmd.CommandTimeout, "#2");
204 cmd.CommandTimeout = 0;
205 Assert.AreEqual (0, cmd.CommandTimeout, "#3");
209 public void CommandTimeout_Value_Negative ()
211 OdbcCommand cmd = new OdbcCommand ();
213 cmd.CommandTimeout = -1;
215 } catch (ArgumentException ex) {
216 // Invalid CommandTimeout value -1; the value must be >= 0
217 Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#2");
218 Assert.IsNull (ex.InnerException, "#3");
219 Assert.IsNotNull (ex.Message, "#4");
220 Assert.AreEqual ("CommandTimeout", ex.ParamName, "#5");
225 public void CommandType_Value_Invalid ()
227 OdbcCommand cmd = new OdbcCommand ();
229 cmd.CommandType = (CommandType) (666);
231 } catch (ArgumentOutOfRangeException ex) {
232 // The CommandType enumeration value, 666, is invalid
233 Assert.AreEqual (typeof (ArgumentOutOfRangeException), ex.GetType (), "#2");
234 Assert.IsNull (ex.InnerException, "#3");
235 Assert.IsNotNull (ex.Message, "#4");
236 Assert.IsTrue (ex.Message.IndexOf ("666") != -1, "#5:" + ex.Message);
237 Assert.AreEqual ("CommandType", ex.ParamName, "#6");
242 public void Dispose ()
244 OdbcConnection conn = new OdbcConnection ();
245 OdbcCommand cmd = null;
248 cmd = conn.CreateCommand ();
249 cmd.CommandText = "SELECT 'a'";
250 cmd.CommandTimeout = 67;
251 cmd.CommandType = CommandType.StoredProcedure;
252 cmd.DesignTimeVisible = false;
253 cmd.Parameters.Add (new OdbcParameter ());
254 cmd.UpdatedRowSource = UpdateRowSource.OutputParameters;
258 Assert.AreEqual (string.Empty, cmd.CommandText, "CommandText");
259 Assert.AreEqual (67, cmd.CommandTimeout, "CommandTimeout");
260 Assert.AreEqual (CommandType.StoredProcedure, cmd.CommandType, "CommandType");
261 Assert.IsNull (cmd.Connection, "Connection");
262 Assert.IsFalse (cmd.DesignTimeVisible, "DesignTimeVisible");
263 Assert.IsNotNull (cmd.Parameters, "Parameters#1");
264 Assert.AreEqual (0, cmd.Parameters.Count, "Parameters#2");
265 Assert.IsNull (cmd.Transaction, "Transaction");
266 Assert.AreEqual (UpdateRowSource.OutputParameters, cmd.UpdatedRowSource, "UpdatedRowSource");
275 public void ExecuteNonQuery_Connection_Closed ()
277 OdbcConnection cn = new OdbcConnection ();
278 OdbcCommand cmd = new OdbcCommand (COMMAND_TEXT, cn);
280 cmd.ExecuteNonQuery ();
282 } catch (InvalidOperationException ex) {
283 // ExecuteNonQuery requires an open and available
284 // Connection. The connection's current state is
286 Assert.AreEqual (typeof (InvalidOperationException), ex.GetType (), "#2");
287 Assert.IsNull (ex.InnerException, "#3");
288 Assert.IsNotNull (ex.Message, "#4");
289 Assert.IsTrue (ex.Message.IndexOf ("ExecuteNonQuery") != -1, "#5:" + ex.Message);
294 public void ExecuteNonQuery_Connection_Null ()
296 OdbcCommand cmd = new OdbcCommand ();
297 cmd.CommandText = COMMAND_TEXT;
300 cmd.ExecuteNonQuery ();
302 } catch (InvalidOperationException ex) {
303 // ExecuteNonQuery: Connection property
304 // has not been initialized
305 Assert.AreEqual (typeof (InvalidOperationException), ex.GetType (), "#2");
306 Assert.IsNull (ex.InnerException, "#3");
307 Assert.IsNotNull (ex.Message, "#4");
308 Assert.IsTrue (ex.Message.IndexOf ("ExecuteNonQuery") != -1, "#5:" + ex.Message);
313 public void ExecuteReader_Connection_Closed ()
315 OdbcConnection cn = new OdbcConnection ();
316 OdbcCommand cmd = new OdbcCommand (COMMAND_TEXT, cn);
318 cmd.ExecuteReader ();
320 } catch (InvalidOperationException ex) {
321 // ExecuteNonQuery requires an open and available
322 // Connection. The connection's current state is
324 Assert.AreEqual (typeof (InvalidOperationException), ex.GetType (), "#2");
325 Assert.IsNull (ex.InnerException, "#3");
326 Assert.IsNotNull (ex.Message, "#4");
327 Assert.IsTrue (ex.Message.IndexOf ("ExecuteReader") != -1, "#5:" + ex.Message);
332 public void ExecuteReader_Connection_Null ()
334 OdbcCommand cmd = new OdbcCommand ();
335 cmd.CommandText = COMMAND_TEXT;
338 cmd.ExecuteReader ();
340 } catch (InvalidOperationException ex) {
341 // ExecuteNonQuery: Connection property
342 // has not been initialized
343 Assert.AreEqual (typeof (InvalidOperationException), ex.GetType (), "#2");
344 Assert.IsNull (ex.InnerException, "#3");
345 Assert.IsNotNull (ex.Message, "#4");
346 Assert.IsTrue (ex.Message.IndexOf ("ExecuteReader") != -1, "#5:" + ex.Message);
351 public void ExecuteScalar_Connection_Closed ()
353 OdbcConnection cn = new OdbcConnection ();
354 OdbcCommand cmd = new OdbcCommand (COMMAND_TEXT, cn);
356 cmd.ExecuteScalar ();
358 } catch (InvalidOperationException ex) {
359 // ExecuteNonQuery requires an open and available
360 // Connection. The connection's current state is
362 Assert.AreEqual (typeof (InvalidOperationException), ex.GetType (), "#2");
363 Assert.IsNull (ex.InnerException, "#3");
364 Assert.IsNotNull (ex.Message, "#4");
365 Assert.IsTrue (ex.Message.IndexOf ("ExecuteScalar") != -1, "#5:" + ex.Message);
370 public void ExecuteScalar_Connection_Null ()
372 OdbcCommand cmd = new OdbcCommand ();
373 cmd.CommandText = COMMAND_TEXT;
376 cmd.ExecuteScalar ();
378 } catch (InvalidOperationException ex) {
379 // ExecuteNonQuery: Connection property
380 // has not been initialized
381 Assert.AreEqual (typeof (InvalidOperationException), ex.GetType (), "#2");
382 Assert.IsNull (ex.InnerException, "#3");
383 Assert.IsNotNull (ex.Message, "#4");
384 Assert.IsTrue (ex.Message.IndexOf ("ExecuteScalar") != -1, "#5:" + ex.Message);
389 public void ResetCommandTimeout ()
391 OdbcCommand cmd = new OdbcCommand ();
392 cmd.CommandTimeout = 50;
393 Assert.AreEqual (cmd.CommandTimeout, 50, "#1");
394 cmd.ResetCommandTimeout ();
395 Assert.AreEqual (cmd.CommandTimeout, 30, "#2");
399 public void UpdatedRowSource ()
401 OdbcCommand cmd = new OdbcCommand ();
402 cmd.UpdatedRowSource = UpdateRowSource.None;
403 Assert.AreEqual (UpdateRowSource.None, cmd.UpdatedRowSource, "#1");
404 cmd.UpdatedRowSource = UpdateRowSource.OutputParameters;
405 Assert.AreEqual (UpdateRowSource.OutputParameters, cmd.UpdatedRowSource, "#2");
409 public void UpdatedRowSource_Value_Invalid ()
411 OdbcCommand cmd = new OdbcCommand ();
413 cmd.UpdatedRowSource = (UpdateRowSource) 666;
415 } catch (ArgumentOutOfRangeException ex) {
416 // The UpdateRowSource enumeration value,666,
418 Assert.AreEqual (typeof (ArgumentOutOfRangeException), ex.GetType (), "#2");
419 Assert.IsNull (ex.InnerException, "#3");
420 Assert.IsNotNull (ex.Message, "#4");
421 Assert.AreEqual ("UpdateRowSource", ex.ParamName, "#5");