2 // Rafael Mizrahi <rafim@mainsoft.com>
3 // Erez Lotan <erezl@mainsoft.com>
4 // Oren Gurfinkel <oreng@mainsoft.com>
7 // Copyright (c) 2004 Mainsoft Co.
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:
17 // The above copyright notice and this permission notice shall be
18 // included in all copies or substantial portions of the Software.
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.
29 using NUnit.Framework;
30 using MonoTests.System.Data.Test.Utils;
32 using System.Collections;
33 using System.ComponentModel;
36 namespace MonoTests.System.Data
38 [TestFixture] public class ConstraintCollectionTest2
40 private bool CollectionChangedFlag = false;
42 [Test] public void CanRemove_ParentForeign()
44 DataSet ds = DataProvider.CreateForigenConstraint();
45 Assert.AreEqual(false, ds.Tables["parent"].Constraints.CanRemove(ds.Tables["parent"].Constraints[0]), "CN1");
48 [Test] public void CanRemove_ChildForeign()
50 DataSet ds = DataProvider.CreateForigenConstraint();
51 Assert.AreEqual(true, ds.Tables["child"].Constraints.CanRemove(ds.Tables["child"].Constraints[0]), "CN2");
54 [Test] public void CanRemove_ParentAndChildForeign()
56 DataSet ds = DataProvider.CreateForigenConstraint();
57 //remove the forigen and ask about the unique
58 ds.Tables["child"].Constraints.Remove(ds.Tables["child"].Constraints[0]);
59 Assert.AreEqual(true, ds.Tables["parent"].Constraints.CanRemove(ds.Tables["parent"].Constraints[0]), "CN3");
62 // FIXME. This test isn't complete.
63 public void CanRemove_Unique()
65 DataTable dt = DataProvider.CreateUniqueConstraint();
66 //remove the forigen and ask about the unique
67 dt.Constraints.Remove(dt.Constraints[0]);
68 Assert.AreEqual(true, dt.Constraints.CanRemove(dt.Constraints[0]), "CN4");
71 [Test] public void Clear_Foreign()
73 DataSet ds = DataProvider.CreateForigenConstraint();
74 foreach(DataTable dt in ds.Tables)
76 dt.Constraints.Clear();
78 Assert.AreEqual(0, ds.Tables[0].Constraints.Count, "CN5");
79 Assert.AreEqual(0, ds.Tables[0].Constraints.Count, "CN6");
83 [Test] public void Clear_Unique()
85 DataTable dt = DataProvider.CreateUniqueConstraint();
86 int rowsCount = dt.Rows.Count;
87 dt.Constraints.Clear();
88 DataRow dr = dt.NewRow();
91 Assert.AreEqual(rowsCount+1, dt.Rows.Count, "CN7"); //Just checking that no expection ocuured
94 [Test] public void CollectionChanged()
96 DataTable dt = DataProvider.CreateParentDataTable();
97 CollectionChangedFlag = false;
98 dt.Constraints.CollectionChanged += new CollectionChangeEventHandler(Constraints_CollectionChangedHandler);
99 dt = DataProvider.CreateUniqueConstraint(dt);
100 Assert.AreEqual(true, CollectionChangedFlag, "CN8");
103 [Test] public void Contains_ByName()
105 DataSet ds = DataProvider.CreateForigenConstraint();
107 //changing the constraints's name
109 ds.Tables["child"].Constraints[0].ConstraintName = "name1";
110 ds.Tables["parent"].Constraints[0].ConstraintName = "name2";
113 Assert.AreEqual(true, ds.Tables["child"].Constraints.Contains("name1"), "CN9");
114 Assert.AreEqual(false, ds.Tables["child"].Constraints.Contains("xxx"), "CN10");
115 Assert.AreEqual(true, ds.Tables["parent"].Constraints.Contains("name2"), "CN11");
116 Assert.AreEqual(false, ds.Tables["parent"].Constraints.Contains("xxx"), "CN12");
120 [Test] public void CopyTo()
122 DataTable dt = DataProvider.CreateUniqueConstraint();
123 dt.Constraints.Add("constraint2",dt.Columns["String1"],true);
125 object[] ar = new object[2];
127 dt.Constraints.CopyTo(ar,0);
128 Assert.AreEqual(2, ar.Length, "CN13");
131 [Test] public void Count()
133 DataTable dt = DataProvider.CreateUniqueConstraint();
134 Assert.AreEqual(1, dt.Constraints.Count, "CN14");
138 dt.Constraints.Add("constraint2",dt.Columns["String1"],false);
139 Assert.AreEqual(2, dt.Constraints.Count, "CN15");
143 dt.Constraints.Remove("constraint2");
144 Assert.AreEqual(1, dt.Constraints.Count, "CN16");
147 [Test] public void GetEnumerator()
149 DataTable dt = DataProvider.CreateUniqueConstraint();
150 dt.Constraints.Add("constraint2",dt.Columns["String1"],false);
153 IEnumerator myEnumerator = dt.Constraints.GetEnumerator();
154 while (myEnumerator.MoveNext())
159 Assert.AreEqual(2, counter, "CN17");
162 [Test] public void IndexOf()
164 DataTable dt = DataProvider.CreateUniqueConstraint();
165 Assert.AreEqual(0, dt.Constraints.IndexOf(dt.Constraints[0]), "CN18");
168 Constraint con = new UniqueConstraint(dt.Columns["String1"],false);
170 dt.Constraints.Add(con);
171 Assert.AreEqual(1, dt.Constraints.IndexOf(con), "CN19");
173 //Remove it and try to look for it
175 dt.Constraints.Remove(con);
176 Assert.AreEqual(-1, dt.Constraints.IndexOf(con), "CN20");
180 [Test] public void IndexOf_ByName()
182 DataTable dt = DataProvider.CreateUniqueConstraint();
183 dt.Constraints[0].ConstraintName="name1";
184 Assert.AreEqual(0, dt.Constraints.IndexOf("name1"), "CN21");
187 Constraint con = new UniqueConstraint(dt.Columns["String1"],false);
188 con.ConstraintName="name2";
190 dt.Constraints.Add(con);
191 Assert.AreEqual(1, dt.Constraints.IndexOf("name2"), "CN22");
193 //Remove it and try to look for it
195 dt.Constraints.Remove(con);
196 Assert.AreEqual(-1, dt.Constraints.IndexOf("name2"), "CN23");
200 [Test] public void IsReadOnly()
202 DataTable dt = DataProvider.CreateUniqueConstraint();
203 Assert.AreEqual(false, dt.Constraints.IsReadOnly, "CN24");
206 [Test] public void IsSynchronized()
208 DataTable dt = DataProvider.CreateUniqueConstraint();
209 Assert.AreEqual(false, dt.Constraints.IsSynchronized, "CN25");
211 ConstraintCollection col = (ConstraintCollection)dt.Constraints.SyncRoot;
213 // lock(dt.Constraints.SyncRoot)
215 // Assert.AreEqual(true, col.IsSynchronized, "CN26");
220 [Test] public void Remove()
222 DataTable dt = DataProvider.CreateUniqueConstraint();
223 dt.Constraints.Remove(dt.Constraints[0]);
224 Assert.AreEqual(0, dt.Constraints.Count, "CN27");
227 [Test] public void Remove_ByNameSimple()
229 DataTable dt = DataProvider.CreateUniqueConstraint();
230 dt.Constraints[0].ConstraintName = "constraint1";
231 dt.Constraints.Remove("constraint1");
232 Assert.AreEqual(0, dt.Constraints.Count, "CN28");
235 [Test] public void Remove_ByNameWithAdd()
237 DataTable dt = DataProvider.CreateUniqueConstraint();
238 dt.Constraints[0].ConstraintName = "constraint1";
239 Constraint con = new UniqueConstraint(dt.Columns["String1"],false);
240 dt.Constraints.Add(con);
241 dt.Constraints.Remove(con);
243 Assert.AreEqual(1, dt.Constraints.Count, "CN29");
244 Assert.AreEqual("constraint1", dt.Constraints[0].ConstraintName, "CN30");
247 [Test] public void Remove_CollectionChangedEvent()
249 DataTable dt = DataProvider.CreateUniqueConstraint();
250 CollectionChangedFlag = false;
251 dt.Constraints.CollectionChanged += new CollectionChangeEventHandler(Constraints_CollectionChangedHandler);
252 dt.Constraints.Remove(dt.Constraints[0]);
253 Assert.AreEqual(true, CollectionChangedFlag, "CN31"); //Checking that event has raised
256 [Test] public void Remove_ByNameCollectionChangedEvent()
258 DataTable dt = DataProvider.CreateUniqueConstraint();
259 CollectionChangedFlag = false;
260 dt.Constraints.CollectionChanged += new CollectionChangeEventHandler(Constraints_CollectionChangedHandler);
261 dt.Constraints.Remove("constraint1");
262 Assert.AreEqual(true, CollectionChangedFlag, "CN32"); //Checking that event has raised
266 [Test] public void add_CollectionChanged()
268 DataTable dt = DataProvider.CreateParentDataTable();
269 CollectionChangedFlag = false;
270 dt.Constraints.CollectionChanged += new CollectionChangeEventHandler(Constraints_CollectionChangedHandler);
271 dt = DataProvider.CreateUniqueConstraint(dt);
272 Assert.AreEqual(true, CollectionChangedFlag, "CN33");
275 private void Constraints_CollectionChangedHandler(object sender, CollectionChangeEventArgs e)
277 CollectionChangedFlag = true;