2004-05-26 Umadevi S <sumadevi@novell.com.
[mono.git] / mcs / class / System.Data / Test / System.Data / DataRelationCollectionTest.cs
1 // DataRelationCollection.cs - Nunit Test Cases for for testing the DataRelationCollection
2 // class
3 // Author:
4 //
5 //      Punit Kumar Todi ( punit_todi@da-iict.org )
6 // (C) Punit Todi
7 // (C) Novell Inc.
8
9 using NUnit.Framework;
10 using System;
11 using System.Data;
12
13 namespace MonoTests.System.Data
14 {
15
16         [TestFixture]
17         public class DataRelationCollectionTest : Assertion 
18         {
19                 DataSet _dataset;
20                 DataTable _tblparent,_tblchild;
21                 DataRelation _relation;
22                 [SetUp]
23                 public void GetReady() 
24                 {
25                         _dataset = new DataSet();
26                         _tblparent = new DataTable("Customer");
27                         _tblchild = new DataTable("Order");
28                         _dataset.Tables.Add(_tblchild);
29                         _dataset.Tables.Add(_tblparent);
30                         _dataset.Tables.Add("Item");
31                         _dataset.Tables["Customer"].Columns.Add("custid");
32                         _dataset.Tables["Customer"].Columns.Add("custname");
33                         _dataset.Tables["Order"].Columns.Add("oid");
34                         _dataset.Tables["Order"].Columns.Add("custid");
35                         _dataset.Tables["Order"].Columns.Add("itemid");
36                         _dataset.Tables["Order"].Columns.Add("desc");
37                         _dataset.Tables["Item"].Columns.Add("itemid");
38                         _dataset.Tables["Item"].Columns.Add("desc");
39                         
40                 }
41         
42                 [TearDown]
43                 public void Clean() 
44                 {
45                         _dataset.Relations.Clear();
46                 }
47         
48                 [Test]
49                 public void Add()
50                 {
51                         DataRelationCollection drcol = _dataset.Relations;
52                         DataColumn parentCol = _dataset.Tables["Customer"].Columns["custid"];
53                         DataColumn childCol = _dataset.Tables["Order"].Columns["custid"];
54                         DataRelation dr = new DataRelation("CustOrder",parentCol,childCol);
55                         
56                         drcol.Add(dr);
57                         AssertEquals("test#1","CustOrder",drcol[0].RelationName);
58                         drcol.Clear();
59                         
60                         drcol.Add(parentCol,childCol);
61                         AssertEquals("test#2",1,drcol.Count);
62                         drcol.Clear();
63                         
64                         drcol.Add("NewRelation",parentCol,childCol);
65                         AssertEquals("test#3","NewRelation",drcol[0].RelationName);
66                         drcol.Clear();
67                         
68                         drcol.Add("NewRelation",parentCol,childCol,false);
69                         AssertEquals("test#4",1,drcol.Count);
70                         drcol.Clear();
71                         
72                         drcol.Add("NewRelation",parentCol,childCol,true);
73                         AssertEquals("test#5",1,drcol.Count);
74                         drcol.Clear();
75                 }
76                 
77                 [Test]          
78                 [ExpectedException(typeof(ArgumentNullException))]
79                 public void AddException1()
80                 {
81                         DataRelationCollection drcol = _dataset.Relations;
82                         DataRelation drnull = null;
83                         drcol.Add(drnull);
84                 }
85                 
86                 [Test]
87                 [ExpectedException(typeof(ArgumentException))]
88                 public void AddException2()
89                 {
90                         DataRelationCollection drcol = _dataset.Relations;
91                         DataRelation dr1= new DataRelation("CustOrder"
92                                                         ,_dataset.Tables["Customer"].Columns["custid"]
93                                                         ,_dataset.Tables["Order"].Columns["custid"]);
94                         drcol.Add(dr1);                 
95                         drcol.Add(dr1);
96                 }
97                 
98                 [Test]
99                 [ExpectedException(typeof(DuplicateNameException))]
100                 public void AddException3()
101                 {
102                         DataRelationCollection drcol = _dataset.Relations;
103                         DataRelation dr1= new DataRelation("DuplicateName"
104                                                         ,_dataset.Tables["Customer"].Columns["custid"]
105                                                         ,_dataset.Tables["Order"].Columns["custid"]);
106                         DataRelation dr2 = new DataRelation("DuplicateName"
107                                                         ,_dataset.Tables["Item"].Columns["itemid"]
108                                                         ,_dataset.Tables["Order"].Columns["custid"]);
109                         
110                         drcol.Add(dr1);                 
111                         drcol.Add(dr2);
112                 }
113                 
114                 
115                 [Test]
116                 public void AddRange()
117                 {
118                         DataRelationCollection drcol = _dataset.Relations;
119                         DataRelation dr1= new DataRelation("CustOrder"
120                                                         ,_dataset.Tables["Customer"].Columns["custid"]
121                                                         ,_dataset.Tables["Order"].Columns["custid"]);
122                         DataRelation dr2 = new DataRelation("ItemOrder"
123                                                         ,_dataset.Tables["Item"].Columns["itemid"]
124                                                         ,_dataset.Tables["Order"].Columns["custid"]);
125                         drcol.AddRange(new DataRelation[] {dr1,dr2});
126                         
127                         AssertEquals("test#1","CustOrder",drcol[0].RelationName);
128                         AssertEquals("test#2","ItemOrder",drcol[1].RelationName);
129                 }
130                 
131                 [Test]
132                 public void CanRemove()
133                 {
134                         DataRelationCollection drcol = _dataset.Relations;
135                         DataColumn parentCol = _dataset.Tables["Customer"].Columns["custid"];
136                         DataColumn childCol = _dataset.Tables["Order"].Columns["custid"];
137                         DataRelation dr = new DataRelation("CustOrder",parentCol,childCol);
138                         
139                         drcol.Add(dr);
140                         AssertEquals("test#1",true,drcol.CanRemove(dr));
141                         dr = null;
142                         AssertEquals("test#2",false,drcol.CanRemove(dr));
143                         DataRelation dr2 = new DataRelation("ItemOrder"
144                                                 ,_dataset.Tables["Item"].Columns["itemid"]
145                                                 ,_dataset.Tables["Order"].Columns["custid"]);
146                         AssertEquals("test#3",false,drcol.CanRemove(dr2));
147                 }
148                 
149                 [Test]
150                 public void Clear()
151                 {
152                         DataRelationCollection drcol = _dataset.Relations;
153                         DataColumn parentCol = _dataset.Tables["Customer"].Columns["custid"];
154                         DataColumn childCol = _dataset.Tables["Order"].Columns["custid"];
155                         drcol.Add(new DataRelation("CustOrder",parentCol,childCol));
156                         drcol.Add("ItemOrder",_dataset.Tables["Item"].Columns["itemid"]
157                                                                  ,_dataset.Tables["Order"].Columns["itemid"]);
158                         drcol.Clear();
159                         AssertEquals("test#1",0,drcol.Count);
160                 }
161                 
162                 [Test]
163                 public void Contains()
164                 {
165                         DataRelationCollection drcol = _dataset.Relations;
166                         DataColumn parentCol = _dataset.Tables["Customer"].Columns["custid"];
167                         DataColumn childCol = _dataset.Tables["Order"].Columns["custid"];
168                         DataRelation dr = new DataRelation("CustOrder",parentCol,childCol);
169                         
170                         drcol.Add(dr);
171                         AssertEquals("test#1",true,drcol.Contains(dr.RelationName));
172                         string drnull = "";
173                         AssertEquals("test#2",false,drcol.Contains(drnull));
174                         dr = new DataRelation("newRelation",childCol,parentCol);
175                         AssertEquals("test#3",false,drcol.Contains("NoSuchRelation"));
176                 }
177                 
178                 [Test]
179                 public void CopyTo()
180                 {
181                         DataRelationCollection drcol = _dataset.Relations;
182                         drcol.Add("CustOrder"
183                                         ,_dataset.Tables["Customer"].Columns["custid"]
184                                         ,_dataset.Tables["Order"].Columns["custid"]);
185                         drcol.Add("ItemOrder"
186                                         ,_dataset.Tables["Item"].Columns["itemid"]
187                                         ,_dataset.Tables["Order"].Columns["custid"]);
188                         
189                         DataRelation [] array = new DataRelation[2];
190                         drcol.CopyTo(array,0);
191                         AssertEquals("test#1",2,array.Length);
192                         AssertEquals("test#2", "CustOrder", array[0].RelationName);
193                         AssertEquals("test#3", "ItemOrder", array[1].RelationName);
194                         
195                         DataRelation [] array1 = new DataRelation[4];
196                         drcol.CopyTo(array1,2);
197                         AssertEquals("test#4", null, array1[0]);
198                         AssertEquals("test#5", null, array1[1]);
199                         AssertEquals("test#6", "CustOrder", array1[2].RelationName);
200                         AssertEquals("test#7", "ItemOrder", array1[3].RelationName);
201                 }
202                 
203                 [Test]
204                 public void Equals()
205                 {
206                         DataRelationCollection drcol = _dataset.Relations;
207                         drcol.Add("CustOrder"
208                                         ,_dataset.Tables["Customer"].Columns["custid"]
209                                         ,_dataset.Tables["Order"].Columns["custid"]);
210                         drcol.Add("ItemOrder"
211                                         ,_dataset.Tables["Item"].Columns["itemid"]
212                                         ,_dataset.Tables["Order"].Columns["custid"]);
213                         DataSet newds = new DataSet();
214                         DataRelationCollection drcol1 = newds.Relations;
215                         DataRelationCollection drcol2 = _dataset.Relations;
216
217                         AssertEquals("test#1", true, drcol.Equals(drcol));
218                         AssertEquals("test#2", true, drcol.Equals(drcol2));
219                         
220                         AssertEquals("test#3", false, drcol1.Equals(drcol));
221                         AssertEquals("test#4", false, drcol.Equals(drcol1));
222                         
223                         AssertEquals("test#5", true, Object.Equals(drcol,drcol2));
224                         AssertEquals("test#6", false, Object.Equals(drcol,drcol1));
225                         
226                 }
227                 [Test]
228                 public void IndexOf()
229                 {
230                         DataRelationCollection drcol = _dataset.Relations;
231                         DataRelation dr1= new DataRelation("CustOrder"
232                                                         ,_dataset.Tables["Customer"].Columns["custid"]
233                                                         ,_dataset.Tables["Order"].Columns["custid"]);
234                         DataRelation dr2 = new DataRelation("ItemOrder"
235                                                         ,_dataset.Tables["Item"].Columns["itemid"]
236                                                         ,_dataset.Tables["Order"].Columns["custid"]);
237                         drcol.Add(dr1);
238                         drcol.Add(dr2);
239                         
240                         AssertEquals("test#1",0,drcol.IndexOf(dr1));
241                         AssertEquals("test#2",1,drcol.IndexOf(dr2));
242                         
243                         AssertEquals("test#3",0,drcol.IndexOf("CustOrder"));
244                         AssertEquals("test#4",1,drcol.IndexOf("ItemOrder"));
245                         
246                         AssertEquals("test#5",0,drcol.IndexOf(drcol[0]));
247                         AssertEquals("test#6",1,drcol.IndexOf(drcol[1]));
248                         
249                         AssertEquals("test#7",-1,drcol.IndexOf("_noRelation_"));
250                         DataRelation newdr = new DataRelation("newdr"
251                                                                                 ,_dataset.Tables["Customer"].Columns["custid"]
252                                                                                 ,_dataset.Tables["Order"].Columns["custid"]);
253                         
254                         AssertEquals("test#8",-1,drcol.IndexOf(newdr));
255                 }
256
257                 [Test]
258                 public void Remove()
259                 {
260                         DataRelationCollection drcol = _dataset.Relations;
261                         DataRelation dr1= new DataRelation("CustOrder"
262                                                         ,_dataset.Tables["Customer"].Columns["custid"]
263                                                         ,_dataset.Tables["Order"].Columns["custid"]);
264                         DataRelation dr2 = new DataRelation("ItemOrder"
265                                                         ,_dataset.Tables["Item"].Columns["itemid"]
266                                                         ,_dataset.Tables["Order"].Columns["custid"]);
267                         drcol.Add(dr1);
268                         drcol.Add(dr2);
269                         
270                         drcol.Remove(dr1);
271                         AssertEquals("test#1", false, drcol.Contains(dr1.RelationName));
272                         drcol.Add(dr1);
273                         
274                         drcol.Remove("CustOrder");
275                         AssertEquals("test#2", false, drcol.Contains("CustOrder"));
276                         drcol.Add(dr1);
277                         
278                         DataRelation drnull = null;
279                         try
280                         {                       
281                                 drcol.Remove(drnull);
282                                 Fail("Err:: drcol.Remove(null) must fail");
283                         }
284                         catch(Exception e)
285                         {
286                                 AssertEquals("test#3", typeof (ArgumentNullException), e.GetType());
287                         }
288                         
289                         DataRelation newdr = new DataRelation("newdr"
290                                                                                 ,_dataset.Tables["Customer"].Columns["custid"]
291                                                                                 ,_dataset.Tables["Order"].Columns["custid"]);
292                         try
293                         {
294                                 drcol.Remove(newdr);
295                                 Fail("Err: removed relation which not part of collection");
296                         }
297                         catch (Exception e)
298                         {
299                                 AssertEquals ("test#4", typeof(ArgumentException), e.GetType());
300                         }
301                         try
302                         {
303                                 drcol.Remove("newdr");
304                                 Fail("Err: removed relation which not part of collection");
305                         }
306                         catch (Exception e)
307                         {
308                                 AssertEquals ("test#5", typeof(IndexOutOfRangeException), e.GetType());
309                         }
310
311                         
312                 }
313                 
314                 [Test]
315                 public void RemoveAt()
316                 {
317                         DataRelationCollection drcol = _dataset.Relations;
318                         DataRelation dr1= new DataRelation("CustOrder"
319                                                         ,_dataset.Tables["Customer"].Columns["custid"]
320                                                         ,_dataset.Tables["Order"].Columns["custid"]);
321                         DataRelation dr2 = new DataRelation("ItemOrder"
322                                                         ,_dataset.Tables["Item"].Columns["itemid"]
323                                                         ,_dataset.Tables["Order"].Columns["custid"]);
324                         drcol.Add(dr1);
325                         drcol.Add(dr2);
326
327                         try
328                         {
329                                 drcol.RemoveAt(-1);
330                                 Fail("the index was out of bound: must have failed");
331                         }
332                         catch(Exception e)
333                         {
334                                 AssertEquals ("test#1", typeof (ArgumentException), e.GetType ());
335                                 AssertEquals ("test#2", "There is no row at position -1.", e.Message);
336                         }
337                         try
338                         {
339                                 drcol.RemoveAt(101);
340                                 Fail("the index was out of bound: must have failed");
341                         }
342                         catch(Exception e)
343                         {
344                                 AssertEquals ("test#3", typeof (ArgumentException), e.GetType ());
345                                 AssertEquals ("test#4", "There is no row at position -1.", e.Message);
346                         }
347                         
348                         drcol.RemoveAt (1);
349                         AssertEquals ("test#5", false, drcol.Contains(dr2.RelationName));
350                         drcol.RemoveAt (0);
351                         AssertEquals ("test#6", false, drcol.Contains(dr1.RelationName));
352                 }
353                 
354                 [Test]
355                 public void ToStringTest()
356                 {
357                         DataRelationCollection drcol = _dataset.Relations;
358                         DataRelation dr1= new DataRelation("CustOrder"
359                                                         ,_dataset.Tables["Customer"].Columns["custid"]
360                                                         ,_dataset.Tables["Order"].Columns["custid"]);
361                         drcol.Add(dr1); 
362                         AssertEquals("test#1","System.Data.DataRelationCollection",drcol.ToString());
363                         System.Console.WriteLine(drcol.ToString());
364                 }
365         }
366 }