All pastes #269088 Raw Edit

Nagappan

public text v1 · immutable
·published 2006-12-06 07:23 UTC
rendered paste body
//Tests to check the behavior of ReadXmlSchema and WriteXmlSchema



using System;

using System.Data;

using System.Data.Odbc;

using System.IO;	

using System.Xml;

using NUnit.Framework;



namespace Monotests_System.Data

{

	[TestFixture]	

	public class DataTableTest3

	{

		string fileName1 = "TestFile3.xml";

		DataSet dataSet = null;

		DataTable parentTable = null;

		DataTable childTable = null;

		DataTable secondChildTable = null;



		private void MakeParentTable ()

		{

			// Create a new Table

			parentTable = new DataTable ("ParentTable");

			dataSet = new DataSet ("XmlSchemaDataSet");

			DataColumn column;

			DataRow row;

 

			// Create new DataColumn, set DataType, 

			// ColumnName and add to Table.    

			column = new DataColumn ();

			column.DataType = System.Type.GetType ("System.Int32");

			column.ColumnName = "id";

			column.Unique = true;

			// Add the Column to the DataColumnCollection.

			parentTable.Columns.Add (column);



			// Create second column

			column = new DataColumn ();

			column.DataType = System.Type.GetType ("System.String");

			column.ColumnName = "ParentItem";

			column.AutoIncrement = false;

			column.Caption = "ParentItem";

			column.Unique = false;

			// Add the column to the table

			parentTable.Columns.Add (column);



			// Create third column.

			column = new DataColumn ();

			column.DataType = System.Type.GetType ("System.Int32");

			column.ColumnName = "DepartmentID";

			column.Caption = "DepartmentID";

			// Add the column to the table.

			parentTable.Columns.Add (column);

 



			// Make the ID column the primary key column.

			DataColumn [] PrimaryKeyColumns = new DataColumn [2];

			PrimaryKeyColumns [0] = parentTable.Columns ["id"];

			PrimaryKeyColumns [1] = parentTable.Columns ["DepartmentID"];

			parentTable.PrimaryKey = PrimaryKeyColumns;



			dataSet.Tables.Add (parentTable);

 

			// Create three new DataRow objects and add 

			// them to the DataTable

			for (int i = 0; i <= 2; i++)

			{

				row = parentTable.NewRow ();

				row ["id"] = i + 1 ;

				row ["ParentItem"] = "ParentItem " + (i + 1);

				row ["DepartmentID"] = i + 1;

				parentTable.Rows.Add (row);

			}

		}		



		private void MakeChildTable ()

		{

			// Create a new Table

			childTable = new DataTable ("ChildTable");

			DataColumn column;

			DataRow row;

 

			// Create first column and add to the DataTable.

			column = new DataColumn ();

			column.DataType= System.Type.GetType ("System.Int32");

			column.ColumnName = "ChildID";

			column.AutoIncrement = true;

			column.Caption = "ID";

			column.Unique = true;

			

			// Add the column to the DataColumnCollection

			childTable.Columns.Add (column);

			 

			// Create second column

			column = new DataColumn ();

			column.DataType= System.Type.GetType ("System.String");

			column.ColumnName = "ChildItem";

			column.AutoIncrement = false;

			column.Caption = "ChildItem";

			column.Unique = false;

			childTable.Columns.Add (column);

			 

			//Create third column

			column = new DataColumn ();

			column.DataType= System.Type.GetType ("System.Int32");

			column.ColumnName = "ParentID";

			column.AutoIncrement = false;

			column.Caption = "ParentID";

			column.Unique = false;

			childTable.Columns.Add (column);



			dataSet.Tables.Add (childTable);

 

			// Create three sets of DataRow objects, 

			// five rows each, and add to DataTable.

			for(int i = 0; i <= 1; i ++)

			{

				row = childTable.NewRow ();

				row ["childID"] = i + 1;

				row ["ChildItem"] = "ChildItem " + (i + 1);

				row ["ParentID"] = 1 ;

				childTable.Rows.Add (row);

			}		

			for(int i = 0; i <= 1; i ++)

			{

				row = childTable.NewRow ();	

				row ["childID"] = i + 5;

				row ["ChildItem"] = "ChildItem " + (i + 1);

				row ["ParentID"] = 2 ;

				childTable.Rows.Add (row);

			}

			for(int i = 0; i <= 1; i ++)

			{

				row = childTable.NewRow ();

				row ["childID"] = i + 10;

				row ["ChildItem"] = "ChildItem " + (i + 1);

				row ["ParentID"] = 3 ;

				childTable.Rows.Add (row);

			}

		}



