System.Data.Tests.DataTableTest.ImportRowTest C# (CSharp) Method

ImportRowTest() private method

private ImportRowTest ( ) : void
return void
        public void ImportRowTest()
        {
            // build source table
            DataTable src = new DataTable();
            src.Columns.Add("id", typeof(int));
            src.Columns.Add("name", typeof(string));

            src.PrimaryKey = new DataColumn[] { src.Columns[0] };

            src.Rows.Add(new object[] { 1, "mono 1" });
            src.Rows.Add(new object[] { 2, "mono 2" });
            src.Rows.Add(new object[] { 3, "mono 3" });
            src.AcceptChanges();

            src.Rows[0][1] = "mono changed 1";  // modify 1st row
            src.Rows[1].Delete();              // delete 2nd row
                                               // 3rd row is unchanged
            src.Rows.Add(new object[] { 4, "mono 4" }); // add 4th row

            // build target table
            DataTable target = new DataTable();
            target.Columns.Add("id", typeof(int));
            target.Columns.Add("name", typeof(string));

            target.PrimaryKey = new DataColumn[] { target.Columns[0] };

            // import all rows
            target.ImportRow(src.Rows[0]);     // import 1st row
            target.ImportRow(src.Rows[1]);     // import 2nd row
            target.ImportRow(src.Rows[2]);     // import 3rd row
            target.ImportRow(src.Rows[3]);     // import 4th row

            try
            {
                target.ImportRow(src.Rows[2]); // import 3rd row again
                Assert.False(true);
            }
            catch (ConstraintException ex)
            {
                // Column 'id' is constrained to be unique.
                // Value '3' is already present
                Assert.Equal(typeof(ConstraintException), ex.GetType());
                Assert.Null(ex.InnerException);
                Assert.NotNull(ex.Message);
                Assert.True(ex.Message.IndexOf("'id'") != -1);
                Assert.True(ex.Message.IndexOf("'3'") != -1);
            }

            // check row states
            Assert.Equal(src.Rows[0].RowState, target.Rows[0].RowState);
            Assert.Equal(src.Rows[1].RowState, target.Rows[1].RowState);
            Assert.Equal(src.Rows[2].RowState, target.Rows[2].RowState);
            Assert.Equal(src.Rows[3].RowState, target.Rows[3].RowState);

            // check for modified row (1st row)
            Assert.Equal((string)src.Rows[0][1], (string)target.Rows[0][1]);
            Assert.Equal((string)src.Rows[0][1, DataRowVersion.Default], (string)target.Rows[0][1, DataRowVersion.Default]);
            Assert.Equal((string)src.Rows[0][1, DataRowVersion.Original], (string)target.Rows[0][1, DataRowVersion.Original]);
            Assert.Equal((string)src.Rows[0][1, DataRowVersion.Current], (string)target.Rows[0][1, DataRowVersion.Current]);
            Assert.False(target.Rows[0].HasVersion(DataRowVersion.Proposed));

            // check for deleted row (2nd row)
            Assert.Equal((string)src.Rows[1][1, DataRowVersion.Original], (string)target.Rows[1][1, DataRowVersion.Original]);

            // check for unchanged row (3rd row)
            Assert.Equal((string)src.Rows[2][1], (string)target.Rows[2][1]);
            Assert.Equal((string)src.Rows[2][1, DataRowVersion.Default], (string)target.Rows[2][1, DataRowVersion.Default]);
            Assert.Equal((string)src.Rows[2][1, DataRowVersion.Original], (string)target.Rows[2][1, DataRowVersion.Original]);
            Assert.Equal((string)src.Rows[2][1, DataRowVersion.Current], (string)target.Rows[2][1, DataRowVersion.Current]);

            // check for newly added row (4th row)
            Assert.Equal((string)src.Rows[3][1], (string)target.Rows[3][1]);
            Assert.Equal((string)src.Rows[3][1, DataRowVersion.Default], (string)target.Rows[3][1, DataRowVersion.Default]);
            Assert.Equal((string)src.Rows[3][1, DataRowVersion.Current], (string)target.Rows[3][1, DataRowVersion.Current]);
        }
DataTableTest