DataTableTest, ChangeLog, own_schema1.xsd, own_schema2.xsd)
authorHagit Yidov <hagity@mono-cvs.ximian.com>
Sun, 22 Oct 2006 13:28:18 +0000 (13:28 -0000)
committerHagit Yidov <hagity@mono-cvs.ximian.com>
Sun, 22 Oct 2006 13:28:18 +0000 (13:28 -0000)
svn path=/trunk/mcs/; revision=66875

mcs/class/System.Data/Test/System.Data/ChangeLog
mcs/class/System.Data/Test/System.Data/DataTableTest.cs
mcs/class/System.Data/Test/System.Data/own_schema1.xsd [new file with mode: 0644]
mcs/class/System.Data/Test/System.Data/own_schema2.xsd [new file with mode: 0644]

index d2626ae7e7550f9edde4a9a6ab7e7639223ca1d3..d815be4433b984bb2468fa17de7bf687e0638015 100644 (file)
@@ -1,3 +1,9 @@
+
+2006-10-12  Hagit Yidov <hagity@mainsoft.com>
+
+       * DataTableTest.cs : added tests for ReadXmlSchema() and WriteXmlSchema().
+(Some of the tests use following files: own_schema1.xsd, own_schema2.xsd, region.xml, store.xsd)
+
 2006-10-13  Gert Driesen  <drieseng@users.sourceforge.net>
 
        * DataRelationTest2.cs: Enabled test for bug #79233.
index bd8a1c18a06e801cb916d145c9dcd6dada0688a0..34b91adce42a0972db7a57b11bc0759bbad41312 100644 (file)
@@ -2,12 +2,12 @@
 //
 // Authors:
 //   Franklin Wise (gracenote@earthlink.net)
-//   Martin Willemoes Hansen (mwh@sysrq.dk)
-//   Hagit Yidov (hagity@mainsoft.com)
+//   Martin Willemoes Hansen (mwh@sysrq.dk)\r
+//   Hagit Yidov (hagity@mainsoft.com)\r
 // 
 // (C) Franklin Wise
-// (C) 2003 Martin Willemoes Hansen
-// (C) 2005 Mainsoft Corporation (http://www.mainsoft.com)
+// (C) 2003 Martin Willemoes Hansen\r
+// (C) 2005 Mainsoft Corporation (http://www.mainsoft.com)\r
 
 //
 // Copyright (C) 2004 Novell, Inc (http://www.novell.com)
@@ -39,14 +39,17 @@ using System.Data.SqlTypes;
 using System.Globalization;
 using System.IO;
 using System.Runtime.Serialization.Formatters.Binary;