		private void MakeSecondChildTable ()

		{

			// Create a new Table

			secondChildTable = new DataTable ("SecondChildTable");

			DataColumn column;

			DataRow row;

 

			// Create first column and add to the DataTable.

			column = new DataColumn ();

			column.DataType= System.Type.GetType ("System.Int32");

			column.ColumnName = "ChildID";

			column.AutoIncrement = true;

			column.Caption = "ID";

			column.ReadOnly = true;

			column.Unique = true;

			

			// Add the column to the DataColumnCollection.

			secondChildTable.Columns.Add (column);

			 

			// Create second column.

			column = new DataColumn ();

			column.DataType= System.Type.GetType ("System.String");

			column.ColumnName = "ChildItem";

			column.AutoIncrement = false;

			column.Caption = "ChildItem";

			column.ReadOnly = false;

			column.Unique = false;

			secondChildTable.Columns.Add (column);

			 

			//Create third column.

			column = new DataColumn ();

			column.DataType= System.Type.GetType ("System.Int32");

			column.ColumnName = "ParentID";

			column.AutoIncrement = false;

			column.Caption = "ParentID";

			column.ReadOnly = false;

			column.Unique = false;

			secondChildTable.Columns.Add (column);



			//Create fourth column.

			column = new DataColumn ();

			column.DataType= System.Type.GetType ("System.Int32");

			column.ColumnName = "DepartmentID";

			column.Caption = "DepartmentID";

			column.Unique = false;

			secondChildTable.Columns.Add (column);





			dataSet.Tables.Add (secondChildTable);



			// Create three sets of DataRow objects, 

			// five rows each, and add to DataTable.

			for(int i = 0; i <= 1; i++)

			{

				row = secondChildTable.NewRow ();

				row ["childID"] = i + 1;

				row ["ChildItem"] = "SecondChildItem " + (i + 1);

				row ["ParentID"] = 1 ;

				row ["DepartmentID"] = 1; 

				secondChildTable.Rows.Add (row);

			}		

			for(int i = 0;i <= 1;i++)

			{

				row = secondChildTable.NewRow ();	

				row ["childID"] = i + 5;

				row ["ChildItem"] = "SecondChildItem " + (i + 1);

				row ["ParentID"] = 2;

				row ["DepartmentID"] = 2;

				secondChildTable.Rows.Add (row);

			}

			for(int i = 0;i <= 1;i++)

			{

				row = secondChildTable.NewRow ();

				row ["childID"] = i + 10;

				row ["ChildItem"] = "SecondChildItem " + (i + 1);

				row ["ParentID"] = 3 ;

				row ["DepartmentID"] = 3;

				secondChildTable.Rows.Add (row);

			}

		}



		private void MakeDataRelation ()

		{

			DataColumn parentColumn = dataSet.Tables ["ParentTable"].Columns ["id"];

			DataColumn childColumn = dataSet.Tables ["ChildTable"].Columns ["ParentID"];

			DataRelation relation = new DataRelation ("ParentChild_Relation1", parentColumn, childColumn);

			dataSet.Tables ["ChildTable"].ParentRelations.Add (relation);

	

			DataColumn [] parentColumn1 = new DataColumn [2];

			DataColumn [] childColumn1 = new DataColumn [2];



			parentColumn1 [0] = dataSet.Tables ["ParentTable"].Columns ["id"];

			parentColumn1 [1] = dataSet.Tables ["ParentTable"].Columns ["DepartmentID"];

				

			childColumn1 [0] = dataSet.Tables ["SecondChildTable"].Columns ["ParentID"];

			childColumn1 [1] = dataSet.Tables ["SecondChildTable"].Columns ["DepartmentID"];

 

			DataRelation secondRelation = new DataRelation("ParentChild_Relation2", parentColumn1, childColumn1);

			dataSet.Tables ["SecondChildTable"].ParentRelations.Add (secondRelation);

		}



		//Test properties of a table which does not belongs to a DataSet

		private void TestTableSchema (DataTable table, string tableName, DataSet ds)

