//
// 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)
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()
{
[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);
}
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
}