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
Assert.Equal("mono 1", dtLoad.Rows[0][1, DataRowVersion.Current]);
Assert.Equal("RowState 1", dtLoad.Rows[0][1, DataRowVersion.Original]);
Assert.Equal(DataRowState.Modified, dtLoad.Rows[0].RowState);
// asserting Modified Row1
Assert.Equal("mono 2", dtLoad.Rows[1][1, DataRowVersion.Current]);
Assert.Equal("RowState 2", dtLoad.Rows[1][1, DataRowVersion.Original]);
Assert.Equal(DataRowState.Modified, dtLoad.Rows[1].RowState);
// asserting Deleted Row2 and "Deleted-Added" Row4
Assert.Equal("RowState 3", dtLoad.Rows[2][1, DataRowVersion.Original]);
Assert.Equal(DataRowState.Deleted, dtLoad.Rows[2].RowState);
Assert.Equal("mono 3", dtLoad.Rows[4][1, DataRowVersion.Current]);
Assert.Equal(DataRowState.Added, dtLoad.Rows[4].RowState);
// asserting Added Row3
Assert.Equal("mono 4", dtLoad.Rows[3][1, DataRowVersion.Current]);
Assert.Equal(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
Assert.Equal("mono 5", dtLoad.Rows[5][1, DataRowVersion.Current]);
Assert.Equal(DataRowState.Added, dtLoad.Rows[5].RowState);
}