		{

			//Check Properties of Table

			Assert.AreEqual ("", table.Namespace, "#1");

                        Assert.AreEqual (ds, table.DataSet, "#2");  

                        Assert.AreEqual (3, table.Columns.Count, "#3");

                        Assert.AreEqual (0, table.Rows.Count, "#4");

                        Assert.AreEqual (false, table.CaseSensitive, "#5");

			Assert.AreEqual (tableName, table.TableName, "#6");

			Assert.AreEqual (2, table.Constraints.Count, "#7"); 

                        Assert.AreEqual ("", table.Prefix, "#8"); 

			Assert.AreEqual ("Constraint1", table.Constraints [0].ToString (), "#9");

			Assert.AreEqual ("Constraint2", table.Constraints [1].ToString (), "#10");

			Assert.AreEqual ("System.Data.UniqueConstraint", table.Constraints [0].GetType ().ToString (), "#11");

			Assert.AreEqual ("System.Data.UniqueConstraint", table.Constraints [1].GetType ().ToString (), "#12");

			Assert.AreEqual (2, table.PrimaryKey.Length, "#13");

			Assert.AreEqual ("id", table.PrimaryKey [0].ToString (), "#14");

			Assert.AreEqual ("DepartmentID", table.PrimaryKey [1].ToString (), "#15");

			

			Assert.AreEqual (0, table.ParentRelations.Count, "#16");

			Assert.AreEqual (0, table.ChildRelations.Count, "#17");



			//Check properties of each column

			//First Column

			DataColumn col = table.Columns [0];

                        Assert.AreEqual (false, col.AllowDBNull, "#18"); 

                        Assert.AreEqual (false, col.AutoIncrement, "#19"); 

                        Assert.AreEqual (0, col.AutoIncrementSeed, "#20"); 

                        Assert.AreEqual (1, col.AutoIncrementStep, "#21"); 

                        Assert.AreEqual ("Element", col.ColumnMapping.ToString (), "#22"); 

                        Assert.AreEqual ("id", col.Caption, "#23"); 

                        Assert.AreEqual ("id", col.ColumnName, "#24"); 

                        Assert.AreEqual ("System.Int32", col.DataType.ToString (), "#25"); 

                        Assert.AreEqual ("", col.DefaultValue.ToString (), "#26"); 

                        Assert.AreEqual (false, col.DesignMode, "#27"); 

                        Assert.AreEqual ("System.Data.PropertyCollection", col.ExtendedProperties.ToString (), "#28");

			Assert.AreEqual (-1, col.MaxLength, "#29"); 

                        Assert.AreEqual (0, col.Ordinal, "#30"); 

                        Assert.AreEqual ("", col.Prefix, "#31"); 

                        Assert.AreEqual (tableName, col.Table.ToString (), "#32"); 

                        Assert.AreEqual (true, col.Unique, "#33");



			//Second Column

			col = table.Columns [1];

			Assert.AreEqual (true, col.AllowDBNull, "#34");

			Assert.AreEqual (false, col.AutoIncrement, "#35");

			Assert.AreEqual (0, col.AutoIncrementSeed, "#36");

			Assert.AreEqual (1, col.AutoIncrementStep, "#37");

			Assert.AreEqual ("Element", col.ColumnMapping.ToString (), "#38");

			Assert.AreEqual ("ParentItem", col.Caption, "#39");

			Assert.AreEqual ("ParentItem", col.ColumnName, "#40");

			Assert.AreEqual ("System.String", col.DataType.ToString (), "#41");

			Assert.AreEqual ("", col.DefaultValue.ToString (), "#42");

			Assert.AreEqual (false, col.DesignMode, "#43");

			Assert.AreEqual ("System.Data.PropertyCollection", col.ExtendedProperties.ToString (), "#44");

			Assert.AreEqual (-1, col.MaxLength, "#45");

			Assert.AreEqual (1, col.Ordinal, "#46");

			Assert.AreEqual ("", col.Prefix, "#47");

			Assert.AreEqual (tableName, col.Table.ToString (), "#48");

			Assert.AreEqual (false, col.Unique, "#49");



			//Third Column

			col = table.Columns [2];

			Assert.AreEqual (false, col.AllowDBNull, "#50");

			Assert.AreEqual (false, col.AutoIncrement, "#51");

			Assert.AreEqual (0, col.AutoIncrementSeed, "#52");

			Assert.AreEqual (1, col.AutoIncrementStep, "#53");

			Assert.AreEqual ("Element", col.ColumnMapping.ToString (), "#54");

			Assert.AreEqual ("DepartmentID", col.Caption, "#55");

			Assert.AreEqual ("DepartmentID", col.ColumnName, "#56");

			Assert.AreEqual ("System.Int32", col.DataType.ToString (), "#57");

			Assert.AreEqual ("", col.DefaultValue.ToString (), "#58");

			Assert.AreEqual (false, col.DesignMode, "#59");

			Assert.AreEqual ("System.Data.PropertyCollection", col.ExtendedProperties.ToString (), "#60");

			Assert.AreEqual (-1, col.MaxLength, "#61");

			Assert.AreEqual (2, col.Ordinal, "#62");

			Assert.AreEqual ("", col.Prefix, "#63");

			Assert.AreEqual (tableName, col.Table.ToString (), "#64");

			Assert.AreEqual (false, col.Unique, "#65");

		}



