public void TestRemove_ByDataColumn()
{
//prepare a DataSet with DataTable to be checked
DataTable dtSource = new DataTable();
dtSource.Columns.Add("Col_0", typeof(int));
dtSource.Columns.Add("Col_1", typeof(int));
dtSource.Columns.Add("Col_2", typeof(int));
dtSource.Rows.Add(new object[] { 0, 1, 2 });
DataTable dt = null;
//------Check Remove first column---------
dt = dtSource.Clone();
dt.ImportRow(dtSource.Rows[0]);
dt.Columns.Remove(dt.Columns[0]);
// Remove first column - check column count
Assert.Equal(2, dt.Columns.Count);
// Remove first column - check column removed
Assert.Equal(false, dt.Columns.Contains("Col_0"));
// Remove first column - check column 0 data
Assert.Equal(1, dt.Rows[0][0]);
// Remove first column - check column 1 data
Assert.Equal(2, dt.Rows[0][1]);
//------Check Remove middle column---------
dt = dtSource.Clone();
dt.ImportRow(dtSource.Rows[0]);
dt.Columns.Remove(dt.Columns[1]);
// Remove middle column - check column count
Assert.Equal(2, dt.Columns.Count);
// Remove middle column - check column removed
Assert.Equal(false, dt.Columns.Contains("Col_1"));
// Remove middle column - check column 0 data
Assert.Equal(0, dt.Rows[0][0]);
// Remove middle column - check column 1 data
Assert.Equal(2, dt.Rows[0][1]);
//------Check Remove last column---------
dt = dtSource.Clone();
dt.ImportRow(dtSource.Rows[0]);
dt.Columns.Remove(dt.Columns[2]);
// Remove last column - check column count
Assert.Equal(2, dt.Columns.Count);
// Remove last column - check column removed
Assert.Equal(false, dt.Columns.Contains("Col_2"));
// Remove last column - check column 0 data
Assert.Equal(0, dt.Rows[0][0]);
// Remove last column - check column 1 data
Assert.Equal(1, dt.Rows[0][1]);
//------Check Remove column exception---------
dt = dtSource.Clone();
dt.ImportRow(dtSource.Rows[0]);
Assert.Throws<ArgumentException>(() =>
{
DataColumn dc = new DataColumn();
dt.Columns.Remove(dc);
});
}