merge -r 60814:60815
[mono.git] / mcs / class / System.Data / Test / System.Data / DataRowCollectionTest2.cs
1 // Authors:
2 //   Rafael Mizrahi   <rafim@mainsoft.com>
3 //   Erez Lotan       <erezl@mainsoft.com>
4 //   Oren Gurfinkel   <oreng@mainsoft.com>
5 //   Ofer Borstein
6 // 
7 // Copyright (c) 2004 Mainsoft Co.
8 // 
9 // Permission is hereby granted, free of charge, to any person obtaining
10 // a copy of this software and associated documentation files (the
11 // "Software"), to deal in the Software without restriction, including
12 // without limitation the rights to use, copy, modify, merge, publish,
13 // distribute, sublicense, and/or sell copies of the Software, and to
14 // permit persons to whom the Software is furnished to do so, subject to
15 // the following conditions:
16 // 
17 // The above copyright notice and this permission notice shall be
18 // included in all copies or substantial portions of the Software.
19 // 
20 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
21 // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
22 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
23 // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
24 // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
25 // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
26 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
27 //
28
29 using NUnit.Framework;
30 using System;
31 using System.IO;
32 using System.Collections;
33 using System.ComponentModel;
34 using System.Data;
35 using MonoTests.System.Data.Utils;
36
37 namespace MonoTests.System.Data
38 {
39         [TestFixture] public class DataRowCollectionTest2
40         {
41                 [Test] public void CopyTo()
42                 {
43                         DataTable dt = DataProvider.CreateParentDataTable();
44                         DataRow[] arr = new DataRow[dt.Rows.Count];
45                         dt.Rows.CopyTo(arr,0);
46                         Assert.AreEqual(dt.Rows.Count, arr.Length, "DRWC1");
47
48                         int index=0;
49                         foreach (DataRow dr in dt.Rows)
50                         {
51                                 Assert.AreEqual(dr, arr[index], "DRWC2");
52                                 index++;
53                         }
54                 }
55
56                 [Test] public void Count()
57                 {
58                         DataTable dt = DataProvider.CreateParentDataTable();
59                         Assert.AreEqual(6, dt.Rows.Count, "DRWC3");
60                         dt.Rows.Remove(dt.Rows[0]);
61                         Assert.AreEqual(5, dt.Rows.Count, "DRWC4");
62                         dt.Rows.Add(new object[] {1,"1-String1","1-String2",new DateTime(2005,1,1,0,0,0,0),1.534,true});
63                         Assert.AreEqual(6, dt.Rows.Count, "DRWC5");
64                 }
65
66                 [Test] public void GetEnumerator()
67                 {
68                         DataTable dt = DataProvider.CreateParentDataTable();
69                         IEnumerator myEnumerator = dt.Rows.GetEnumerator();
70                         int index=0;
71                         while (myEnumerator.MoveNext())
72                         {
73                                 Assert.AreEqual(dt.Rows[index], (DataRow)myEnumerator.Current, "DRWC6");
74                                 index++;
75                         }
76                         Assert.AreEqual(index, dt.Rows.Count, "DRWC7");
77                 }
78
79                 [Test] public void RemoveAt_ByIndex()
80                 {
81                         DataTable dt = DataProvider.CreateParentDataTable();
82                         int counter = dt.Rows.Count;
83                         dt.PrimaryKey=  new DataColumn[] {dt.Columns[0]};
84                         dt.Rows.RemoveAt(3);
85                         Assert.AreEqual(counter-1, dt.Rows.Count, "DRWC8");
86                         Assert.AreEqual(null, dt.Rows.Find(4), "DRWC9");
87                 }
88
89                 [Test] public void Remove_ByDataRow()
90                 {
91                         DataTable dt = DataProvider.CreateParentDataTable();
92                         int counter = dt.Rows.Count;
93                         dt.PrimaryKey=  new DataColumn[] {dt.Columns[0]};
94                         Assert.AreEqual(dt.Rows[0], dt.Rows.Find(1), "DRWC10");
95                         dt.Rows.Remove(dt.Rows[0]);
96                         Assert.AreEqual(counter-1, dt.Rows.Count, "DRWC11");
97                         Assert.AreEqual(null, dt.Rows.Find(1), "DRWC12");
98                 }
99
100                 [Test]
101                 public void DataRowCollection_Add_D1()
102                 {
103                         DataTable dt = DataProvider.CreateParentDataTable();
104                         dt.Rows.Clear();
105                         DataRow dr = dt.NewRow();
106                         dr["ParentId"] = 10;
107                         dr["String1"] = "string1";
108                         dr["String2"] = string.Empty;
109                         dr["ParentDateTime"] = new DateTime(2004,12,15);
110                         dr["ParentDouble"] = 3.14;
111                         dr["ParentBool"] = false;
112
113                         dt.Rows.Add(dr);
114
115                         Assert.AreEqual(1,dt.Rows.Count,"RDWC13");
116                         Assert.AreEqual(dr,dt.Rows[0],"DRWC14");
117                 }
118
119                 [Test]
120                 [ExpectedException(typeof(ArgumentException))]
121                 public void DataRowCollection_Add_D2()
122                 {
123                         DataTable dt = DataProvider.CreateParentDataTable();
124                         dt.Rows.Add(dt.Rows[0]);                        
125                 }
126
127                 [Test]
128                 [ExpectedException(typeof(ArgumentNullException))]
129                 public void DataRowCollection_Add_D3()
130                 {
131                         DataTable dt = DataProvider.CreateParentDataTable();
132                         dt.Rows.Add((DataRow)null);
133                 }
134
135                 [Test]
136                 [ExpectedException(typeof(ArgumentException))]
137                 public void DataRowCollection_Add_D4()
138                 {
139                         DataTable dt = DataProvider.CreateParentDataTable();
140                         DataTable dt1 = DataProvider.CreateParentDataTable();
141
142                         dt.Rows.Add(dt1.Rows[0]);
143                 }
144
145                 [Test]
146                 public void DataRowCollection_Add_O1()
147                 {
148                         DataTable dt = DataProvider.CreateParentDataTable();
149                         dt.Rows.Clear();
150                         dt.Rows.Add(new object[] {1,"1-String1","1-String2",new DateTime(2005,1,1,0,0,0,0),1.534,true});
151                         Assert.AreEqual(1,dt.Rows.Count,"DRWC15");
152                         Assert.AreEqual(1,dt.Rows[0]["ParentId"],"DRWC16");
153                         Assert.AreEqual("1-String1",dt.Rows[0]["String1"],"DRWC17");
154                         Assert.AreEqual("1-String2",dt.Rows[0]["String2"],"DRWC18");
155                         Assert.AreEqual(new DateTime(2005,1,1,0,0,0,0),dt.Rows[0]["ParentDateTime"],"DRWC19");
156                         Assert.AreEqual(1.534,dt.Rows[0]["ParentDouble"],"DRWC20");
157                         Assert.AreEqual(true,dt.Rows[0]["ParentBool"],"DRWC21");
158
159                 }
160
161                 [Test]
162                 public void DataRowCollection_Add_O2()
163                 {               
164                         DataTable dt = DataProvider.CreateParentDataTable();
165                         int count = dt.Rows.Count;
166                         dt.Rows.Add(new object[] {8,"1-String1","1-String2",new DateTime(2005,1,1,0,0,0,0),1.534});
167                         Assert.AreEqual(count+1,dt.Rows.Count,"DRWC14");
168                 }
169
170 //              [Test]
171 //              [ExpectedException(typeof(ArgumentException))]
172 //              public void DataRowCollection_Add_O3()
173 //              {
174 //                      DataTable dt = DataProvider.CreateParentDataTable();
175 //                      dt.Rows.Add(new object[] {8,"1-String1","1-String2",new DateTime(2005,1,1,0,0,0,0),1.534});                     
176 //              }
177
178                 [Test]
179                 [ExpectedException(typeof(NullReferenceException))]
180                 public void DataRowCollection_Add_O4()
181                 {
182                         DataTable dt = DataProvider.CreateParentDataTable();
183                         dt.Rows.Add((Object[])null);
184                 }
185
186                 [Test]
187                 public void FindByKey ()
188                 {
189                         DataTable table = new DataTable ();
190                         table.Columns.Add ("col1", typeof (int));
191                         table.PrimaryKey = new DataColumn[] {table.Columns [0]};
192
193                         table.Rows.Add (new object[] {1});
194                         table.Rows.Add (new object[] {2});
195                         table.Rows.Add (new object[] {3});
196                         table.AcceptChanges ();
197
198                         Assert.IsNotNull (table.Rows.Find (new object[] {1}), "#1");
199
200                         table.Rows[0].Delete ();
201                         Assert.IsNull (table.Rows.Find (new object[] {1}), "#2");
202
203                         table.RejectChanges ();
204                         Assert.IsNotNull (table.Rows.Find (new object[] {1}), "#3");
205                 }
206
207                 [Test]
208                 public void FindByKey_VerifyOrder ()
209                 {
210                         DataTable table = new DataTable ();
211                         table.Columns.Add ("col1", typeof (int));
212                         table.PrimaryKey = new DataColumn[] {table.Columns [0]};
213
214                         table.Rows.Add (new object[] {1});
215                         table.Rows.Add (new object[] {2});
216                         table.Rows.Add (new object[] {1000});
217                         table.AcceptChanges ();
218
219                         table.Rows [1][0] = 100;
220                         Assert.IsNotNull (table.Rows.Find (100), "#1");
221
222                         table.Rows [2][0] = 999;
223                         Assert.IsNotNull (table.Rows.Find (999), "#2");
224                         Assert.IsNotNull (table.Rows.Find (100), "#3");
225                 }
226
227                 [Test]
228                 public void FindByKey_DuringDataLoad ()
229                 {
230                         DataTable table = new DataTable ();
231                         table.Columns.Add ("col1", typeof (int));
232                         table.PrimaryKey = new DataColumn[] {table.Columns [0]};
233
234                         table.Rows.Add (new object[] {1});
235                         table.Rows.Add (new object[] {2});
236                         table.AcceptChanges ();
237
238                         table.BeginLoadData ();
239                         table.LoadDataRow (new object[] {1000}, false);
240                         Assert.IsNotNull (table.Rows.Find (1), "#1");
241                         Assert.IsNotNull (table.Rows.Find (1000), "#2");
242                         table.EndLoadData ();
243                         Assert.IsNotNull (table.Rows.Find (1000), "#3");
244                 }
245
246                 [Test]\r
247                 public void DataRowCollection_Clear1()\r
248                 {\r
249                         DataTable dt = DataProvider.CreateParentDataTable();\r
250                         int count = dt.Rows.Count;\r
251                         Assert.AreEqual(count !=0,true);\r
252                         dt.Rows.Clear();\r
253                         Assert.AreEqual(0,dt.Rows.Count,"DRWC15");\r
254                 }\r
255 \r
256                 [Test]\r
257                 [ExpectedException(typeof(InvalidConstraintException))]\r
258                 public void DataRowCollection_Clear2()\r
259                 {\r
260                         DataSet ds = DataProvider.CreateForigenConstraint();\r
261 \r
262                         ds.Tables[0].Rows.Clear(); //Try to clear the parent table                      \r
263                 }
264
265                 [Test]\r
266                 public void DataRowCollection_Contains_O1()\r
267                 {\r
268                         DataTable dt = DataProvider.CreateParentDataTable();\r
269                         dt.PrimaryKey=  new DataColumn[] {dt.Columns[0]};\r
270                         \r
271                         Assert.AreEqual(true,dt.Rows.Contains(1),"DRWC16");\r
272                         Assert.AreEqual(false,dt.Rows.Contains(10),"DRWC17");\r
273                 }\r
274 \r
275                 [Test]\r
276                 [ExpectedException(typeof(MissingPrimaryKeyException))]\r
277                 public void DataRowCollection_Contains_O2()\r
278                 {\r
279                         DataTable dt = DataProvider.CreateParentDataTable();\r
280                         Assert.AreEqual(false,dt.Rows.Contains(1),"DRWC18");\r
281                 }\r
282 \r
283                 [Test]\r
284                 public void DataRowCollection_Contains_O3()\r
285                 {\r
286                         DataTable dt = DataProvider.CreateParentDataTable();\r
287                         dt.PrimaryKey= new DataColumn[] {dt.Columns[0],dt.Columns[1]};\r
288 \r
289                         //Prepare values array\r
290                         object[] arr = new object[2];\r
291                         arr[0] = 1;\r
292                         arr[1] = "1-String1";\r
293 \r
294                         Assert.AreEqual(true,dt.Rows.Contains( (object[])arr),"DRWC19");\r
295 \r
296                         arr[0] = 8;\r
297 \r
298                         Assert.AreEqual(false,dt.Rows.Contains( (object[])arr),"DRWC20");\r
299 \r
300                 }\r
301 \r
302                 [Test]\r
303                 [ExpectedException(typeof(ArgumentException))]\r
304                 public void DataRowCollection_Contains_O4()\r
305                 {\r
306                         DataTable dt = DataProvider.CreateParentDataTable();\r
307                         dt.PrimaryKey= new DataColumn[] {dt.Columns[0],dt.Columns[1]};\r
308 \r
309                         //Prepare values array\r
310                         object[] arr = new object[1];\r
311                         arr[0] = 1;\r
312 \r
313                         Assert.AreEqual(false,dt.Rows.Contains((object[]) arr),"DRWC21");\r
314                 }
315
316                 [Test]\r
317                 public void DataRowCollection_Find_O1()\r
318                 {\r
319                         DataTable dt = DataProvider.CreateParentDataTable();\r
320                         dt.PrimaryKey=  new DataColumn[] {dt.Columns[0]};\r
321                         \r
322                         Assert.AreEqual(dt.Rows[0],dt.Rows.Find(1),"DRWC22");\r
323                         Assert.AreEqual(null,dt.Rows.Find(10),"DRWC23");\r
324                 }\r
325 \r
326                 [Test]\r
327                 [ExpectedException(typeof(MissingPrimaryKeyException))]\r
328                 public void DataRowCollection_Find_O2()\r
329                 {\r
330                         DataTable dt = DataProvider.CreateParentDataTable();\r
331 \r
332                         Assert.AreEqual(null,dt.Rows.Find(1),"DRWC24");\r
333                 }\r
334 \r
335                 [Test]\r
336                 public void DataRowCollection_Find_O3()\r
337                 {\r
338                         DataTable dt = DataProvider.CreateParentDataTable();\r
339                         dt.PrimaryKey= new DataColumn[] {dt.Columns[0],dt.Columns[1]};\r
340 \r
341                         //Prepare values array\r
342                         object[] arr = new object[2];\r
343                         arr[0] = 2;\r
344                         arr[1] = "2-String1";\r
345 \r
346                         Assert.AreEqual(dt.Rows[1],dt.Rows.Find( (object[])arr),"DRWC25");\r
347 \r
348                         arr[0] = 8;\r
349 \r
350                         Assert.AreEqual(null,dt.Rows.Find( (object[])arr),"DRWC26");\r
351 \r
352                 }\r
353 \r
354                 [Test]\r
355                 [ExpectedException(typeof(ArgumentException))]\r
356                 public void DataRowCollection_Find_O4()\r
357                 {\r
358                         DataTable dt = DataProvider.CreateParentDataTable();\r
359                         dt.PrimaryKey= new DataColumn[] {dt.Columns[0],dt.Columns[1]};\r
360 \r
361                         //Prepare values array\r
362                         object[] arr = new object[1];\r
363                         arr[0] = 1;\r
364                         \r
365                         Assert.AreEqual(null,dt.Rows.Find((object[]) arr),"DRWC27");\r
366                 }
367
368                 [Test]\r
369                 public void DataRowCollection_InsertAt_DI1()\r
370                 {\r
371                         DataTable dt = DataProvider.CreateParentDataTable();\r
372                         DataRow dr =  GetNewDataRow(dt);\r
373                         dt.Rows.InsertAt(dr,0);\r
374 \r
375                         Assert.AreEqual(dr,dt.Rows[0],"DRWC28"); //Begin\r
376                 }\r
377 \r
378                 [Test]\r
379                 public void DataRowCollection_InsertAt_DI2()\r
380                 {\r
381                         DataTable dt = DataProvider.CreateParentDataTable();\r
382                         DataRow dr =  GetNewDataRow(dt);\r
383                         dt.Rows.InsertAt(dr,3);\r
384 \r
385                         Assert.AreEqual(dr,dt.Rows[3],"DRWC29"); //Middle\r
386                 }\r
387 \r
388                 [Test]\r
389                 public void DataRowCollection_InsertAt_DI3()\r
390                 {\r
391                         DataTable dt = DataProvider.CreateParentDataTable();\r
392                         DataRow dr =  GetNewDataRow(dt);\r
393                         dt.Rows.InsertAt(dr,300);\r
394 \r
395                         Assert.AreEqual(dr,dt.Rows[dt.Rows.Count-1],"DRWC30"); //End\r
396                 }\r
397 \r
398                 [Test]\r
399                 [ExpectedException(typeof(IndexOutOfRangeException))]\r
400                 public void DataRowCollection_InsertAt_DI4()\r
401                 {\r
402                         DataTable dt = DataProvider.CreateParentDataTable();\r
403                         DataRow dr =  GetNewDataRow(dt);\r
404 \r
405                         dt.Rows.InsertAt(dr,-1);\r
406                 }\r
407 \r
408                 private DataRow  GetNewDataRow(DataTable dt)\r
409                 {\r
410                         DataRow dr = dt.NewRow();\r
411                         dr["ParentId"] = 10;\r
412                         dr["String1"] = "string1";\r
413                         dr["String2"] = string.Empty;\r
414                         dr["ParentDateTime"] = new DateTime(2004,12,15);\r
415                         dr["ParentDouble"] = 3.14;\r
416                         dr["ParentBool"] = false;\r
417                         return dr;\r
418                 }
419
420                 [Test]\r
421                 public void DataRowCollection_Item1()\r
422                 {\r
423                         DataTable dt = DataProvider.CreateParentDataTable();\r
424                         int index=0;\r
425 \r
426                         foreach (DataRow dr in dt.Rows)\r
427                         {\r
428                                 Assert.AreEqual(dr,dt.Rows[index],"DRWC31");\r
429                                 index++;\r
430                         }\r
431                 }\r
432 \r
433                 [Test]\r
434                 [ExpectedException(typeof(IndexOutOfRangeException))]\r
435                 public void DataRowCollection_Item2()\r
436                 {\r
437                         DataTable dt = DataProvider.CreateParentDataTable();\r
438 \r
439                         DataRow dr =  dt.Rows[-1];\r
440                 }
441         }
442 }