		private void TestParentTableSchema (DataTable table, string tableName, DataSet ds)

		{

			//Check Properties of Table

			Assert.AreEqual ("", table.Namespace, "#1");

                        Assert.AreEqual (ds.DataSetName, table.DataSet.DataSetName, "#2");  

                        Assert.AreEqual (3, table.Columns.Count, "#3");

                        Assert.AreEqual (0, table.Rows.Count, "#4");

                        Assert.AreEqual (false, table.CaseSensitive, "#5");

			Assert.AreEqual ("ParentTable", table.TableName, "#6");

			Assert.AreEqual (2, table.Constraints.Count, "#7"); 

                        Assert.AreEqual ("", table.Prefix, "#8"); 

                        

                        //Check Constraints

			Assert.AreEqual ("Constraint1", table.Constraints [0].ToString (), "#9");

			Assert.AreEqual ("Constraint2", table.Constraints [1].ToString (), "#10");

			Assert.AreEqual ("System.Data.UniqueConstraint", table.Constraints [0].GetType ().ToString (), "#11");

			Assert.AreEqual ("System.Data.UniqueConstraint", table.Constraints [1].GetType ().ToString (), "#12");

			Assert.AreEqual (2, table.PrimaryKey.Length, "#13");

			Assert.AreEqual ("id", table.PrimaryKey [0].ToString (), "#14");

			Assert.AreEqual ("DepartmentID", table.PrimaryKey [1].ToString (), "#15");

			

			//Check Relations of the ParentTable	

			Assert.AreEqual (0, table.ParentRelations.Count, "#16");

			Assert.AreEqual (2, table.ChildRelations.Count, "#17");

			Assert.AreEqual ("ParentChild_Relation1", table.ChildRelations [0].ToString (), "#18");

			Assert.AreEqual ("ParentChild_Relation2", table.ChildRelations [1].ToString (), "#19");

			Assert.AreEqual ("ChildTable", table.ChildRelations [0].ChildTable.TableName, "#20");	

			Assert.AreEqual ("SecondChildTable", table.ChildRelations [1].ChildTable.TableName, "#21");	

				

			Assert.AreEqual (1, table.ChildRelations [0].ParentColumns.Length, "#22");	

			Assert.AreEqual ("id", table.ChildRelations [0].ParentColumns [0].ColumnName, "#23");

			Assert.AreEqual (1, table.ChildRelations [0].ChildColumns.Length, "#24");

			Assert.AreEqual ("ParentID", table.ChildRelations [0].ChildColumns [0].ColumnName, "#25");

				

			Assert.AreEqual (2, table.ChildRelations [1].ParentColumns.Length, "#26");	

			Assert.AreEqual ("id", table.ChildRelations [1].ParentColumns [0].ColumnName, "#27");

			Assert.AreEqual ("DepartmentID", table.ChildRelations [1].ParentColumns [1].ColumnName, "#28");	

			Assert.AreEqual (2, table.ChildRelations [1].ChildColumns.Length, "#29");

			

			Assert.AreEqual ("ParentID", table.ChildRelations [1].ChildColumns [0].ColumnName, "#30");

			Assert.AreEqual ("DepartmentID", table.ChildRelations [1].ChildColumns [1].ColumnName, "#31");



			//Check properties of each column

			//First Column

			DataColumn col = table.Columns [0];

                        Assert.AreEqual (false, col.AllowDBNull, "#32"); 

                        Assert.AreEqual (false, col.AutoIncrement, "#33"); 

                        Assert.AreEqual (0, col.AutoIncrementSeed, "#34"); 

                        Assert.AreEqual (1, col.AutoIncrementStep, "#35"); 

                        Assert.AreEqual ("Element", col.ColumnMapping.ToString (), "#36"); 

                        Assert.AreEqual ("id", col.Caption, "#37"); 

                        Assert.AreEqual ("id", col.ColumnName, "#38"); 

                        Assert.AreEqual ("System.Int32", col.DataType.ToString (), "#39"); 

                        Assert.AreEqual ("", col.DefaultValue.ToString (), "#40"); 

                        Assert.AreEqual (false, col.DesignMode, "#41"); 

                        Assert.AreEqual ("System.Data.PropertyCollection", col.ExtendedProperties.ToString (), "#42");

			Assert.AreEqual (-1, col.MaxLength, "#43"); 

                        Assert.AreEqual (0, col.Ordinal, "#44"); 

                        Assert.AreEqual ("", col.Prefix, "#45"); 

                        Assert.AreEqual ("ParentTable", col.Table.ToString (), "#46"); 

                        Assert.AreEqual (true, col.Unique, "#47");



			//Second Column

			col = table.Columns [1];

			Assert.AreEqual (true, col.AllowDBNull, "#48");

			Assert.AreEqual (false, col.AutoIncrement, "#49");

			Assert.AreEqual (0, col.AutoIncrementSeed, "#50");

			Assert.AreEqual (1, col.AutoIncrementStep, "#51");

			Assert.AreEqual ("Element", col.ColumnMapping.ToString (), "#52");

			Assert.AreEqual ("ParentItem", col.Caption, "#53");

			Assert.AreEqual ("ParentItem", col.ColumnName, "#54");

			Assert.AreEqual ("System.String", col.DataType.ToString (), "#55");

			Assert.AreEqual ("", col.DefaultValue.ToString (), "#56");

			Assert.AreEqual (false, col.DesignMode, "#57");

			Assert.AreEqual ("System.Data.PropertyCollection", col.ExtendedProperties.ToString (), "#58");

			Assert.AreEqual (-1, col.MaxLength, "#59");

			Assert.AreEqual (1, col.Ordinal, "#60");

			Assert.AreEqual ("", col.Prefix, "#61");

			Assert.AreEqual ("ParentTable", col.Table.ToString (), "#62");

			Assert.AreEqual (false, col.Unique, "#63");



			//Third Column

			col = table.Columns [2];

			Assert.AreEqual (false, col.AllowDBNull, "#64");

			Assert.AreEqual (false, col.AutoIncrement, "#65");

			Assert.AreEqual (0, col.AutoIncrementSeed, "#66");

			Assert.AreEqual (1, col.AutoIncrementStep, "#67");

			Assert.AreEqual ("Element", col.ColumnMapping.ToString (), "#68");

			Assert.AreEqual ("DepartmentID", col.Caption, "#69");

			Assert.AreEqual ("DepartmentID", col.ColumnName, "#70");

			Assert.AreEqual ("System.Int32", col.DataType.ToString (), "#71");

			Assert.AreEqual ("", col.DefaultValue.ToString (), "#72");

			Assert.AreEqual (false, col.DesignMode, "#73");

			Assert.AreEqual ("System.Data.PropertyCollection", col.ExtendedProperties.ToString (), "#74");

			Assert.AreEqual (-1, col.MaxLength, "#75");

			Assert.AreEqual (2, col.Ordinal, "#76");

			Assert.AreEqual ("", col.Prefix, "#77");

			Assert.AreEqual ("ParentTable", col.Table.ToString (), "#78");

			Assert.AreEqual (false, col.Unique, "#79");

			

		}



