--- /dev/null
+// DataRelationCollection.cs - Nunit Test Cases for for testing the DataRelationCollection
+// class
+// Author:
+//
+// Punit Kumar Todi ( punit_todi@da-iict.org )
+// (C) Punit Todi
+// (C) Novell Inc.
+
+using NUnit.Framework;
+using System;
+using System.Data;
+
+namespace MonoTests.System.Data
+{
+
+ [TestFixture]
+ public class DataRelationCollectionTest : Assertion
+ {
+ DataSet _dataset;
+ DataTable _tblparent,_tblchild;
+ DataRelation _relation;
+ [SetUp]
+ public void GetReady()
+ {
+ _dataset = new DataSet();
+ _tblparent = new DataTable("Customer");
+ _tblchild = new DataTable("Order");
+ _dataset.Tables.Add(_tblchild);
+ _dataset.Tables.Add(_tblparent);
+ _dataset.Tables.Add("Item");
+ _dataset.Tables["Customer"].Columns.Add("custid");
+ _dataset.Tables["Customer"].Columns.Add("custname");
+ _dataset.Tables["Order"].Columns.Add("oid");
+ _dataset.Tables["Order"].Columns.Add("custid");
+ _dataset.Tables["Order"].Columns.Add("itemid");
+ _dataset.Tables["Order"].Columns.Add("desc");
+ _dataset.Tables["Item"].Columns.Add("itemid");
+ _dataset.Tables["Item"].Columns.Add("desc");
+
+ }
+
+ [TearDown]
+ public void Clean()
+ {
+ _dataset.Relations.Clear();
+ }
+
+ [Test]
+ public void Add()
+ {
+ DataRelationCollection drcol = _dataset.Relations;
+ DataColumn parentCol = _dataset.Tables["Customer"].Columns["custid"];
+ DataColumn childCol = _dataset.Tables["Order"].Columns["custid"];
+ DataRelation dr = new DataRelation("CustOrder",parentCol,childCol);
+
+ drcol.Add(dr);
+ AssertEquals("test#1","CustOrder",drcol[0].RelationName);
+ drcol.Clear();
+
+ drcol.Add(parentCol,childCol);
+ AssertEquals("test#2",1,drcol.Count);
+ drcol.Clear();
+
+ drcol.Add("NewRelation",parentCol,childCol);
+ AssertEquals("test#3","NewRelation",drcol[0].RelationName);
+ drcol.Clear();
+
+ drcol.Add("NewRelation",parentCol,childCol,false);
+ AssertEquals("test#4",1,drcol.Count);
+ drcol.Clear();
+
+ drcol.Add("NewRelation",parentCol,childCol,true);
+ AssertEquals("test#5",1,drcol.Count);
+ drcol.Clear();
+ }
+
+ [Test]
+ [ExpectedException(typeof(ArgumentNullException))]
+ public void AddException1()
+ {
+ DataRelationCollection drcol = _dataset.Relations;
+ DataRelation drnull = null;
+ drcol.Add(drnull);
+ }
+
+ [Test]
+ [ExpectedException(typeof(ArgumentException))]
+ public void AddException2()
+ {
+ DataRelationCollection drcol = _dataset.Relations;
+ DataRelation dr1= new DataRelation("CustOrder"
+ ,_dataset.Tables["Customer"].Columns["custid"]
+ ,_dataset.Tables["Order"].Columns["custid"]);
+ drcol.Add(dr1);
+ drcol.Add(dr1);
+ }
+
+ [Test]
+ [ExpectedException(typeof(DuplicateNameException))]
+ public void AddException3()
+ {
+ DataRelationCollection drcol = _dataset.Relations;
+ DataRelation dr1= new DataRelation("DuplicateName"
+ ,_dataset.Tables["Customer"].Columns["custid"]
+ ,_dataset.Tables["Order"].Columns["custid"]);
+ DataRelation dr2 = new DataRelation("DuplicateName"
+ ,_dataset.Tables["Item"].Columns["itemid"]
+ ,_dataset.Tables["Order"].Columns["custid"]);
+
+ drcol.Add(dr1);
+ drcol.Add(dr2);
+ }
+
+
+ [Test]
+ public void AddRange()
+ {
+ DataRelationCollection drcol = _dataset.Relations;
+ DataRelation dr1= new DataRelation("CustOrder"
+ ,_dataset.Tables["Customer"].Columns["custid"]
+ ,_dataset.Tables["Order"].Columns["custid"]);
+ DataRelation dr2 = new DataRelation("ItemOrder"
+ ,_dataset.Tables["Item"].Columns["itemid"]
+ ,_dataset.Tables["Order"].Columns["custid"]);
+ drcol.AddRange(new DataRelation[] {dr1,dr2});
+
+ AssertEquals("test#1","CustOrder",drcol[0].RelationName);
+ AssertEquals("test#2","ItemOrder",drcol[1].RelationName);
+ }
+
+ [Test]
+ public void CanRemove()
+ {
+ DataRelationCollection drcol = _dataset.Relations;
+ DataColumn parentCol = _dataset.Tables["Customer"].Columns["custid"];
+ DataColumn childCol = _dataset.Tables["Order"].Columns["custid"];
+ DataRelation dr = new DataRelation("CustOrder",parentCol,childCol);
+
+ drcol.Add(dr);
+ AssertEquals("test#1",true,drcol.CanRemove(dr));
+ dr = null;
+ AssertEquals("test#2",false,drcol.CanRemove(dr));
+ DataRelation dr2 = new DataRelation("ItemOrder"
+ ,_dataset.Tables["Item"].Columns["itemid"]
+ ,_dataset.Tables["Order"].Columns["custid"]);
+ AssertEquals("test#3",false,drcol.CanRemove(dr2));
+ }
+
+ [Test]
+ public void Clear()
+ {
+ DataRelationCollection drcol = _dataset.Relations;
+ DataColumn parentCol = _dataset.Tables["Customer"].Columns["custid"];
+ DataColumn childCol = _dataset.Tables["Order"].Columns["custid"];
+ drcol.Add(new DataRelation("CustOrder",parentCol,childCol));
+ drcol.Add("ItemOrder",_dataset.Tables["Item"].Columns["itemid"]
+ ,_dataset.Tables["Order"].Columns["itemid"]);
+ drcol.Clear();
+ AssertEquals("test#1",0,drcol.Count);
+ }
+
+ [Test]
+ public void Contains()
+ {
+ DataRelationCollection drcol = _dataset.Relations;
+ DataColumn parentCol = _dataset.Tables["Customer"].Columns["custid"];
+ DataColumn childCol = _dataset.Tables["Order"].Columns["custid"];
+ DataRelation dr = new DataRelation("CustOrder",parentCol,childCol);
+
+ drcol.Add(dr);
+ AssertEquals("test#1",true,drcol.Contains(dr.RelationName));
+ string drnull = "";
+ AssertEquals("test#2",false,drcol.Contains(drnull));
+ dr = new DataRelation("newRelation",childCol,parentCol);
+ AssertEquals("test#3",false,drcol.Contains("NoSuchRelation"));
+ }
+
+ [Test]
+ public void CopyTo()
+ {
+ DataRelationCollection drcol = _dataset.Relations;
+ drcol.Add("CustOrder"
+ ,_dataset.Tables["Customer"].Columns["custid"]
+ ,_dataset.Tables["Order"].Columns["custid"]);
+ drcol.Add("ItemOrder"
+ ,_dataset.Tables["Item"].Columns["itemid"]
+ ,_dataset.Tables["Order"].Columns["custid"]);
+
+ DataRelation [] array = new DataRelation[2];
+ drcol.CopyTo(array,0);
+ AssertEquals("test#1",2,array.Length);
+ AssertEquals("test#2", "CustOrder", array[0].RelationName);
+ AssertEquals("test#3", "ItemOrder", array[1].RelationName);
+
+ DataRelation [] array1 = new DataRelation[4];
+ drcol.CopyTo(array1,2);
+ AssertEquals("test#4", null, array1[0]);
+ AssertEquals("test#5", null, array1[1]);
+ AssertEquals("test#6", "CustOrder", array1[2].RelationName);
+ AssertEquals("test#7", "ItemOrder", array1[3].RelationName);
+ }
+
+ [Test]
+ public void Equals()
+ {
+ DataRelationCollection drcol = _dataset.Relations;
+ drcol.Add("CustOrder"
+ ,_dataset.Tables["Customer"].Columns["custid"]
+ ,_dataset.Tables["Order"].Columns["custid"]);
+ drcol.Add("ItemOrder"
+ ,_dataset.Tables["Item"].Columns["itemid"]
+ ,_dataset.Tables["Order"].Columns["custid"]);
+ DataSet newds = new DataSet();
+ DataRelationCollection drcol1 = newds.Relations;
+ DataRelationCollection drcol2 = _dataset.Relations;
+
+ AssertEquals("test#1", true, drcol.Equals(drcol));
+ AssertEquals("test#2", true, drcol.Equals(drcol2));
+
+ AssertEquals("test#3", false, drcol1.Equals(drcol));
+ AssertEquals("test#4", false, drcol.Equals(drcol1));
+
+ AssertEquals("test#5", true, Object.Equals(drcol,drcol2));
+ AssertEquals("test#6", false, Object.Equals(drcol,drcol1));
+
+ }
+ [Test]
+ public void IndexOf()
+ {
+ DataRelationCollection drcol = _dataset.Relations;
+ DataRelation dr1= new DataRelation("CustOrder"
+ ,_dataset.Tables["Customer"].Columns["custid"]
+ ,_dataset.Tables["Order"].Columns["custid"]);
+ DataRelation dr2 = new DataRelation("ItemOrder"
+ ,_dataset.Tables["Item"].Columns["itemid"]
+ ,_dataset.Tables["Order"].Columns["custid"]);
+ drcol.Add(dr1);
+ drcol.Add(dr2);
+
+ AssertEquals("test#1",0,drcol.IndexOf(dr1));
+ AssertEquals("test#2",1,drcol.IndexOf(dr2));
+
+ AssertEquals("test#3",0,drcol.IndexOf("CustOrder"));
+ AssertEquals("test#4",1,drcol.IndexOf("ItemOrder"));
+
+ AssertEquals("test#5",0,drcol.IndexOf(drcol[0]));
+ AssertEquals("test#6",1,drcol.IndexOf(drcol[1]));
+
+ AssertEquals("test#7",-1,drcol.IndexOf("_noRelation_"));
+ DataRelation newdr = new DataRelation("newdr"
+ ,_dataset.Tables["Customer"].Columns["custid"]
+ ,_dataset.Tables["Order"].Columns["custid"]);
+
+ AssertEquals("test#8",-1,drcol.IndexOf(newdr));
+ }
+
+ [Test]
+ public void Remove()
+ {
+ DataRelationCollection drcol = _dataset.Relations;
+ DataRelation dr1= new DataRelation("CustOrder"
+ ,_dataset.Tables["Customer"].Columns["custid"]
+ ,_dataset.Tables["Order"].Columns["custid"]);
+ DataRelation dr2 = new DataRelation("ItemOrder"
+ ,_dataset.Tables["Item"].Columns["itemid"]
+ ,_dataset.Tables["Order"].Columns["custid"]);
+ drcol.Add(dr1);
+ drcol.Add(dr2);
+
+ drcol.Remove(dr1);
+ AssertEquals("test#1", false, drcol.Contains(dr1.RelationName));
+ drcol.Add(dr1);
+
+ drcol.Remove("CustOrder");
+ AssertEquals("test#2", false, drcol.Contains("CustOrder"));
+ drcol.Add(dr1);
+
+ DataRelation drnull = null;
+ try
+ {
+ drcol.Remove(drnull);
+ Fail("Err:: drcol.Remove(null) must fail");
+ }
+ catch(Exception e)
+ {
+ AssertEquals("test#3", typeof (ArgumentNullException), e.GetType());
+ }
+
+ DataRelation newdr = new DataRelation("newdr"
+ ,_dataset.Tables["Customer"].Columns["custid"]
+ ,_dataset.Tables["Order"].Columns["custid"]);
+ try
+ {
+ drcol.Remove(newdr);
+ Fail("Err: removed relation which not part of collection");
+ }
+ catch (Exception e)
+ {
+ AssertEquals ("test#4", typeof(ArgumentException), e.GetType());
+ }
+ try
+ {
+ drcol.Remove("newdr");
+ Fail("Err: removed relation which not part of collection");
+ }
+ catch (Exception e)
+ {
+ AssertEquals ("test#5", typeof(IndexOutOfRangeException), e.GetType());
+ }
+
+
+ }
+
+ [Test]
+ public void RemoveAt()
+ {
+ DataRelationCollection drcol = _dataset.Relations;
+ DataRelation dr1= new DataRelation("CustOrder"
+ ,_dataset.Tables["Customer"].Columns["custid"]
+ ,_dataset.Tables["Order"].Columns["custid"]);
+ DataRelation dr2 = new DataRelation("ItemOrder"
+ ,_dataset.Tables["Item"].Columns["itemid"]
+ ,_dataset.Tables["Order"].Columns["custid"]);
+ drcol.Add(dr1);
+ drcol.Add(dr2);
+
+ try
+ {
+ drcol.RemoveAt(-1);
+ Fail("the index was out of bound: must have failed");
+ }
+ catch(Exception e)
+ {
+ AssertEquals ("test#1", typeof (ArgumentException), e.GetType ());
+ AssertEquals ("test#2", "There is no row at position -1.", e.Message);
+ }
+ try
+ {
+ drcol.RemoveAt(101);
+ Fail("the index was out of bound: must have failed");
+ }
+ catch(Exception e)
+ {
+ AssertEquals ("test#3", typeof (ArgumentException), e.GetType ());
+ AssertEquals ("test#4", "There is no row at position -1.", e.Message);
+ }
+
+ drcol.RemoveAt (1);
+ AssertEquals ("test#5", false, drcol.Contains(dr2.RelationName));
+ drcol.RemoveAt (0);
+ AssertEquals ("test#6", false, drcol.Contains(dr1.RelationName));
+ }
+
+ [Test]
+ public void ToStringTest()
+ {
+ DataRelationCollection drcol = _dataset.Relations;
+ DataRelation dr1= new DataRelation("CustOrder"
+ ,_dataset.Tables["Customer"].Columns["custid"]
+ ,_dataset.Tables["Order"].Columns["custid"]);
+ drcol.Add(dr1);
+ AssertEquals("test#1","System.Data.DataRelationCollection",drcol.ToString());
+ System.Console.WriteLine(drcol.ToString());
+ }
+ }
+}