-using System.Xml;
+using System.Xml;\r
+using MonoTests.System.Data.Utils;\r
+using System.Collections;
 
 namespace MonoTests.System.Data
 {
        [TestFixture]
-       public class DataTableTest : Assertion
-       {
-
+       public class DataTableTest :  DataSetAssertion
+       {\r
+               string EOL = Environment.NewLine;
+\r
                [Test]
                public void Ctor()
                {
@@ -1527,8 +1530,8 @@ namespace MonoTests.System.Data
 
                                [Test]
                                public void ColumnObjectTypeTest() {
-                                       DataTable dt = new DataTable();
-                                       dt.Columns.Add("Series Label", typeof(SqlInt32));
+                                       DataTable dt = new DataTable();\r
+                                       dt.Columns.Add("Series Label", typeof(SqlInt32));\r
                                        dt.Rows.Add(new object[] {"sss"});
                                        AssertEquals(1, dt.Rows.Count);
                                }
@@ -1540,865 +1543,2042 @@ namespace MonoTests.System.Data
                 
                 public void OnRowChanged (object src, DataRowChangeEventArgs args)
                 {
-                        rowActionChanged = args.Action;
-               }
-
-
-#if NET_2_0
-               #region DataTable.CreateDataReader Tests and DataTable.Load Tests
-
-               private DataTable dt;
-
-               private void localSetup () {
-                       dt = new DataTable ("test");
-                       dt.Columns.Add ("id", typeof (int));
-                       dt.Columns.Add ("name", typeof (string));
-                       dt.PrimaryKey = new DataColumn[] { dt.Columns["id"] };
-
-                       dt.Rows.Add (new object[] { 1, "mono 1" });
-                       dt.Rows.Add (new object[] { 2, "mono 2" });
-                       dt.Rows.Add (new object[] { 3, "mono 3" });
-
-                       dt.AcceptChanges ();
-               }
-
-               [Test]
-               public void CreateDataReader1 () {
-                       localSetup ();
-                       DataTableReader dtr = dt.CreateDataReader ();
-                       Assert ("HasRows", dtr.HasRows);
-                       AssertEquals ("CountCols", dt.Columns.Count, dtr.FieldCount);
-                       int ri = 0;
-                       while (dtr.Read ()) {
-                               for (int i = 0; i < dtr.FieldCount; i++) {
-                                       AssertEquals ("RowData-" + ri + "-" + i, dt.Rows[ri][i],
-                                               dtr[i]);
-                               }
-                               ri++;
-                       }
-               }
-
-               [Test]
-               public void CreateDataReader2 () {
-                       localSetup ();
-                       DataTableReader dtr = dt.CreateDataReader ();
-                       Assert ("HasRows", dtr.HasRows);
-                       AssertEquals ("CountCols", dt.Columns.Count, dtr.FieldCount);
-                       dtr.Read ();
-                       AssertEquals ("RowData0-0", 1, dtr[0]);
-                       AssertEquals ("RowData0-1", "mono 1", dtr[1]);
-                       dtr.Read ();
-                       AssertEquals ("RowData1-0", 2, dtr[0]);
-                       AssertEquals ("RowData1-1", "mono 2", dtr[1]);
-                       dtr.Read ();
-                       AssertEquals ("RowData2-0", 3, dtr[0]);
-                       AssertEquals ("RowData2-1", "mono 3", dtr[1]);
-               }
-
-               [Test]
-               public void Load_Basic () {
-                       localSetup ();
-                       DataTable dtLoad = new DataTable ("LoadBasic");
-                       dtLoad.Columns.Add ("id", typeof (int));
-                       dtLoad.Columns.Add ("name", typeof (string));
-                       dtLoad.Columns["id"].ReadOnly = true;
-                       dtLoad.Columns["name"].ReadOnly = true;
-                       dtLoad.PrimaryKey = new DataColumn[] { dtLoad.Columns["id"] };
-                       dtLoad.Rows.Add (new object[] { 1, "load 1" });
-                       dtLoad.Rows.Add (new object[] { 2, "load 2" });
-                       dtLoad.Rows.Add (new object[] { 3, "load 3" });
-                       dtLoad.AcceptChanges ();
-                       DataTableReader dtr = dt.CreateDataReader ();
-                       dtLoad.Load (dtr);
-                       AssertEquals ("NColumns", 2, dtLoad.Columns.Count);
-                       AssertEquals ("NRows", 3, dtLoad.Rows.Count);
-                       AssertEquals ("RowData0-0", 1, dtLoad.Rows[0][0]);
-                       AssertEquals ("RowData0-1", "mono 1", dtLoad.Rows[0][1]);
-                       AssertEquals ("RowData1-0", 2, dtLoad.Rows[1][0]);
-                       AssertEquals ("RowData1-1", "mono 2", dtLoad.Rows[1][1]);
-                       AssertEquals ("RowData2-0", 3, dtLoad.Rows[2][0]);
-                       AssertEquals ("RowData2-1", "mono 3", dtLoad.Rows[2][1]);
-               }
-
-               [Test]
-               public void Load_NoSchema () {
-                       localSetup ();
-                       DataTable dtLoad = new DataTable ("LoadNoSchema");
-                       DataTableReader dtr = dt.CreateDataReader ();
-                       dtLoad.Load (dtr);
-                       AssertEquals ("NColumns", 2, dtLoad.Columns.Count);
-                       AssertEquals ("NRows", 3, dtLoad.Rows.Count);
-                       AssertEquals ("RowData0-0", 1, dtLoad.Rows[0][0]);
-                       AssertEquals ("RowData0-1", "mono 1", dtLoad.Rows[0][1]);
-                       AssertEquals ("RowData1-0", 2, dtLoad.Rows[1][0]);
-                       AssertEquals ("RowData1-1", "mono 2", dtLoad.Rows[1][1]);
-                       AssertEquals ("RowData2-0", 3, dtLoad.Rows[2][0]);
-                       AssertEquals ("RowData2-1", "mono 3", dtLoad.Rows[2][1]);
-               }
-
-               internal struct fillErrorStruct {
-                       internal string error;
-                       internal string tableName;
-                       internal int rowKey;
-                       internal bool contFlag;
-                       internal void init (string tbl, int row, bool cont, string err) {
-                               tableName = tbl;
-                               rowKey = row;
-                               contFlag = cont;
-                               error = err;
-                       }
-               }
-               private fillErrorStruct[] fillErr = new fillErrorStruct[3];
-               private int fillErrCounter;
-               private void fillErrorHandler (object sender, FillErrorEventArgs e) {
-                       e.Continue = fillErr[fillErrCounter].contFlag;
-                       AssertEquals ("fillErr-T", fillErr[fillErrCounter].tableName, e.DataTable.TableName);
-                       AssertEquals ("fillErr-R", fillErr[fillErrCounter].rowKey, e.Values[0]);
-                       AssertEquals ("fillErr-C", fillErr[fillErrCounter].contFlag, e.Continue);
-                       AssertEquals ("fillErr-E", fillErr[fillErrCounter].error, e.Errors.Message);
-                       fillErrCounter++;
-               }
-
-               [Test]
-               [ExpectedException (typeof (ArgumentException))]
-               public void Load_Incompatible () {
-                       localSetup ();
-                       DataTable dtLoad = new DataTable ("LoadIncompatible");
-                       dtLoad.Columns.Add ("name", typeof (double));
-                       DataTableReader dtr = dt.CreateDataReader ();
-                       dtLoad.Load (dtr);
-               }
-               [Test]
-               [Category ("NotWorking")]
-               // Load doesn't have a third overload in System.Data
-               // and is commented-out below
-               public void Load_IncompatibleEHandlerT () {
-                       fillErrCounter = 0;
-                       fillErr[0].init ("LoadIncompatible", 1, true,
-                               "Input string was not in a correct format.Couldn't store <mono 1> in name Column.  Expected type is Double.");
-                       fillErr[1].init ("LoadIncompatible", 2, true,
-                               "Input string was not in a correct format.Couldn't store <mono 2> in name Column.  Expected type is Double.");
-                       fillErr[2].init ("LoadIncompatible", 3, true,
-                               "Input string was not in a correct format.Couldn't store <mono 3> in name Column.  Expected type is Double.");
-                       localSetup ();
-                       DataTable dtLoad = new DataTable ("LoadIncompatible");
-                       dtLoad.Columns.Add ("name", typeof (double));
-                       DataTableReader dtr = dt.CreateDataReader ();
-                       //dtLoad.Load (dtr,LoadOption.PreserveChanges,fillErrorHandler);
-               }
-               [Test]
-               [Category ("NotWorking")]
-               // Load doesn't have a third overload in System.Data
-               // and is commented-out below
-               [ExpectedException (typeof (ArgumentException))]
-               public void Load_IncompatibleEHandlerF () {
-                       fillErrCounter = 0;
-                       fillErr[0].init ("LoadIncompatible", 1, false,
-                               "Input string was not in a correct format.Couldn't store <mono 1> in name Column.  Expected type is Double.");
-                       localSetup ();
-                       DataTable dtLoad = new DataTable ("LoadIncompatible");
-                       dtLoad.Columns.Add ("name", typeof (double));
-                       DataTableReader dtr = dt.CreateDataReader ();
-                       //dtLoad.Load (dtr, LoadOption.PreserveChanges, fillErrorHandler);
-               }
-
-               [Test]
-               public void Load_ExtraColsEqualVal () {
-                       localSetup ();
-                       DataTable dtLoad = new DataTable ("LoadExtraCols");
-                       dtLoad.Columns.Add ("id", typeof (int));
-                       dtLoad.PrimaryKey = new DataColumn[] { dtLoad.Columns["id"] };
-                       dtLoad.Rows.Add (new object[] { 1 });
-                       dtLoad.Rows.Add (new object[] { 2 });
-                       dtLoad.Rows.Add (new object[] { 3 });
-                       dtLoad.AcceptChanges ();
-                       DataTableReader dtr = dt.CreateDataReader ();
-                       dtLoad.Load (dtr);
-                       AssertEquals ("NColumns", 2, dtLoad.Columns.Count);
-                       AssertEquals ("NRows", 3, dtLoad.Rows.Count);
-                       AssertEquals ("RowData0-0", 1, dtLoad.Rows[0][0]);
-                       AssertEquals ("RowData0-1", "mono 1", dtLoad.Rows[0][1]);
-                       AssertEquals ("RowData1-0", 2, dtLoad.Rows[1][0]);
-                       AssertEquals ("RowData1-1", "mono 2", dtLoad.Rows[1][1]);
-                       AssertEquals ("RowData2-0", 3, dtLoad.Rows[2][0]);
-                       AssertEquals ("RowData2-1", "mono 3", dtLoad.Rows[2][1]);
-               }
-
-               [Test]
-               public void Load_ExtraColsNonEqualVal () {
-                       localSetup ();
-                       DataTable dtLoad = new DataTable ("LoadExtraCols");
-                       dtLoad.Columns.Add ("id", typeof (int));
-                       dtLoad.PrimaryKey = new DataColumn[] { dtLoad.Columns["id"] };
-                       dtLoad.Rows.Add (new object[] { 4 });
-                       dtLoad.Rows.Add (new object[] { 5 });
-                       dtLoad.Rows.Add (new object[] { 6 });
-                       dtLoad.AcceptChanges ();
-                       DataTableReader dtr = dt.CreateDataReader ();
-                       dtLoad.Load (dtr);
-                       AssertEquals ("NColumns", 2, dtLoad.Columns.Count);
-                       AssertEquals ("NRows", 6, dtLoad.Rows.Count);
-                       AssertEquals ("RowData0-0", 4, dtLoad.Rows[0][0]);
-                       AssertEquals ("RowData1-0", 5, dtLoad.Rows[1][0]);
-                       AssertEquals ("RowData2-0", 6, dtLoad.Rows[2][0]);
-                       AssertEquals ("RowData3-0", 1, dtLoad.Rows[3][0]);
-                       AssertEquals ("RowData3-1", "mono 1", dtLoad.Rows[3][1]);
-                       AssertEquals ("RowData4-0", 2, dtLoad.Rows[4][0]);
-                       AssertEquals ("RowData4-1", "mono 2", dtLoad.Rows[4][1]);
-                       AssertEquals ("RowData5-0", 3, dtLoad.Rows[5][0]);
-                       AssertEquals ("RowData5-1", "mono 3", dtLoad.Rows[5][1]);
-               }
-
-               [Test]
-               [ExpectedException (typeof (ConstraintException))]
-               public void Load_MissingColsNonNullable () {
-                       localSetup ();
-                       DataTable dtLoad = new DataTable ("LoadMissingCols");
-                       dtLoad.Columns.Add ("id", typeof (int));
-                       dtLoad.Columns.Add ("name", typeof (string));
-                       dtLoad.Columns.Add ("missing", typeof (string));
-                       dtLoad.Columns["missing"].AllowDBNull = false;
-                       dtLoad.PrimaryKey = new DataColumn[] { dtLoad.Columns["id"] };
-                       dtLoad.Rows.Add (new object[] { 4, "mono 4", "miss4" });
-                       dtLoad.Rows.Add (new object[] { 5, "mono 5", "miss5" });
-                       dtLoad.Rows.Add (new object[] { 6, "mono 6", "miss6" });
-                       dtLoad.AcceptChanges ();
-                       DataTableReader dtr = dt.CreateDataReader ();
-                       dtLoad.Load (dtr);
-               }
-
-               [Test]
-               public void Load_MissingColsDefault () {
-                       localSetup ();
-                       DataTable dtLoad = new DataTable ("LoadMissingCols");
-                       dtLoad.Columns.Add ("id", typeof (int));
-                       dtLoad.Columns.Add ("name", typeof (string));
-                       dtLoad.Columns.Add ("missing", typeof (string));
-                       dtLoad.Columns["missing"].AllowDBNull = false;
-                       dtLoad.Columns["missing"].DefaultValue = "DefaultValue";
-                       dtLoad.PrimaryKey = new DataColumn[] { dtLoad.Columns["id"] };
-                       dtLoad.Rows.Add (new object[] { 4, "mono 4", "miss4" });
-                       dtLoad.Rows.Add (new object[] { 5, "mono 5", "miss5" });
-                       dtLoad.Rows.Add (new object[] { 6, "mono 6", "miss6" });
-                       dtLoad.AcceptChanges ();
-                       DataTableReader dtr = dt.CreateDataReader ();
-                       dtLoad.Load (dtr);
-                       AssertEquals ("NColumns", 3, dtLoad.Columns.Count);
-                       AssertEquals ("NRows", 6, dtLoad.Rows.Count);
-                       AssertEquals ("RowData0-0", 4, dtLoad.Rows[0][0]);
-                       AssertEquals ("RowData0-1", "mono 4", dtLoad.Rows[0][1]);
-                       AssertEquals ("RowData0-2", "miss4", dtLoad.Rows[0][2]);
-                       AssertEquals ("RowData1-0", 5, dtLoad.Rows[1][0]);
-                       AssertEquals ("RowData1-1", "mono 5", dtLoad.Rows[1][1]);
-                       AssertEquals ("RowData1-2", "miss5", dtLoad.Rows[1][2]);
-                       AssertEquals ("RowData2-0", 6, dtLoad.Rows[2][0]);
-                       AssertEquals ("RowData2-1", "mono 6", dtLoad.Rows[2][1]);
-                       AssertEquals ("RowData2-2", "miss6", dtLoad.Rows[2][2]);
-                       AssertEquals ("RowData3-0", 1, dtLoad.Rows[3][0]);
-                       AssertEquals ("RowData3-1", "mono 1", dtLoad.Rows[3][1]);
-                       AssertEquals ("RowData3-2", "DefaultValue", dtLoad.Rows[3][2]);
-                       AssertEquals ("RowData4-0", 2, dtLoad.Rows[4][0]);
-                       AssertEquals ("RowData4-1", "mono 2", dtLoad.Rows[4][1]);
-                       AssertEquals ("RowData4-2", "DefaultValue", dtLoad.Rows[4][2]);
-                       AssertEquals ("RowData5-0", 3, dtLoad.Rows[5][0]);
-                       AssertEquals ("RowData5-1", "mono 3", dtLoad.Rows[5][1]);
-                       AssertEquals ("RowData5-2", "DefaultValue", dtLoad.Rows[5][2]);
-               }
-
-               [Test]
-               public void Load_MissingColsNullable () {
-                       localSetup ();
-                       DataTable dtLoad = new DataTable ("LoadMissingCols");
-                       dtLoad.Columns.Add ("id", typeof (int));
-                       dtLoad.Columns.Add ("name", typeof (string));
-                       dtLoad.Columns.Add ("missing", typeof (string));
-                       dtLoad.Columns["missing"].AllowDBNull = true;
-                       dtLoad.PrimaryKey = new DataColumn[] { dtLoad.Columns["id"] };
-                       dtLoad.Rows.Add (new object[] { 4, "mono 4", "miss4" });
-                       dtLoad.Rows.Add (new object[] { 5, "mono 5", "miss5" });
-                       dtLoad.Rows.Add (new object[] { 6, "mono 6", "miss6" });
-                       dtLoad.AcceptChanges ();
-                       DataTableReader dtr = dt.CreateDataReader ();
-                       dtLoad.Load (dtr);
-                       AssertEquals ("NColumns", 3, dtLoad.Columns.Count);
-                       AssertEquals ("NRows", 6, dtLoad.Rows.Count);
-                       AssertEquals ("RowData0-0", 4, dtLoad.Rows[0][0]);
-                       AssertEquals ("RowData0-1", "mono 4", dtLoad.Rows[0][1]);
-                       AssertEquals ("RowData0-2", "miss4", dtLoad.Rows[0][2]);
-                       AssertEquals ("RowData1-0", 5, dtLoad.Rows[1][0]);
-                       AssertEquals ("RowData1-1", "mono 5", dtLoad.Rows[1][1]);
-                       AssertEquals ("RowData1-2", "miss5", dtLoad.Rows[1][2]);
-                       AssertEquals ("RowData2-0", 6, dtLoad.Rows[2][0]);
-                       AssertEquals ("RowData2-1", "mono 6", dtLoad.Rows[2][1]);
-                       AssertEquals ("RowData2-2", "miss6", dtLoad.Rows[2][2]);
-                       AssertEquals ("RowData3-0", 1, dtLoad.Rows[3][0]);
-                       AssertEquals ("RowData3-1", "mono 1", dtLoad.Rows[3][1]);
-                       //AssertEquals ("RowData3-2", null, dtLoad.Rows[3][2]);
-                       AssertEquals ("RowData4-0", 2, dtLoad.Rows[4][0]);
-                       AssertEquals ("RowData4-1", "mono 2", dtLoad.Rows[4][1]);
-                       //AssertEquals ("RowData4-2", null, dtLoad.Rows[4][2]);
-                       AssertEquals ("RowData5-0", 3, dtLoad.Rows[5][0]);
-                       AssertEquals ("RowData5-1", "mono 3", dtLoad.Rows[5][1]);
-                       //AssertEquals ("RowData5-2", null, dtLoad.Rows[5][2]);
-               }
-
-               private DataTable setupRowState () {
-                       DataTable tbl = new DataTable ("LoadRowStateChanges");
-                       tbl.RowChanged += new DataRowChangeEventHandler (dtLoad_RowChanged);
-                       tbl.RowChanging += new DataRowChangeEventHandler (dtLoad_RowChanging);
-                       tbl.Columns.Add ("id", typeof (int));
-                       tbl.Columns.Add ("name", typeof (string));
-                       tbl.PrimaryKey = new DataColumn[] { tbl.Columns["id"] };
-                       tbl.Rows.Add (new object[] { 1, "RowState 1" });
-                       tbl.Rows.Add (new object[] { 2, "RowState 2" });
-                       tbl.Rows.Add (new object[] { 3, "RowState 3" });
-                       tbl.AcceptChanges ();
-                       // Update Table with following changes: Row0 unmodified, 
-                       // Row1 modified, Row2 deleted, Row3 added, Row4 not-present.
-                       tbl.Rows[1]["name"] = "Modify 2";
-                       tbl.Rows[2].Delete ();
-                       DataRow row = tbl.NewRow ();
-                       row["id"] = 4;
-                       row["name"] = "Add 4";
-                       tbl.Rows.Add (row);
-                       return (tbl);
-               }
-
-               private DataRowAction[] rowChangeAction = new DataRowAction[5];
-               private bool checkAction = false;
-               private int rowChagedCounter, rowChangingCounter;
-               private void rowActionInit (DataRowAction[] act) {
-                       checkAction = true;
-                       rowChagedCounter = 0;
-                       rowChangingCounter = 0;
-                       for (int i = 0; i < 5; i++)
-                               rowChangeAction[i] = act[i];
-               }
-               private void rowActionEnd () {
-                       checkAction = false;
-               }
-               private void dtLoad_RowChanged (object sender, DataRowChangeEventArgs e) {
-                       if (checkAction) {
-                               AssertEquals ("RowChanged" + rowChagedCounter,
-                                       rowChangeAction[rowChagedCounter], e.Action);
-                               rowChagedCounter++;
-                       }
-               }
-               private void dtLoad_RowChanging (object sender, DataRowChangeEventArgs e) {
-                       if (checkAction) {
-                               AssertEquals ("RowChanging" + rowChangingCounter,
-                                       rowChangeAction[rowChangingCounter], e.Action);
-                               rowChangingCounter++;
-                       }
-               }
-
-               [Test]
-               [Category ("NotWorking")]
-               public void Load_RowStateChangesDefault () {
-                       localSetup ();
-                       dt.Rows.Add (new object[] { 4, "mono 4" });
-                       dt.Rows.Add (new object[] { 5, "mono 5" });
-                       dt.AcceptChanges ();
-                       DataTableReader dtr = dt.CreateDataReader ();
-                       DataTable dtLoad = setupRowState ();
-                       DataRowAction[] dra = new DataRowAction[] {
-                               DataRowAction.ChangeCurrentAndOriginal,
-                               DataRowAction.ChangeOriginal,
-                               DataRowAction.ChangeOriginal,
-                               DataRowAction.ChangeOriginal,
-                               DataRowAction.ChangeCurrentAndOriginal};
-                       rowActionInit (dra);
-                       dtLoad.Load (dtr);
-                       rowActionEnd ();
-                       // asserting Unchanged Row0
-                       AssertEquals ("RowData0-C", "mono 1",
-                               dtLoad.Rows[0][1,DataRowVersion.Current]);
-                       AssertEquals ("RowData0-O", "mono 1",
-                               dtLoad.Rows[0][1,DataRowVersion.Original]);
-                       AssertEquals ("RowState0", DataRowState.Unchanged,
-                               dtLoad.Rows[0].RowState);
-                       // asserting Modified Row1
-                       AssertEquals ("RowData1-C", "Modify 2",
-                               dtLoad.Rows[1][1, DataRowVersion.Current]);
-                       AssertEquals ("RowData1-O", "mono 2",
-                               dtLoad.Rows[1][1, DataRowVersion.Original]);
-                       AssertEquals ("RowState1", DataRowState.Modified,
-                               dtLoad.Rows[1].RowState);
-                       // asserting Deleted Row2
-                       AssertEquals ("RowData1-O", "mono 3",
-                               dtLoad.Rows[2][1, DataRowVersion.Original]);
-                       AssertEquals ("RowState2", DataRowState.Deleted,
-                               dtLoad.Rows[2].RowState);
-                       // asserting Added Row3
-                       AssertEquals ("RowData3-C", "Add 4",
-                               dtLoad.Rows[3][1, DataRowVersion.Current]);
-                       AssertEquals ("RowData3-O", "mono 4",
-                               dtLoad.Rows[3][1, DataRowVersion.Original]);
-                       AssertEquals ("RowState3", DataRowState.Modified,
-                               dtLoad.Rows[3].RowState);
-                       // asserting Unpresent Row4
-                       AssertEquals ("RowData4-C", "mono 5",
-                               dtLoad.Rows[4][1, DataRowVersion.Current]);
-                       AssertEquals ("RowData4-O", "mono 5",
-                               dtLoad.Rows[4][1, DataRowVersion.Original]);
-                       AssertEquals ("RowState4", DataRowState.Unchanged,
-                               dtLoad.Rows[4].RowState);
-               }
-
-               [Test]
-               [ExpectedException (typeof (VersionNotFoundException))]
-               [Category ("NotWorking")]
-               public void Load_RowStateChangesDefaultDelete () {
-                       localSetup ();
-                       DataTable dtLoad = new DataTable ("LoadRowStateChanges");
-                       dtLoad.Columns.Add ("id", typeof (int));
-                       dtLoad.Columns.Add ("name", typeof (string));
-                       dtLoad.PrimaryKey = new DataColumn[] { dtLoad.Columns["id"] };
-                       dtLoad.Rows.Add (new object[] { 1, "RowState 1" });
-                       dtLoad.Rows.Add (new object[] { 2, "RowState 2" });
-                       dtLoad.Rows.Add (new object[] { 3, "RowState 3" });
-                       dtLoad.AcceptChanges ();
-                       dtLoad.Rows[2].Delete ();
-                       DataTableReader dtr = dt.CreateDataReader ();
-                       dtLoad.Load (dtr);
-                       AssertEquals ("RowData2-C", " ",
-                               dtLoad.Rows[2][1, DataRowVersion.Current]);
-               }
-
-               [Test]
-               [Category ("NotWorking")]
-               public void Load_RowStatePreserveChanges () {
-                       localSetup ();
-                       dt.Rows.Add (new object[] { 4, "mono 4" });
-                       dt.Rows.Add (new object[] { 5, "mono 5" });
-                       dt.AcceptChanges ();
-                       DataTableReader dtr = dt.CreateDataReader ();
-                       DataTable dtLoad = setupRowState ();
-                       DataRowAction[] dra = new DataRowAction[] {
-                               DataRowAction.ChangeCurrentAndOriginal,
-                               DataRowAction.ChangeOriginal,
-                               DataRowAction.ChangeOriginal,
-                               DataRowAction.ChangeOriginal,
-                               DataRowAction.ChangeCurrentAndOriginal};
-                       rowActionInit (dra);
-                       dtLoad.Load (dtr, LoadOption.PreserveChanges);
-                       rowActionEnd ();
-                       // asserting Unchanged Row0
-                       AssertEquals ("RowData0-C", "mono 1",
-                               dtLoad.Rows[0][1, DataRowVersion.Current]);
-                       AssertEquals ("RowData0-O", "mono 1",
-                               dtLoad.Rows[0][1, DataRowVersion.Original]);
-                       AssertEquals ("RowState0", DataRowState.Unchanged,
-                               dtLoad.Rows[0].RowState);
-                       // asserting Modified Row1
-                       AssertEquals ("RowData1-C", "Modify 2",
-                               dtLoad.Rows[1][1, DataRowVersion.Current]);
-                       AssertEquals ("RowData1-O", "mono 2",
-                               dtLoad.Rows[1][1, DataRowVersion.Original]);
-                       AssertEquals ("RowState1", DataRowState.Modified,
-                               dtLoad.Rows[1].RowState);
-                       // asserting Deleted Row2
-                       AssertEquals ("RowData1-O", "mono 3",
-                               dtLoad.Rows[2][1, DataRowVersion.Original]);
-                       AssertEquals ("RowState2", DataRowState.Deleted,
-                               dtLoad.Rows[2].RowState);
-                       // asserting Added Row3
-                       AssertEquals ("RowData3-C", "Add 4",
-                               dtLoad.Rows[3][1, DataRowVersion.Current]);
-                       AssertEquals ("RowData3-O", "mono 4",
-                               dtLoad.Rows[3][1, DataRowVersion.Original]);
-                       AssertEquals ("RowState3", DataRowState.Modified,
-                               dtLoad.Rows[3].RowState);
-                       // asserting Unpresent Row4
-                       AssertEquals ("RowData4-C", "mono 5",
-                               dtLoad.Rows[4][1, DataRowVersion.Current]);
-                       AssertEquals ("RowData4-O", "mono 5",
-                               dtLoad.Rows[4][1, DataRowVersion.Original]);
-                       AssertEquals ("RowState4", DataRowState.Unchanged,
-                               dtLoad.Rows[4].RowState);
-               }
-
-               [Test]
-               [ExpectedException (typeof (VersionNotFoundException))]
-               [Category ("NotWorking")]
-               public void Load_RowStatePreserveChangesDelete () {
-                       localSetup ();
-                       DataTable dtLoad = new DataTable ("LoadRowStateChanges");
-                       dtLoad.Columns.Add ("id", typeof (int));
-                       dtLoad.Columns.Add ("name", typeof (string));
-                       dtLoad.PrimaryKey = new DataColumn[] { dtLoad.Columns["id"] };
-                       dtLoad.Rows.Add (new object[] { 1, "RowState 1" });
-                       dtLoad.Rows.Add (new object[] { 2, "RowState 2" });
-                       dtLoad.Rows.Add (new object[] { 3, "RowState 3" });
-                       dtLoad.AcceptChanges ();
-                       dtLoad.Rows[2].Delete ();
-                       DataTableReader dtr = dt.CreateDataReader ();
-                       dtLoad.Load (dtr,LoadOption.PreserveChanges);
-                       AssertEquals ("RowData2-C", " ",
-                               dtLoad.Rows[2][1, DataRowVersion.Current]);
-               }
-
-               [Test]
-               [Category ("NotWorking")]
-               public void Load_RowStateOverwriteChanges () {
-                       localSetup ();
-                       dt.Rows.Add (new object[] { 4, "mono 4" });
-                       dt.Rows.Add (new object[] { 5, "mono 5" });
-                       dt.AcceptChanges ();
-                       DataTableReader dtr = dt.CreateDataReader ();
-                       DataTable dtLoad = setupRowState ();
-                       DataRowAction[] dra = new DataRowAction[] {
-                               DataRowAction.ChangeCurrentAndOriginal,
-                               DataRowAction.ChangeCurrentAndOriginal,
-                               DataRowAction.ChangeCurrentAndOriginal,
-                               DataRowAction.ChangeCurrentAndOriginal,
-                               DataRowAction.ChangeCurrentAndOriginal};
-                       rowActionInit (dra);
-                       dtLoad.Load (dtr, LoadOption.OverwriteChanges);
-                       rowActionEnd ();
-                       // asserting Unchanged Row0
-                       AssertEquals ("RowData0-C", "mono 1",
-                               dtLoad.Rows[0][1, DataRowVersion.Current]);
-                       AssertEquals ("RowData0-O", "mono 1",
-                               dtLoad.Rows[0][1, DataRowVersion.Original]);
-                       AssertEquals ("RowState0", DataRowState.Unchanged,
-                               dtLoad.Rows[0].RowState);
-                       // asserting Modified Row1
-                       AssertEquals ("RowData1-C", "mono 2",
-                               dtLoad.Rows[1][1, DataRowVersion.Current]);
-                       AssertEquals ("RowData1-O", "mono 2",
-                               dtLoad.Rows[1][1, DataRowVersion.Original]);
-                       AssertEquals ("RowState1", DataRowState.Unchanged,
-                               dtLoad.Rows[1].RowState);
-                       // asserting Deleted Row2
-                       AssertEquals ("RowData1-C", "mono 3",
-                               dtLoad.Rows[2][1, DataRowVersion.Current]);
-                       AssertEquals ("RowData1-O", "mono 3",
-                               dtLoad.Rows[2][1, DataRowVersion.Original]);
-                       AssertEquals ("RowState2", DataRowState.Unchanged,
-                               dtLoad.Rows[2].RowState);
-                       // asserting Added Row3
-                       AssertEquals ("RowData3-C", "mono 4",
-                               dtLoad.Rows[3][1, DataRowVersion.Current]);
-                       AssertEquals ("RowData3-O", "mono 4",
-                               dtLoad.Rows[3][1, DataRowVersion.Original]);
-                       AssertEquals ("RowState3", DataRowState.Unchanged,
-                               dtLoad.Rows[3].RowState);
-                       // asserting Unpresent Row4
-                       AssertEquals ("RowData4-C", "mono 5",
-                               dtLoad.Rows[4][1, DataRowVersion.Current]);
-                       AssertEquals ("RowData4-O", "mono 5",
-                               dtLoad.Rows[4][1, DataRowVersion.Original]);
-                       AssertEquals ("RowState4", DataRowState.Unchanged,
-                               dtLoad.Rows[4].RowState);
-               }
-
-               [Test]
-               [Category ("NotWorking")]
-               public void Load_RowStateUpsert () {
-                       localSetup ();
-                       dt.Rows.Add (new object[] { 4, "mono 4" });
-                       dt.Rows.Add (new object[] { 5, "mono 5" });
-                       dt.AcceptChanges ();
-                       DataTableReader dtr = dt.CreateDataReader ();
-                       DataTable dtLoad = setupRowState ();
-                       // Notice rowChange-Actions only occur 5 times, as number 
-                       // of actual rows, ignoring row duplication of the deleted row.
-                       DataRowAction[] dra = new DataRowAction[] {
-                               DataRowAction.Change,
-                               DataRowAction.Change,
-                               DataRowAction.Add,
-                               DataRowAction.Change,
-                               DataRowAction.Add};
-                       rowActionInit (dra);
-                       dtLoad.Load (dtr, LoadOption.Upsert);
-                       rowActionEnd ();
-                       // asserting Unchanged Row0
-                       AssertEquals ("RowData0-C", "mono 1",
-                               dtLoad.Rows[0][1, DataRowVersion.Current]);
-                       AssertEquals ("RowData0-O", "RowState 1",
-                               dtLoad.Rows[0][1, DataRowVersion.Original]);
-                       AssertEquals ("RowState0", DataRowState.Modified,
-                               dtLoad.Rows[0].RowState);
-                       // asserting Modified Row1
-                       AssertEquals ("RowData1-C", "mono 2",
-                               dtLoad.Rows[1][1, DataRowVersion.Current]);
-                       AssertEquals ("RowData1-O", "RowState 2",
-                               dtLoad.Rows[1][1, DataRowVersion.Original]);
-                       AssertEquals ("RowState1", DataRowState.Modified,
-                               dtLoad.Rows[1].RowState);
-                       // asserting Deleted Row2 and "Deleted-Added" Row4
-                       AssertEquals ("RowData2-O", "RowState 3",
-                               dtLoad.Rows[2][1, DataRowVersion.Original]);
-                       AssertEquals ("RowState2", DataRowState.Deleted,
-                               dtLoad.Rows[2].RowState);
-                       AssertEquals ("RowData4-C", "mono 3",
-                               dtLoad.Rows[4][1, DataRowVersion.Current]);
-                       AssertEquals ("RowState4", DataRowState.Added,
-                               dtLoad.Rows[4].RowState);
-                       // asserting Added Row3
-                       AssertEquals ("RowData3-C", "mono 4",
-                               dtLoad.Rows[3][1, DataRowVersion.Current]);
-                       AssertEquals ("RowState3", DataRowState.Added,
-                               dtLoad.Rows[3].RowState);
-                       // asserting Unpresent Row5
-                       // Notice row4 is used for added row of deleted row2 and so
-                       // unpresent row4 moves to row5
-                       AssertEquals ("RowData5-C", "mono 5",
-                               dtLoad.Rows[5][1, DataRowVersion.Current]);
-                       AssertEquals ("RowState5", DataRowState.Added,
-                               dtLoad.Rows[5].RowState);
-               }
-
-               [Test]
-               [Category ("NotWorking")]
-               public void Load_RowStateUpsertDuplicateKey1 () {
-                       localSetup ();
-                       dt.Rows.Add (new object[] { 4, "mono 4" });
-                       DataTable dtLoad = new DataTable ("LoadRowStateChanges");
-                       dtLoad.Columns.Add ("id", typeof (int));
-                       dtLoad.Columns.Add ("name", typeof (string));
-                       dtLoad.PrimaryKey = new DataColumn[] { dtLoad.Columns["id"] };
-                       dtLoad.Rows.Add (new object[] { 1, "RowState 1" });
-                       dtLoad.Rows.Add (new object[] { 2, "RowState 2" });
-                       dtLoad.Rows.Add (new object[] { 3, "RowState 3" });
-                       dtLoad.AcceptChanges ();
-                       dtLoad.Rows[2].Delete ();
-                       DataTableReader dtr = dt.CreateDataReader ();
-                       dtLoad.Load (dtr, LoadOption.Upsert);
-                       dtLoad.Rows[3][1] = "NEWVAL";
-                       AssertEquals ("A-RowState2", DataRowState.Deleted,
-                               dtLoad.Rows[2].RowState);
-                       AssertEquals ("A-RowData2-id", 3,
-                               dtLoad.Rows[2][0, DataRowVersion.Original]);
-                       AssertEquals ("A-RowData2-name", "RowState 3",
-                               dtLoad.Rows[2][1, DataRowVersion.Original]);
-                       AssertEquals ("A-RowState3", DataRowState.Added,
-                               dtLoad.Rows[3].RowState);
-                       AssertEquals ("A-RowData3-id", 3,
-                               dtLoad.Rows[3][0, DataRowVersion.Current]);
-                       AssertEquals ("A-RowData3-name", "NEWVAL",
-                               dtLoad.Rows[3][1, DataRowVersion.Current]);
-                       AssertEquals ("A-RowState4", DataRowState.Added,
-                               dtLoad.Rows[4].RowState);
-                       AssertEquals ("A-RowData4-id", 4,
-                               dtLoad.Rows[4][0, DataRowVersion.Current]);
-                       AssertEquals ("A-RowData4-name", "mono 4",
-                               dtLoad.Rows[4][1, DataRowVersion.Current]);
-
-                       dtLoad.AcceptChanges ();
-
-                       AssertEquals ("B-RowState2", DataRowState.Unchanged,
-                               dtLoad.Rows[2].RowState);
-                       AssertEquals ("B-RowData2-id", 3,
-                               dtLoad.Rows[2][0, DataRowVersion.Current]);
-                       AssertEquals ("B-RowData2-name", "NEWVAL",
-                               dtLoad.Rows[2][1, DataRowVersion.Current]);
-                       AssertEquals ("B-RowState3", DataRowState.Unchanged,
-                               dtLoad.Rows[3].RowState);
-                       AssertEquals ("B-RowData3-id", 4,
-                               dtLoad.Rows[3][0, DataRowVersion.Current]);
-                       AssertEquals ("B-RowData3-name", "mono 4",
-                               dtLoad.Rows[3][1, DataRowVersion.Current]);
-               }
-
-               [Test]
-               [ExpectedException (typeof (IndexOutOfRangeException))]
-               [Category ("NotWorking")]
-               public void Load_RowStateUpsertDuplicateKey2 () {
-                       localSetup ();
-                       dt.Rows.Add (new object[] { 4, "mono 4" });
-                       DataTable dtLoad = new DataTable ("LoadRowStateChanges");
-                       dtLoad.Columns.Add ("id", typeof (int));
-                       dtLoad.Columns.Add ("name", typeof (string));
-                       dtLoad.PrimaryKey = new DataColumn[] { dtLoad.Columns["id"] };
-                       dtLoad.Rows.Add (new object[] { 1, "RowState 1" });
-                       dtLoad.Rows.Add (new object[] { 2, "RowState 2" });
-                       dtLoad.Rows.Add (new object[] { 3, "RowState 3" });
-                       dtLoad.AcceptChanges ();
-                       dtLoad.Rows[2].Delete ();
-                       DataTableReader dtr = dt.CreateDataReader ();
-                       dtLoad.Load (dtr, LoadOption.Upsert);
-                       dtLoad.AcceptChanges ();
-                       AssertEquals ("RowData4", " ", dtLoad.Rows[4][1]);
-               }
-
-               [Test]
-               [ExpectedException (typeof (VersionNotFoundException))]
-               [Category ("NotWorking")]
-               public void Load_RowStateUpsertDelete1 () {
-                       localSetup ();
-                       DataTable dtLoad = new DataTable ("LoadRowStateChanges");
-                       dtLoad.Columns.Add ("id", typeof (int));
-                       dtLoad.Columns.Add ("name", typeof (string));
-                       dtLoad.PrimaryKey = new DataColumn[] { dtLoad.Columns["id"] };
-                       dtLoad.Rows.Add (new object[] { 1, "RowState 1" });
-                       dtLoad.Rows.Add (new object[] { 2, "RowState 2" });
-                       dtLoad.Rows.Add (new object[] { 3, "RowState 3" });
-                       dtLoad.AcceptChanges ();
-                       dtLoad.Rows[2].Delete ();
-                       DataTableReader dtr = dt.CreateDataReader ();
-                       dtLoad.Load (dtr, LoadOption.Upsert);
-                       AssertEquals ("RowData2-C", " ",
-                               dtLoad.Rows[2][1, DataRowVersion.Current]);
-               }
-
-               [Test]
-               [ExpectedException (typeof (VersionNotFoundException))]
-               [Category ("NotWorking")]
-               public void Load_RowStateUpsertDelete2 () {
-                       localSetup ();
-                       DataTable dtLoad = new DataTable ("LoadRowStateChanges");
-                       dtLoad.Columns.Add ("id", typeof (int));
-                       dtLoad.Columns.Add ("name", typeof (string));
-                       dtLoad.PrimaryKey = new DataColumn[] { dtLoad.Columns["id"] };
-                       dtLoad.Rows.Add (new object[] { 1, "RowState 1" });
-                       dtLoad.Rows.Add (new object[] { 2, "RowState 2" });
-                       dtLoad.Rows.Add (new object[] { 3, "RowState 3" });
-                       dtLoad.AcceptChanges ();
-                       dtLoad.Rows[2].Delete ();
-                       DataTableReader dtr = dt.CreateDataReader ();
-                       dtLoad.Load (dtr, LoadOption.Upsert);
-                       AssertEquals ("RowData3-O", " ",
-                               dtLoad.Rows[3][1, DataRowVersion.Original]);
-               }
-
-               [Test]
-               [ExpectedException (typeof (VersionNotFoundException))]
-               public void Load_RowStateUpsertAdd () {
-                       localSetup ();
-                       dt.Rows.Add (new object[] { 4, "mono 4" });
-                       DataTable dtLoad = new DataTable ("LoadRowStateChanges");
-                       dtLoad.Columns.Add ("id", typeof (int));
-                       dtLoad.Columns.Add ("name", typeof (string));
-                       dtLoad.PrimaryKey = new DataColumn[] { dtLoad.Columns["id"] };
-                       dtLoad.Rows.Add (new object[] { 1, "RowState 1" });
-                       dtLoad.Rows.Add (new object[] { 2, "RowState 2" });
-                       dtLoad.Rows.Add (new object[] { 3, "RowState 3" });
-                       dtLoad.AcceptChanges ();
-                       DataRow row = dtLoad.NewRow ();
-                       row["id"] = 4;
-                       row["name"] = "Add 4";
-                       dtLoad.Rows.Add (row);
-                       DataTableReader dtr = dt.CreateDataReader ();
-                       dtLoad.Load (dtr, LoadOption.Upsert);
-                       AssertEquals ("RowData3-O", " ",
-                               dtLoad.Rows[3][1, DataRowVersion.Original]);
-               }
-
-               [Test]
-               [ExpectedException (typeof (VersionNotFoundException))]
-               public void Load_RowStateUpsertUnpresent () {
-                       localSetup ();
-                       dt.Rows.Add (new object[] { 4, "mono 4" });
-                       DataTable dtLoad = new DataTable ("LoadRowStateChanges");
-                       dtLoad.Columns.Add ("id", typeof (int));
-                       dtLoad.Columns.Add ("name", typeof (string));
-                       dtLoad.PrimaryKey = new DataColumn[] { dtLoad.Columns["id"] };
-                       dtLoad.Rows.Add (new object[] { 1, "RowState 1" });
-                       dtLoad.Rows.Add (new object[] { 2, "RowState 2" });
-                       dtLoad.Rows.Add (new object[] { 3, "RowState 3" });
-                       dtLoad.AcceptChanges ();
-                       DataTableReader dtr = dt.CreateDataReader ();
-                       dtLoad.Load (dtr, LoadOption.Upsert);
-                       AssertEquals ("RowData3-O", " ",
-                               dtLoad.Rows[3][1, DataRowVersion.Original]);
-               }
-
-               [Test]
-               public void Load_RowStateUpsertUnchangedEqualVal () {
-                       localSetup ();
-                       DataTable dtLoad = new DataTable ("LoadRowStateChanges");
-                       dtLoad.Columns.Add ("id", typeof (int));
-                       dtLoad.Columns.Add ("name", typeof (string));
-                       dtLoad.PrimaryKey = new DataColumn[] { dtLoad.Columns["id"] };
-                       dtLoad.Rows.Add (new object[] { 1, "mono 1" });
-                       dtLoad.AcceptChanges ();
-                       DataTableReader dtr = dt.CreateDataReader ();
-                       DataRowAction[] dra = new DataRowAction[] {
-                               DataRowAction.Nothing,// REAL action
-                               DataRowAction.Nothing,// dummy  
-                               DataRowAction.Nothing,// dummy  
-                               DataRowAction.Nothing,// dummy  
-                               DataRowAction.Nothing};// dummy  
-                       rowActionInit (dra);
-                       dtLoad.Load (dtr, LoadOption.Upsert);
-                       rowActionEnd ();
-                       AssertEquals ("RowData0-C", "mono 1",
-                               dtLoad.Rows[0][1, DataRowVersion.Current]);
-                       AssertEquals ("RowData0-O", "mono 1",
-                               dtLoad.Rows[0][1, DataRowVersion.Original]);
-                       AssertEquals ("RowState0", DataRowState.Unchanged,
-                               dtLoad.Rows[0].RowState);
-               }
-
-               [Test]
-               public void LoadDataRow_LoadOptions () {
-                       // LoadDataRow is covered in detail (without LoadOptions) in DataTableTest2
-                       // LoadOption tests are covered in detail in DataTable.Load().
-                       // Therefore only minimal tests of LoadDataRow with LoadOptions are covered here.
-                       DataTable dt;
-                       DataRow dr;
-                       dt = CreateDataTableExample ();
-                       dt.PrimaryKey = new DataColumn[] { dt.Columns[0] };     //add ParentId as Primary Key
-                       dt.Columns["String1"].DefaultValue = "Default";
-
-                       dr = dt.Select ("ParentId=1")[0];
-
-                       //Update existing row with LoadOptions = OverwriteChanges
-                       dt.BeginLoadData ();
-                       dt.LoadDataRow (new object[] { 1, null, "Changed" },
-                               LoadOption.OverwriteChanges);
-                       dt.EndLoadData ();
-
-                       // LoadDataRow(update1) - check column String2
-                       AssertEquals ("DT72-C", "Changed",
-                               dr["String2", DataRowVersion.Current]);
-                       AssertEquals ("DT72-O", "Changed",
-                               dr["String2", DataRowVersion.Original]);
-
-                       // LoadDataRow(update1) - check row state
-                       AssertEquals ("DT73-LO", DataRowState.Unchanged, dr.RowState);
-
-                       //Add New row with LoadOptions = Upsert
-                       dt.BeginLoadData ();
-                       dt.LoadDataRow (new object[] { 99, null, "Changed" },
-                               LoadOption.Upsert);
-                       dt.EndLoadData ();
-
-                       // LoadDataRow(insert1) - check column String2
-                       dr = dt.Select ("ParentId=99")[0];
-                       AssertEquals ("DT75-C", "Changed",
-                               dr["String2", DataRowVersion.Current]);
-
-                       // LoadDataRow(insert1) - check row state
-                       AssertEquals ("DT76-LO", DataRowState.Added, dr.RowState);
-               }
-
-               public static DataTable CreateDataTableExample () {
-                       DataTable dtParent = new DataTable ("Parent");
-
-                       dtParent.Columns.Add ("ParentId", typeof (int));
-                       dtParent.Columns.Add ("String1", typeof (string));
-                       dtParent.Columns.Add ("String2", typeof (string));
-
-                       dtParent.Columns.Add ("ParentDateTime", typeof (DateTime));
-                       dtParent.Columns.Add ("ParentDouble", typeof (double));
-                       dtParent.Columns.Add ("ParentBool", typeof (bool));
-
-                       dtParent.Rows.Add (new object[] { 1, "1-String1", "1-String2", new DateTime (2005, 1, 1, 0, 0, 0, 0), 1.534, true });
-                       dtParent.Rows.Add (new object[] { 2, "2-String1", "2-String2", new DateTime (2004, 1, 1, 0, 0, 0, 1), -1.534, true });
-                       dtParent.Rows.Add (new object[] { 3, "3-String1", "3-String2", new DateTime (2003, 1, 1, 0, 0, 1, 0), double.MinValue * 10000, false });
-                       dtParent.Rows.Add (new object[] { 4, "4-String1", "4-String2", new DateTime (2002, 1, 1, 0, 1, 0, 0), double.MaxValue / 10000, true });
-                       dtParent.Rows.Add (new object[] { 5, "5-String1", "5-String2", new DateTime (2001, 1, 1, 1, 0, 0, 0), 0.755, true });
-                       dtParent.Rows.Add (new object[] { 6, "6-String1", "6-String2", new DateTime (2000, 1, 1, 0, 0, 0, 0), 0.001, false });
-                       dtParent.AcceptChanges ();
-                       return dtParent;
-               }
-
-               #endregion // DataTable.CreateDataReader Tests and DataTable.Load Tests
-#endif // NET_2_0
-
+                        rowActionChanged = args.Action;\r
+               }\r
+\r
+\r
+#if NET_2_0\r
+               private DataTable dt;\r
+               private void localSetup () {\r
+                       dt = new DataTable ("test");\r
+                       dt.Columns.Add ("id", typeof (int));\r
+                       dt.Columns.Add ("name", typeof (string));\r
+                       dt.PrimaryKey = new DataColumn[] { dt.Columns["id"] };\r
+\r
+                       dt.Rows.Add (new object[] { 1, "mono 1" });\r
+                       dt.Rows.Add (new object[] { 2, "mono 2" });\r
+                       dt.Rows.Add (new object[] { 3, "mono 3" });\r
+\r
+                       dt.AcceptChanges ();\r
+               }\r
+\r
+               #region DataTable.CreateDataReader Tests\r
+\r
+               [Test]\r
+               public void CreateDataReader1 () {\r
+                       localSetup ();\r
+                       DataTableReader dtr = dt.CreateDataReader ();\r
+                       Assert ("HasRows", dtr.HasRows);\r
+                       AssertEquals ("CountCols", dt.Columns.Count, dtr.FieldCount);\r
+                       int ri = 0;\r
+                       while (dtr.Read ()) {\r
+                               for (int i = 0; i < dtr.FieldCount; i++) {\r
+                                       AssertEquals ("RowData-" + ri + "-" + i, dt.Rows[ri][i],\r
+                                               dtr[i]);\r
+                               }\r
+                               ri++;\r
+                       }\r
+               }\r
+\r
+               [Test]\r
+               public void CreateDataReader2 () {\r
+                       localSetup ();\r
+                       DataTableReader dtr = dt.CreateDataReader ();\r
+                       Assert ("HasRows", dtr.HasRows);\r
+                       AssertEquals ("CountCols", dt.Columns.Count, dtr.FieldCount);\r
+                       dtr.Read ();\r
+                       AssertEquals ("RowData0-0", 1, dtr[0]);\r
+                       AssertEquals ("RowData0-1", "mono 1", dtr[1]);\r
+                       dtr.Read ();\r
+                       AssertEquals ("RowData1-0", 2, dtr[0]);\r
+                       AssertEquals ("RowData1-1", "mono 2", dtr[1]);\r
+                       dtr.Read ();\r
+                       AssertEquals ("RowData2-0", 3, dtr[0]);\r
+                       AssertEquals ("RowData2-1", "mono 3", dtr[1]);\r
+               }\r
+\r
+               #endregion // DataTable.CreateDataReader Tests\r
+\r
+               #region DataTable.Load Tests\r
+\r
+               [Test]\r
+               public void Load_Basic () {\r
+                       localSetup ();\r
+                       DataTable dtLoad = new DataTable ("LoadBasic");\r
+                       dtLoad.Columns.Add ("id", typeof (int));\r
+                       dtLoad.Columns.Add ("name", typeof (string));\r
+                       dtLoad.Columns["id"].ReadOnly = true;\r
+                       dtLoad.Columns["name"].ReadOnly = true;\r
+                       dtLoad.PrimaryKey = new DataColumn[] { dtLoad.Columns["id"] };\r
+                       dtLoad.Rows.Add (new object[] { 1, "load 1" });\r
+                       dtLoad.Rows.Add (new object[] { 2, "load 2" });\r
+                       dtLoad.Rows.Add (new object[] { 3, "load 3" });\r
+                       dtLoad.AcceptChanges ();\r
+                       DataTableReader dtr = dt.CreateDataReader ();\r
+                       dtLoad.Load (dtr);\r
+                       AssertEquals ("NColumns", 2, dtLoad.Columns.Count);\r
+                       AssertEquals ("NRows", 3, dtLoad.Rows.Count);\r
+                       AssertEquals ("RowData0-0", 1, dtLoad.Rows[0][0]);\r
+                       AssertEquals ("RowData0-1", "mono 1", dtLoad.Rows[0][1]);\r
+                       AssertEquals ("RowData1-0", 2, dtLoad.Rows[1][0]);\r
+                       AssertEquals ("RowData1-1", "mono 2", dtLoad.Rows[1][1]);\r
+                       AssertEquals ("RowData2-0", 3, dtLoad.Rows[2][0]);\r
+                       AssertEquals ("RowData2-1", "mono 3", dtLoad.Rows[2][1]);\r
+               }\r
+\r
+               [Test]\r
+               public void Load_NoSchema () {\r
+                       localSetup ();\r
+                       DataTable dtLoad = new DataTable ("LoadNoSchema");\r
+                       DataTableReader dtr = dt.CreateDataReader ();\r
+                       dtLoad.Load (dtr);\r
+                       AssertEquals ("NColumns", 2, dtLoad.Columns.Count);\r
+                       AssertEquals ("NRows", 3, dtLoad.Rows.Count);\r
+                       AssertEquals ("RowData0-0", 1, dtLoad.Rows[0][0]);\r
+                       AssertEquals ("RowData0-1", "mono 1", dtLoad.Rows[0][1]);\r
+                       AssertEquals ("RowData1-0", 2, dtLoad.Rows[1][0]);\r
+                       AssertEquals ("RowData1-1", "mono 2", dtLoad.Rows[1][1]);\r
+                       AssertEquals ("RowData2-0", 3, dtLoad.Rows[2][0]);\r
+                       AssertEquals ("RowData2-1", "mono 3", dtLoad.Rows[2][1]);\r
+               }\r
+\r
+               internal struct fillErrorStruct {\r
+                       internal string error;\r
+                       internal string tableName;\r
+                       internal int rowKey;\r
+                       internal bool contFlag;\r
+                       internal void init (string tbl, int row, bool cont, string err) {\r
+                               tableName = tbl;\r
+                               rowKey = row;\r
+                               contFlag = cont;\r
+                               error = err;\r
+                       }\r
+               }\r
+               private fillErrorStruct[] fillErr = new fillErrorStruct[3];\r
+               private int fillErrCounter;\r
+               private void fillErrorHandler (object sender, FillErrorEventArgs e) {\r
+                       e.Continue = fillErr[fillErrCounter].contFlag;\r
+                       AssertEquals ("fillErr-T", fillErr[fillErrCounter].tableName, e.DataTable.TableName);\r
+                       AssertEquals ("fillErr-R", fillErr[fillErrCounter].rowKey, e.Values[0]);\r
+                       AssertEquals ("fillErr-C", fillErr[fillErrCounter].contFlag, e.Continue);\r
+                       AssertEquals ("fillErr-E", fillErr[fillErrCounter].error, e.Errors.Message);\r
+                       fillErrCounter++;\r
+               }\r
+\r
+               [Test]\r
+               [ExpectedException (typeof (ArgumentException))]\r
+               public void Load_Incompatible () {\r
+                       localSetup ();\r
+                       DataTable dtLoad = new DataTable ("LoadIncompatible");\r
+                       dtLoad.Columns.Add ("name", typeof (double));\r
+                       DataTableReader dtr = dt.CreateDataReader ();\r
+                       dtLoad.Load (dtr);\r
+               }\r
+               [Test]\r
+               [Category ("NotWorking")]\r
+               // Load doesn't have a third overload in System.Data\r
+               // and is commented-out below\r
+               public void Load_IncompatibleEHandlerT () {\r
+                       fillErrCounter = 0;\r
+                       fillErr[0].init ("LoadIncompatible", 1, true,\r
+                               "Input string was not in a correct format.Couldn't store <mono 1> in name Column.  Expected type is Double.");\r
+                       fillErr[1].init ("LoadIncompatible", 2, true,\r
+                               "Input string was not in a correct format.Couldn't store <mono 2> in name Column.  Expected type is Double.");\r
+                       fillErr[2].init ("LoadIncompatible", 3, true,\r
+                               "Input string was not in a correct format.Couldn't store <mono 3> in name Column.  Expected type is Double.");\r
+                       localSetup ();\r
+                       DataTable dtLoad = new DataTable ("LoadIncompatible");\r
+                       dtLoad.Columns.Add ("name", typeof (double));\r
+                       DataTableReader dtr = dt.CreateDataReader ();\r
+                       //dtLoad.Load (dtr,LoadOption.PreserveChanges,fillErrorHandler);\r
+               }\r
+               [Test]\r
+               [Category ("NotWorking")]\r
+               // Load doesn't have a third overload in System.Data\r
+               // and is commented-out below\r
+               [ExpectedException (typeof (ArgumentException))]\r
+               public void Load_IncompatibleEHandlerF () {\r
+                       fillErrCounter = 0;\r
+                       fillErr[0].init ("LoadIncompatible", 1, false,\r
+                               "Input string was not in a correct format.Couldn't store <mono 1> in name Column.  Expected type is Double.");\r
+                       localSetup ();\r
+                       DataTable dtLoad = new DataTable ("LoadIncompatible");\r
+                       dtLoad.Columns.Add ("name", typeof (double));\r
+                       DataTableReader dtr = dt.CreateDataReader ();\r
+                       //dtLoad.Load (dtr, LoadOption.PreserveChanges, fillErrorHandler);\r
+               }\r
+\r
+               [Test]\r
+               public void Load_ExtraColsEqualVal () {\r
+                       localSetup ();\r
+                       DataTable dtLoad = new DataTable ("LoadExtraCols");\r
+                       dtLoad.Columns.Add ("id", typeof (int));\r
+                       dtLoad.PrimaryKey = new DataColumn[] { dtLoad.Columns["id"] };\r
+                       dtLoad.Rows.Add (new object[] { 1 });\r
+                       dtLoad.Rows.Add (new object[] { 2 });\r
+                       dtLoad.Rows.Add (new object[] { 3 });\r
+                       dtLoad.AcceptChanges ();\r
+                       DataTableReader dtr = dt.CreateDataReader ();\r
+                       dtLoad.Load (dtr);\r
+                       AssertEquals ("NColumns", 2, dtLoad.Columns.Count);\r
+                       AssertEquals ("NRows", 3, dtLoad.Rows.Count);\r
+                       AssertEquals ("RowData0-0", 1, dtLoad.Rows[0][0]);\r
+                       AssertEquals ("RowData0-1", "mono 1", dtLoad.Rows[0][1]);\r
+                       AssertEquals ("RowData1-0", 2, dtLoad.Rows[1][0]);\r
+                       AssertEquals ("RowData1-1", "mono 2", dtLoad.Rows[1][1]);\r
+                       AssertEquals ("RowData2-0", 3, dtLoad.Rows[2][0]);\r
+                       AssertEquals ("RowData2-1", "mono 3", dtLoad.Rows[2][1]);\r
+               }\r
+\r
+               [Test]\r
+               public void Load_ExtraColsNonEqualVal () {\r
+                       localSetup ();\r
+                       DataTable dtLoad = new DataTable ("LoadExtraCols");\r
+                       dtLoad.Columns.Add ("id", typeof (int));\r
+                       dtLoad.PrimaryKey = new DataColumn[] { dtLoad.Columns["id"] };\r
+                       dtLoad.Rows.Add (new object[] { 4 });\r
+                       dtLoad.Rows.Add (new object[] { 5 });\r
+                       dtLoad.Rows.Add (new object[] { 6 });\r
+                       dtLoad.AcceptChanges ();\r
+                       DataTableReader dtr = dt.CreateDataReader ();\r
+                       dtLoad.Load (dtr);\r
+                       AssertEquals ("NColumns", 2, dtLoad.Columns.Count);\r
+                       AssertEquals ("NRows", 6, dtLoad.Rows.Count);\r
+                       AssertEquals ("RowData0-0", 4, dtLoad.Rows[0][0]);\r
+                       AssertEquals ("RowData1-0", 5, dtLoad.Rows[1][0]);\r
+                       AssertEquals ("RowData2-0", 6, dtLoad.Rows[2][0]);\r
+                       AssertEquals ("RowData3-0", 1, dtLoad.Rows[3][0]);\r
+                       AssertEquals ("RowData3-1", "mono 1", dtLoad.Rows[3][1]);\r
+                       AssertEquals ("RowData4-0", 2, dtLoad.Rows[4][0]);\r
+                       AssertEquals ("RowData4-1", "mono 2", dtLoad.Rows[4][1]);\r
+                       AssertEquals ("RowData5-0", 3, dtLoad.Rows[5][0]);\r
+                       AssertEquals ("RowData5-1", "mono 3", dtLoad.Rows[5][1]);\r
+               }\r
+\r
+               [Test]\r
+               [ExpectedException (typeof (ConstraintException))]\r
+               public void Load_MissingColsNonNullable () {\r
+                       localSetup ();\r
+                       DataTable dtLoad = new DataTable ("LoadMissingCols");\r
+                       dtLoad.Columns.Add ("id", typeof (int));\r
+                       dtLoad.Columns.Add ("name", typeof (string));\r
+                       dtLoad.Columns.Add ("missing", typeof (string));\r
+                       dtLoad.Columns["missing"].AllowDBNull = false;\r
+                       dtLoad.PrimaryKey = new DataColumn[] { dtLoad.Columns["id"] };\r
+                       dtLoad.Rows.Add (new object[] { 4, "mono 4", "miss4" });\r
+                       dtLoad.Rows.Add (new object[] { 5, "mono 5", "miss5" });\r
+                       dtLoad.Rows.Add (new object[] { 6, "mono 6", "miss6" });\r
+                       dtLoad.AcceptChanges ();\r
+                       DataTableReader dtr = dt.CreateDataReader ();\r
+                       dtLoad.Load (dtr);\r
+               }\r
+\r
+               [Test]\r
+               public void Load_MissingColsDefault () {\r
+                       localSetup ();\r
+                       DataTable dtLoad = new DataTable ("LoadMissingCols");\r
+                       dtLoad.Columns.Add ("id", typeof (int));\r
+                       dtLoad.Columns.Add ("name", typeof (string));\r
+                       dtLoad.Columns.Add ("missing", typeof (string));\r
+                       dtLoad.Columns["missing"].AllowDBNull = false;\r
+                       dtLoad.Columns["missing"].DefaultValue = "DefaultValue";\r
+                       dtLoad.PrimaryKey = new DataColumn[] { dtLoad.Columns["id"] };\r
+                       dtLoad.Rows.Add (new object[] { 4, "mono 4", "miss4" });\r
+                       dtLoad.Rows.Add (new object[] { 5, "mono 5", "miss5" });\r
+                       dtLoad.Rows.Add (new object[] { 6, "mono 6", "miss6" });\r
+                       dtLoad.AcceptChanges ();\r
+                       DataTableReader dtr = dt.CreateDataReader ();\r
+                       dtLoad.Load (dtr);\r
+                       AssertEquals ("NColumns", 3, dtLoad.Columns.Count);\r
+                       AssertEquals ("NRows", 6, dtLoad.Rows.Count);\r
+                       AssertEquals ("RowData0-0", 4, dtLoad.Rows[0][0]);\r
+                       AssertEquals ("RowData0-1", "mono 4", dtLoad.Rows[0][1]);\r
+                       AssertEquals ("RowData0-2", "miss4", dtLoad.Rows[0][2]);\r
+                       AssertEquals ("RowData1-0", 5, dtLoad.Rows[1][0]);\r
+                       AssertEquals ("RowData1-1", "mono 5", dtLoad.Rows[1][1]);\r
+                       AssertEquals ("RowData1-2", "miss5", dtLoad.Rows[1][2]);\r
+                       AssertEquals ("RowData2-0", 6, dtLoad.Rows[2][0]);\r
+                       AssertEquals ("RowData2-1", "mono 6", dtLoad.Rows[2][1]);\r
+                       AssertEquals ("RowData2-2", "miss6", dtLoad.Rows[2][2]);\r
+                       AssertEquals ("RowData3-0", 1, dtLoad.Rows[3][0]);\r
+                       AssertEquals ("RowData3-1", "mono 1", dtLoad.Rows[3][1]);\r
+                       AssertEquals ("RowData3-2", "DefaultValue", dtLoad.Rows[3][2]);\r
+                       AssertEquals ("RowData4-0", 2, dtLoad.Rows[4][0]);\r
+                       AssertEquals ("RowData4-1", "mono 2", dtLoad.Rows[4][1]);\r
+                       AssertEquals ("RowData4-2", "DefaultValue", dtLoad.Rows[4][2]);\r
+                       AssertEquals ("RowData5-0", 3, dtLoad.Rows[5][0]);\r
+                       AssertEquals ("RowData5-1", "mono 3", dtLoad.Rows[5][1]);\r
+                       AssertEquals ("RowData5-2", "DefaultValue", dtLoad.Rows[5][2]);\r
+               }\r
+\r
+               [Test]\r
+               public void Load_MissingColsNullable () {\r
+                       localSetup ();\r
+                       DataTable dtLoad = new DataTable ("LoadMissingCols");\r
+                       dtLoad.Columns.Add ("id", typeof (int));\r
+                       dtLoad.Columns.Add ("name", typeof (string));\r
+                       dtLoad.Columns.Add ("missing", typeof (string));\r
+                       dtLoad.Columns["missing"].AllowDBNull = true;\r
+                       dtLoad.PrimaryKey = new DataColumn[] { dtLoad.Columns["id"] };\r
+                       dtLoad.Rows.Add (new object[] { 4, "mono 4", "miss4" });\r
+                       dtLoad.Rows.Add (new object[] { 5, "mono 5", "miss5" });\r
+                       dtLoad.Rows.Add (new object[] { 6, "mono 6", "miss6" });\r
+                       dtLoad.AcceptChanges ();\r
+                       DataTableReader dtr = dt.CreateDataReader ();\r
+                       dtLoad.Load (dtr);\r
+                       AssertEquals ("NColumns", 3, dtLoad.Columns.Count);\r
+                       AssertEquals ("NRows", 6, dtLoad.Rows.Count);\r
+                       AssertEquals ("RowData0-0", 4, dtLoad.Rows[0][0]);\r
+                       AssertEquals ("RowData0-1", "mono 4", dtLoad.Rows[0][1]);\r
+                       AssertEquals ("RowData0-2", "miss4", dtLoad.Rows[0][2]);\r
+                       AssertEquals ("RowData1-0", 5, dtLoad.Rows[1][0]);\r
+                       AssertEquals ("RowData1-1", "mono 5", dtLoad.Rows[1][1]);\r
+                       AssertEquals ("RowData1-2", "miss5", dtLoad.Rows[1][2]);\r
+                       AssertEquals ("RowData2-0", 6, dtLoad.Rows[2][0]);\r
+                       AssertEquals ("RowData2-1", "mono 6", dtLoad.Rows[2][1]);\r
+                       AssertEquals ("RowData2-2", "miss6", dtLoad.Rows[2][2]);\r
+                       AssertEquals ("RowData3-0", 1, dtLoad.Rows[3][0]);\r
+                       AssertEquals ("RowData3-1", "mono 1", dtLoad.Rows[3][1]);\r
+                       //AssertEquals ("RowData3-2", null, dtLoad.Rows[3][2]);\r
+                       AssertEquals ("RowData4-0", 2, dtLoad.Rows[4][0]);\r
+                       AssertEquals ("RowData4-1", "mono 2", dtLoad.Rows[4][1]);\r
+                       //AssertEquals ("RowData4-2", null, dtLoad.Rows[4][2]);\r
+                       AssertEquals ("RowData5-0", 3, dtLoad.Rows[5][0]);\r
+                       AssertEquals ("RowData5-1", "mono 3", dtLoad.Rows[5][1]);\r
+                       //AssertEquals ("RowData5-2", null, dtLoad.Rows[5][2]);\r
+               }\r
+\r
+               private DataTable setupRowState () {\r
+                       DataTable tbl = new DataTable ("LoadRowStateChanges");\r
+                       tbl.RowChanged += new DataRowChangeEventHandler (dtLoad_RowChanged);\r
+                       tbl.RowChanging += new DataRowChangeEventHandler (dtLoad_RowChanging);\r
+                       tbl.Columns.Add ("id", typeof (int));\r
+                       tbl.Columns.Add ("name", typeof (string));\r
+                       tbl.PrimaryKey = new DataColumn[] { tbl.Columns["id"] };\r
+                       tbl.Rows.Add (new object[] { 1, "RowState 1" });\r
+                       tbl.Rows.Add (new object[] { 2, "RowState 2" });\r
+                       tbl.Rows.Add (new object[] { 3, "RowState 3" });\r
+                       tbl.AcceptChanges ();\r
+                       // Update Table with following changes: Row0 unmodified, \r
+                       // Row1 modified, Row2 deleted, Row3 added, Row4 not-present.\r
+                       tbl.Rows[1]["name"] = "Modify 2";\r
+                       tbl.Rows[2].Delete ();\r
+                       DataRow row = tbl.NewRow ();\r
+                       row["id"] = 4;\r
+                       row["name"] = "Add 4";\r
+                       tbl.Rows.Add (row);\r
+                       return (tbl);\r
+               }\r
+\r
+               private DataRowAction[] rowChangeAction = new DataRowAction[5];\r
+               private bool checkAction = false;\r
+               private int rowChagedCounter, rowChangingCounter;\r
+               private void rowActionInit (DataRowAction[] act) {\r
+                       checkAction = true;\r
+                       rowChagedCounter = 0;\r
+                       rowChangingCounter = 0;\r
+                       for (int i = 0; i < 5; i++)\r
+                               rowChangeAction[i] = act[i];\r
+               }\r
+               private void rowActionEnd () {\r
+                       checkAction = false;\r
+               }\r
+               private void dtLoad_RowChanged (object sender, DataRowChangeEventArgs e) {\r
+                       if (checkAction) {\r
+                               AssertEquals ("RowChanged" + rowChagedCounter,\r
+                                       rowChangeAction[rowChagedCounter], e.Action);\r
+                               rowChagedCounter++;\r
+                       }\r
+               }\r
+               private void dtLoad_RowChanging (object sender, DataRowChangeEventArgs e) {\r
+                       if (checkAction) {\r
+                               AssertEquals ("RowChanging" + rowChangingCounter,\r
+                                       rowChangeAction[rowChangingCounter], e.Action);\r
+                               rowChangingCounter++;\r
+                       }\r
+               }\r
+\r
+               [Test]\r
+               [Category ("NotWorking")]\r
+               public void Load_RowStateChangesDefault () {\r
+                       localSetup ();\r
+                       dt.Rows.Add (new object[] { 4, "mono 4" });\r
+                       dt.Rows.Add (new object[] { 5, "mono 5" });\r
+                       dt.AcceptChanges ();\r
+                       DataTableReader dtr = dt.CreateDataReader ();\r
+                       DataTable dtLoad = setupRowState ();\r
+                       DataRowAction[] dra = new DataRowAction[] {\r
+                               DataRowAction.ChangeCurrentAndOriginal,\r
+                               DataRowAction.ChangeOriginal,\r
+                               DataRowAction.ChangeOriginal,\r
+                               DataRowAction.ChangeOriginal,\r
+                               DataRowAction.ChangeCurrentAndOriginal};\r
+                       rowActionInit (dra);\r
+                       dtLoad.Load (dtr);\r
+                       rowActionEnd ();\r
+                       // asserting Unchanged Row0\r
+                       AssertEquals ("RowData0-C", "mono 1",\r
+                               dtLoad.Rows[0][1,DataRowVersion.Current]);\r
+                       AssertEquals ("RowData0-O", "mono 1",\r
+                               dtLoad.Rows[0][1,DataRowVersion.Original]);\r
+                       AssertEquals ("RowState0", DataRowState.Unchanged,\r
+                               dtLoad.Rows[0].RowState);\r
+                       // asserting Modified Row1\r
+                       AssertEquals ("RowData1-C", "Modify 2",\r
+                               dtLoad.Rows[1][1, DataRowVersion.Current]);\r
+                       AssertEquals ("RowData1-O", "mono 2",\r
+                               dtLoad.Rows[1][1, DataRowVersion.Original]);\r
+                       AssertEquals ("RowState1", DataRowState.Modified,\r
+                               dtLoad.Rows[1].RowState);\r
+                       // asserting Deleted Row2\r
+                       AssertEquals ("RowData1-O", "mono 3",\r
+                               dtLoad.Rows[2][1, DataRowVersion.Original]);\r
+                       AssertEquals ("RowState2", DataRowState.Deleted,\r
+                               dtLoad.Rows[2].RowState);\r
+                       // asserting Added Row3\r
+                       AssertEquals ("RowData3-C", "Add 4",\r
+                               dtLoad.Rows[3][1, DataRowVersion.Current]);\r
+                       AssertEquals ("RowData3-O", "mono 4",\r
+                               dtLoad.Rows[3][1, DataRowVersion.Original]);\r
+                       AssertEquals ("RowState3", DataRowState.Modified,\r
+                               dtLoad.Rows[3].RowState);\r
+                       // asserting Unpresent Row4\r
+                       AssertEquals ("RowData4-C", "mono 5",\r
+                               dtLoad.Rows[4][1, DataRowVersion.Current]);\r
+                       AssertEquals ("RowData4-O", "mono 5",\r
+                               dtLoad.Rows[4][1, DataRowVersion.Original]);\r
+                       AssertEquals ("RowState4", DataRowState.Unchanged,\r
+                               dtLoad.Rows[4].RowState);\r
+               }\r
+\r
+               [Test]\r
+               [ExpectedException (typeof (VersionNotFoundException))]\r
+               [Category ("NotWorking")]\r
+               public void Load_RowStateChangesDefaultDelete () {\r
+                       localSetup ();\r
+                       DataTable dtLoad = new DataTable ("LoadRowStateChanges");\r
+                       dtLoad.Columns.Add ("id", typeof (int));\r
+                       dtLoad.Columns.Add ("name", typeof (string));\r
+                       dtLoad.PrimaryKey = new DataColumn[] { dtLoad.Columns["id"] };\r
+                       dtLoad.Rows.Add (new object[] { 1, "RowState 1" });\r
+                       dtLoad.Rows.Add (new object[] { 2, "RowState 2" });\r
+                       dtLoad.Rows.Add (new object[] { 3, "RowState 3" });\r
+                       dtLoad.AcceptChanges ();\r
+                       dtLoad.Rows[2].Delete ();\r
+                       DataTableReader dtr = dt.CreateDataReader ();\r
+                       dtLoad.Load (dtr);\r
+                       AssertEquals ("RowData2-C", " ",\r
+                               dtLoad.Rows[2][1, DataRowVersion.Current]);\r
+               }\r
+\r
+               [Test]\r
+               [Category ("NotWorking")]\r
+               public void Load_RowStatePreserveChanges () {\r
+                       localSetup ();\r
+                       dt.Rows.Add (new object[] { 4, "mono 4" });\r
+                       dt.Rows.Add (new object[] { 5, "mono 5" });\r
+                       dt.AcceptChanges ();\r
+                       DataTableReader dtr = dt.CreateDataReader ();\r
+                       DataTable dtLoad = setupRowState ();\r
+                       DataRowAction[] dra = new DataRowAction[] {\r
+                               DataRowAction.ChangeCurrentAndOriginal,\r
+                               DataRowAction.ChangeOriginal,\r
+                               DataRowAction.ChangeOriginal,\r
+                               DataRowAction.ChangeOriginal,\r
+                               DataRowAction.ChangeCurrentAndOriginal};\r
+                       rowActionInit (dra);\r
+                       dtLoad.Load (dtr, LoadOption.PreserveChanges);\r
+                       rowActionEnd ();\r
+                       // asserting Unchanged Row0\r
+                       AssertEquals ("RowData0-C", "mono 1",\r
+                               dtLoad.Rows[0][1, DataRowVersion.Current]);\r
+                       AssertEquals ("RowData0-O", "mono 1",\r
+                               dtLoad.Rows[0][1, DataRowVersion.Original]);\r
+                       AssertEquals ("RowState0", DataRowState.Unchanged,\r
+                               dtLoad.Rows[0].RowState);\r
+                       // asserting Modified Row1\r
+                       AssertEquals ("RowData1-C", "Modify 2",\r
+                               dtLoad.Rows[1][1, DataRowVersion.Current]);\r
+                       AssertEquals ("RowData1-O", "mono 2",\r
+                               dtLoad.Rows[1][1, DataRowVersion.Original]);\r
+                       AssertEquals ("RowState1", DataRowState.Modified,\r
+                               dtLoad.Rows[1].RowState);\r
+                       // asserting Deleted Row2\r
+                       AssertEquals ("RowData1-O", "mono 3",\r
+                               dtLoad.Rows[2][1, DataRowVersion.Original]);\r
+                       AssertEquals ("RowState2", DataRowState.Deleted,\r
+                               dtLoad.Rows[2].RowState);\r
+                       // asserting Added Row3\r
+                       AssertEquals ("RowData3-C", "Add 4",\r
+                               dtLoad.Rows[3][1, DataRowVersion.Current]);\r
+                       AssertEquals ("RowData3-O", "mono 4",\r
+                               dtLoad.Rows[3][1, DataRowVersion.Original]);\r
+                       AssertEquals ("RowState3", DataRowState.Modified,\r
+                               dtLoad.Rows[3].RowState);\r
+                       // asserting Unpresent Row4\r
+                       AssertEquals ("RowData4-C", "mono 5",\r
+                               dtLoad.Rows[4][1, DataRowVersion.Current]);\r
+                       AssertEquals ("RowData4-O", "mono 5",\r
+                               dtLoad.Rows[4][1, DataRowVersion.Original]);\r
+                       AssertEquals ("RowState4", DataRowState.Unchanged,\r
+                               dtLoad.Rows[4].RowState);\r
+               }\r
+\r
+               [Test]\r
+               [ExpectedException (typeof (VersionNotFoundException))]\r
+               [Category ("NotWorking")]\r
+               public void Load_RowStatePreserveChangesDelete () {\r
+                       localSetup ();\r
+                       DataTable dtLoad = new DataTable ("LoadRowStateChanges");\r
+                       dtLoad.Columns.Add ("id", typeof (int));\r
+                       dtLoad.Columns.Add ("name", typeof (string));\r
+                       dtLoad.PrimaryKey = new DataColumn[] { dtLoad.Columns["id"] };\r
+                       dtLoad.Rows.Add (new object[] { 1, "RowState 1" });\r
+                       dtLoad.Rows.Add (new object[] { 2, "RowState 2" });\r
+                       dtLoad.Rows.Add (new object[] { 3, "RowState 3" });\r
+                       dtLoad.AcceptChanges ();\r
+                       dtLoad.Rows[2].Delete ();\r
+                       DataTableReader dtr = dt.CreateDataReader ();\r
+                       dtLoad.Load (dtr,LoadOption.PreserveChanges);\r
+                       AssertEquals ("RowData2-C", " ",\r
+                               dtLoad.Rows[2][1, DataRowVersion.Current]);\r
+               }\r
+\r
+               [Test]\r
+               [Category ("NotWorking")]\r
+               public void Load_RowStateOverwriteChanges () {\r
+                       localSetup ();\r
+                       dt.Rows.Add (new object[] { 4, "mono 4" });\r
+                       dt.Rows.Add (new object[] { 5, "mono 5" });\r
+                       dt.AcceptChanges ();\r
+                       DataTableReader dtr = dt.CreateDataReader ();\r
+                       DataTable dtLoad = setupRowState ();\r
+                       DataRowAction[] dra = new DataRowAction[] {\r
+                               DataRowAction.ChangeCurrentAndOriginal,\r
+                               DataRowAction.ChangeCurrentAndOriginal,\r
+                               DataRowAction.ChangeCurrentAndOriginal,\r
+                               DataRowAction.ChangeCurrentAndOriginal,\r
+                               DataRowAction.ChangeCurrentAndOriginal};\r
+                       rowActionInit (dra);\r
+                       dtLoad.Load (dtr, LoadOption.OverwriteChanges);\r
+                       rowActionEnd ();\r
+                       // asserting Unchanged Row0\r
+                       AssertEquals ("RowData0-C", "mono 1",\r
+                               dtLoad.Rows[0][1, DataRowVersion.Current]);\r
+                       AssertEquals ("RowData0-O", "mono 1",\r
+                               dtLoad.Rows[0][1, DataRowVersion.Original]);\r
+                       AssertEquals ("RowState0", DataRowState.Unchanged,\r
+                               dtLoad.Rows[0].RowState);\r
+                       // asserting Modified Row1\r
+                       AssertEquals ("RowData1-C", "mono 2",\r
+                               dtLoad.Rows[1][1, DataRowVersion.Current]);\r
+                       AssertEquals ("RowData1-O", "mono 2",\r
+                               dtLoad.Rows[1][1, DataRowVersion.Original]);\r
+                       AssertEquals ("RowState1", DataRowState.Unchanged,\r
+                               dtLoad.Rows[1].RowState);\r
+                       // asserting Deleted Row2\r
+                       AssertEquals ("RowData1-C", "mono 3",\r
+                               dtLoad.Rows[2][1, DataRowVersion.Current]);\r
+                       AssertEquals ("RowData1-O", "mono 3",\r
+                               dtLoad.Rows[2][1, DataRowVersion.Original]);\r
+                       AssertEquals ("RowState2", DataRowState.Unchanged,\r
+                               dtLoad.Rows[2].RowState);\r
+                       // asserting Added Row3\r
+                       AssertEquals ("RowData3-C", "mono 4",\r
+                               dtLoad.Rows[3][1, DataRowVersion.Current]);\r
+                       AssertEquals ("RowData3-O", "mono 4",\r
+                               dtLoad.Rows[3][1, DataRowVersion.Original]);\r
+                       AssertEquals ("RowState3", DataRowState.Unchanged,\r
+                               dtLoad.Rows[3].RowState);\r
+                       // asserting Unpresent Row4\r
+                       AssertEquals ("RowData4-C", "mono 5",\r
+                               dtLoad.Rows[4][1, DataRowVersion.Current]);\r
+                       AssertEquals ("RowData4-O", "mono 5",\r
+                               dtLoad.Rows[4][1, DataRowVersion.Original]);\r
+                       AssertEquals ("RowState4", DataRowState.Unchanged,\r
+                               dtLoad.Rows[4].RowState);\r
+               }\r
+\r
+               [Test]\r
+               [Category ("NotWorking")]\r
+               public void Load_RowStateUpsert () {\r
+                       localSetup ();\r
+                       dt.Rows.Add (new object[] { 4, "mono 4" });\r
+                       dt.Rows.Add (new object[] { 5, "mono 5" });\r
+                       dt.AcceptChanges ();\r
+                       DataTableReader dtr = dt.CreateDataReader ();\r
+                       DataTable dtLoad = setupRowState ();\r
+                       // Notice rowChange-Actions only occur 5 times, as number \r
+                       // of actual rows, ignoring row duplication of the deleted row.\r
+                       DataRowAction[] dra = new DataRowAction[] {\r
+                               DataRowAction.Change,\r
+                               DataRowAction.Change,\r
+                               DataRowAction.Add,\r
+                               DataRowAction.Change,\r
+                               DataRowAction.Add};\r
+                       rowActionInit (dra);\r
+                       dtLoad.Load (dtr, LoadOption.Upsert);\r
+                       rowActionEnd ();\r
+                       // asserting Unchanged Row0\r
+                       AssertEquals ("RowData0-C", "mono 1",\r
+                               dtLoad.Rows[0][1, DataRowVersion.Current]);\r
+                       AssertEquals ("RowData0-O", "RowState 1",\r
+                               dtLoad.Rows[0][1, DataRowVersion.Original]);\r
+                       AssertEquals ("RowState0", DataRowState.Modified,\r
+                               dtLoad.Rows[0].RowState);\r
+                       // asserting Modified Row1\r
+                       AssertEquals ("RowData1-C", "mono 2",\r
+                               dtLoad.Rows[1][1, DataRowVersion.Current]);\r
+                       AssertEquals ("RowData1-O", "RowState 2",\r
+                               dtLoad.Rows[1][1, DataRowVersion.Original]);\r
+                       AssertEquals ("RowState1", DataRowState.Modified,\r
+                               dtLoad.Rows[1].RowState);\r
+                       // asserting Deleted Row2 and "Deleted-Added" Row4\r
+                       AssertEquals ("RowData2-O", "RowState 3",\r
+                               dtLoad.Rows[2][1, DataRowVersion.Original]);\r
+                       AssertEquals ("RowState2", DataRowState.Deleted,\r
+                               dtLoad.Rows[2].RowState);\r
+                       AssertEquals ("RowData4-C", "mono 3",\r
+                               dtLoad.Rows[4][1, DataRowVersion.Current]);\r
+                       AssertEquals ("RowState4", DataRowState.Added,\r
+                               dtLoad.Rows[4].RowState);\r
+                       // asserting Added Row3\r
+                       AssertEquals ("RowData3-C", "mono 4",\r
+                               dtLoad.Rows[3][1, DataRowVersion.Current]);\r
+                       AssertEquals ("RowState3", DataRowState.Added,\r
+                               dtLoad.Rows[3].RowState);\r
+                       // asserting Unpresent Row5\r
+                       // Notice row4 is used for added row of deleted row2 and so\r
+                       // unpresent row4 moves to row5\r
+                       AssertEquals ("RowData5-C", "mono 5",\r
+                               dtLoad.Rows[5][1, DataRowVersion.Current]);\r
+                       AssertEquals ("RowState5", DataRowState.Added,\r
+                               dtLoad.Rows[5].RowState);\r
+               }\r
+\r
+               [Test]\r
+               [Category ("NotWorking")]\r
+               public void Load_RowStateUpsertDuplicateKey1 () {\r
+                       localSetup ();\r
+                       dt.Rows.Add (new object[] { 4, "mono 4" });\r
+                       DataTable dtLoad = new DataTable ("LoadRowStateChanges");\r
+                       dtLoad.Columns.Add ("id", typeof (int));\r
+                       dtLoad.Columns.Add ("name", typeof (string));\r
+                       dtLoad.PrimaryKey = new DataColumn[] { dtLoad.Columns["id"] };\r
+                       dtLoad.Rows.Add (new object[] { 1, "RowState 1" });\r
+                       dtLoad.Rows.Add (new object[] { 2, "RowState 2" });\r
+                       dtLoad.Rows.Add (new object[] { 3, "RowState 3" });\r
+                       dtLoad.AcceptChanges ();\r
+                       dtLoad.Rows[2].Delete ();\r
+                       DataTableReader dtr = dt.CreateDataReader ();\r
+                       dtLoad.Load (dtr, LoadOption.Upsert);\r
+                       dtLoad.Rows[3][1] = "NEWVAL";\r
+                       AssertEquals ("A-RowState2", DataRowState.Deleted,\r
+                               dtLoad.Rows[2].RowState);\r
+                       AssertEquals ("A-RowData2-id", 3,\r
+                               dtLoad.Rows[2][0, DataRowVersion.Original]);\r
+                       AssertEquals ("A-RowData2-name", "RowState 3",\r
+                               dtLoad.Rows[2][1, DataRowVersion.Original]);\r
+                       AssertEquals ("A-RowState3", DataRowState.Added,\r
+                               dtLoad.Rows[3].RowState);\r
+                       AssertEquals ("A-RowData3-id", 3,\r
+                               dtLoad.Rows[3][0, DataRowVersion.Current]);\r
+                       AssertEquals ("A-RowData3-name", "NEWVAL",\r
+                               dtLoad.Rows[3][1, DataRowVersion.Current]);\r
+                       AssertEquals ("A-RowState4", DataRowState.Added,\r
+                               dtLoad.Rows[4].RowState);\r
+                       AssertEquals ("A-RowData4-id", 4,\r
+                               dtLoad.Rows[4][0, DataRowVersion.Current]);\r
+                       AssertEquals ("A-RowData4-name", "mono 4",\r
+                               dtLoad.Rows[4][1, DataRowVersion.Current]);\r
+\r
+                       dtLoad.AcceptChanges ();\r
+\r
+                       AssertEquals ("B-RowState2", DataRowState.Unchanged,\r
+                               dtLoad.Rows[2].RowState);\r
+                       AssertEquals ("B-RowData2-id", 3,\r
+                               dtLoad.Rows[2][0, DataRowVersion.Current]);\r
+                       AssertEquals ("B-RowData2-name", "NEWVAL",\r
+                               dtLoad.Rows[2][1, DataRowVersion.Current]);\r
+                       AssertEquals ("B-RowState3", DataRowState.Unchanged,\r
+                               dtLoad.Rows[3].RowState);\r
+                       AssertEquals ("B-RowData3-id", 4,\r
+                               dtLoad.Rows[3][0, DataRowVersion.Current]);\r
+                       AssertEquals ("B-RowData3-name", "mono 4",\r
+                               dtLoad.Rows[3][1, DataRowVersion.Current]);\r
+               }\r
+\r
+               [Test]\r
+               [ExpectedException (typeof (IndexOutOfRangeException))]\r
+               [Category ("NotWorking")]\r
+               public void Load_RowStateUpsertDuplicateKey2 () {\r
+                       localSetup ();\r
+                       dt.Rows.Add (new object[] { 4, "mono 4" });\r
+                       DataTable dtLoad = new DataTable ("LoadRowStateChanges");\r
+                       dtLoad.Columns.Add ("id", typeof (int));\r
+                       dtLoad.Columns.Add ("name", typeof (string));\r
+                       dtLoad.PrimaryKey = new DataColumn[] { dtLoad.Columns["id"] };\r
+                       dtLoad.Rows.Add (new object[] { 1, "RowState 1" });\r
+                       dtLoad.Rows.Add (new object[] { 2, "RowState 2" });\r
+                       dtLoad.Rows.Add (new object[] { 3, "RowState 3" });\r
+                       dtLoad.AcceptChanges ();\r
+                       dtLoad.Rows[2].Delete ();\r
+                       DataTableReader dtr = dt.CreateDataReader ();\r
+                       dtLoad.Load (dtr, LoadOption.Upsert);\r
+                       dtLoad.AcceptChanges ();\r
+                       AssertEquals ("RowData4", " ", dtLoad.Rows[4][1]);\r
+               }\r
+\r
+               [Test]\r
+               [ExpectedException (typeof (VersionNotFoundException))]\r
+               [Category ("NotWorking")]\r
+               public void Load_RowStateUpsertDelete1 () {\r
+                       localSetup ();\r
+                       DataTable dtLoad = new DataTable ("LoadRowStateChanges");\r
+                       dtLoad.Columns.Add ("id", typeof (int));\r
+                       dtLoad.Columns.Add ("name", typeof (string));\r
+                       dtLoad.PrimaryKey = new DataColumn[] { dtLoad.Columns["id"] };\r
+                       dtLoad.Rows.Add (new object[] { 1, "RowState 1" });\r
+                       dtLoad.Rows.Add (new object[] { 2, "RowState 2" });\r
+                       dtLoad.Rows.Add (new object[] { 3, "RowState 3" });\r
+                       dtLoad.AcceptChanges ();\r
+                       dtLoad.Rows[2].Delete ();\r
+                       DataTableReader dtr = dt.CreateDataReader ();\r
+                       dtLoad.Load (dtr, LoadOption.Upsert);\r
+                       AssertEquals ("RowData2-C", " ",\r
+                               dtLoad.Rows[2][1, DataRowVersion.Current]);\r
+               }\r
+\r
+               [Test]\r
+               [ExpectedException (typeof (VersionNotFoundException))]\r
+               [Category ("NotWorking")]\r
+               public void Load_RowStateUpsertDelete2 () {\r
+                       localSetup ();\r
+                       DataTable dtLoad = new DataTable ("LoadRowStateChanges");\r
+                       dtLoad.Columns.Add ("id", typeof (int));\r
+                       dtLoad.Columns.Add ("name", typeof (string));\r
+                       dtLoad.PrimaryKey = new DataColumn[] { dtLoad.Columns["id"] };\r
+                       dtLoad.Rows.Add (new object[] { 1, "RowState 1" });\r
+                       dtLoad.Rows.Add (new object[] { 2, "RowState 2" });\r
+                       dtLoad.Rows.Add (new object[] { 3, "RowState 3" });\r
+                       dtLoad.AcceptChanges ();\r
+                       dtLoad.Rows[2].Delete ();\r
+                       DataTableReader dtr = dt.CreateDataReader ();\r
+                       dtLoad.Load (dtr, LoadOption.Upsert);\r
+                       AssertEquals ("RowData3-O", " ",\r
+                               dtLoad.Rows[3][1, DataRowVersion.Original]);\r
+               }\r
+\r
+               [Test]\r
+               [ExpectedException (typeof (VersionNotFoundException))]\r
+               public void Load_RowStateUpsertAdd () {\r
+                       localSetup ();\r
+                       dt.Rows.Add (new object[] { 4, "mono 4" });\r
+                       DataTable dtLoad = new DataTable ("LoadRowStateChanges");\r
+                       dtLoad.Columns.Add ("id", typeof (int));\r
+                       dtLoad.Columns.Add ("name", typeof (string));\r
+                       dtLoad.PrimaryKey = new DataColumn[] { dtLoad.Columns["id"] };\r
+                       dtLoad.Rows.Add (new object[] { 1, "RowState 1" });\r
+                       dtLoad.Rows.Add (new object[] { 2, "RowState 2" });\r
+                       dtLoad.Rows.Add (new object[] { 3, "RowState 3" });\r
+                       dtLoad.AcceptChanges ();\r
+                       DataRow row = dtLoad.NewRow ();\r
+                       row["id"] = 4;\r
+                       row["name"] = "Add 4";\r
+                       dtLoad.Rows.Add (row);\r
+                       DataTableReader dtr = dt.CreateDataReader ();\r
+                       dtLoad.Load (dtr, LoadOption.Upsert);\r
+                       AssertEquals ("RowData3-O", " ",\r
+                               dtLoad.Rows[3][1, DataRowVersion.Original]);\r
+               }\r
+\r
+               [Test]\r
+               [ExpectedException (typeof (VersionNotFoundException))]\r
+               public void Load_RowStateUpsertUnpresent () {\r
+                       localSetup ();\r
+                       dt.Rows.Add (new object[] { 4, "mono 4" });\r
+                       DataTable dtLoad = new DataTable ("LoadRowStateChanges");\r
+                       dtLoad.Columns.Add ("id", typeof (int));\r
+                       dtLoad.Columns.Add ("name", typeof (string));\r
+                       dtLoad.PrimaryKey = new DataColumn[] { dtLoad.Columns["id"] };\r
+                       dtLoad.Rows.Add (new object[] { 1, "RowState 1" });\r
+                       dtLoad.Rows.Add (new object[] { 2, "RowState 2" });\r
+                       dtLoad.Rows.Add (new object[] { 3, "RowState 3" });\r
+                       dtLoad.AcceptChanges ();\r
+                       DataTableReader dtr = dt.CreateDataReader ();\r
+                       dtLoad.Load (dtr, LoadOption.Upsert);\r
+                       AssertEquals ("RowData3-O", " ",\r
+                               dtLoad.Rows[3][1, DataRowVersion.Original]);\r
+               }\r
+\r
+               [Test]\r
+               public void Load_RowStateUpsertUnchangedEqualVal () {\r
+                       localSetup ();\r
+                       DataTable dtLoad = new DataTable ("LoadRowStateChanges");\r
+                       dtLoad.Columns.Add ("id", typeof (int));\r
+                       dtLoad.Columns.Add ("name", typeof (string));\r
+                       dtLoad.PrimaryKey = new DataColumn[] { dtLoad.Columns["id"] };\r
+                       dtLoad.Rows.Add (new object[] { 1, "mono 1" });\r
+                       dtLoad.AcceptChanges ();\r
+                       DataTableReader dtr = dt.CreateDataReader ();\r
+                       DataRowAction[] dra = new DataRowAction[] {\r
+                               DataRowAction.Nothing,// REAL action\r
+                               DataRowAction.Nothing,// dummy  \r
+                               DataRowAction.Nothing,// dummy  \r
+                               DataRowAction.Nothing,// dummy  \r
+                               DataRowAction.Nothing};// dummy  \r
+                       rowActionInit (dra);\r
+                       dtLoad.Load (dtr, LoadOption.Upsert);\r
+                       rowActionEnd ();\r
+                       AssertEquals ("RowData0-C", "mono 1",\r
+                               dtLoad.Rows[0][1, DataRowVersion.Current]);\r
+                       AssertEquals ("RowData0-O", "mono 1",\r
+                               dtLoad.Rows[0][1, DataRowVersion.Original]);\r
+                       AssertEquals ("RowState0", DataRowState.Unchanged,\r
+                               dtLoad.Rows[0].RowState);\r
+               }\r
+\r
+               [Test]\r
+               public void LoadDataRow_LoadOptions () {\r
+                       // LoadDataRow is covered in detail (without LoadOptions) in DataTableTest2\r
+                       // LoadOption tests are covered in detail in DataTable.Load().\r
+                       // Therefore only minimal tests of LoadDataRow with LoadOptions are covered here.\r
+                       DataTable dt;\r
+                       DataRow dr;\r
+                       dt = CreateDataTableExample ();\r
+                       dt.PrimaryKey = new DataColumn[] { dt.Columns[0] };     //add ParentId as Primary Key\r
+                       dt.Columns["String1"].DefaultValue = "Default";\r
+\r
+                       dr = dt.Select ("ParentId=1")[0];\r
+\r
+                       //Update existing row with LoadOptions = OverwriteChanges\r
+                       dt.BeginLoadData ();\r
+                       dt.LoadDataRow (new object[] { 1, null, "Changed" },\r
+                               LoadOption.OverwriteChanges);\r
+                       dt.EndLoadData ();\r
+\r
+                       // LoadDataRow(update1) - check column String2\r
+                       AssertEquals ("DT72-C", "Changed",\r
+                               dr["String2", DataRowVersion.Current]);\r
+                       AssertEquals ("DT72-O", "Changed",\r
+                               dr["String2", DataRowVersion.Original]);\r
+\r
+                       // LoadDataRow(update1) - check row state\r
+                       AssertEquals ("DT73-LO", DataRowState.Unchanged, dr.RowState);\r
+\r
+                       //Add New row with LoadOptions = Upsert\r
+                       dt.BeginLoadData ();\r
+                       dt.LoadDataRow (new object[] { 99, null, "Changed" },\r
+                               LoadOption.Upsert);\r
+                       dt.EndLoadData ();\r
+\r
+                       // LoadDataRow(insert1) - check column String2\r
+                       dr = dt.Select ("ParentId=99")[0];\r
+                       AssertEquals ("DT75-C", "Changed",\r
+                               dr["String2", DataRowVersion.Current]);\r
+\r
+                       // LoadDataRow(insert1) - check row state\r
+                       AssertEquals ("DT76-LO", DataRowState.Added, dr.RowState);\r
+               }\r
+\r
+               public static DataTable CreateDataTableExample () {\r
+                       DataTable dtParent = new DataTable ("Parent");\r
+\r
+                       dtParent.Columns.Add ("ParentId", typeof (int));\r
+                       dtParent.Columns.Add ("String1", typeof (string));\r
+                       dtParent.Columns.Add ("String2", typeof (string));\r
+\r
+                       dtParent.Columns.Add ("ParentDateTime", typeof (DateTime));\r
+                       dtParent.Columns.Add ("ParentDouble", typeof (double));\r
+                       dtParent.Columns.Add ("ParentBool", typeof (bool));\r
+\r
+                       dtParent.Rows.Add (new object[] { 1, "1-String1", "1-String2", new DateTime (2005, 1, 1, 0, 0, 0, 0), 1.534, true });\r
+                       dtParent.Rows.Add (new object[] { 2, "2-String1", "2-String2", new DateTime (2004, 1, 1, 0, 0, 0, 1), -1.534, true });\r
+                       dtParent.Rows.Add (new object[] { 3, "3-String1", "3-String2", new DateTime (2003, 1, 1, 0, 0, 1, 0), double.MinValue * 10000, false });\r
+                       dtParent.Rows.Add (new object[] { 4, "4-String1", "4-String2", new DateTime (2002, 1, 1, 0, 1, 0, 0), double.MaxValue / 10000, true });\r
+                       dtParent.Rows.Add (new object[] { 5, "5-String1", "5-String2", new DateTime (2001, 1, 1, 1, 0, 0, 0), 0.755, true });\r
+                       dtParent.Rows.Add (new object[] { 6, "6-String1", "6-String2", new DateTime (2000, 1, 1, 0, 0, 0, 0), 0.001, false });\r
+                       dtParent.AcceptChanges ();\r
+                       return dtParent;\r
+               }\r
+\r
+               #endregion // DataTable.Load Tests\r
+\r
+               #region Read/Write XML Tests\r
+\r
+               [Test]\r
+               [Category ("NotWorking")]\r
+               public void ReadXmlSchema () {\r
+                       DataTable Table = new DataTable ();\r
+                       Table.ReadXmlSchema ("Test/System.Data/own_schema1.xsd");\r
+\r
+                       AssertEquals ("test#02", "test_table", Table.TableName);\r
+                       AssertEquals ("test#03", "", Table.Namespace);\r
+                       AssertEquals ("test#04", 2, Table.Columns.Count);\r
+                       AssertEquals ("test#05", 0, Table.Rows.Count);\r
+                       AssertEquals ("test#06", false, Table.CaseSensitive);\r
+                       AssertEquals ("test#07", 1, Table.Constraints.Count);\r
+                       AssertEquals ("test#08", "", Table.Prefix);\r
+\r
+                       Constraint cons = Table.Constraints[0];\r
+                       AssertEquals ("test#09", "Constraint1", cons.ConstraintName.ToString ());\r
+                       AssertEquals ("test#10", "Constraint1", cons.ToString ());\r
+\r
+                       DataColumn column = Table.Columns[0];\r
+                       AssertEquals ("test#11", true, column.AllowDBNull);\r
+                       AssertEquals ("test#12", false, column.AutoIncrement);\r
+                       AssertEquals ("test#13", 0L, column.AutoIncrementSeed);\r
+                       AssertEquals ("test#14", 1L, column.AutoIncrementStep);\r
+                       AssertEquals ("test#15", "test", column.Caption);\r
+                       AssertEquals ("test#16", "Element", column.ColumnMapping.ToString ());\r
+                       AssertEquals ("test#17", "first", column.ColumnName);\r
+                       AssertEquals ("test#18", "System.String", column.DataType.ToString ());\r
+                       AssertEquals ("test#19", "test_default_value", column.DefaultValue.ToString ());\r
+                       AssertEquals ("test#20", false, column.DesignMode);\r
+                       AssertEquals ("test#21", "", column.Expression);\r
+                       AssertEquals ("test#22", 100, column.MaxLength);\r
+                       AssertEquals ("test#23", "", column.Namespace);\r
+                       AssertEquals ("test#24", 0, column.Ordinal);\r
+                       AssertEquals ("test#25", "", column.Prefix);\r
+                       AssertEquals ("test#26", false, column.ReadOnly);\r
+                       AssertEquals ("test#27", true, column.Unique);\r
+\r
+                       DataColumn column2 = Table.Columns[1];\r
+                       AssertEquals ("test#28", true, column2.AllowDBNull);\r
+                       AssertEquals ("test#29", false, column2.AutoIncrement);\r
+                       AssertEquals ("test#30", 0L, column2.AutoIncrementSeed);\r
+                       AssertEquals ("test#31", 1L, column2.AutoIncrementStep);\r
+                       AssertEquals ("test#32", "second", column2.Caption);\r
+                       AssertEquals ("test#33", "Element", column2.ColumnMapping.ToString ());\r
+                       AssertEquals ("test#34", "second", column2.ColumnName);\r
+                       AssertEquals ("test#35", "System.Data.SqlTypes.SqlGuid", column2.DataType.ToString ());\r
+                       AssertEquals ("test#36", "Null", column2.DefaultValue.ToString ());\r
+                       AssertEquals ("test#37", false, column2.DesignMode);\r
+                       AssertEquals ("test#38", "", column2.Expression);\r
+                       AssertEquals ("test#39", -1, column2.MaxLength);\r
+                       AssertEquals ("test#40", "", column2.Namespace);\r
+                       AssertEquals ("test#41", 1, column2.Ordinal);\r
+                       AssertEquals ("test#42", "", column2.Prefix);\r
+                       AssertEquals ("test#43", false, column2.ReadOnly);\r
+                       AssertEquals ("test#44", false, column2.Unique);\r
+\r
+                       DataTable Table2 = new DataTable ();\r
+                       Table2.ReadXmlSchema ("Test/System.Data/own_schema2.xsd");\r
+\r
+                       AssertEquals ("test#45", "second_test_table", Table2.TableName);\r
+                       AssertEquals ("test#46", "", Table2.Namespace);\r
+                       AssertEquals ("test#47", 1, Table2.Columns.Count);\r
+                       AssertEquals ("test#48", 0, Table2.Rows.Count);\r
+                       AssertEquals ("test#49", false, Table2.CaseSensitive);\r
+                       AssertEquals ("test#50", 1, Table2.Constraints.Count);\r
+                       AssertEquals ("test#51", "", Table2.Prefix);\r
+\r
+                       DataColumn column3 = Table2.Columns[0];\r
+                       AssertEquals ("test#52", true, column3.AllowDBNull);\r
+                       AssertEquals ("test#53", false, column3.AutoIncrement);\r
+                       AssertEquals ("test#54", 0L, column3.AutoIncrementSeed);\r
+                       AssertEquals ("test#55", 1L, column3.AutoIncrementStep);\r
+                       AssertEquals ("test#56", "second_first", column3.Caption);\r
+                       AssertEquals ("test#57", "Element", column3.ColumnMapping.ToString ());\r
+                       AssertEquals ("test#58", "second_first", column3.ColumnName);\r
+                       AssertEquals ("test#59", "System.String", column3.DataType.ToString ());\r
+                       AssertEquals ("test#60", "default_value", column3.DefaultValue.ToString ());\r
+                       AssertEquals ("test#61", false, column3.DesignMode);\r
+                       AssertEquals ("test#62", "", column3.Expression);\r
+                       AssertEquals ("test#63", 100, column3.MaxLength);\r
+                       AssertEquals ("test#64", "", column3.Namespace);\r
+                       AssertEquals ("test#65", 0, column3.Ordinal);\r
+                       AssertEquals ("test#66", "", column3.Prefix);\r
+                       AssertEquals ("test#67", false, column3.ReadOnly);\r
+                       AssertEquals ("test#68", true, column3.Unique);\r
+               }\r
+\r
+               [Test]\r
+               public void ReadXmlSchema_2 () {\r
+                       DataTable dt = new DataTable ();\r
+                       string xmlData = string.Empty;\r
+                       xmlData += "<?xml version=\"1.0\"?>";\r
+                       xmlData += "<xs:schema id=\"SiteConfiguration\" targetNamespace=\"http://tempuri.org/PortalCfg.xsd\" xmlns:mstns=\"http://tempuri.org/PortalCfg.xsd\" xmlns=\"http://tempuri.org/PortalCfg.xsd\" xmlns:xs=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\" attributeFormDefault=\"qualified\" elementFormDefault=\"qualified\">";\r
+                       xmlData += "<xs:element name=\"SiteConfiguration\" msdata:IsDataSet=\"true\" msdata:EnforceConstraints=\"False\">";\r
+                       xmlData += "<xs:complexType>";\r
+                       xmlData += "<xs:choice maxOccurs=\"unbounded\">";\r
+                       xmlData += "<xs:element name=\"Tab\">";\r
+                       xmlData += "<xs:complexType>";\r
+                       xmlData += "<xs:sequence>";\r
+                       xmlData += "<xs:element name=\"Module\" minOccurs=\"0\" maxOccurs=\"unbounded\">";\r
+                       xmlData += "<xs:complexType>";\r
+                       xmlData += "<xs:attribute name=\"ModuleId\" form=\"unqualified\" type=\"xs:int\" />";\r
+                       xmlData += "</xs:complexType>";\r
+                       xmlData += "</xs:element>";\r
+                       xmlData += "</xs:sequence>";\r
+                       xmlData += "<xs:attribute name=\"TabId\" form=\"unqualified\" type=\"xs:int\" />";\r
+                       xmlData += "</xs:complexType>";\r
+                       xmlData += "</xs:element>";\r
+                       xmlData += "</xs:choice>";\r
+                       xmlData += "</xs:complexType>";\r
+                       xmlData += "<xs:key name=\"TabKey\" msdata:PrimaryKey=\"true\">";\r
+                       xmlData += "<xs:selector xpath=\".//mstns:Tab\" />";\r
+                       xmlData += "<xs:field xpath=\"@TabId\" />";\r
+                       xmlData += "</xs:key>";\r
+                       xmlData += "<xs:key name=\"ModuleKey\" msdata:PrimaryKey=\"true\">";\r
+                       xmlData += "<xs:selector xpath=\".//mstns:Module\" />";\r
+                       xmlData += "<xs:field xpath=\"@ModuleID\" />";\r
+                       xmlData += "</xs:key>";\r
+                       xmlData += "</xs:element>";\r
+                       xmlData += "</xs:schema>";\r
+                       dt.ReadXmlSchema (new StringReader (xmlData));\r
+               }\r
+\r
+               [Test]\r
+               public void ReadXmlSchema_ByStream () {\r
+                       DataSet ds1 = new DataSet ();\r
+                       ds1.Tables.Add (DataProvider.CreateParentDataTable ());\r
+                       ds1.Tables.Add (DataProvider.CreateChildDataTable ());\r
+\r
+                       MemoryStream ms1 = new MemoryStream ();\r
+                       MemoryStream ms2 = new MemoryStream ();\r
+                       //write xml  schema only\r
+                       //ds1.WriteXmlSchema (ms);\r
+                       ds1.Tables[0].WriteXmlSchema (ms1);\r
+                       ds1.Tables[1].WriteXmlSchema (ms2);\r
+\r
+                       MemoryStream ms11 = new MemoryStream (ms1.GetBuffer ());\r
+                       MemoryStream ms22 = new MemoryStream (ms2.GetBuffer ());\r
+                       //copy schema\r
+                       //DataSet ds2 = new DataSet ();\r
+                       DataTable dt1 = new DataTable ();\r
+                       DataTable dt2 = new DataTable ();\r
+\r
+                       //ds2.ReadXmlSchema (ms1);\r
+                       dt1.ReadXmlSchema (ms11);\r
+                       dt2.ReadXmlSchema (ms22);\r
+\r
+                       //check xml schema\r
+                       // ReadXmlSchema - Tables count\r
+                       //Assert.AreEqual (ds2.Tables.Count, ds1.Tables.Count, "DS269");\r
+\r
+                       // ReadXmlSchema - Tables 0 Col count\r
+                       AssertEquals ("DS270", ds1.Tables[0].Columns.Count, dt1.Columns.Count);\r
+\r
+                       // ReadXmlSchema - Tables 1 Col count\r
+                       AssertEquals ("DS271", ds1.Tables[1].Columns.Count, dt2.Columns.Count);\r
+\r
+                       //check some colummns types\r
+                       // ReadXmlSchema - Tables 0 Col type\r
+                       AssertEquals ("DS272", ds1.Tables[0].Columns[0].GetType (), dt1.Columns[0].GetType ());\r
+\r
+                       // ReadXmlSchema - Tables 1 Col type\r
+                       AssertEquals ("DS273", ds1.Tables[1].Columns[3].GetType (), dt2.Columns[3].GetType ());\r
+\r
+                       //check that no data exists\r
+                       // ReadXmlSchema - Table 1 row count\r
+                       AssertEquals ("DS274",0, dt1.Rows.Count);\r
+\r
+                       // ReadXmlSchema - Table 2 row count\r
+                       AssertEquals ("DS275",0, dt2.Rows.Count);\r
+               }\r
+\r
+               [Test]\r
+               [Category ("NotWorking")]\r
+               public void ReadWriteXmlSchema_ByFileName () {\r
+                       string sTempFileName1 = "tmpDataSet_ReadWriteXml_43899-1.xml";\r
+                       string sTempFileName2 = "tmpDataSet_ReadWriteXml_43899-2.xml";\r
+\r
+                       DataSet ds1 = new DataSet ();\r
+                       ds1.Tables.Add (DataProvider.CreateParentDataTable ());\r
+                       ds1.Tables.Add (DataProvider.CreateChildDataTable ());\r
+\r
+                       ds1.Tables[0].WriteXmlSchema (sTempFileName1);\r
+                       ds1.Tables[1].WriteXmlSchema (sTempFileName2);\r
+\r
+                       DataTable dt1 = new DataTable ();\r
+                       DataTable dt2 = new DataTable ();\r
+\r
+                       dt1.ReadXmlSchema (sTempFileName1);\r
+                       dt2.ReadXmlSchema (sTempFileName2);\r
+\r
+                       AssertEquals ("DS277", ds1.Tables[0].Columns.Count, dt1.Columns.Count);\r
+                       AssertEquals ("DS278", ds1.Tables[1].Columns.Count, dt2.Columns.Count);\r
+                       AssertEquals ("DS279", ds1.Tables[0].Columns[0].GetType (), dt1.Columns[0].GetType ());\r
+                       AssertEquals ("DS280", ds1.Tables[1].Columns[3].GetType (), dt2.Columns[3].GetType ());\r
+                       AssertEquals ("DS281", 0, dt1.Rows.Count);\r
+                       AssertEquals ("DS282", 0, dt2.Rows.Count);\r
+\r
+                       File.Delete (sTempFileName1);\r
+                       File.Delete (sTempFileName2);\r
+               }\r
+\r
+               [Test]\r
+               public void ReadXmlSchema_ByTextReader () {\r
+                       DataSet ds1 = new DataSet ();\r
+                       ds1.Tables.Add (DataProvider.CreateParentDataTable ());\r
+                       ds1.Tables.Add (DataProvider.CreateChildDataTable ());\r
+\r
+                       StringWriter sw1 = new StringWriter ();\r
+                       StringWriter sw2 = new StringWriter ();\r
+                       //write xml file, schema only\r
+                       //ds1.WriteXmlSchema (sw);\r
+                       ds1.Tables[0].WriteXmlSchema (sw1);\r
+                       ds1.Tables[1].WriteXmlSchema (sw2);\r
+\r
+                       StringReader sr1 = new StringReader (sw1.GetStringBuilder ().ToString ());\r
+                       StringReader sr2 = new StringReader (sw2.GetStringBuilder ().ToString ());\r
+                       //copy both data and schema\r
+                       //DataSet ds2 = new DataSet ();\r
+                       DataTable dt1 = new DataTable ();\r
+                       DataTable dt2 = new DataTable ();\r
+\r
+                       //ds2.ReadXmlSchema (sr);\r
+                       dt1.ReadXmlSchema (sr1);\r
+                       dt2.ReadXmlSchema (sr2);\r
+\r
+                       //check xml schema\r
+                       // ReadXmlSchema - Tables count\r
+                       //Assert.AreEqual (ds2.Tables.Count, ds1.Tables.Count, "DS283");\r
+\r
+                       // ReadXmlSchema - Tables 0 Col count\r
+                       AssertEquals ("DS284", ds1.Tables[0].Columns.Count, dt1.Columns.Count);\r
+\r
+                       // ReadXmlSchema - Tables 1 Col count\r
+                       AssertEquals ("DS285", ds1.Tables[1].Columns.Count, dt2.Columns.Count);\r
+\r
+                       //check some colummns types\r
+                       // ReadXmlSchema - Tables 0 Col type\r
+                       AssertEquals ("DS286", ds1.Tables[0].Columns[0].GetType (), dt1.Columns[0].GetType ());\r
+\r
+                       // ReadXmlSchema - Tables 1 Col type\r
+                       AssertEquals ("DS287", ds1.Tables[1].Columns[3].GetType (), dt2.Columns[3].GetType ());\r
+\r
+                       //check that no data exists\r
+                       // ReadXmlSchema - Table 1 row count\r
+                       AssertEquals ("DS288", 0, dt1.Rows.Count);\r
+\r
+                       // ReadXmlSchema - Table 2 row count\r
+                       AssertEquals ("DS289", 0, dt2.Rows.Count);\r
+               }\r
+\r
+               [Test]\r
+               public void ReadXmlSchema_ByXmlReader () {\r
+                       DataSet ds1 = new DataSet ();\r
+                       ds1.Tables.Add (DataProvider.CreateParentDataTable ());\r
+                       ds1.Tables.Add (DataProvider.CreateChildDataTable ());\r
+\r
+                       StringWriter sw1 = new StringWriter ();\r
+                       XmlTextWriter xmlTW1 = new XmlTextWriter (sw1);\r
+                       StringWriter sw2 = new StringWriter ();\r
+                       XmlTextWriter xmlTW2 = new XmlTextWriter (sw2);\r
+\r
+                       //write xml file, schema only\r
+                       ds1.Tables[0].WriteXmlSchema (xmlTW1);\r
+                       xmlTW1.Flush ();\r
+                       ds1.Tables[1].WriteXmlSchema (xmlTW2);\r
+                       xmlTW2.Flush ();\r
+\r
+                       StringReader sr1 = new StringReader (sw1.ToString ());\r
+                       XmlTextReader xmlTR1 = new XmlTextReader (sr1);\r
+                       StringReader sr2 = new StringReader (sw2.ToString ());\r
+                       XmlTextReader xmlTR2 = new XmlTextReader (sr2);\r
+\r
+                       //copy both data and schema\r
+                       //DataSet ds2 = new DataSet ();\r
+                       DataTable dt1 = new DataTable ();\r
+                       DataTable dt2 = new DataTable ();\r
+\r
+                       //ds2.ReadXmlSchema (xmlTR);\r
+                       dt1.ReadXmlSchema (xmlTR1);\r
+                       dt2.ReadXmlSchema (xmlTR2);\r
+\r
+                       //check xml schema\r
+                       // ReadXmlSchema - Tables count\r
+                       //Assert.AreEqual (ds2.Tables.Count, ds1.Tables.Count, "DS290");\r
+\r
+                       // ReadXmlSchema - Tables 0 Col count\r
+                       AssertEquals ("DS291", ds1.Tables[0].Columns.Count, dt1.Columns.Count);\r
+\r
+                       // ReadXmlSchema - Tables 1 Col count\r
+                       AssertEquals ("DS292", ds1.Tables[1].Columns.Count, dt2.Columns.Count);\r
+\r
+                       //check some colummns types\r
+                       // ReadXmlSchema - Tables 0 Col type\r
+                       AssertEquals ("DS293", ds1.Tables[0].Columns[0].GetType (), dt1.Columns[0].GetType ());\r
+\r
+                       // ReadXmlSchema - Tables 1 Col type\r
+                       AssertEquals ("DS294", ds1.Tables[1].Columns[3].GetType (), dt2.Columns[3].GetType ());\r
+\r
+                       //check that no data exists\r
+                       // ReadXmlSchema - Table 1 row count\r
+                       AssertEquals ("DS295", 0, dt1.Rows.Count);\r
+\r
+                       // ReadXmlSchema - Table 2 row count\r
+                       AssertEquals ("DS296", 0, dt2.Rows.Count);\r
+               }\r
+\r
+               [Test]\r
+               [Category ("NotWorking")]\r
+               public void WriteXmlSchema () {\r
+                       DataSet ds = new DataSet ();\r
+                       ds.ReadXml ("Test/System.Data/region.xml");\r
+                       TextWriter writer = new StringWriter ();\r
+                       ds.Tables[0].WriteXmlSchema (writer);\r
+\r
+\r
+                       string TextString = GetNormalizedSchema (writer.ToString ());\r
+                       //string TextString = writer.ToString ();\r
+\r
+                       string substring = TextString.Substring (0, TextString.IndexOf (EOL));\r
+                       TextString = TextString.Substring (TextString.IndexOf (EOL) + EOL.Length);\r
+                       AssertEquals ("test#01", "<?xml version=\"1.0\" encoding=\"utf-16\"?>", substring);\r
+\r
+                       substring = TextString.Substring (0, TextString.IndexOf (EOL));\r
+                       TextString = TextString.Substring (TextString.IndexOf (EOL) + EOL.Length);\r
+                       AssertEquals ("test#02", "<xs:schema id=\"Root\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\" xmlns:xs=\"http://www.w3.org/2001/XMLSchema\">", substring);\r
+\r
+                       substring = TextString.Substring (0, TextString.IndexOf (EOL));\r
+                       TextString = TextString.Substring (TextString.IndexOf (EOL) + EOL.Length);\r
+                       AssertEquals ("test#03", "  <xs:element msdata:IsDataSet=\"true\" msdata:MainDataTable=\"Region\" msdata:UseCurrentLocale=\"true\" name=\"Root\">", substring);\r
+\r
+                       substring = TextString.Substring (0, TextString.IndexOf (EOL));\r
+                       TextString = TextString.Substring (TextString.IndexOf (EOL) + EOL.Length);\r
+                       AssertEquals ("test#04", "    <xs:complexType>", substring);\r
+\r
+                       substring = TextString.Substring (0, TextString.IndexOf (EOL));\r
+                       TextString = TextString.Substring (TextString.IndexOf (EOL) + EOL.Length);\r
+                       AssertEquals ("test#05", "      <xs:choice maxOccurs=\"unbounded\" minOccurs=\"0\">", substring);\r
+\r
+                       substring = TextString.Substring (0, TextString.IndexOf (EOL));\r
+                       TextString = TextString.Substring (TextString.IndexOf (EOL) + EOL.Length);\r
+                       AssertEquals ("test#06", "        <xs:element name=\"Region\">", substring);\r
+\r
+                       substring = TextString.Substring (0, TextString.IndexOf (EOL));\r
+                       TextString = TextString.Substring (TextString.IndexOf (EOL) + EOL.Length);\r
+                       AssertEquals ("test#07", "          <xs:complexType>", substring);\r
+\r
+                       substring = TextString.Substring (0, TextString.IndexOf (EOL));\r
+                       TextString = TextString.Substring (TextString.IndexOf (EOL) + EOL.Length);\r
+                       AssertEquals ("test#08", "            <xs:sequence>", substring);\r
+\r
+                       substring = TextString.Substring (0, TextString.IndexOf (EOL));\r
+                       TextString = TextString.Substring (TextString.IndexOf (EOL) + EOL.Length);\r
+                       AssertEquals ("test#09", "              <xs:element minOccurs=\"0\" name=\"RegionID\" type=\"xs:string\" />", substring);\r
+\r
+                       substring = TextString.Substring (0, TextString.IndexOf (EOL));\r
+                       TextString = TextString.Substring (TextString.IndexOf (EOL) + EOL.Length);\r
+                       AssertEquals ("test#10", "              <xs:element minOccurs=\"0\" name=\"RegionDescription\" type=\"xs:string\" />", substring);\r
+\r
+                       substring = TextString.Substring (0, TextString.IndexOf (EOL));\r
+                       TextString = TextString.Substring (TextString.IndexOf (EOL) + EOL.Length);\r
+                       AssertEquals ("test#11", "            </xs:sequence>", substring);\r
+\r
+                       substring = TextString.Substring (0, TextString.IndexOf (EOL));\r
+                       TextString = TextString.Substring (TextString.IndexOf (EOL) + EOL.Length);\r
+                       AssertEquals ("test#12", "          </xs:complexType>", substring);\r
+\r
+                       substring = TextString.Substring (0, TextString.IndexOf (EOL));\r
+                       TextString = TextString.Substring (TextString.IndexOf (EOL) + EOL.Length);\r
+                       AssertEquals ("test#13", "        </xs:element>", substring);\r
+\r
+                       substring = TextString.Substring (0, TextString.IndexOf (EOL));\r
+                       TextString = TextString.Substring (TextString.IndexOf (EOL) + EOL.Length);\r
+                       AssertEquals ("test#14", "      </xs:choice>", substring);\r
+\r
+                       substring = TextString.Substring (0, TextString.IndexOf (EOL));\r
+                       TextString = TextString.Substring (TextString.IndexOf (EOL) + EOL.Length);\r
+                       AssertEquals ("test#15", "    </xs:complexType>", substring);\r
+\r
+                       substring = TextString.Substring (0, TextString.IndexOf (EOL));\r
+                       TextString = TextString.Substring (TextString.IndexOf (EOL) + EOL.Length);\r
+                       AssertEquals ("test#16", "  </xs:element>", substring);\r
+\r
+                       AssertEquals ("test#17", "</xs:schema>", TextString);\r
+               }\r
+\r
+               [Test]\r
+               [Category ("NotWorking")]\r
+               public void WriteXmlSchema2 () {\r
+                       string xml = @"<myDataSet xmlns='NetFrameWork'><myTable><id>0</id><item>item 0</item></myTable><myTable><id>1</id><item>item 1</item></myTable><myTable><id>2</id><item>item 2</item></myTable><myTable><id>3</id><item>item 3</item></myTable><myTable><id>4</id><item>item 4</item></myTable><myTable><id>5</id><item>item 5</item></myTable><myTable><id>6</id><item>item 6</item></myTable><myTable><id>7</id><item>item 7</item></myTable><myTable><id>8</id><item>item 8</item></myTable><myTable><id>9</id><item>item 9</item></myTable></myDataSet>";\r
+                       string schema = @"<?xml version='1.0' encoding='utf-16'?>
+<xs:schema id='myDataSet' targetNamespace='NetFrameWork' xmlns:mstns='NetFrameWork' xmlns='NetFrameWork' xmlns:xs='http://www.w3.org/2001/XMLSchema' xmlns:msdata='urn:schemas-microsoft-com:xml-msdata' attributeFormDefault='qualified' elementFormDefault='qualified'>
+  <xs:element name='myDataSet' msdata:IsDataSet='true' msdata:MainDataTable='NetFrameWork_x003A_myTable' msdata:UseCurrentLocale='true'>\r
+    <xs:complexType>
+      <xs:choice minOccurs='0' maxOccurs='unbounded'>
+        <xs:element name='myTable'>
+          <xs:complexType>
+            <xs:sequence>
+              <xs:element name='id' msdata:AutoIncrement='true' type='xs:int' minOccurs='0' />
+              <xs:element name='item' type='xs:string' minOccurs='0' />
+            </xs:sequence>
+          </xs:complexType>
+        </xs:element>
+      </xs:choice>
+    </xs:complexType>
+  </xs:element>
+</xs:schema>";\r
+                       DataSet OriginalDataSet = new DataSet ("myDataSet");\r
+                       OriginalDataSet.Namespace = "NetFrameWork";\r
+                       DataTable myTable = new DataTable ("myTable");\r
+                       DataColumn c1 = new DataColumn ("id", typeof (int));\r
+                       c1.AutoIncrement = true;\r
+                       DataColumn c2 = new DataColumn ("item");\r
+                       myTable.Columns.Add (c1);\r
+                       myTable.Columns.Add (c2);\r
+                       OriginalDataSet.Tables.Add (myTable);\r
+                       // Add ten rows.\r
+                       DataRow newRow;\r
+                       for (int i = 0; i < 10; i++) {\r
+                               newRow = myTable.NewRow ();\r
+                               newRow["item"] = "item " + i;\r
+                               myTable.Rows.Add (newRow);\r
+                       }\r
+                       OriginalDataSet.AcceptChanges ();\r
+\r
+                       StringWriter sw = new StringWriter ();\r
+                       XmlTextWriter xtw = new XmlTextWriter (sw);\r
+                       xtw.QuoteChar = '\'';\r
+                       OriginalDataSet.WriteXml (xtw);\r
+                       string result = sw.ToString ();\r
+\r
+                       AssertEquals (xml, result);\r
+\r
+                       sw = new StringWriter ();\r
+                       xtw = new XmlTextWriter (sw);\r
+                       xtw.Formatting = Formatting.Indented;\r
+                       OriginalDataSet.Tables[0].WriteXmlSchema (xtw);\r
+                       result = sw.ToString ();\r
+\r
+                       result = result.Replace ("\r\n", "\n").Replace ('"', '\'');\r
+                       AssertEquals (schema.Replace ("\r\n", "\n"), result);\r
+               }\r
+\r
+               [Test]\r
+               [Category ("NotWorking")]\r
+               public void WriteXmlSchema3 () {\r
+                       string xmlschema = @"<?xml version=""1.0"" encoding=""utf-16""?>
+<xs:schema id=""ExampleDataSet"" xmlns="""" xmlns:xs=""http://www.w3.org/2001/XMLSchema"" xmlns:msdata=""urn:schemas-microsoft-com:xml-msdata"">
+  <xs:element name=""ExampleDataSet"" msdata:IsDataSet=""true"" msdata:MainDataTable=""ExampleDataTable"" msdata:UseCurrentLocale=""true"">\r
+    <xs:complexType>
+      <xs:choice minOccurs=""0"" maxOccurs=""unbounded"">\r
+        <xs:element name=""ExampleDataTable"">
+          <xs:complexType>
+            <xs:attribute name=""PrimaryKeyColumn"" type=""xs:int"" use=""required"" />
+          </xs:complexType>
+        </xs:element>
+      </xs:choice>
+    </xs:complexType>
+    <xs:unique name=""PK_ExampleDataTable"" msdata:PrimaryKey=""true"">
+      <xs:selector xpath="".//ExampleDataTable"" />
+      <xs:field xpath=""@PrimaryKeyColumn"" />
+    </xs:unique>
+  </xs:element>
+</xs:schema>";\r
+                       DataSet ds = new DataSet ("ExampleDataSet");\r
+\r
+                       ds.Tables.Add (new DataTable ("ExampleDataTable"));\r
+                       ds.Tables["ExampleDataTable"].Columns.Add (\r
+                               new DataColumn ("PrimaryKeyColumn", typeof (int), "", MappingType.Attribute));\r
+                       ds.Tables["ExampleDataTable"].Columns["PrimaryKeyColumn"].AllowDBNull = false;\r
+\r
+                       ds.Tables["ExampleDataTable"].Constraints.Add (\r
+                               "PK_ExampleDataTable",\r
+                               ds.Tables["ExampleDataTable"].Columns["PrimaryKeyColumn"],\r
+                               true);\r
+\r
+                       ds.AcceptChanges ();\r
+                       StringWriter sw = new StringWriter ();\r
+                       ds.Tables[0].WriteXmlSchema (sw);\r
+\r
+                       string result = sw.ToString ();\r
+\r
+                       AssertEquals (xmlschema.Replace ("\r\n", "\n"), result.Replace ("\r\n", "\n"));\r
+                       //AssertEquals (xmlschema, result.Replace ("\r\n", "\n"));\r
+               }\r
+\r
+               [Test]\r
+               [Category ("NotWorking")]\r
+               public void WriteXmlSchema4 () {\r
+                       string xmlschema = @"<?xml version=""1.0"" encoding=""utf-16""?>
+<xs:schema id=""Example"" xmlns="""" xmlns:xs=""http://www.w3.org/2001/XMLSchema"" xmlns:msdata=""urn:schemas-microsoft-com:xml-msdata"">
+  <xs:element name=""Example"" msdata:IsDataSet=""true"" msdata:MainDataTable=""MyType"" msdata:UseCurrentLocale=""true"">\r
+    <xs:complexType>
+      <xs:choice minOccurs=""0"" maxOccurs=""unbounded"">\r
+        <xs:element name=""MyType"">
+          <xs:complexType>
+            <xs:attribute name=""ID"" type=""xs:int"" use=""required"" />
+            <xs:attribute name=""Desc"" type=""xs:string"" />
+          </xs:complexType>
+        </xs:element>
+      </xs:choice>
+    </xs:complexType>
+  </xs:element>
+</xs:schema>";\r
+                       DataSet ds = new DataSet ("Example");\r
+\r
+                       // Add MyType DataTable\r
+                       DataTable dt = new DataTable ("MyType");\r
+                       ds.Tables.Add (dt);\r
+\r
+                       dt.Columns.Add (new DataColumn ("ID", typeof (int), "",\r
+                               MappingType.Attribute));\r
+                       dt.Columns["ID"].AllowDBNull = false;\r
+\r
+                       dt.Columns.Add (new DataColumn ("Desc", typeof\r
+                               (string), "", MappingType.Attribute));\r
+\r
+                       ds.AcceptChanges ();\r
+\r
+                       StringWriter sw = new StringWriter ();\r
+                       ds.Tables[0].WriteXmlSchema (sw);\r
+\r
+                       string result = sw.ToString ();\r
+\r
+                       AssertEquals (xmlschema.Replace ("\r\n", "\n"), result.Replace ("\r\n", "\n"));\r
+               }\r
+\r
+               [Test]\r
+               [Category ("NotWorking")]\r
+               public void WriteXmlSchema5 () {\r
+                       string xmlschema1 = @"<?xml version=""1.0"" encoding=""utf-16""?>
+<xs:schema id=""Example"" xmlns="""" xmlns:xs=""http://www.w3.org/2001/XMLSchema"" xmlns:msdata=""urn:schemas-microsoft-com:xml-msdata"">
+  <xs:element name=""Example"" msdata:IsDataSet=""true"" msdata:MainDataTable=""StandAlone"" msdata:UseCurrentLocale=""true"">\r
+    <xs:complexType>
+      <xs:choice minOccurs=""0"" maxOccurs=""unbounded"">\r
+        <xs:element name=""StandAlone"">
+          <xs:complexType>
+            <xs:attribute name=""ID"" type=""xs:int"" use=""required"" />
+            <xs:attribute name=""Desc"" type=""xs:string"" use=""required"" />
+          </xs:complexType>
+        </xs:element>
+      </xs:choice>
+    </xs:complexType>
+  </xs:element>
+</xs:schema>";\r
+                       string xmlschema2 = @"<?xml version=""1.0"" encoding=""utf-16""?>
+<xs:schema id=""Example"" xmlns="""" xmlns:xs=""http://www.w3.org/2001/XMLSchema"" xmlns:msdata=""urn:schemas-microsoft-com:xml-msdata"">
+  <xs:element name=""Example"" msdata:IsDataSet=""true"" msdata:MainDataTable=""Dimension"" msdata:UseCurrentLocale=""true"">\r
+    <xs:complexType>
+      <xs:choice minOccurs=""0"" maxOccurs=""unbounded"">\r
+        <xs:element name=""Dimension"">
+          <xs:complexType>
+            <xs:attribute name=""Number"" msdata:ReadOnly=""true"" type=""xs:int"" use=""required"" />
+            <xs:attribute name=""Title"" type=""xs:string"" use=""required"" />
+          </xs:complexType>
+        </xs:element>
+      </xs:choice>
+    </xs:complexType>
+    <xs:unique name=""PK_Dimension"" msdata:PrimaryKey=""true"">
+      <xs:selector xpath="".//Dimension"" />
+      <xs:field xpath=""@Number"" />
+    </xs:unique>
+  </xs:element>
+</xs:schema>";\r
+                       string xmlschema3 = @"<?xml version=""1.0"" encoding=""utf-16""?>
+<xs:schema id=""Example"" xmlns="""" xmlns:xs=""http://www.w3.org/2001/XMLSchema"" xmlns:msdata=""urn:schemas-microsoft-com:xml-msdata"">
+  <xs:element name=""Example"" msdata:IsDataSet=""true"" msdata:MainDataTable=""Element"" msdata:UseCurrentLocale=""true"">\r
+    <xs:complexType>
+      <xs:choice minOccurs=""0"" maxOccurs=""unbounded"">\r
+        <xs:element name=""Element"">
+          <xs:complexType>
+            <xs:attribute name=""Dimension"" msdata:ReadOnly=""true"" type=""xs:int"" use=""required"" />
+            <xs:attribute name=""Number"" msdata:ReadOnly=""true"" type=""xs:int"" use=""required"" />
+            <xs:attribute name=""Title"" type=""xs:string"" use=""required"" />
+          </xs:complexType>
+        </xs:element>
+      </xs:choice>
+    </xs:complexType>
+    <xs:unique name=""PK_Element"" msdata:PrimaryKey=""true"">
+      <xs:selector xpath="".//Element"" />
+      <xs:field xpath=""@Dimension"" />
+      <xs:field xpath=""@Number"" />
+    </xs:unique>
+  </xs:element>
+</xs:schema>";\r
+                       DataSet ds = new DataSet ("Example");\r
+\r
+                       // Add a DataTable with no ReadOnly columns\r
+                       DataTable dt1 = new DataTable ("StandAlone");\r
+                       ds.Tables.Add (dt1);\r
+\r
+                       // Add a ReadOnly column\r
+                       dt1.Columns.Add (new DataColumn ("ID", typeof (int), "",\r
+                               MappingType.Attribute));\r
+                       dt1.Columns["ID"].AllowDBNull = false;\r
+\r
+                       dt1.Columns.Add (new DataColumn ("Desc", typeof\r
+                               (string), "", MappingType.Attribute));\r
+                       dt1.Columns["Desc"].AllowDBNull = false;\r
+\r
+                       // Add related DataTables with ReadOnly columns\r
+                       DataTable dt2 = new DataTable ("Dimension");\r
+                       ds.Tables.Add (dt2);\r
+                       dt2.Columns.Add (new DataColumn ("Number", typeof\r
+                               (int), "", MappingType.Attribute));\r
+                       dt2.Columns["Number"].AllowDBNull = false;\r
+                       dt2.Columns["Number"].ReadOnly = true;\r
+\r
+                       dt2.Columns.Add (new DataColumn ("Title", typeof\r
+                               (string), "", MappingType.Attribute));\r
+                       dt2.Columns["Title"].AllowDBNull = false;\r
+\r
+                       dt2.Constraints.Add ("PK_Dimension", dt2.Columns["Number"], true);\r
+\r
+                       DataTable dt3 = new DataTable ("Element");\r
+                       ds.Tables.Add (dt3);\r
+\r
+                       dt3.Columns.Add (new DataColumn ("Dimension", typeof\r
+                               (int), "", MappingType.Attribute));\r
+                       dt3.Columns["Dimension"].AllowDBNull = false;\r
+                       dt3.Columns["Dimension"].ReadOnly = true;\r
+\r
+                       dt3.Columns.Add (new DataColumn ("Number", typeof\r
+                               (int), "", MappingType.Attribute));\r
+                       dt3.Columns["Number"].AllowDBNull = false;\r
+                       dt3.Columns["Number"].ReadOnly = true;\r
+\r
+                       dt3.Columns.Add (new DataColumn ("Title", typeof\r
+                               (string), "", MappingType.Attribute));\r
+                       dt3.Columns["Title"].AllowDBNull = false;\r
+\r
+                       dt3.Constraints.Add ("PK_Element", new DataColumn[] { 
+                               dt3.Columns ["Dimension"],
+                               dt3.Columns ["Number"] }, true);\r
+\r
+                       ds.AcceptChanges ();\r
+\r
+                       StringWriter sw1 = new StringWriter ();\r
+                       ds.Tables[0].WriteXmlSchema (sw1);\r
+                       string result1 = sw1.ToString ();\r
+                       AssertEquals (xmlschema1.Replace ("\r\n", "\n"), result1.Replace ("\r\n", "\n"));\r
+\r
+                       StringWriter sw2 = new StringWriter ();\r
+                       ds.Tables[1].WriteXmlSchema (sw2);\r
+                       string result2 = sw2.ToString ();\r
+                       AssertEquals (xmlschema2.Replace ("\r\n", "\n"), result2.Replace ("\r\n", "\n"));\r
+\r
+                       StringWriter sw3 = new StringWriter ();\r
+                       ds.Tables[2].WriteXmlSchema (sw3);\r
+                       string result3 = sw3.ToString ();\r
+                       AssertEquals (xmlschema3.Replace ("\r\n", "\n"), result3.Replace ("\r\n", "\n"));\r
+               }\r
+\r
+               [Test]\r
+               [Category ("NotWorking")]\r
+               public void WriteXmlSchema6 () {\r
+                       string xmlschema = @"<?xml version=""1.0"" encoding=""utf-16""?>
+<xs:schema id=""Example"" xmlns="""" xmlns:xs=""http://www.w3.org/2001/XMLSchema"" xmlns:msdata=""urn:schemas-microsoft-com:xml-msdata"">
+  <xs:element name=""Example"" msdata:IsDataSet=""true"" msdata:MainDataTable=""MyType"" msdata:UseCurrentLocale=""true"">\r
+    <xs:complexType>
+      <xs:choice minOccurs=""0"" maxOccurs=""unbounded"">\r
+        <xs:element name=""MyType"">
+          <xs:complexType>
+            <xs:attribute name=""Desc"">
+              <xs:simpleType>
+                <xs:restriction base=""xs:string"">
+                  <xs:maxLength value=""32"" />
+                </xs:restriction>
+              </xs:simpleType>
+            </xs:attribute>
+          </xs:complexType>
+        </xs:element>
+      </xs:choice>
+    </xs:complexType>
+  </xs:element>
+</xs:schema>";\r
+                       DataSet ds = new DataSet ("Example");\r
+\r
+                       // Add MyType DataTable\r
+                       ds.Tables.Add ("MyType");\r
+\r
+                       ds.Tables["MyType"].Columns.Add (new DataColumn (\r
+                               "Desc", typeof (string), "", MappingType.Attribute));\r
+                       ds.Tables["MyType"].Columns["Desc"].MaxLength = 32;\r
+\r
+                       ds.AcceptChanges ();\r
+\r
+                       StringWriter sw = new StringWriter ();\r
+                       ds.Tables[0].WriteXmlSchema (sw);\r
+\r
+                       string result = sw.ToString ();\r
+\r
+                       AssertEquals (xmlschema.Replace ("\r\n", "\n"), result.Replace ("\r\n", "\n"));\r
+               }\r
+\r
+               [Test]\r
+               public void WriteXmlSchema7 () {\r
+                       DataSet ds = new DataSet ();\r
+                       DataTable dt = new DataTable ("table");\r
+                       dt.Columns.Add ("col1");\r
+                       dt.Columns.Add ("col2");\r
+                       ds.Tables.Add (dt);\r
+                       dt.Rows.Add (new object[] { "foo", "bar" });\r
+                       StringWriter sw = new StringWriter ();\r
+                       ds.Tables[0].WriteXmlSchema (sw);\r
+                       Assert (sw.ToString ().IndexOf ("xmlns=\"\"") > 0);\r
+               }\r
+\r
+               [Test]\r
+               public void WriteXmlSchema_ConstraintNameWithSpaces () {\r
+                       DataSet ds = new DataSet ();\r
+                       DataTable table1 = ds.Tables.Add ("table1");\r
+                       DataTable table2 = ds.Tables.Add ("table2");\r
+\r
+                       table1.Columns.Add ("col1", typeof (int));\r
+                       table2.Columns.Add ("col1", typeof (int));\r
+\r
+                       table1.Constraints.Add ("uc 1", table1.Columns[0], false);\r
+                       table2.Constraints.Add ("fc 1", table1.Columns[0], table2.Columns[0]);\r
+\r
+                       StringWriter sw1 = new StringWriter ();\r
+                       StringWriter sw2 = new StringWriter ();\r
+\r
+                       //should not throw an exception\r
+                       ds.Tables[0].WriteXmlSchema (sw1);\r
+                       ds.Tables[1].WriteXmlSchema (sw2);\r
+               }\r
+\r
+               [Test]\r
+               public void WriteXmlSchema_ForignKeyConstraint () {\r
+                       DataSet ds1 = new DataSet ();\r
+\r
+                       DataTable table1 = ds1.Tables.Add ();\r
+                       DataTable table2 = ds1.Tables.Add ();\r
+\r
+                       DataColumn col1_1 = table1.Columns.Add ("col1", typeof (int));\r
+                       DataColumn col2_1 = table2.Columns.Add ("col1", typeof (int));\r
+\r
+                       table2.Constraints.Add ("fk", col1_1, col2_1);\r
+\r
+                       StringWriter sw1 = new StringWriter ();\r
+                       ds1.Tables[0].WriteXmlSchema (sw1);\r
+                       String xml1 = sw1.ToString ();\r
+                       Assert ("#1", xml1.IndexOf (@"<xs:unique name=""Constraint1"">") != -1);\r
+\r
+                       StringWriter sw2 = new StringWriter ();\r
+                       ds1.Tables[1].WriteXmlSchema (sw2);\r
+                       String xml2 = sw2.ToString ();\r
+                       Assert ("#2", xml2.IndexOf (@"<xs:unique name=""Constraint1"">") == -1);\r
+               }\r
+\r
+               [Test]\r
+               [Category ("NotWorking")]\r
+               public void WriteXmlSchema_Relations_ForeignKeys () {\r
+                       MemoryStream ms1 = null;\r
+                       MemoryStream ms2 = null;\r
+                       MemoryStream msA = null;\r
+                       MemoryStream msB = null;\r
+\r
+                       DataSet ds1 = new DataSet ();\r
+\r
+                       DataTable table1 = ds1.Tables.Add ("Table 1");\r
+                       DataTable table2 = ds1.Tables.Add ("Table 2");\r
+\r
+                       DataColumn col1_1 = table1.Columns.Add ("col 1", typeof (int));\r
+                       DataColumn col1_2 = table1.Columns.Add ("col 2", typeof (int));\r
+                       DataColumn col1_3 = table1.Columns.Add ("col 3", typeof (int));\r
+                       DataColumn col1_4 = table1.Columns.Add ("col 4", typeof (int));\r
+                       DataColumn col1_5 = table1.Columns.Add ("col 5", typeof (int));\r
+                       DataColumn col1_6 = table1.Columns.Add ("col 6", typeof (int));\r
+                       DataColumn col1_7 = table1.Columns.Add ("col 7", typeof (int));\r
+\r
+                       DataColumn col2_1 = table2.Columns.Add ("col 1", typeof (int));\r
+                       DataColumn col2_2 = table2.Columns.Add ("col 2", typeof (int));\r
+                       DataColumn col2_3 = table2.Columns.Add ("col 3", typeof (int));\r
+                       DataColumn col2_4 = table2.Columns.Add ("col 4", typeof (int));\r
+                       DataColumn col2_5 = table2.Columns.Add ("col 5", typeof (int));\r
+                       DataColumn col2_6 = table2.Columns.Add ("col 6", typeof (int));\r
+                       DataColumn col2_7 = table2.Columns.Add ("col 7", typeof (int));\r
+\r
+                       ds1.Relations.Add ("rel 1",\r
+                               new DataColumn[] { col1_1, col1_2 },\r
+                               new DataColumn[] { col2_1, col2_2 },\r
+                               false);\r
+                       ds1.Relations.Add ("rel 2",\r
+                               new DataColumn[] { col1_3, col1_4 },\r
+                               new DataColumn[] { col2_3, col2_4 },\r
+                               true);\r
+                       table2.Constraints.Add ("fk 1",\r
+                               new DataColumn[] { col1_5, col1_6 },\r
+                               new DataColumn[] { col2_5, col2_6 });\r
+                       table1.Constraints.Add ("fk 2",\r
+                               new DataColumn[] { col2_5, col2_6 },\r
+                               new DataColumn[] { col1_5, col1_6 });\r
+\r
+                       table1.Constraints.Add ("pk 1", col1_7, true);\r
+                       table2.Constraints.Add ("pk 2", col2_7, true);\r
+\r
+                       ms1 = new MemoryStream ();\r
+                       ds1.Tables[0].WriteXmlSchema (ms1);\r
+                       ms2 = new MemoryStream ();\r
+                       ds1.Tables[1].WriteXmlSchema (ms2);\r
+\r
+                       msA = new MemoryStream (ms1.GetBuffer ());\r
+                       DataTable dtA = new DataTable ();\r
+                       dtA.ReadXmlSchema (msA);\r
+\r
+                       msB = new MemoryStream (ms2.GetBuffer ());\r
+                       DataTable dtB = new DataTable ();\r
+                       dtB.ReadXmlSchema (msB);\r
+\r
+                       AssertEquals ("#2", 3, dtA.Constraints.Count);\r
+                       AssertEquals ("#3", 2, dtB.Constraints.Count);\r
+\r
+                       Assert ("#5", dtA.Constraints.Contains ("pk 1"));\r
+                       Assert ("#6", dtA.Constraints.Contains ("Constraint1"));\r
+                       Assert ("#7", dtA.Constraints.Contains ("Constraint2"));\r
+                       Assert ("#9", dtB.Constraints.Contains ("pk 2"));\r
+                       Assert ("#10", dtB.Constraints.Contains ("Constraint1"));\r
+               }\r
+\r
+               [Test]\r
+               [Category ("NotWorking")]\r
+               public void WriteXmlSchema_DifferentNamespace () {\r
+                       string schema = @"<xs:schema id='NewDataSet' targetNamespace='urn:bar' xmlns:mstns='urn:bar' xmlns='urn:bar' xmlns:xs='http://www.w3.org/2001/XMLSchema' xmlns:msdata='urn:schemas-microsoft-com:xml-msdata' attributeFormDefault='qualified' elementFormDefault='qualified' xmlns:app1='urn:baz' xmlns:app2='urn:foo' msdata:schemafragmentcount='3'>\r
+  <xs:import namespace='urn:foo' />\r
+  <xs:import namespace='urn:baz' />\r
+  <xs:element name='NewDataSet' msdata:IsDataSet='true' msdata:MainDataTable='urn_x003A_foo_x003A_NS1Table' msdata:UseCurrentLocale='true'>\r
+    <xs:complexType>\r
+      <xs:choice minOccurs='0' maxOccurs='unbounded'>\r
+        <xs:element ref='app2:NS1Table' />\r
+      </xs:choice>\r
+    </xs:complexType>\r
+  </xs:element>\r
+</xs:schema>\r
+<xs:schema targetNamespace='urn:baz' xmlns:mstns='urn:bar' xmlns='urn:baz' xmlns:xs='http://www.w3.org/2001/XMLSchema' xmlns:msdata='urn:schemas-microsoft-com:xml-msdata' attributeFormDefault='qualified' elementFormDefault='qualified' xmlns:app1='urn:baz' xmlns:app2='urn:foo'>\r
+  <xs:import namespace='urn:foo' />\r
+  <xs:import namespace='urn:bar' />\r
+  <xs:element name='column2' type='xs:string' />\r
+</xs:schema>\r
+<xs:schema targetNamespace='urn:foo' xmlns:mstns='urn:bar' xmlns='urn:foo' xmlns:xs='http://www.w3.org/2001/XMLSchema' xmlns:msdata='urn:schemas-microsoft-com:xml-msdata' attributeFormDefault='qualified' elementFormDefault='qualified' xmlns:app2='urn:foo' xmlns:app1='urn:baz'>\r
+  <xs:import namespace='urn:bar' />\r
+  <xs:import namespace='urn:baz' />\r
+  <xs:element name='NS1Table'>\r
+    <xs:complexType>\r
+      <xs:sequence>\r
+        <xs:element name='column1' type='xs:string' minOccurs='0' />\r
+        <xs:element ref='app1:column2' minOccurs='0' />\r
+      </xs:sequence>\r
+    </xs:complexType>\r
+  </xs:element>\r
+</xs:schema>";\r
+                       DataSet ds = new DataSet ();\r
+                       DataTable dt = new DataTable ();\r
+                       dt.TableName = "NS1Table";\r
+                       dt.Namespace = "urn:foo";\r
+                       dt.Columns.Add ("column1");\r
+                       dt.Columns.Add ("column2");\r
+                       dt.Columns[1].Namespace = "urn:baz";\r
+                       ds.Tables.Add (dt);\r
+                       DataTable dt2 = new DataTable ();\r
+                       dt2.TableName = "NS2Table";\r
+                       dt2.Namespace = "urn:bar";\r
+                       ds.Tables.Add (dt2);\r
+                       ds.Namespace = "urn:bar";\r
+\r
+                       StringWriter sw1 = new StringWriter ();\r
+                       XmlTextWriter xw1 = new XmlTextWriter (sw1);\r
+                       xw1.Formatting = Formatting.Indented;\r
+                       xw1.QuoteChar = '\'';\r
+                       ds.Tables[0].WriteXmlSchema (xw1);\r
+                       string result1 = sw1.ToString ();\r
+                       AssertEquals ("#1", schema, result1);\r
+\r
+                       StringWriter sw2 = new StringWriter ();\r
+                       XmlTextWriter xw2 = new XmlTextWriter (sw2);\r
+                       xw2.Formatting = Formatting.Indented;\r
+                       xw2.QuoteChar = '\'';\r
+                       ds.Tables[0].WriteXmlSchema (xw2);\r
+                       string result2 = sw2.ToString ();\r
+                       AssertEquals ("#2", schema, result2);\r
+               }\r
+\r
+               [Test]\r
+               [Category ("NotWorking")]\r
+               // WriteXmlSchema doesn't have overload wityh 2 parameters in System.Data\r
+               // and is commented-out TWICE below\r
+               public void WriteXmlSchema_Hierarchy () {\r
+                       DataSet ds = new DataSet ();\r
+                       DataTable table1 = new DataTable ();\r
+                       DataColumn idColumn = table1.Columns.Add ("ID", typeof (Int32));\r
+                       table1.Columns.Add ("Name", typeof (String));\r
+                       table1.PrimaryKey = new DataColumn[] { idColumn };\r
+                       DataTable table2 = new DataTable ();\r
+                       table2.Columns.Add (new DataColumn ("OrderID", typeof (Int32)));\r
+                       table2.Columns.Add (new DataColumn ("CustomerID", typeof (Int32)));\r
+                       table2.Columns.Add (new DataColumn ("OrderDate", typeof (DateTime)));\r
+                       table2.PrimaryKey = new DataColumn[] { table2.Columns[0] };\r
+                       ds.Tables.Add (table1);\r
+                       ds.Tables.Add (table2);\r
+                       ds.Relations.Add ("CustomerOrder",\r
+                           new DataColumn[] { table1.Columns[0] },\r
+                           new DataColumn[] { table2.Columns[1] }, true);\r
+\r
+                       StringWriter writer1 = new StringWriter ();\r
+                       //table1.WriteXmlSchema (writer1, false);\r
+                       string expected1 = "<?xml version=\"1.0\" encoding=\"utf-16\"?>\r\n<xs:schema id=\"NewDataSet\" xmlns=\"\" xmlns:xs=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\r\n  <xs:element name=\"NewDataSet\" msdata:IsDataSet=\"true\" msdata:MainDataTable=\"Table1\" msdata:UseCurrentLocale=\"true\">\r\n    <xs:complexType>\r\n      <xs:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\r\n        <xs:element name=\"Table1\">\r\n          <xs:complexType>\r\n            <xs:sequence>\r\n              <xs:element name=\"ID\" type=\"xs:int\" />\r\n              <xs:element name=\"Name\" type=\"xs:string\" minOccurs=\"0\" />\r\n            </xs:sequence>\r\n          </xs:complexType>\r\n        </xs:element>\r\n      </xs:choice>\r\n    </xs:complexType>\r\n    <xs:unique name=\"Constraint1\" msdata:PrimaryKey=\"true\">\r\n      <xs:selector xpath=\".//Table1\" />\r\n      <xs:field xpath=\"ID\" />\r\n    </xs:unique>\r\n  </xs:element>\r\n</xs:schema>";\r
+                       AssertEquals ("#1", expected1, writer1.ToString());\r
+\r
+                       StringWriter writer2 = new StringWriter ();\r
+                       //table1.WriteXmlSchema (writer2, true);\r
+                       string expected2 = "<?xml version=\"1.0\" encoding=\"utf-16\"?>\r\n<xs:schema id=\"NewDataSet\" xmlns=\"\" xmlns:xs=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\r\n  <xs:element name=\"NewDataSet\" msdata:IsDataSet=\"true\" msdata:MainDataTable=\"Table1\" msdata:UseCurrentLocale=\"true\">\r\n    <xs:complexType>\r\n      <xs:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\r\n        <xs:element name=\"Table1\">\r\n          <xs:complexType>\r\n            <xs:sequence>\r\n              <xs:element name=\"ID\" type=\"xs:int\" />\r\n              <xs:element name=\"Name\" type=\"xs:string\" minOccurs=\"0\" />\r\n            </xs:sequence>\r\n          </xs:complexType>\r\n        </xs:element>\r\n        <xs:element name=\"Table2\">\r\n          <xs:complexType>\r\n            <xs:sequence>\r\n              <xs:element name=\"OrderID\" type=\"xs:int\" />\r\n              <xs:element name=\"CustomerID\" type=\"xs:int\" minOccurs=\"0\" />\r\n              <xs:element name=\"OrderDate\" type=\"xs:dateTime\" minOccurs=\"0\" />\r\n            </xs:sequence>\r\n          </xs:complexType>\r\n        </xs:element>\r\n      </xs:choice>\r\n    </xs:complexType>\r\n    <xs:unique name=\"Constraint1\" msdata:PrimaryKey=\"true\">\r\n      <xs:selector xpath=\".//Table1\" />\r\n      <xs:field xpath=\"ID\" />\r\n    </xs:unique>\r\n    <xs:unique name=\"Table2_Constraint1\" msdata:ConstraintName=\"Constraint1\" msdata:PrimaryKey=\"true\">\r\n      <xs:selector xpath=\".//Table2\" />\r\n      <xs:field xpath=\"OrderID\" />\r\n    </xs:unique>\r\n    <xs:keyref name=\"CustomerOrder\" refer=\"Constraint1\">\r\n      <xs:selector xpath=\".//Table2\" />\r\n      <xs:field xpath=\"CustomerID\" />\r\n    </xs:keyref>\r\n  </xs:element>\r\n</xs:schema>";\r
+                       AssertEquals ("#2", expected2, writer2.ToString ());\r
+               }\r
+\r
+               [Test]\r
+               [Category ("NotWorking")]\r
+               // WriteXmlSchema doesn't have overload wityh 2 parameters in System.Data\r
+               // and is commented-out TWICE below\r
+               public void ReadWriteXmlSchema () {\r
+                       DataSet ds = new DataSet ();\r
+                       ds.ReadXmlSchema ("Test/System.Data/store.xsd");\r
+                       // check dataset properties before testing write\r
+                       AssertDataSet ("ds", ds, "NewDataSet", 3, 2);\r
+                       AssertDataTable ("tab1", ds.Tables[0], "bookstore", 1, 0, 0, 1, 1, 1);\r
+                       AssertDataTable ("tab2", ds.Tables[1], "book", 5, 0, 1, 1, 2, 1);\r
+                       AssertDataTable ("tab3", ds.Tables[2], "author", 3, 0, 1, 0, 1, 0);\r
+                       // FIXME: currently order is not compatible. Use name as index\r
+                       AssertDataRelation ("rel1", ds.Relations["book_author"], "book_author", true, new string[] { "book_Id" }, new string[] { "book_Id" }, true, true);\r
+                       AssertDataRelation ("rel2", ds.Relations["bookstore_book"], "bookstore_book", true, new string[] { "bookstore_Id" }, new string[] { "bookstore_Id" }, true, true);\r
+\r
+                       ds.ReadXml ("Test/System.Data/region.xml", XmlReadMode.InferSchema);\r
+                       ds.Relations.Clear (); // because can not call WriteXmlSchema with nested relations.\r
+\r
+                       TextWriter writer1 = new StringWriter ();\r
+                       ds.Tables[0].WriteXmlSchema (writer1);\r
+                       string TextString1 = GetNormalizedSchema (writer1.ToString ());\r
+                       string expected1 = @"<?xml version=""1.0"" encoding=""utf-16""?>" +\r
+@"<xs:schema id=""Root"" xmlns:msdata=""urn:schemas-microsoft-com:xml-msdata"" xmlns:xs=""http://www.w3.org/2001/XMLSchema"">" +\r
+  @"<xs:complexType name=""bookstoreType"">" +\r
+  @"</xs:complexType>" +\r
+  @"<xs:element name=""bookstore"" type=""bookstoreType"" />" +\r
+  @"<xs:element msdata:IsDataSet=""true"" msdata:MainDataTable=""bookstore"" msdata:UseCurrentLocale=""true"" name=""Root"">" +\r
+    @"<xs:complexType>" +\r
+      @"<xs:choice maxOccurs=""unbounded"" minOccurs=""0"">" +\r
+       @"<xs:element ref=""bookstore"" />" +\r
+      @"</xs:choice>" +\r
+    @"</xs:complexType>" +\r
+  @"</xs:element>" +\r
+@"</xs:schema>";\r
+                       AssertEquals ("#1", expected1, TextString1.Replace("\r\n","").Replace("  ",""));\r
+\r
+                       TextWriter writer2 = new StringWriter ();\r
+                       //ds.Tables[1].WriteXmlSchema (writer2,false);\r
+                       string TextString2 = GetNormalizedSchema (writer2.ToString ());\r
+                       string expected2 = @"<?xml version=""1.0"" encoding=""utf-16""?>" +\r
+@"<xs:schema id=""Root"" xmlns:msdata=""urn:schemas-microsoft-com:xml-msdata"" xmlns:xs=""http://www.w3.org/2001/XMLSchema"">" +\r
+  @"<xs:complexType name=""bookType"">" +\r
+    @"<xs:sequence>" +\r
+      @"<xs:element msdata:Ordinal=""1"" name=""title"" type=""xs:string"" />" +\r
+      @"<xs:element msdata:Ordinal=""2"" name=""price"" type=""xs:decimal"" />" +\r
+    @"</xs:sequence>" +\r
+    @"<xs:attribute name=""genre"" type=""xs:string"" />" +\r
+    @"<xs:attribute name=""bookstore_Id"" type=""xs:int"" use=""prohibited"" />" +\r
+  @"</xs:complexType>" +\r
+  @"<xs:element name=""book"" type=""bookType"" />" +\r
+  @"<xs:element msdata:IsDataSet=""true"" msdata:MainDataTable=""book"" msdata:UseCurrentLocale=""true"" name=""Root"">" +\r
+    @"<xs:complexType>" +\r
+      @"<xs:choice maxOccurs=""unbounded"" minOccurs=""0"">" +\r
+       @"<xs:element ref=""book"" />" +\r
+      @"</xs:choice>" +\r
+    @"</xs:complexType>" +\r
+  @"</xs:element>" +\r
+@"</xs:schema>";\r
+                       AssertEquals ("#2", expected2, TextString2.Replace ("\r\n", "").Replace ("  ", ""));\r
+                       \r
+                       TextWriter writer3 = new StringWriter ();\r
+                       ds.Tables[2].WriteXmlSchema (writer3);\r
+                       string TextString3 = GetNormalizedSchema (writer3.ToString ());\r
+                       string expected3 = @"<?xml version=""1.0"" encoding=""utf-16""?>" +\r
+@"<xs:schema id=""Root"" xmlns:msdata=""urn:schemas-microsoft-com:xml-msdata"" xmlns:xs=""http://www.w3.org/2001/XMLSchema"">" +\r
+  @"<xs:complexType name=""authorName"">" +\r
+    @"<xs:sequence>" +\r
+      @"<xs:element msdata:Ordinal=""0"" name=""first-name"" type=""xs:string"" />" +\r
+      @"<xs:element msdata:Ordinal=""1"" name=""last-name"" type=""xs:string"" />" +\r
+    @"</xs:sequence>" +\r
+    @"<xs:attribute name=""book_Id"" type=""xs:int"" use=""prohibited"" />" +\r
+  @"</xs:complexType>" +\r
+  @"<xs:element name=""author"" type=""authorName"" />" +\r
+  @"<xs:element msdata:IsDataSet=""true"" msdata:MainDataTable=""author"" msdata:UseCurrentLocale=""true"" name=""Root"">" +\r
+    @"<xs:complexType>" +\r
+      @"<xs:choice maxOccurs=""unbounded"" minOccurs=""0"">" +\r
+        @"<xs:element ref=""author"" />" +\r
+      @"</xs:choice>" +\r
+    @"</xs:complexType>" +\r
+  @"</xs:element>" +\r
+@"</xs:schema>";\r
+                       AssertEquals ("#3", expected3, TextString3.Replace ("\r\n", "").Replace ("  ", ""));\r
+                       \r
+                       TextWriter writer4 = new StringWriter ();\r
+                       ds.Tables[3].WriteXmlSchema (writer4);\r
+                       string TextString4 = GetNormalizedSchema (writer4.ToString ());\r
+                       string expected4 = @"<?xml version=""1.0"" encoding=""utf-16""?>" +\r
+@"<xs:schema id=""Root"" xmlns:msdata=""urn:schemas-microsoft-com:xml-msdata"" xmlns:xs=""http://www.w3.org/2001/XMLSchema"">" +\r
+  @"<xs:element msdata:IsDataSet=""true"" msdata:MainDataTable=""Region"" msdata:UseCurrentLocale=""true"" name=""Root"">" +\r
+    @"<xs:complexType>" +\r
+      @"<xs:choice maxOccurs=""unbounded"" minOccurs=""0"">" +\r
+        @"<xs:element name=""Region"">" +\r
+          @"<xs:complexType>" +\r
+            @"<xs:sequence>" +\r
+              @"<xs:element minOccurs=""0"" name=""RegionID"" type=""xs:string"" />" +\r
+              @"<xs:element minOccurs=""0"" name=""RegionDescription"" type=""xs:string"" />" +\r
+            @"</xs:sequence>" +\r
+          @"</xs:complexType>" +\r
+        @"</xs:element>" +\r
+      @"</xs:choice>" +\r
+    @"</xs:complexType>" +\r
+  @"</xs:element>" +\r
+@"</xs:schema>";\r
+                       AssertEquals ("#4", expected4, TextString4.Replace ("\r\n", "").Replace ("  ", ""));\r
+               }\r
+\r
+               [Test]\r
+               [Category ("NotWorking")]\r
+               public void ReadWriteXmlSchema_IgnoreSchema () {\r
+                       DataSet ds = new DataSet ();\r
+                       ds.ReadXmlSchema ("Test/System.Data/store.xsd");\r
+                       // check dataset properties before testing write\r
+                       AssertDataSet ("ds", ds, "NewDataSet", 3, 2);\r
+                       AssertDataTable ("tab1", ds.Tables[0], "bookstore", 1, 0, 0, 1, 1, 1);\r
+                       AssertDataTable ("tab2", ds.Tables[1], "book", 5, 0, 1, 1, 2, 1);\r
+                       AssertDataTable ("tab3", ds.Tables[2], "author", 3, 0, 1, 0, 1, 0);\r
+                       // FIXME: currently order is not compatible. Use name as index\r
+                       AssertDataRelation ("rel1", ds.Relations["book_author"], "book_author", true, new string[] { "book_Id" }, new string[] { "book_Id" }, true, true);\r
+                       AssertDataRelation ("rel2", ds.Relations["bookstore_book"], "bookstore_book", true, new string[] { "bookstore_Id" }, new string[] { "bookstore_Id" }, true, true);\r
+\r
+                       ds.ReadXml ("Test/System.Data/region.xml", XmlReadMode.IgnoreSchema);\r
+                       ds.Relations.Clear (); // because can not call WriteXmlSchema with nested relations.\r
+\r
+                       TextWriter writer1 = new StringWriter ();\r
+                       ds.Tables[0].WriteXmlSchema (writer1);\r
+                       string TextString1 = GetNormalizedSchema (writer1.ToString ());\r
+                       string expected1 = @"<?xml version=""1.0"" encoding=""utf-16""?>" +\r
+@"<xs:schema id=""NewDataSet"" xmlns:msdata=""urn:schemas-microsoft-com:xml-msdata"" xmlns:xs=""http://www.w3.org/2001/XMLSchema"">" +\r
+  @"<xs:complexType name=""bookstoreType"">" +\r
+  @"</xs:complexType>" +\r
+  @"<xs:element name=""bookstore"" type=""bookstoreType"" />" +\r
+  @"<xs:element msdata:IsDataSet=""true"" msdata:MainDataTable=""bookstore"" msdata:UseCurrentLocale=""true"" name=""NewDataSet"">" +\r
+    @"<xs:complexType>" +\r
+      @"<xs:choice maxOccurs=""unbounded"" minOccurs=""0"">" +\r
+       @"<xs:element ref=""bookstore"" />" +\r
+      @"</xs:choice>" +\r
+    @"</xs:complexType>" +\r
+  @"</xs:element>" +\r
+@"</xs:schema>";\r
+                       AssertEquals ("#1", expected1, TextString1.Replace ("\r\n", "").Replace ("  ", ""));\r
+\r
+                       TextWriter writer2 = new StringWriter ();\r
+                       //ds.Tables[1].WriteXmlSchema (writer2, false);\r
+                       string TextString2 = GetNormalizedSchema (writer2.ToString ());\r
+                       string expected2 = @"<?xml version=""1.0"" encoding=""utf-16""?>" +\r
+@"<xs:schema id=""NewDataSet"" xmlns:msdata=""urn:schemas-microsoft-com:xml-msdata"" xmlns:xs=""http://www.w3.org/2001/XMLSchema"">" +\r
+  @"<xs:complexType name=""bookType"">" +\r
+    @"<xs:sequence>" +\r
+      @"<xs:element msdata:Ordinal=""1"" name=""title"" type=""xs:string"" />" +\r
+      @"<xs:element msdata:Ordinal=""2"" name=""price"" type=""xs:decimal"" />" +\r
+    @"</xs:sequence>" +\r
+    @"<xs:attribute name=""genre"" type=""xs:string"" />" +\r
+    @"<xs:attribute name=""bookstore_Id"" type=""xs:int"" use=""prohibited"" />" +\r
+  @"</xs:complexType>" +\r
+  @"<xs:element name=""book"" type=""bookType"" />" +\r
+  @"<xs:element msdata:IsDataSet=""true"" msdata:MainDataTable=""book"" msdata:UseCurrentLocale=""true"" name=""NewDataSet"">" +\r
+    @"<xs:complexType>" +\r
+      @"<xs:choice maxOccurs=""unbounded"" minOccurs=""0"">" +\r
+       @"<xs:element ref=""book"" />" +\r
+      @"</xs:choice>" +\r
+    @"</xs:complexType>" +\r
+  @"</xs:element>" +\r
+@"</xs:schema>";\r
+                       AssertEquals ("#2", expected2, TextString2.Replace ("\r\n", "").Replace ("  ", ""));\r
+\r
+                       TextWriter writer3 = new StringWriter ();\r
+                       ds.Tables[2].WriteXmlSchema (writer3);\r
+                       string TextString3 = GetNormalizedSchema (writer3.ToString ());\r
+                       string expected3 = @"<?xml version=""1.0"" encoding=""utf-16""?>" +\r
+@"<xs:schema id=""NewDataSet"" xmlns:msdata=""urn:schemas-microsoft-com:xml-msdata"" xmlns:xs=""http://www.w3.org/2001/XMLSchema"">" +\r
+  @"<xs:complexType name=""authorName"">" +\r
+    @"<xs:sequence>" +\r
+      @"<xs:element msdata:Ordinal=""0"" name=""first-name"" type=""xs:string"" />" +\r
+      @"<xs:element msdata:Ordinal=""1"" name=""last-name"" type=""xs:string"" />" +\r
+    @"</xs:sequence>" +\r
+    @"<xs:attribute name=""book_Id"" type=""xs:int"" use=""prohibited"" />" +\r
+  @"</xs:complexType>" +\r
+  @"<xs:element name=""author"" type=""authorName"" />" +\r
+  @"<xs:element msdata:IsDataSet=""true"" msdata:MainDataTable=""author"" msdata:UseCurrentLocale=""true"" name=""NewDataSet"">" +\r
+    @"<xs:complexType>" +\r
+      @"<xs:choice maxOccurs=""unbounded"" minOccurs=""0"">" +\r
+       @"<xs:element ref=""author"" />" +\r
+      @"</xs:choice>" +\r
+    @"</xs:complexType>" +\r
+  @"</xs:element>" +\r
+@"</xs:schema>";\r
+                       AssertEquals ("#3", expected3, TextString3.Replace ("\r\n", "").Replace ("  ", ""));\r
+\r
+                       TextWriter writer4 = new StringWriter ();\r
+                       string expStr = "";\r
+                       try {\r
+                               ds.Tables[3].WriteXmlSchema (writer4);\r
+                       }\r
+                       catch (Exception ex) {\r
+                               expStr = ex.Message;\r
+                       }\r
+                       AssertEquals ("#4", "Cannot find table 3.", expStr);\r
+               }\r
+\r
+               [Test]\r
+               [Category ("NotWorking")]\r
+               public void ReadWriteXmlSchema_2 () {\r
+                       DataSet ds = new DataSet ("dataset");\r
+                       ds.Tables.Add ("table1");\r
+                       ds.Tables.Add ("table2");\r
+                       ds.Tables[0].Columns.Add ("col");\r
+                       ds.Tables[1].Columns.Add ("col");\r
+                       ds.Relations.Add ("rel", ds.Tables[0].Columns[0], ds.Tables[1].Columns[0], true);\r
+\r
+                       MemoryStream ms1 = new MemoryStream ();\r
+                       ds.Tables[0].WriteXmlSchema (ms1);\r
+                       MemoryStream ms2 = new MemoryStream ();\r
+                       ds.Tables[1].WriteXmlSchema (ms2);\r
+\r
+                       DataSet ds1 = new DataSet ();\r
+                       ds1.Tables.Add ();\r
+                       ds1.Tables.Add ();\r
+                       ds1.Tables[0].ReadXmlSchema (new MemoryStream (ms1.GetBuffer ()));\r
+                       ds1.Tables[1].ReadXmlSchema (new MemoryStream (ms2.GetBuffer ()));\r
+\r
+                       AssertEquals ("#1", 0, ds1.Relations.Count);\r
+                       AssertEquals ("#2", 1, ds1.Tables[0].Columns.Count);\r
+                       AssertEquals ("#3", 1, ds1.Tables[1].Columns.Count);\r
+               }\r
+\r
+               [Test]\r
+               [ExpectedException (typeof (XmlException))]\r
+               public void ReadWriteXmlSchemaExp_NoRootElmnt () {\r
+                       MemoryStream ms = new MemoryStream ();\r
+                       DataTable dtr = new DataTable ();\r
+                       dtr.ReadXmlSchema (ms);\r
+               }\r
+\r
+               [Test]\r
+               [Category ("NotWorking")]\r
+               [ExpectedException (typeof (InvalidOperationException))]\r
+               public void ReadWriteXmlSchemaExp_NoTableName () {\r
+                       DataTable dtw = new DataTable ();\r
+                       MemoryStream ms = new MemoryStream ();\r
+                       dtw.WriteXmlSchema (ms);\r
+               }\r
+\r
+               [Test]\r
+               [ExpectedException (typeof (ArgumentException))]\r
+               public void ReadWriteXmlSchemaExp_TableNameConflict () {\r
+                       DataTable dtw = new DataTable ("Table1");\r
+                       StringWriter writer1 = new StringWriter ();\r
+                       dtw.WriteXmlSchema (writer1);\r
+                       DataTable dtr = new DataTable ("Table2");\r
+                       StringReader reader1 = new StringReader (writer1.ToString());\r
+                       dtr.ReadXmlSchema (reader1);\r
+               }\r
+\r
+               #endregion // Read/Write XML Tests\r
+\r
+#endif // NET_2_0\r
+\r
        }
                                                                                                     
                                                                                                     
diff --git a/mcs/class/System.Data/Test/System.Data/own_schema1.xsd b/mcs/class/System.Data/Test/System.Data/own_schema1.xsd
new file mode 100644 (file)
index 0000000..813b65b
--- /dev/null
@@ -0,0 +1,31 @@
+<?xml version="1.0" standalone="yes"?>
+<xs:schema id="test_dataset" xmlns="" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+  <xs:element name="test_dataset" msdata:IsDataSet="true" msdata:MainDataTable="test_table" msdata:UseCurrentLocale="true">
+    <xs:complexType>
+      <xs:choice maxOccurs="unbounded">
+        <xs:element name="test_table">
+          <xs:complexType>
+            <xs:sequence>
+              <xs:element name="first" msdata:Caption="test" default="test_default_value" minOccurs="0">
+                <xs:simpleType>
+                  <xs:restriction base="xs:string">
+                    <xs:maxLength value="100" />
+                  </xs:restriction>
+                </xs:simpleType>
+              </xs:element>
+              <xs:element name="second" msdata:DataType="System.Data.SqlTypes.SqlGuid, System.Data, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" type="xs:string" minOccurs="0" />
+            </xs:sequence>
+          </xs:complexType>
+        </xs:element>
+      </xs:choice>
+    </xs:complexType>
+    <xs:unique name="Constraint1">
+      <xs:selector xpath=".//test_table" />
+      <xs:field xpath="first" />
+    </xs:unique>
+    <xs:unique name="second_test_table_Constraint1" msdata:ConstraintName="Constraint1">
+      <xs:selector xpath=".//second_test_table" />
+      <xs:field xpath="second_first" />
+    </xs:unique>
+  </xs:element>
+</xs:schema>
\ No newline at end of file
diff --git a/mcs/class/System.Data/Test/System.Data/own_schema2.xsd b/mcs/class/System.Data/Test/System.Data/own_schema2.xsd
new file mode 100644 (file)
index 0000000..4acd356
--- /dev/null
@@ -0,0 +1,30 @@
+<?xml version="1.0" standalone="yes"?>
+<xs:schema id="test_dataset" xmlns="" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+  <xs:element name="test_dataset" msdata:IsDataSet="true" msdata:MainDataTable="second_test_table" msdata:UseCurrentLocale="true">
+    <xs:complexType>
+      <xs:choice maxOccurs="unbounded">
+        <xs:element name="second_test_table">
+          <xs:complexType>
+            <xs:sequence>
+              <xs:element name="second_first" default="default_value" minOccurs="0">
+                <xs:simpleType>
+                  <xs:restriction base="xs:string">
+                    <xs:maxLength value="100" />
+                  </xs:restriction>
+                </xs:simpleType>
+              </xs:element>
+            </xs:sequence>
+          </xs:complexType>
+        </xs:element>
+      </xs:choice>
+    </xs:complexType>
+    <xs:unique name="Constraint1">
+      <xs:selector xpath=".//test_table" />
+      <xs:field xpath="first" />
+    </xs:unique>
+    <xs:unique name="second_test_table_Constraint1" msdata:ConstraintName="Constraint1">
+      <xs:selector xpath=".//second_test_table" />
+      <xs:field xpath="second_first" />
+    </xs:unique>
+  </xs:element>
+</xs:schema>