		[Test]

		public void XmlSchemaTest1 ()

		{

			

			MakeParentTable ();

			//Detach the table from the DataSet

			dataSet.Tables.Remove (parentTable);

			FileStream stream = new FileStream (fileName1, FileMode.Create);

			//Write

			parentTable.WriteXmlSchema (stream);

			stream.Dispose ();



			//Read

			stream = new FileStream (fileName1, FileMode.Open);

			DataTable table = new DataTable ();

			table.ReadXmlSchema (stream);



			TestTableSchema (table, parentTable.TableName, parentTable.DataSet);

			stream.Dispose ();

		}	

		



		[Test]

		public void XmlSchemaTest2 ()

		{

			MakeParentTable ();

			

			dataSet.Tables.Remove (parentTable);

			parentTable.TableName = String.Empty;

								

			FileStream stream = new FileStream (fileName1, FileMode.Create);

			try {

				parentTable.WriteXmlSchema (stream);

				Assert.Fail ("#1 Exception was expected as table name is not set");	

			} catch (Exception e) {

				Assert.AreEqual ("System.InvalidOperationException", e.GetType ().ToString (), "#2");	

			} finally {

				stream.Dispose ();

			}	

		}

		

		[Test]

		public void XmlSchemaTest3 ()

		{

			//Write

			MakeParentTable ();

			FileStream stream = new FileStream (fileName1, FileMode.Create);

			parentTable.WriteXmlSchema (stream);

			stream.Dispose ();



			//Read

			stream = new FileStream (fileName1, FileMode.Open);

			DataTable table = new DataTable ();

			table.ReadXmlSchema (stream);



			TestTableSchema (table, parentTable.TableName, null);

			stream.Dispose ();

		}

		

