public void GetChanges_ByDataRowState()
{
var ds = new DataSet();
object[] arrAdded, arrDeleted, arrModified, arrUnchanged;
//object[] arrDetached;
DataRow dr;
ds.Tables.Add(DataProvider.CreateParentDataTable());
// GetChanges 1
Assert.Equal(null, ds.GetChanges());
//make some changes
// can't check detached
// dr = ds.Tables[0].Rows[0];
// arrDetached = dr.ItemArray;
// dr.Delete();
// ds.Tables[0].AcceptChanges();
dr = ds.Tables[0].Rows[1];
arrDeleted = dr.ItemArray;
dr.Delete();
dr = ds.Tables[0].Rows[2];
dr[1] = "NewValue";
arrModified = dr.ItemArray;
dr = ds.Tables[0].Select("", "", DataViewRowState.Unchanged)[0];
arrUnchanged = dr.ItemArray;
dr = ds.Tables[0].NewRow();
dr[0] = 1;
ds.Tables[0].Rows.Add(dr);
arrAdded = dr.ItemArray;
// GetChanges Added
Assert.Equal(arrAdded, ds.GetChanges(DataRowState.Added).Tables[0].Rows[0].ItemArray);
// GetChanges Deleted
dr = ds.GetChanges(DataRowState.Deleted).Tables[0].Rows[0];
object[] tmp = new object[] { dr[0, DataRowVersion.Original], dr[1, DataRowVersion.Original], dr[2, DataRowVersion.Original], dr[3, DataRowVersion.Original], dr[4, DataRowVersion.Original], dr[5, DataRowVersion.Original] };
Assert.Equal(arrDeleted, tmp);
// can't check it
// // GetChanges Detached
// dr = ds.GetChanges(DataRowState.Detached).Tables[0].Rows[0];
// object[] tmp = new object[] {dr[0,DataRowVersion.Original],dr[1,DataRowVersion.Original],dr[2,DataRowVersion.Original]};
// Assert.Equal(arrDetached, tmp);
// GetChanges Modified
Assert.Equal(arrModified, ds.GetChanges(DataRowState.Modified).Tables[0].Rows[0].ItemArray);
// GetChanges Unchanged
Assert.Equal(arrUnchanged, ds.GetChanges(DataRowState.Unchanged).Tables[0].Rows[0].ItemArray);
}