Merge pull request #3913 from omwok/master
[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
8 //
9 // Copyright (C) 2004 Novell, Inc (http://www.novell.com)
10 //
11 // Permission is hereby granted, free of charge, to any person obtaining
12 // a copy of this software and associated documentation files (the
13 // "Software"), to deal in the Software without restriction, including
14 // without limitation the rights to use, copy, modify, merge, publish,
15 // distribute, sublicense, and/or sell copies of the Software, and to
16 // permit persons to whom the Software is furnished to do so, subject to
17 // the following conditions:
18 // 
19 // The above copyright notice and this permission notice shall be
20 // included in all copies or substantial portions of the Software.
21 // 
22 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
23 // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
24 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
25 // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
26 // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
27 // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
28 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
29 //
30 using NUnit.Framework;
31 using System;
32 using System.Data;
33
34 namespace MonoTests.System.Data
35 {
36
37         [TestFixture]
38         public class DataRelationCollectionTest
39         {
40                 DataSet _dataset;
41                 DataTable _tblparent, _tblchild;
42                 DataRelation _relation;
43
44                 [SetUp]
45                 public void GetReady ()
46                 {
47                         _dataset = new DataSet ();
48                         _tblparent = new DataTable ("Customer");
49                         _tblchild = new DataTable ("Order");
50                         _dataset.Tables.Add (_tblchild);
51                         _dataset.Tables.Add (_tblparent);
52                         _dataset.Tables.Add ("Item");
53                         _dataset.Tables ["Customer"].Columns.Add ("custid");
54                         _dataset.Tables ["Customer"].Columns.Add ("custname");
55                         _dataset.Tables ["Order"].Columns.Add ("oid");
56                         _dataset.Tables ["Order"].Columns.Add ("custid");
57                         _dataset.Tables ["Order"].Columns.Add ("itemid");
58                         _dataset.Tables ["Order"].Columns.Add ("desc");
59                         _dataset.Tables ["Item"].Columns.Add ("itemid");
60                         _dataset.Tables ["Item"].Columns.Add ("desc");
61                         
62                 }
63
64                 [TearDown]
65                 public void Clean ()
66                 {
67                         _dataset.Relations.Clear ();
68                 }
69
70                 [Test]
71                 public void Add ()
72                 {
73                         DataRelationCollection drcol = _dataset.Relations;
74                         DataColumn parentCol = _dataset.Tables ["Customer"].Columns ["custid"];
75                         DataColumn childCol = _dataset.Tables ["Order"].Columns ["custid"];
76                         DataRelation dr = new DataRelation ("CustOrder", parentCol, childCol);
77                         
78                         drcol.Add (dr);
79                         Assert.That (drcol [0].RelationName, Is.EqualTo ("CustOrder"), "test#1");
80                         drcol.Clear ();
81                         
82                         drcol.Add (parentCol, childCol);
83                         Assert.That (drcol.Count, Is.EqualTo (1), "test#2");
84                         drcol.Clear ();
85                         
86                         drcol.Add ("NewRelation", parentCol, childCol);
87                         Assert.That (drcol [0].RelationName, Is.EqualTo ("NewRelation"), "test#3");
88                         drcol.Clear ();
89                         
90                         drcol.Add ("NewRelation", parentCol, childCol, false);
91                         Assert.That (drcol.Count, Is.EqualTo (1), "test#4");
92                         drcol.Clear ();
93                         
94                         drcol.Add ("NewRelation", parentCol, childCol, true);
95                         Assert.That (drcol.Count, Is.EqualTo (1), "test#5");
96                         drcol.Clear ();
97                 }
98
99                 [Test]          
100                 [ExpectedException(typeof(ArgumentNullException))]
101                 [Ignore ("It does not pass under MS.NET")]
102                 public void AddException1 ()
103                 {
104                         DataRelationCollection drcol = _dataset.Relations;
105                         DataRelation drnull = null;
106                         drcol.Add (drnull);
107                 }
108
109                 [Test]
110                 [ExpectedException(typeof(ArgumentException))]
111                 public void AddException2 ()
112                 {
113                         DataRelationCollection drcol = _dataset.Relations;
114                         DataRelation dr1 = new DataRelation ("CustOrder"
115                                                         , _dataset.Tables ["Customer"].Columns ["custid"]
116                                                         , _dataset.Tables ["Order"].Columns ["custid"]);
117                         drcol.Add (dr1);                        
118                         drcol.Add (dr1);
119                 }
120
121                 [Test]
122                 [ExpectedException(typeof(DuplicateNameException))]
123                 public void AddException3 ()
124                 {
125                         DataRelationCollection drcol = _dataset.Relations;
126                         DataRelation dr1 = new DataRelation ("DuplicateName"
127                                                         , _dataset.Tables ["Customer"].Columns ["custid"]
128                                                         , _dataset.Tables ["Order"].Columns ["custid"]);
129                         DataRelation dr2 = new DataRelation ("DuplicateName"
130                                                         , _dataset.Tables ["Item"].Columns ["itemid"]
131                                                         , _dataset.Tables ["Order"].Columns ["custid"]);
132                         
133                         drcol.Add (dr1);                        
134                         drcol.Add (dr2);
135                 }
136
137                 [Test]
138                 public void AddRange ()
139                 {
140                         DataRelationCollection drcol = _dataset.Relations;
141                         DataRelation dr1 = new DataRelation ("CustOrder"
142                                                         , _dataset.Tables ["Customer"].Columns ["custid"]
143                                                         , _dataset.Tables ["Order"].Columns ["custid"]);
144                         DataRelation dr2 = new DataRelation ("ItemOrder"
145                                                         , _dataset.Tables ["Item"].Columns ["itemid"]
146                                                         , _dataset.Tables ["Order"].Columns ["custid"]);
147                         drcol.AddRange (new DataRelation[] {dr1,dr2});
148                         
149                         Assert.That (drcol [0].RelationName, Is.EqualTo ("CustOrder"), "test#1");
150                         Assert.That (drcol [1].RelationName, Is.EqualTo ("ItemOrder"), "test#2");
151                 }
152
153                 [Test]
154                 public void CanRemove ()
155                 {
156                         DataRelationCollection drcol = _dataset.Relations;
157                         DataColumn parentCol = _dataset.Tables ["Customer"].Columns ["custid"];
158                         DataColumn childCol = _dataset.Tables ["Order"].Columns ["custid"];
159                         DataRelation dr = new DataRelation ("CustOrder", parentCol, childCol);
160                         
161                         drcol.Add (dr);
162                         Assert.That (drcol.CanRemove (dr), Is.True, "test#1");
163                         Assert.That (drcol.CanRemove (null), Is.False, "test#2");
164                         DataRelation dr2 = new DataRelation ("ItemOrder"
165                                                 , _dataset.Tables ["Item"].Columns ["itemid"]
166                                                 , _dataset.Tables ["Order"].Columns ["custid"]);
167                         Assert.That (drcol.CanRemove (dr2), Is.False, "test#3");
168                 }
169
170                 [Test]
171                 public void Clear ()
172                 {
173                         DataRelationCollection drcol = _dataset.Relations;
174                         DataColumn parentCol = _dataset.Tables ["Customer"].Columns ["custid"];
175                         DataColumn childCol = _dataset.Tables ["Order"].Columns ["custid"];
176                         drcol.Add (new DataRelation ("CustOrder", parentCol, childCol));
177                         drcol.Add ("ItemOrder", _dataset.Tables ["Item"].Columns ["itemid"]
178                                                                  , _dataset.Tables ["Order"].Columns ["itemid"]);
179                         drcol.Clear ();
180                         Assert.That (drcol.Count, Is.EqualTo (0), "test#1");
181                 }
182
183                 [Test]
184                 public void Contains ()
185                 {
186                         DataRelationCollection drcol = _dataset.Relations;
187                         DataColumn parentCol = _dataset.Tables ["Customer"].Columns ["custid"];
188                         DataColumn childCol = _dataset.Tables ["Order"].Columns ["custid"];
189                         DataRelation dr = new DataRelation ("CustOrder", parentCol, childCol);
190                         
191                         drcol.Add (dr);
192                         Assert.That (drcol.Contains (dr.RelationName), Is.True, "test#1");
193                         string drnull = "";
194                         Assert.That (drcol.Contains (drnull), Is.False, "test#2");
195                         dr = new DataRelation ("newRelation", childCol, parentCol);
196                         Assert.That (drcol.Contains ("NoSuchRelation"), Is.False, "test#3");
197                 }
198
199                 [Test]
200                 public void CopyTo ()
201                 {
202                         DataRelationCollection drcol = _dataset.Relations;
203                         drcol.Add ("CustOrder"
204                                         , _dataset.Tables ["Customer"].Columns ["custid"]
205                                         , _dataset.Tables ["Order"].Columns ["custid"]);
206                         drcol.Add ("ItemOrder"
207                                         , _dataset.Tables ["Item"].Columns ["itemid"]
208                                         , _dataset.Tables ["Order"].Columns ["custid"]);
209                         
210                         DataRelation [] array = new DataRelation[2];
211                         drcol.CopyTo (array, 0);
212                         Assert.That (array.Length, Is.EqualTo (2), "test#1");
213                         Assert.That (array [0].RelationName, Is.EqualTo ("CustOrder"), "test#2");
214                         Assert.That (array [1].RelationName, Is.EqualTo ("ItemOrder"), "test#3");
215                         
216                         DataRelation [] array1 = new DataRelation[4];
217                         drcol.CopyTo (array1, 2);
218                         Assert.That (array1 [0], Is.Null, "test#4");
219                         Assert.That (array1 [1], Is.Null, "test#5");
220                         Assert.That (array1 [2].RelationName, Is.EqualTo ("CustOrder"), "test#6");
221                         Assert.That (array1 [3].RelationName, Is.EqualTo ("ItemOrder"), "test#7");
222                 }
223
224                 [Test]
225                 public void Equals ()
226                 {
227                         DataRelationCollection drcol = _dataset.Relations;
228                         drcol.Add ("CustOrder"
229                                         , _dataset.Tables ["Customer"].Columns ["custid"]
230                                         , _dataset.Tables ["Order"].Columns ["custid"]);
231                         drcol.Add ("ItemOrder"
232                                         , _dataset.Tables ["Item"].Columns ["itemid"]
233                                         , _dataset.Tables ["Order"].Columns ["custid"]);
234                         DataSet newds = new DataSet ();
235                         DataRelationCollection drcol1 = newds.Relations;
236                         DataRelationCollection drcol2 = _dataset.Relations;
237
238                         Assert.That (drcol.Equals (drcol), Is.True, "test#1");
239                         Assert.That (drcol.Equals (drcol2), Is.True, "test#2");
240                         
241                         Assert.That (drcol1.Equals (drcol), Is.False, "test#3");
242                         Assert.That (drcol.Equals (drcol1), Is.False, "test#4");
243                         
244                         Assert.That (Object.Equals (drcol, drcol2), Is.True, "test#5");
245                         Assert.That (Object.Equals (drcol, drcol1), Is.False, "test#6");
246                         
247                 }
248
249                 [Test]
250                 public void IndexOf ()
251                 {
252                         DataRelationCollection drcol = _dataset.Relations;
253                         DataRelation dr1 = new DataRelation ("CustOrder"
254                                                         , _dataset.Tables ["Customer"].Columns ["custid"]
255                                                         , _dataset.Tables ["Order"].Columns ["custid"]);
256                         DataRelation dr2 = new DataRelation ("ItemOrder"
257                                                         , _dataset.Tables ["Item"].Columns ["itemid"]
258                                                         , _dataset.Tables ["Order"].Columns ["custid"]);
259                         drcol.Add (dr1);
260                         drcol.Add (dr2);
261                         
262                         Assert.That (drcol.IndexOf (dr1), Is.EqualTo (0), "test#1");
263                         Assert.That (drcol.IndexOf (dr2), Is.EqualTo (1), "test#2");
264                         
265                         Assert.That (drcol.IndexOf ("CustOrder"), Is.EqualTo (0), "test#3");
266                         Assert.That (drcol.IndexOf ("ItemOrder"), Is.EqualTo (1), "test#4");
267                         
268                         Assert.That (drcol.IndexOf (drcol [0]), Is.EqualTo (0), "test#5");
269                         Assert.That (drcol.IndexOf (drcol [1]), Is.EqualTo (1), "test#6");
270                         
271                         Assert.That (drcol.IndexOf ("_noRelation_"), Is.EqualTo (-1), "test#7");
272                         DataRelation newdr = new DataRelation ("newdr"
273                                         , _dataset.Tables ["Customer"].Columns ["custid"]
274                                         , _dataset.Tables ["Order"].Columns ["custid"]);
275                         
276                         Assert.That (drcol.IndexOf (newdr), Is.EqualTo (-1), "test#8");
277                 }
278
279                 [Test]
280                 public void Remove ()
281                 {
282                         DataRelationCollection drcol = _dataset.Relations;
283                         DataRelation dr1 = new DataRelation ("CustOrder"
284                                                         , _dataset.Tables ["Customer"].Columns ["custid"]
285                                                         , _dataset.Tables ["Order"].Columns ["custid"]);
286                         DataRelation dr2 = new DataRelation ("ItemOrder"
287                                                         , _dataset.Tables ["Item"].Columns ["itemid"]
288                                                         , _dataset.Tables ["Order"].Columns ["custid"]);
289                         drcol.Add (dr1);
290                         drcol.Add (dr2);
291                         
292                         drcol.Remove (dr1);
293                         Assert.That (drcol.Contains (dr1.RelationName), Is.False, "test#1");
294                         drcol.Add (dr1);
295                         
296                         drcol.Remove ("CustOrder");
297                         Assert.That (drcol.Contains ("CustOrder"), Is.False, "test#2");
298                         drcol.Add (dr1);
299                         
300                         DataRelation drnull = null;
301                         drcol.Remove (drnull);
302                         
303                         DataRelation newdr = new DataRelation ("newdr"
304                                                                 , _dataset.Tables ["Customer"].Columns ["custid"]
305                                                                 , _dataset.Tables ["Order"].Columns ["custid"]);
306                         try {
307                                 drcol.Remove (newdr);
308                                 Assert.Fail ("Err: removed relation which not part of collection");
309                         } catch (Exception e) {
310                                 Assert.That (e, Is.TypeOf (typeof(ArgumentException)), "test#4");
311                         }
312                         try {
313                                 drcol.Remove ("newdr");
314                                 Assert.Fail ("Err: removed relation which not part of collection");
315                         } catch (ArgumentException e) {
316                         }
317                 }
318
319                 [Test]
320                 public void RemoveAt ()
321                 {
322                         DataRelationCollection drcol = _dataset.Relations;
323                         DataRelation dr1 = new DataRelation ("CustOrder"
324                                                         , _dataset.Tables ["Customer"].Columns ["custid"]
325                                                         , _dataset.Tables ["Order"].Columns ["custid"]);
326                         DataRelation dr2 = new DataRelation ("ItemOrder"
327                                                         , _dataset.Tables ["Item"].Columns ["itemid"]
328                                                         , _dataset.Tables ["Order"].Columns ["custid"]);
329                         drcol.Add (dr1);
330                         drcol.Add (dr2);
331
332                         try {
333                                 drcol.RemoveAt (-1);
334                                 Assert.Fail ("the index was out of bound: must have failed");
335                         } catch (IndexOutOfRangeException e) {
336                         }
337                         try {
338                                 drcol.RemoveAt (101);
339                                 Assert.Fail ("the index was out of bound: must have failed");
340                         } catch (IndexOutOfRangeException e) {
341                         }
342                         
343                         drcol.RemoveAt (1);
344                         Assert.That (drcol.Contains (dr2.RelationName), Is.False, "test#5");
345                         drcol.RemoveAt (0);
346                         Assert.That (drcol.Contains (dr1.RelationName), Is.False, "test#6");
347                 }
348                 
349                 //[Test]
350                 public void ToStringTest ()
351                 {
352                         DataRelationCollection drcol = _dataset.Relations;
353                         DataRelation dr1 = new DataRelation ("CustOrder"
354                                                         , _dataset.Tables ["Customer"].Columns ["custid"]
355                                                         , _dataset.Tables ["Order"].Columns ["custid"]);
356                         drcol.Add (dr1);        
357                         Assert.That (drcol.ToString (), Is.EqualTo ("System.Data.DataRelationCollection"), "test#1");
358                         Console.WriteLine (drcol.ToString ());
359                 }
360         }
361 }