		[Test]

		public void XmlSchemaTest4 ()

		{

			MakeParentTable ();

			MakeChildTable ();

			MakeSecondChildTable ();

			MakeDataRelation ();



			//Write

			FileStream stream = new FileStream (fileName1, FileMode.Create);

			parentTable.WriteXmlSchema (stream, true);

			stream.Dispose ();



			

			//Read

			stream = new FileStream (fileName1, FileMode.Open);

			DataTable table = new DataTable ();

			table.ReadXmlSchema (stream);

			

			//Test Property of Parent	

			TestParentTableSchema (table, parentTable.TableName, parentTable.DataSet);

			

			

			//Check Properties of First Child Table

			DataTable firstChildTable = parentTable.ChildRelations [0].ChildTable; 

			Assert.AreEqual ("", firstChildTable.Namespace, "#1");

                        Assert.AreEqual ("XmlSchemaDataSet", firstChildTable.DataSet.DataSetName, "#2");  

                        Assert.AreEqual (3, firstChildTable.Columns.Count, "#3");

                        Assert.AreEqual (6, firstChildTable.Rows.Count, "#4");  

                        Assert.AreEqual (false, firstChildTable.CaseSensitive, "#5");

			Assert.AreEqual ("ChildTable", firstChildTable.TableName, "#6");

			Assert.AreEqual ("", firstChildTable.Prefix, "#7"); 

                        Assert.AreEqual (2, firstChildTable.Constraints.Count, "#8");

			Assert.AreEqual ("Constraint1", firstChildTable.Constraints [0].ToString (), "#9");

			Assert.AreEqual ("ParentChild_Relation1", firstChildTable.Constraints [1].ToString (), "#10");

			Assert.AreEqual (1, firstChildTable.ParentRelations.Count, "#11");

			Assert.AreEqual (0, firstChildTable.ChildRelations.Count, "#12");

			Assert.AreEqual (0, firstChildTable.PrimaryKey.Length, "#13");

			

			//Check Properties of Second Child Table

			DataTable secondChildTable = parentTable.ChildRelations [1].ChildTable;

			Assert.AreEqual ("", secondChildTable.Namespace, "#14");

                        Assert.AreEqual ("XmlSchemaDataSet", secondChildTable.DataSet.DataSetName, "#15");  

                        Assert.AreEqual (4, secondChildTable.Columns.Count, "#16");

                        Assert.AreEqual (6, secondChildTable.Rows.Count, "#17");  

                        Assert.AreEqual (false, secondChildTable.CaseSensitive, "#18");

			Assert.AreEqual ("SecondChildTable", secondChildTable.TableName, "#19");

			Assert.AreEqual ("", secondChildTable.Prefix, "#20"); 

                        Assert.AreEqual (2, secondChildTable.Constraints.Count, "#21");

			Assert.AreEqual ("Constraint1", secondChildTable.Constraints [0].ToString (), "#22");

			Assert.AreEqual ("ParentChild_Relation2", secondChildTable.Constraints [1].ToString (), "#23");

			Assert.AreEqual (1, secondChildTable.ParentRelations.Count, "#24");;

			Assert.AreEqual (0, secondChildTable.ChildRelations.Count, "#25");

			Assert.AreEqual (0, secondChildTable.PrimaryKey.Length, "#26");			

			stream.Dispose ();		

			

		}

		

