Пример #1
0
        private static void CompareFieldValues(IEquivalencyValidationContext context, IEquivalencyValidator parent,
                                               DataRow subject, DataRow expectation, DataEquivalencyAssertionOptions <DataSet> dataSetConfig,
                                               DataEquivalencyAssertionOptions <DataTable> dataTableConfig, DataEquivalencyAssertionOptions <DataRow> dataRowConfig)
        {
            IEnumerable <string> expectationColumnNames = expectation.Table.Columns.OfType <DataColumn>()
                                                          .Select(col => col.ColumnName);

            IEnumerable <string> subjectColumnNames = subject.Table.Columns.OfType <DataColumn>()
                                                      .Select(col => col.ColumnName);

            bool ignoreUnmatchedColumns =
                (dataSetConfig?.IgnoreUnmatchedColumns == true) ||
                (dataTableConfig?.IgnoreUnmatchedColumns == true) ||
                (dataRowConfig?.IgnoreUnmatchedColumns == true);

            DataRowVersion subjectVersion =
                (subject.RowState == DataRowState.Deleted)
                    ? DataRowVersion.Original
                    : DataRowVersion.Current;

            DataRowVersion expectationVersion =
                (expectation.RowState == DataRowState.Deleted)
                    ? DataRowVersion.Original
                    : DataRowVersion.Current;

            bool compareOriginalVersions =
                (subject.RowState == DataRowState.Modified) && (expectation.RowState == DataRowState.Modified);

            if ((dataSetConfig?.ExcludeOriginalData == true) ||
                (dataTableConfig?.ExcludeOriginalData == true) ||
                (dataRowConfig?.ExcludeOriginalData == true))
            {
                compareOriginalVersions = false;
            }

            foreach (var columnName in expectationColumnNames.Union(subjectColumnNames))
            {
                DataColumn expectationColumn = expectation.Table.Columns[columnName];
                DataColumn subjectColumn     = subject.Table.Columns[columnName];

                if (subjectColumn is not null &&
                    ((dataSetConfig?.ShouldExcludeColumn(subjectColumn) == true) ||
                     (dataTableConfig?.ShouldExcludeColumn(subjectColumn) == true) ||
                     (dataRowConfig?.ShouldExcludeColumn(subjectColumn) == true)))
                {
                    continue;
                }

                if (!ignoreUnmatchedColumns)
                {
                    AssertionScope.Current
                    .ForCondition(subjectColumn is not null)
                    .FailWith("Expected {context:DataRow} to have column '{0}'{reason}, but found none", columnName);

                    AssertionScope.Current
                    .ForCondition(expectationColumn is not null)
                    .FailWith("Found unexpected column '{0}' in {context:DataRow}", columnName);
                }

                if ((subjectColumn is not null) && (expectationColumn is not null))
                {
                    CompareFieldValue(context, parent, subject, expectation, subjectColumn, subjectVersion, expectationColumn,
                                      expectationVersion);

                    if (compareOriginalVersions)
                    {
                        CompareFieldValue(context, parent, subject, expectation, subjectColumn, DataRowVersion.Original,
                                          expectationColumn, DataRowVersion.Original);
                    }
                }
            }
        }
        private static void CompareCollections(IEquivalencyValidationContext context, IEquivalencyValidator parent, IEquivalencyAssertionOptions config, DataSet subject, DataSet expectation, DataEquivalencyAssertionOptions <DataSet> dataConfig, Dictionary <string, IMember> selectedMembers)
        {
            // Note: The collections here are listed in the XML documentation for the DataSet.BeEquivalentTo extension
            // method in DataSetAssertions.cs. If this ever needs to change, keep them in sync.
            CompareExtendedProperties(new Comparands(subject, expectation, typeof(DataSet)), context, parent, config, selectedMembers);

            CompareTables(context, parent, subject, expectation, dataConfig, selectedMembers);
        }
        private static void CompareTables(IEquivalencyValidationContext context, IEquivalencyValidator parent, DataSet subject, DataSet expectation, DataEquivalencyAssertionOptions <DataSet> dataConfig, Dictionary <string, IMember> selectedMembers)
        {
            if (selectedMembers.ContainsKey(nameof(expectation.Tables)))
            {
                bool success = AssertionScope.Current
                               .ForCondition(subject.Tables.Count == expectation.Tables.Count)
                               .FailWith("Expected {context:DataSet} to contain {0}, but found {1} table(s)", expectation.Tables.Count, subject.Tables.Count);

                if (!success)
                {
                    return;
                }

                if (dataConfig is not null)
                {
                    bool excludeCaseSensitive = !selectedMembers.ContainsKey(nameof(DataSet.CaseSensitive));
                    bool excludeLocale        = !selectedMembers.ContainsKey(nameof(DataSet.Locale));

                    if (excludeCaseSensitive || excludeLocale)
                    {
                        dataConfig.Excluding((IMemberInfo memberInfo) =>
                                             (memberInfo.DeclaringType == typeof(DataTable)) &&
                                             (
                                                 (excludeCaseSensitive && (memberInfo.Name == nameof(DataTable.CaseSensitive)))
                                                 ||
                                                 (excludeLocale && (memberInfo.Name == nameof(DataTable.Locale)))));
                    }
                }

                IEnumerable <string> expectationTableNames = expectation.Tables.OfType <DataTable>()
                                                             .Select(table => table.TableName);
                IEnumerable <string> subjectTableNames = subject.Tables.OfType <DataTable>()
                                                         .Select(table => table.TableName);

                foreach (string tableName in expectationTableNames.Union(subjectTableNames))
                {
                    if (dataConfig?.ExcludeTableNames.Contains(tableName) == true)
                    {
                        continue;
                    }

                    CompareTable(context, parent, subject, expectation, tableName);
                }
            }
        }
 public ColumnNamesByTableNameAdapter(DataEquivalencyAssertionOptions <T> owner)
 {
     this.owner = owner;
 }