1 // DataColumnCollectionTest.cs - NUnit Test Cases for System.Data.DataColumnCollection
4 // Franklin Wise <gracenote@earthlink.net>
5 // Ville Palo <vi64pa@kolumbus.fi>
6 // Martin Willemoes Hansen <mwh@sysrq.dk>
8 // (C) Copyright 2002 Franklin Wise
9 // (C) Copyright 2003 Ville Palo
10 // (C) Copyright 2003 Martin Willemoes Hansen
14 // Copyright (C) 2004 Novell, Inc (http://www.novell.com)
16 // Permission is hereby granted, free of charge, to any person obtaining
17 // a copy of this software and associated documentation files (the
18 // "Software"), to deal in the Software without restriction, including
19 // without limitation the rights to use, copy, modify, merge, publish,
20 // distribute, sublicense, and/or sell copies of the Software, and to
21 // permit persons to whom the Software is furnished to do so, subject to
22 // the following conditions:
24 // The above copyright notice and this permission notice shall be
25 // included in all copies or substantial portions of the Software.
27 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
28 // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
29 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
30 // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
31 // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
32 // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
33 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
36 using NUnit.Framework;
41 namespace MonoTests.System.Data
44 public class DataColumnCollectionTest
46 //private DataTable _tbl;
49 public void GetReady ()
51 //_tbl = new DataTable();
56 public void AddValidationExceptions()
59 //Set DefaultValue and AutoIncr == true
60 //And get an exception
66 DataTable Table = new DataTable ("test_table");
67 DataColumnCollection Cols = Table.Columns;
73 Assert.IsTrue (C.AllowDBNull, "test#01");
74 Assert.IsFalse (C.AutoIncrement, "test#02");
75 Assert.AreEqual (0L, C.AutoIncrementSeed, "test#03");
76 Assert.AreEqual (1L, C.AutoIncrementStep, "test#04");
77 Assert.AreEqual ("Column1", C.Caption, "test#05");
78 Assert.AreEqual ("Element", C.ColumnMapping.ToString (), "test#06");
79 Assert.AreEqual ("Column1", C.ColumnName, "test#07");
80 Assert.IsNull (C.Container, "test#08");
81 Assert.AreEqual (typeof (string), C.DataType, "test#09");
82 Assert.AreEqual (DBNull.Value, C.DefaultValue, "test#10");
83 Assert.IsFalse (C.DesignMode, "test#11");
84 Assert.AreEqual ("", C.Expression, "test#12");
85 Assert.AreEqual (0, C.ExtendedProperties.Count, "test#13");
86 Assert.AreEqual (-1, C.MaxLength, "test#14");
87 Assert.AreEqual ("", C.Namespace, "test#15");
88 Assert.AreEqual (0, C.Ordinal, "test#16");
89 Assert.AreEqual ("", C.Prefix, "test#17");
90 Assert.IsFalse (C.ReadOnly, "test#18");
91 Assert.IsNull (C.Site, "test#19");
92 Assert.AreEqual ("test_table", C.Table.TableName, "test#20");
93 Assert.AreEqual ("Column1", C.ToString (), "test#21");
94 Assert.IsFalse (C.Unique, "test#22");
97 Assert.IsTrue (C.AllowDBNull, "test#23");
98 Assert.IsFalse (C.AutoIncrement, "test#24");
99 Assert.AreEqual (0L, C.AutoIncrementSeed, "test#25");
100 Assert.AreEqual (1L, C.AutoIncrementStep, "test#26");
101 Assert.AreEqual ("Column2", C.Caption, "test#27");
102 Assert.AreEqual ("Element", C.ColumnMapping.ToString (), "test#28");
103 Assert.AreEqual ("Column2", C.ColumnName, "test#29");
104 Assert.IsNull (C.Container, "test#30");
105 Assert.AreEqual (typeof (string), C.DataType, "test#31");
106 Assert.AreEqual (DBNull.Value, C.DefaultValue, "test#32");
107 Assert.IsFalse (C.DesignMode, "test#33");
108 Assert.AreEqual ("", C.Expression, "test#34");
109 Assert.AreEqual (0, C.ExtendedProperties.Count, "test#35");
110 Assert.AreEqual (-1, C.MaxLength, "test#36");
111 Assert.AreEqual ("", C.Namespace, "test#37");
112 Assert.AreEqual (1, C.Ordinal, "test#38");
113 Assert.AreEqual ("", C.Prefix, "test#39");
114 Assert.IsFalse (C.ReadOnly, "test#40");
115 Assert.IsNull (C.Site, "test#41");
116 Assert.AreEqual ("test_table", C.Table.TableName, "test#42");
117 Assert.AreEqual ("Column2", C.ToString (), "test#43");
118 Assert.IsFalse (C.Unique, "test#44");
120 Cols.Add ("test1", typeof (int), "");
121 Cols.Add ("test2", typeof (string), "Column1 + Column2");
124 Assert.IsTrue (C.AllowDBNull, "test#45");
125 Assert.IsFalse (C.AutoIncrement, "test#46");
126 Assert.AreEqual (0L, C.AutoIncrementSeed, "test#47");
127 Assert.AreEqual (1L, C.AutoIncrementStep, "test#48");
128 Assert.AreEqual ("test1", C.Caption, "test#49");
129 Assert.AreEqual ("Element", C.ColumnMapping.ToString (), "test#50");
130 Assert.AreEqual ("test1", C.ColumnName, "test#51");
131 Assert.IsNull (C.Container, "test#52");
132 Assert.AreEqual (typeof (int), C.DataType, "test#53");
133 Assert.AreEqual (DBNull.Value, C.DefaultValue, "test#54");
134 Assert.IsFalse (C.DesignMode, "test#55");
135 Assert.AreEqual ("", C.Expression, "test#56");
136 Assert.AreEqual (0, C.ExtendedProperties.Count, "test#57");
137 Assert.AreEqual (-1, C.MaxLength, "test#58");
138 Assert.AreEqual ("", C.Namespace, "test#59");
139 Assert.AreEqual (2, C.Ordinal, "test#60");
140 Assert.AreEqual ("", C.Prefix, "test#61");
141 Assert.IsFalse (C.ReadOnly, "test#62");
142 Assert.IsNull (C.Site, "test#63");
143 Assert.AreEqual ("test_table", C.Table.TableName, "test#64");
144 Assert.AreEqual ("test1", C.ToString (), "test#65");
145 Assert.IsFalse (C.Unique, "test#66");
148 Assert.IsTrue (C.AllowDBNull, "test#67");
149 Assert.IsFalse (C.AutoIncrement, "test#68");
150 Assert.AreEqual (0L, C.AutoIncrementSeed, "test#69");
151 Assert.AreEqual (1L, C.AutoIncrementStep, "test#70");
152 Assert.AreEqual ("test2", C.Caption, "test#71");
153 Assert.AreEqual ("Element", C.ColumnMapping.ToString (), "test#72");
154 Assert.AreEqual ("test2", C.ColumnName, "test#73");
155 Assert.IsNull (C.Container, "test#74");
156 Assert.AreEqual (typeof (string), C.DataType, "test#75");
157 Assert.AreEqual (DBNull.Value, C.DefaultValue, "test#76");
158 Assert.IsFalse (C.DesignMode, "test#77");
159 Assert.AreEqual ("Column1 + Column2", C.Expression, "test#78");
160 Assert.AreEqual (0, C.ExtendedProperties.Count, "test#79");
161 Assert.AreEqual (-1, C.MaxLength, "test#80");
162 Assert.AreEqual ("", C.Namespace, "test#81");
163 Assert.AreEqual (3, C.Ordinal, "test#82");
164 Assert.AreEqual ("", C.Prefix, "test#83");
165 Assert.IsTrue (C.ReadOnly, "test#84");
166 Assert.IsNull (C.Site, "test#85");
167 Assert.AreEqual ("test_table", C.Table.TableName, "test#86");
168 Assert.AreEqual ("test2 + Column1 + Column2", C.ToString (), "test#87");
169 Assert.IsFalse (C.Unique, "test#88");
171 C = new DataColumn ("test3", typeof (int));
175 Assert.IsTrue (C.AllowDBNull, "test#89");
176 Assert.IsFalse (C.AutoIncrement, "test#90");
177 Assert.AreEqual (0L, C.AutoIncrementSeed, "test#91");
178 Assert.AreEqual (1L, C.AutoIncrementStep, "test#92");
179 Assert.AreEqual ("test3", C.Caption, "test#93");
180 Assert.AreEqual ("Element", C.ColumnMapping.ToString (), "test#94");
181 Assert.AreEqual ("test3", C.ColumnName, "test#95");
182 Assert.IsNull (C.Container, "test#96");
183 Assert.AreEqual (typeof (int), C.DataType, "test#97");
184 Assert.AreEqual (DBNull.Value, C.DefaultValue, "test#98");
185 Assert.IsFalse (C.DesignMode, "test#99");
186 Assert.AreEqual ("", C.Expression, "test#100");
187 Assert.AreEqual (0, C.ExtendedProperties.Count, "test#101");
188 Assert.AreEqual (-1, C.MaxLength, "test#102");
189 Assert.AreEqual ("", C.Namespace, "test#103");
190 Assert.AreEqual (4, C.Ordinal, "test#104");
191 Assert.AreEqual ("", C.Prefix, "test#105");
192 Assert.IsFalse (C.ReadOnly, "test#106");
193 Assert.IsNull (C.Site, "test#107");
194 Assert.AreEqual ("test_table", C.Table.TableName, "test#108");
195 Assert.AreEqual ("test3", C.ToString (), "test#109");
196 Assert.IsFalse (C.Unique, "test#110");
200 public void AddExceptions ()
202 DataTable Table = new DataTable ("test_table");
203 DataTable Table2 = new DataTable ("test_table2");
204 DataColumnCollection Cols = Table.Columns;
209 Assert.Fail ("test#01");
210 } catch (Exception e) {
211 Assert.AreEqual (typeof (ArgumentNullException), e.GetType (), "test#02");
214 C = new DataColumn ("test");
219 Assert.Fail ("test#04");
220 } catch (ArgumentException e) {
221 // Assert.AreEqual (typeof (ArgumentException), e.GetType (), "test#05");
222 // Assert.AreEqual ("Column 'test' already belongs to this or another DataTable.", e.Message, "test#06");
226 Table2.Columns.Add (C);
227 Assert.Fail ("test#07");
228 } catch (ArgumentException e) {
229 // Assert.AreEqual (typeof (ArgumentException), e.GetType (), "test#08");
230 // Assert.AreEqual ("Column 'test' already belongs to this or another DataTable.", e.Message, "test#09");
233 DataColumn C2 = new DataColumn ("test");
237 Assert.Fail ("test#10");
238 } catch (DuplicateNameException e) {
239 // Assert.AreEqual (typeof (DuplicateNameException), e.GetType (), "test#11");
240 // Assert.AreEqual ("A DataColumn named 'test' already belongs to this DataTable.", e.Message, "test#12");
244 Cols.Add ("test2", typeof (string), "substring ('fdsafewq', 2)");
245 Assert.Fail ("test#13");
246 } catch (InvalidExpressionException e) {
247 // Assert.IsTrue (e is InvalidExpressionException, "test#14");
248 // Assert.AreEqual ("Expression 'substring ('fdsafewq', 2)' is invalid.", e.Message, "test#15");
253 public void AddRange ()
255 DataTable Table = new DataTable ("test_table");
256 DataTable Table2 = new DataTable ("test_table2");
257 DataColumnCollection Cols = Table.Columns;
259 DataColumn [] ColArray = new DataColumn [2];
261 C = new DataColumn ("test1");
264 C = new DataColumn ("test2");
265 C.AllowDBNull = false;
266 C.Caption = "Test_caption";
267 C.DataType = typeof (XmlReader);
270 Cols.AddRange (ColArray);
273 Assert.IsTrue (C.AllowDBNull, "test#01");
274 Assert.IsFalse (C.AutoIncrement, "test#02");
275 Assert.AreEqual (0L, C.AutoIncrementSeed, "test#03");
276 Assert.AreEqual (1L, C.AutoIncrementStep, "test#04");
277 Assert.AreEqual ("test1", C.Caption, "test#05");
278 Assert.AreEqual ("Element", C.ColumnMapping.ToString (), "test#06");
279 Assert.AreEqual ("test1", C.ColumnName, "test#07");
280 Assert.IsNull (C.Container, "test#08");
281 Assert.AreEqual (typeof (string), C.DataType, "test#09");
282 Assert.AreEqual (DBNull.Value, C.DefaultValue, "test#10");
283 Assert.IsFalse (C.DesignMode, "test#11");
284 Assert.AreEqual ("", C.Expression, "test#12");
285 Assert.AreEqual (0, C.ExtendedProperties.Count, "test#13");
286 Assert.AreEqual (-1, C.MaxLength, "test#14");
287 Assert.AreEqual ("", C.Namespace, "test#15");
288 Assert.AreEqual (0, C.Ordinal, "test#16");
289 Assert.AreEqual ("", C.Prefix, "test#17");
290 Assert.IsFalse (C.ReadOnly, "test#18");
291 Assert.IsNull (C.Site, "test#19");
292 Assert.AreEqual ("test_table", C.Table.TableName, "test#20");
293 Assert.AreEqual ("test1", C.ToString (), "test#21");
294 Assert.IsFalse (C.Unique, "test#22");
297 Assert.IsFalse (C.AllowDBNull, "test#01");
298 Assert.IsFalse (C.AutoIncrement, "test#02");
299 Assert.AreEqual (0L, C.AutoIncrementSeed, "test#03");
300 Assert.AreEqual (1L, C.AutoIncrementStep, "test#04");
301 Assert.AreEqual ("Test_caption", C.Caption, "test#05");
302 Assert.AreEqual ("Element", C.ColumnMapping.ToString (), "test#06");
303 Assert.AreEqual ("test2", C.ColumnName, "test#07");
304 Assert.IsNull (C.Container, "test#08");
305 Assert.AreEqual (typeof (XmlReader), C.DataType, "test#09");
306 Assert.AreEqual (DBNull.Value, C.DefaultValue, "test#10");
307 Assert.IsFalse (C.DesignMode, "test#11");
308 Assert.AreEqual ("", C.Expression, "test#12");
309 Assert.AreEqual (0, C.ExtendedProperties.Count, "test#13");
310 Assert.AreEqual (-1, C.MaxLength, "test#14");
311 Assert.AreEqual ("", C.Namespace, "test#15");
312 Assert.AreEqual (1, C.Ordinal, "test#16");
313 Assert.AreEqual ("", C.Prefix, "test#17");
314 Assert.IsFalse (C.ReadOnly, "test#18");
315 Assert.IsNull (C.Site, "test#19");
316 Assert.AreEqual ("test_table", C.Table.TableName, "test#20");
317 Assert.AreEqual ("test2", C.ToString (), "test#21");
318 Assert.IsFalse (C.Unique, "test#22");
322 public void CanRemove ()
324 DataTable Table = new DataTable ("test_table");
325 DataTable Table2 = new DataTable ("test_table_2");
326 DataColumnCollection Cols = Table.Columns;
327 DataColumn C = new DataColumn ("test1");
330 // LAMESPEC: MSDN says that if C doesn't belong to Cols
331 // Exception is thrown.
332 Assert.IsFalse (Cols.CanRemove (C), "test#01");
335 Assert.IsTrue (Cols.CanRemove (C), "test#02");
337 C = new DataColumn ();
338 C.Expression = "test1 + 2";
342 Assert.IsFalse (Cols.CanRemove (C), "test#03");
344 C = new DataColumn ("t");
345 Table2.Columns.Add (C);
346 DataColumnCollection Cols2 = Table2.Columns;
347 Assert.IsTrue (Cols2.CanRemove (C), "test#04");
349 DataRelation Rel = new DataRelation ("Rel", Table.Columns [0], Table2.Columns [0]);
350 DataSet Set = new DataSet ();
351 Set.Tables.Add (Table);
352 Set.Tables.Add (Table2);
353 Set.Relations.Add (Rel);
355 Assert.IsFalse (Cols2.CanRemove (C), "test#05");
356 Assert.IsFalse (Cols.CanRemove (null), "test#06");
362 DataTable Table = new DataTable ("test_table");
363 DataTable Table2 = new DataTable ("test_table2");
364 DataSet Set = new DataSet ();
365 Set.Tables.Add (Table);
366 Set.Tables.Add (Table2);
367 DataColumnCollection Cols = Table.Columns;
368 DataColumnCollection Cols2 = Table2.Columns;
374 Assert.AreEqual (0, Cols.Count, "test#01");
381 DataRelation Rel = new DataRelation ("Rel", Cols [0], Cols2 [0]);
382 Set.Relations.Add (Rel);
385 Assert.Fail ("test#02");
386 } catch (Exception e) {
387 Assert.AreEqual (typeof (ArgumentException), e.GetType (), "test#03");
388 Assert.AreEqual ("Cannot remove this column, because it is part of the parent key for relationship Rel.", e.Message, "test#04");
393 public void Clear_ExpressionColumn ()
395 DataTable table = new DataTable ("test");
396 table.Columns.Add ("col1", typeof(int));
397 table.Columns.Add ("col2", typeof (int), "sum(col1)");
399 //shudnt throw an exception.
400 table.Columns.Clear ();
401 Assert.AreEqual (0, table.Columns.Count, "#1");
405 public void Contains ()
407 DataTable Table = new DataTable ("test_table");
408 DataColumnCollection Cols = Table.Columns;
413 Assert.IsTrue (Cols.Contains ("test"), "test#01");
414 Assert.IsFalse (Cols.Contains ("_test"), "test#02");
415 Assert.IsTrue (Cols.Contains ("TEST"), "test#03");
416 Table.CaseSensitive = true;
417 Assert.IsTrue (Cols.Contains ("TEST"), "test#04");
418 Assert.IsTrue (Cols.Contains ("test2"), "test#05");
419 Assert.IsFalse (Cols.Contains ("_test2"), "test#06");
420 Assert.IsTrue (Cols.Contains ("TEST2"), "test#07");
424 public void CopyTo ()
426 DataTable Table = new DataTable ("test_table");
427 DataColumnCollection Cols = Table.Columns;
434 DataColumn [] array = new DataColumn [4];
435 Cols.CopyTo (array, 0);
436 Assert.AreEqual (4, array.Length, "test#01");
437 Assert.AreEqual ("test", array [0].ColumnName, "test#02");
438 Assert.AreEqual ("test2", array [1].ColumnName, "test#03");
439 Assert.AreEqual ("test3", array [2].ColumnName, "test#04");
440 Assert.AreEqual ("test4", array [3].ColumnName, "test#05");
442 array = new DataColumn [6];
443 Cols.CopyTo (array, 2);
444 Assert.AreEqual (6, array.Length, "test#06");
445 Assert.AreEqual ("test", array [2].ColumnName, "test#07");
446 Assert.AreEqual ("test2", array [3].ColumnName, "test#08");
447 Assert.AreEqual ("test3", array [4].ColumnName, "test#09");
448 Assert.AreEqual ("test4", array [5].ColumnName, "test#10");
449 Assert.IsNull (array [0], "test#11");
450 Assert.IsNull (array [1], "test#12");
454 public void Equals ()
456 DataTable Table = new DataTable ("test_table");
457 DataTable Table2 = new DataTable ("test_table");
458 DataColumnCollection Cols = Table.Columns;
459 DataColumnCollection Cols2 = Table2.Columns;
461 Assert.IsFalse (Cols.Equals (Cols2), "test#01");
462 Assert.IsFalse (Cols2.Equals (Cols), "test#02");
463 Assert.IsFalse (Object.Equals (Cols, Cols2), "test#03");
464 Assert.IsTrue (Cols.Equals (Cols), "test#04");
465 Assert.IsTrue (Cols2.Equals (Cols2), "test#05");
466 Assert.IsTrue (Object.Equals (Cols2, Cols2), "test#06");
470 public void IndexOf ()
472 DataTable Table = new DataTable ("test_table");
473 DataColumnCollection Cols = Table.Columns;
480 Assert.AreEqual (0, Cols.IndexOf ("test"), "test#01");
481 Assert.AreEqual (1, Cols.IndexOf ("TEST2"), "test#02");
482 Table.CaseSensitive = true;
483 Assert.AreEqual (1, Cols.IndexOf ("TEST2"), "test#03");
485 Assert.AreEqual (3, Cols.IndexOf (Cols [3]), "test#04");
486 DataColumn C = new DataColumn ("error");
487 Assert.AreEqual (-1, Cols.IndexOf (C), "test#05");
488 Assert.AreEqual (-1, Cols.IndexOf ("_error_"), "test#06");
492 public void Remove ()
494 DataTable Table = new DataTable ("test_table");
495 DataColumnCollection Cols = Table.Columns;
502 Assert.AreEqual (4, Cols.Count, "test#01");
503 Cols.Remove ("test2");
504 Assert.AreEqual (3, Cols.Count, "test#02");
505 Cols.Remove ("TEST3");
506 Assert.AreEqual (2, Cols.Count, "test#03");
509 Cols.Remove ("_test_");
510 Assert.Fail ("test#04");
511 } catch (Exception e) {
512 Assert.AreEqual (typeof (ArgumentException), e.GetType (), "test#05");
513 Assert.AreEqual ("Column '_test_' does not belong to table test_table.", e.Message, "test#06");
521 Assert.AreEqual (6, Cols.Count, "test#07");
522 Cols.Remove (Cols [0]);
523 Cols.Remove (Cols [0]);
524 Assert.AreEqual (4, Cols.Count, "test#08");
525 Assert.AreEqual ("Column1", Cols [0].ColumnName, "test#09");
528 Cols.Remove (new DataColumn ("Column10"));
529 Assert.Fail ("test#10");
530 } catch (Exception e) {
531 Assert.AreEqual (typeof (ArgumentException), e.GetType (), "test#11");
532 Assert.AreEqual ("Cannot remove a column that doesn't belong to this table.", e.Message, "test#12");
540 Assert.AreEqual (8, Cols.Count, "test#13");
545 Assert.AreEqual (4, Cols.Count, "test#14");
546 Assert.AreEqual ("Column4", Cols [0].ColumnName, "test#15");
547 Assert.AreEqual ("Column5", Cols [1].ColumnName, "test#16");
551 Assert.Fail ("test#17");
552 } catch (Exception e) {
553 Assert.AreEqual (typeof (IndexOutOfRangeException), e.GetType (), "test#18");
554 Assert.AreEqual ("Cannot find column 10.", e.Message, "test#19");
559 [ExpectedException (typeof (ArgumentException))]
560 public void Remove_Dep_Rel_Col ()
562 DataSet ds = new DataSet ();
563 ds.Tables.Add ("test");
564 ds.Tables.Add ("test1");
565 ds.Tables[0].Columns.Add ("col1", typeof(int));
566 ds.Tables[1].Columns.Add ("col2", typeof(int));
568 ds.Relations.Add ("rel1", ds.Tables[0].Columns[0], ds.Tables[1].Columns[0]);
569 ds.Tables[0].Columns.RemoveAt (0);
574 [Ignore ("Does not work with TARGET_JVM")]
576 public void ToStringTest ()
578 DataTable Table = new DataTable ("test_table");
579 DataColumnCollection Cols = Table.Columns;
584 Assert.AreEqual ("System.Data.DataColumnCollection", Cols.ToString (), "test#01");
588 public void CaseSensitiveIndexOfTest ()
590 DataTable dt = new DataTable ("TestCaseSensitiveIndexOf");
591 dt.Columns.Add ("nom_colonne1", typeof (string));
592 dt.Columns.Add ("NOM_COLONNE1", typeof (string));
593 dt.Columns.Remove ("nom_colonne1");
594 int i=dt.Columns.IndexOf ("nom_colonne1");
595 Assert.AreEqual (0, dt.Columns.IndexOf ("nom_colonne1"));