                [Test]

                public void XmlSchemaTest5 ()

                {

                	MakeParentTable ();

			MakeChildTable ();

			MakeSecondChildTable ();

			MakeDataRelation ();

			

			//Write

			FileStream stream = new FileStream (fileName1, FileMode.Create);

			childTable.WriteXmlSchema (stream);

			stream.Dispose ();

	

			

			//Read

			stream = new FileStream (fileName1, FileMode.Open);

			DataTable table = new DataTable (childTable.TableName);

			table.ReadXmlSchema (stream);

			

			//Check Properties of the table

			Assert.AreEqual ("", table.Namespace, "#1");

                        Assert.AreEqual (null, table.DataSet, "#2");  

                        Assert.AreEqual (3, table.Columns.Count, "#3");

                        Assert.AreEqual (0, table.Rows.Count, "#4");  

                        Assert.AreEqual (false, table.CaseSensitive, "#5");

			Assert.AreEqual ("ChildTable", table.TableName, "#6");

			Assert.AreEqual ("", table.Prefix, "#7"); 

			

                        Assert.AreEqual (1, table.Constraints.Count, "#8");

			Assert.AreEqual ("Constraint1", table.Constraints [0].ToString (), "#9");

			Assert.AreEqual ("System.Data.UniqueConstraint", table.Constraints [0].GetType().ToString (), "#10");

			Assert.AreEqual (0, table.ParentRelations.Count, "#11");

			Assert.AreEqual (0, table.ChildRelations.Count, "#12");

			Assert.AreEqual (0, table.PrimaryKey.Length, "#13");			

			

			//First Column

			DataColumn col = table.Columns [0];

			Assert.AreEqual (true, col.AllowDBNull, "#14"); 

                        Assert.AreEqual (true, col.AutoIncrement, "#15"); 

                        Assert.AreEqual (0, col.AutoIncrementSeed, "#16"); 

                        Assert.AreEqual (1, col.AutoIncrementStep, "#17"); 

                        Assert.AreEqual ("Element", col.ColumnMapping.ToString (), "#18"); 

                        Assert.AreEqual ("ChildID", col.ColumnName, "#19"); 

                        Assert.AreEqual ("System.Int32", col.DataType.ToString (), "#20"); 

                        Assert.AreEqual ("", col.DefaultValue.ToString (), "#21"); 

                        Assert.AreEqual (false, col.DesignMode, "#22"); 

                        Assert.AreEqual ("System.Data.PropertyCollection", col.ExtendedProperties.ToString (), "#23");

			Assert.AreEqual (-1, col.MaxLength, "#24"); 

                        Assert.AreEqual (0, col.Ordinal, "#25"); 

                        Assert.AreEqual ("", col.Prefix, "#26"); 

                        Assert.AreEqual ("ChildTable", col.Table.ToString (), "#27"); 

                        Assert.AreEqual (true, col.Unique, "#28");



			//Second Column

			col = table.Columns [1];

			Assert.AreEqual (true, col.AllowDBNull, "#29");

			Assert.AreEqual (false, col.AutoIncrement, "#30");

			Assert.AreEqual (0, col.AutoIncrementSeed, "#31");

			Assert.AreEqual (1, col.AutoIncrementStep, "#32");

			Assert.AreEqual ("Element", col.ColumnMapping.ToString (), "#33");

			Assert.AreEqual ("ChildItem", col.Caption, "#34");

			Assert.AreEqual ("ChildItem", col.ColumnName, "#35");

			Assert.AreEqual ("System.String", col.DataType.ToString (), "#36");

			Assert.AreEqual ("", col.DefaultValue.ToString (), "#37");

			Assert.AreEqual (false, col.DesignMode, "#38");

			Assert.AreEqual ("System.Data.PropertyCollection", col.ExtendedProperties.ToString (), "#39");

			Assert.AreEqual (-1, col.MaxLength, "#40");

			Assert.AreEqual (1, col.Ordinal, "#41");

			Assert.AreEqual ("", col.Prefix, "#42");

			Assert.AreEqual ("ChildTable", col.Table.ToString (), "#42");

			Assert.AreEqual (false, col.Unique, "#43");



			//Third Column

			col = table.Columns [2];

			Assert.AreEqual (true, col.AllowDBNull, "#44");

			Assert.AreEqual (false, col.AutoIncrement, "#45");

			Assert.AreEqual (0, col.AutoIncrementSeed, "#46");

			Assert.AreEqual (1, col.AutoIncrementStep, "#47");

			Assert.AreEqual ("Element", col.ColumnMapping.ToString (), "#48");

			Assert.AreEqual ("ParentID", col.Caption, "#49");

			Assert.AreEqual ("ParentID", col.ColumnName, "#50");

			Assert.AreEqual ("System.Int32", col.DataType.ToString (), "#51");

			Assert.AreEqual ("", col.DefaultValue.ToString (), "#52");

			Assert.AreEqual (false, col.DesignMode, "#53");

			Assert.AreEqual ("System.Data.PropertyCollection", col.ExtendedProperties.ToString (), "#54");

			Assert.AreEqual (-1, col.MaxLength, "#55");

			Assert.AreEqual (2, col.Ordinal, "#56");

			Assert.AreEqual ("", col.Prefix, "#57");

			Assert.AreEqual ("ChildTable", col.Table.ToString (), "#58");

			Assert.AreEqual (false, col.Unique, "#59");			

			

			stream.Dispose ();

				

                }

                

