public void Default() { DataRowComparer <DataRow> c1 = DataRowComparer.Default; DataRowComparer <DataRow> c2 = DataRowComparer.Default; Assert.Same(c1, c2); }
public void GetHashCodeWithVersions() { DataSet ds = new DataSet(); DataTable dt = new DataTable("MyTable"); ds.Tables.Add(dt); dt.Columns.Add("col1"); dt.Columns.Add("col2"); DataRow r1 = dt.Rows.Add(new object [] { "foo", "bar" }); DataRow r2 = dt.Rows.Add(new object [] { "foo", "bar" }); ds.AcceptChanges(); DataRowComparer <DataRow> c = DataRowComparer.Default; Assert.IsTrue(c.GetHashCode(r1) == c.GetHashCode(r2), "#1"); /* * // LAMESPEC: .NET fails here * r2 ["col2"] = "baz"; * r2.AcceptChanges (); * Assert.IsFalse (c.GetHashCode (r1) == c.GetHashCode (r2), "#2"); * ds.AcceptChanges (); // now r2 original value is "baz" * r2 ["col2"] = "bar"; * Assert.IsFalse (c.GetHashCode (r1) == c.GetHashCode (r2), "#3"); * // LAMESPEC: .NET fails here * DataRow r3 = dt.Rows.Add (new object [] {"foo", "baz"}); * Assert.IsFalse (c.GetHashCode (r1) == c.GetHashCode (r3), "#4"); */ }
public void Equals_Rows_Deleted() { DataRowComparer <DataRow> c = DataRowComparer.Default; DataTable dtA = new DataTable("tableA"); dtA.Columns.Add("col1", typeof(int)); dtA.Columns.Add("col2", typeof(string)); dtA.Columns.Add("col3", typeof(DateTime)); DataRow r1 = dtA.Rows.Add(3, "bar", new DateTime(2008, 5, 7)); DataRow r2 = dtA.Rows.Add(3, "bar", new DateTime(2008, 5, 7)); r1.Delete(); // left row deleted try { c.Equals(r1, r2); Assert.True(false, "#A1"); } catch (RowNotInTableException ex) { Assert.Equal(typeof(RowNotInTableException), ex.GetType()); Assert.Null(ex.InnerException); Assert.NotNull(ex.Message); } // right row deleted try { c.Equals(r2, r1); Assert.True(false, "#B1"); } catch (RowNotInTableException ex) { Assert.Equal(typeof(RowNotInTableException), ex.GetType()); Assert.Null(ex.InnerException); Assert.NotNull(ex.Message); } r2.Delete(); // both rows deleted try { c.Equals(r2, r1); Assert.True(false, "#C1"); } catch (RowNotInTableException ex) { Assert.Equal(typeof(RowNotInTableException), ex.GetType()); Assert.Null(ex.InnerException); Assert.NotNull(ex.Message); } }
public void GetHashCode_Row_Null() { DataRowComparer <DataRow> c = DataRowComparer.Default; try { c.GetHashCode(null); Assert.Fail("#1"); } catch (ArgumentNullException ex) { Assert.AreEqual(typeof(ArgumentNullException), ex.GetType(), "#2"); Assert.IsNull(ex.InnerException, "#3"); Assert.IsNotNull(ex.Message, "#4"); Assert.AreEqual("row", ex.ParamName, "#5"); } }
public void GetHashCodeWithVersions() { DataSet ds = new DataSet(); DataTable dt = new DataTable("MyTable"); ds.Tables.Add(dt); dt.Columns.Add("col1"); dt.Columns.Add("col2"); DataRow r1 = dt.Rows.Add(new object[] { "foo", "bar" }); DataRow r2 = dt.Rows.Add(new object[] { "foo", "bar" }); ds.AcceptChanges(); DataRowComparer <DataRow> c = DataRowComparer.Default; Assert.True(c.GetHashCode(r1) == c.GetHashCode(r2), "#1"); }
public SetVerificationGrammar Columns(Action <DataRowComparer> configuration) { var comparer = new DataRowComparer(); configuration(comparer); var comparison = new ObjectComparison <DataRow>(c => { var table = _dataSource(c); return(table.ToRows().ToArray()); }); comparison.AddMatches(comparer.Matches); return(new SetVerificationGrammar(_title, _leafName, comparison)); }
public void GetHashCode_Row_Null() { DataRowComparer <DataRow> c = DataRowComparer.Default; try { c.GetHashCode(null); Assert.True(false, "#1"); } catch (ArgumentNullException ex) { Assert.Equal(typeof(ArgumentNullException), ex.GetType()); Assert.Null(ex.InnerException); Assert.NotNull(ex.Message); Assert.Equal("row", ex.ParamName); } }
public SetVerificationGrammar Columns(Action <IDataRowComparer> action) { var comparer = new DataRowComparer(); action(comparer); var grammar = new SetVerificationGrammar(_leafName, _title, comparer) { Description = _description }; if (_dataSource != null) { grammar.Before((step, context) => { context.CurrentObject = _dataSource(context).Rows; }); } return(grammar); }
public void Equals_Rows_Detached() { DataRowComparer <DataRow> c = DataRowComparer.Default; DataTable dt = new DataTable("tableA"); dt.Columns.Add("col1", typeof(int)); dt.Columns.Add("col2", typeof(string)); dt.Columns.Add("col3", typeof(DateTime)); DataRow r1 = dt.Rows.Add(3, "bar", new DateTime(2008, 5, 7)); DataRow r2 = dt.NewRow(); r2.ItemArray = new object[] { 3, "bar", new DateTime(2008, 5, 7) }; DataRow r3 = dt.NewRow(); r3.ItemArray = new object[] { 3, "bar", new DateTime(2008, 5, 7) }; // left row detached Assert.True(c.Equals(r2, r1), "#A1"); r1["col1"] = 4; Assert.False(c.Equals(r2, r1), "#A2"); r1["col1"] = 3; Assert.True(c.Equals(r2, r1), "#A3"); // right row detached Assert.True(c.Equals(r1, r2), "#B1"); r1["col2"] = "baz"; Assert.False(c.Equals(r1, r2), "#B2"); r1["col2"] = "bar"; Assert.True(c.Equals(r1, r2), "#B3"); // both rows detached Assert.True(c.Equals(r2, r3), "#C1"); r2["col3"] = new DateTime(2008, 6, 7); Assert.False(c.Equals(r2, r3), "#C2"); r2["col3"] = new DateTime(2008, 5, 7); Assert.True(c.Equals(r2, r3), "#C3"); }
public void Equals() { DataRowComparer <DataRow> c = DataRowComparer.Default; DataTable dtA = new DataTable("tableA"); dtA.Columns.Add("col1", typeof(int)); dtA.Columns.Add("col2", typeof(string)); dtA.Columns.Add("col3", typeof(DateTime)); DataRow r1 = dtA.Rows.Add(3, "bar", new DateTime(2008, 5, 7)); DataRow r2 = dtA.Rows.Add(3, "bar", new DateTime(2008, 5, 7)); Assert.True(c.Equals(r1, r2), "#A1"); r1["col1"] = 4; Assert.False(c.Equals(r1, r2), "#A2"); r1["col1"] = 3; Assert.True(c.Equals(r1, r2), "#A3"); r1["col2"] = null; Assert.False(c.Equals(r1, r2), "#B1"); r2["col2"] = null; Assert.True(c.Equals(r1, r2), "#B2"); r1["col2"] = "bar"; Assert.False(c.Equals(r1, r2), "#B3"); r2["col2"] = "bar"; Assert.True(c.Equals(r1, r2), "#B4"); r1["col3"] = DBNull.Value; Assert.False(c.Equals(r1, r2), "#C1"); r2["col3"] = DBNull.Value; Assert.True(c.Equals(r1, r2), "#C2"); r1["col3"] = new DateTime(2008, 5, 7); Assert.False(c.Equals(r1, r2), "#C3"); r2["col3"] = new DateTime(2008, 5, 7); Assert.True(c.Equals(r1, r2), "#C4"); Assert.False(c.Equals(r1, null), "#D1"); Assert.False(c.Equals(null, r1), "#D2"); Assert.True(c.Equals(null, null), "#D3"); // rows do not have to share the same parent DataTable dtB = new DataTable("tableB"); dtB.Columns.Add("colB1", typeof(int)); dtB.Columns.Add("colB2", typeof(string)); dtB.Columns.Add("colB3", typeof(DateTime)); DataRow r3 = dtB.Rows.Add(3, "bar", new DateTime(2008, 5, 7)); Assert.True(c.Equals(r1, r3), "#E1"); r1["col1"] = 4; Assert.False(c.Equals(r1, r3), "#E2"); r1["col1"] = 3; Assert.True(c.Equals(r1, r3), "#E3"); // difference in rowstate is ignored r1.AcceptChanges(); Assert.True(c.Equals(r1, r2), "#G1"); r1["col1"] = 4; Assert.False(c.Equals(r1, r2), "#G2"); r1["col1"] = 3; Assert.True(c.Equals(r1, r2), "#G3"); // rows have different number of columns DataTable dtC = new DataTable("tableC"); dtC.Columns.Add("colC1", typeof(int)); dtC.Columns.Add("colC2", typeof(string)); DataRow r4 = dtC.Rows.Add(3, "bar"); Assert.False(c.Equals(r1, r4), "#H1"); r1["col3"] = DBNull.Value; Assert.False(c.Equals(r1, r4), "#H2"); }
private Business.Rules.MethodResult CompareData(MigrationStatus migrationStatus, List<string>keys, List<string> updateCommands) { Business.Rules.MethodResult overallResult = new Business.Rules.MethodResult(); bool needsTic = migrationStatus.PersistentProperties[0].PropertyType == typeof(string) ? true : false; string compareSelect = this.GetCompareSelect(migrationStatus); foreach (object key in keys) { string keyString = key.ToString(); if(needsTic == true) { keyString = "'" + keyString + "'"; } DataTable sqlServerDataTable = this.GetSqlServerData(compareSelect, keyString); DataTable mySqlDataTable = this.GetMySqlData(compareSelect, keyString); if (mySqlDataTable.Rows.Count == 0) { overallResult.Success = false; overallResult.Message += "Missing " + migrationStatus.KeyFieldName + " = " + keyString; this.SaveError(migrationStatus.TableName, "Update " + migrationStatus.TableName + " set Transferred = 0 where " + migrationStatus.KeyFieldName + " = " + keyString); continue; } if (sqlServerDataTable.Rows[0].ItemArray.SequenceEqual(mySqlDataTable.Rows[0].ItemArray) == false) { DataRowComparer dataRowComparer = new DataRowComparer(migrationStatus); DataTableReader sqlServerDataTableReader = new DataTableReader(sqlServerDataTable); sqlServerDataTableReader.Read(); DataTableReader mySqlDataTableReader = new DataTableReader(mySqlDataTable); mySqlDataTableReader.Read(); Business.Rules.MethodResult result = dataRowComparer.Compare(sqlServerDataTableReader, mySqlDataTableReader); if(result.Success == false) { updateCommands.Add(result.Message); } } } return overallResult; }