public override void Assert(DbConnection validationConnection, SqlExecutionResult[] results) { base.Assert(validationConnection, results); var result = results[0]; var resultSetList = new List <int>(); try { if (ResultSets.ToUpper() == "ALL") { resultSetList.AddRange(Enumerable.Range(1, result.DataSet.Tables.Count)); } else if (ResultSets.Contains(",")) { resultSetList.AddRange(ResultSets.Split(',').Select(rs => Convert.ToInt16(rs)).Select(dummy => (int)dummy)); } else if (ResultSets.Contains(":")) { var temp = ResultSets.Split(':'); resultSetList.AddRange(Enumerable.Range(Convert.ToInt32(temp[0]), Convert.ToInt32(temp[1]))); } else { throw new ArgumentException("Invalid specification for result sets"); } } catch { throw new ArgumentException(String.Format("{0} is an invalid result set specification.", ResultSets)); } //validate ResultSetList does not include result sets that do not exist foreach (var rs in resultSetList.Where(rs => rs > result.DataSet.Tables.Count)) { throw new ArgumentException(String.Format("Result Set {0} does not exist", rs)); } var currentResultSetId = resultSetList[0]; var currentColumnSet = result.DataSet.Tables[currentResultSetId - 1].Columns; resultSetList.RemoveAt(0); foreach (var rs in resultSetList) { var comparisonTable = result.DataSet.Tables[rs - 1]; //verify that the same number of columns is the same for as recorded if (comparisonTable.Columns.Count != currentColumnSet.Count) { throw new Exception ( String.Format ( "Result Set {0}: {1} columns in does not match the {2} columns in Result Set {3}", rs, comparisonTable.Columns.Count, currentColumnSet.Count, currentResultSetId ) ); } //loop through columns and verify the base data type of the columns for (var c = 0; c < currentColumnSet.Count; c++) { if (String.Compare(currentColumnSet[c].ColumnName, comparisonTable.Columns[c].ColumnName, !IsCaseSensitive) != 0) { throw new Exception ( String.Format ( "Result Set {0}: Column {1} ({2}) does not match name for column in Result Set {3} ({4})", rs, c + 1, comparisonTable.Columns[c].ColumnName, currentResultSetId, currentColumnSet[c].ColumnName ) ); } //compare datatypes if (IsLooseComparison) { var currentType = GetLooseType(currentColumnSet[c].DataType.Name); var comparisonType = GetLooseType(comparisonTable.Columns[c].DataType.Name); if (currentType != comparisonType) { throw new Exception ( String.Format ( "Result Set {0} Column {1} ({2}) does not match type for column in Result Set {3} ({4})", rs, c + 1, comparisonTable.Columns[c].DataType, currentResultSetId, currentColumnSet[c].DataType ) ); } } else { if (String.Compare(currentColumnSet[c].DataType.ToString(), comparisonTable.Columns[c].DataType.ToString(), !IsCaseSensitive) != 0) { throw new Exception ( String.Format ( "Result Set {0} Column {1} ({2}) does not match type for column in Result Set {3} ({4})", rs, c + 1, comparisonTable.Columns[c].DataType, currentResultSetId, currentColumnSet[c].DataType ) ); } } } } }
public override void Assert(DbConnection validationConnection, SqlExecutionResult[] results) { base.Assert(validationConnection, results); var result = results[0]; var resultSetList = new List <int>(); try { if (ResultSets.ToUpper() == "ALL") { resultSetList.AddRange(Enumerable.Range(1, result.DataSet.Tables.Count)); } else if (ResultSets.Contains(",")) { resultSetList.AddRange(ResultSets.Split(',').Select(rs => Convert.ToInt16(rs)).Select(dummy => (int)dummy)); } else if (ResultSets.Contains(":")) { var temp = ResultSets.Split(':'); resultSetList.AddRange(Enumerable.Range(Convert.ToInt32(temp[0]), Convert.ToInt32(temp[1]))); } else { throw new ArgumentException("Invalid specification for result sets"); } } catch { throw new ArgumentException(String.Format("{0} is an invalid result set specification.", ResultSets)); } foreach (var rs in resultSetList.Where(rs => rs > result.DataSet.Tables.Count)) { throw new ArgumentException(String.Format("Result Set {0} does not exist", rs)); } var currentResultSetId = resultSetList[0]; var table = result.DataSet.Tables[currentResultSetId - 1]; var numberOfRows = table.Rows.Count; resultSetList.RemoveAt(0); //loop through batches verifying that the column count for each batch is the same foreach (var rs in resultSetList) { //verify resultset exists if (result.DataSet.Tables.Count < rs) { throw new Exception(String.Format("Result Set {0} does not exist", rs)); } //actual condition verification //verify resultset row count matches expected table = result.DataSet.Tables[rs - 1]; if (table.Rows.Count != numberOfRows) { throw new Exception ( String.Format ( "Result Set {0}: {1} rows does not match the {2} rows in Result Set {3}", rs, table.Rows.Count, numberOfRows, currentResultSetId ) ); } } }
public override void Assert(DbConnection validationConnection, SqlExecutionResult[] results) { base.Assert(validationConnection, results); var result = results[0]; var resultSetList = new List <int>(); try { if (ResultSets.ToUpper() == "ALL") { resultSetList.AddRange(Enumerable.Range(1, result.DataSet.Tables.Count)); } else if (ResultSets.Contains(",")) { resultSetList.AddRange(ResultSets.Split(',').Select(rs => Convert.ToInt16(rs)).Select(dummy => (int)dummy)); } else if (ResultSets.Contains(":")) { var temp = ResultSets.Split(':'); resultSetList.AddRange(Enumerable.Range(Convert.ToInt32(temp[0]), Convert.ToInt32(temp[1]))); } else { throw new ArgumentException("Invalid specification for result sets"); } } catch { throw new ArgumentException(String.Format("{0} is an invalid result set specification.", ResultSets)); } foreach (var rs in resultSetList.Where(rs => rs > result.DataSet.Tables.Count)) { throw new ArgumentException(String.Format("ResultSet {0} does not exist", rs)); } var currentResultSetId = resultSetList[0]; var firstTable = result.DataSet.Tables[currentResultSetId - 1]; resultSetList.RemoveAt(0); //loop through batches verifying that the column count for each batch is the same foreach (var rs in resultSetList) { //verify resultset exists if (result.DataSet.Tables.Count < rs) { throw new Exception(String.Format("ResultSet {0} does not exist", rs)); } var secondTable = result.DataSet.Tables[rs - 1]; //verify that the same number of columns is the same for as recorded if (firstTable.Columns.Count != secondTable.Columns.Count) { throw new Exception ( String.Format ( "Result Set {0}: {1} columns in does not match the {2} columns in Result Set {3}", currentResultSetId, firstTable.Columns.Count, secondTable.Columns.Count, rs ) ); } //verify that the number of rows is the same for as recorded if (firstTable.Rows.Count != secondTable.Rows.Count) { throw new Exception ( String.Format ( "Result Set {0}: {1} rows does not match the {2} rows in Result Set {3}", currentResultSetId, firstTable.Rows.Count, secondTable.Rows.Count, rs ) ); } var differenceTable = DataSetComparison.CompareDataTables(firstTable, secondTable, IsCaseSensitive, EnforceOrder); if (differenceTable.Rows.Count != 0) { throw new Exception ( String.Format ( "Result Set {0} and Result Set {2} had {1} mismatched records total", currentResultSetId, differenceTable.Rows.Count, rs ) ); } } }