		[Test]

		public void XmlSchemaTest6 ()

		{

			MakeParentTable ();

			FileStream stream = new FileStream (fileName1, FileMode.Create);

			parentTable.WriteXmlSchema (stream);

			stream.Dispose ();



			DataTable table = new DataTable ();

			DataSet ds = new DataSet ();

			ds.Tables.Add (table);

			

			stream = new FileStream (fileName1, FileMode.Open);

			try {

				table.ReadXmlSchema (stream);

				Assert.Fail ("#1 Exception was expected");

			} catch (Exception e) {

				Assert.AreEqual ("System.ArgumentException", e.GetType ().ToString (), "#2");

			}

			stream.Dispose ();

		}

		

		

		[Test]

		public void XmlSchemaTest7 ()

		{

			string fileName2 = String.Empty;

			DataTable table = new DataTable ();

			

			try {

				table.ReadXmlSchema (fileName2);

				Assert.Fail ("#1 Exception was expected");

			} catch (Exception e) {

				Assert.AreEqual ("System.ArgumentException", e.GetType ().ToString (), "#2");	

			}	

		}



		[Test]

		public void XmlSchemaTest8 ()

		{

			MakeParentTable ();

			FileStream stream = new FileStream (fileName1, FileMode.Create);

			parentTable.WriteXmlSchema (stream);

			stream.Close ();

		

			//Create a table and define the schema partially

			DataTable table = new DataTable ();

			table.Columns.Add (new DataColumn (parentTable.Columns [0].ColumnName, typeof (int)));



			//ReadXmlSchema will not read any schema in this case

			table.ReadXmlSchema (fileName1);



			Assert.AreEqual ("", table.TableName, "");

			Assert.AreEqual (1, table.Columns.Count, "");

			Assert.AreEqual (0, table.Constraints.Count, "");

		}



		[Test]

		public void XmlSchemaTest9 ()

		{

			MakeParentTable ();

			FileStream stream = new FileStream (fileName1, FileMode.Create);

			parentTable.WriteXmlSchema (stream);

			stream.Close ();

		

			//Create a table and define the full schema 

			DataTable table = new DataTable ();

			table.Columns.Add (new DataColumn (parentTable.Columns [0].ColumnName, typeof (int)));

			table.Columns.Add (new DataColumn (parentTable.Columns [1].ColumnName, typeof (string)));

			table.Columns.Add (new DataColumn (parentTable.Columns [2].ColumnName, typeof (int)));



			//ReadXmlSchema will not read any schema in this case

			table.ReadXmlSchema (fileName1);



			Assert.AreEqual ("", table.TableName, "");

			Assert.AreEqual (3, table.Columns.Count, "");

			Assert.AreEqual (0, table.Constraints.Count, "");

		}

	}

}