public void CalculateChangesReturnsMatchResultsWhenComparingAttributesMatchingOptions()
        {
            var oldItems = Model.UsingModule <ConfigurationModule>().Create <List <TestAttributeDefinition> >()
                           .Set(x => x[3].Name = "System.Text.Json.Serialization.JsonPropertyName");
            var newItems = Model.UsingModule <ConfigurationModule>().Create <List <TestAttributeDefinition> >()
                           .Set(x => x[5].Name = "JsonIgnoreAttribute");
            var options       = ComparerOptions.Default;
            var matchingItems =
                Model.UsingModule <ConfigurationModule>().Create <List <ItemMatch <IAttributeDefinition> > >();
            var itemsRemoved = Model.UsingModule <ConfigurationModule>().Create <List <IAttributeDefinition> >();
            var itemsAdded   = Model.UsingModule <ConfigurationModule>().Create <List <IAttributeDefinition> >();
            var matchResults = new MatchResults <IAttributeDefinition>(matchingItems, itemsRemoved, itemsAdded);

            var comparer  = Substitute.For <IAttributeComparer>();
            var evaluator = Substitute.For <IAttributeEvaluator>();

            evaluator.FindMatches(
                Arg.Is <IEnumerable <IAttributeDefinition> >(x => x.Single() == oldItems[3]),
                Arg.Is <IEnumerable <IAttributeDefinition> >(x => x.Single() == newItems[5]))
            .Returns(matchResults);

            var sut = new AttributeMatchProcessor(evaluator, comparer, _logger);

            var actual = sut.CalculateChanges(oldItems, newItems, options).ToList();

            foreach (var result in actual)
            {
                _output.WriteLine(result.Message);
            }

            actual.Should().NotBeEmpty();
        }
        public void CalculateChangesReturnsMatchResultsWhenComparingAllAttributes()
        {
            var oldItems      = Model.UsingModule <ConfigurationModule>().Create <List <IAttributeDefinition> >();
            var newItems      = Model.UsingModule <ConfigurationModule>().Create <List <IAttributeDefinition> >();
            var options       = ComparerOptions.Default;
            var matchingItems =
                Model.UsingModule <ConfigurationModule>().Create <List <ItemMatch <IAttributeDefinition> > >();
            var itemsRemoved = Model.UsingModule <ConfigurationModule>().Create <List <IAttributeDefinition> >();
            var itemsAdded   = Model.UsingModule <ConfigurationModule>().Create <List <IAttributeDefinition> >();
            var matchResults = new MatchResults <IAttributeDefinition>(matchingItems, itemsRemoved, itemsAdded);

            options.CompareAttributes = AttributeCompareOption.All;

            var comparer  = Substitute.For <IAttributeComparer>();
            var evaluator = Substitute.For <IAttributeEvaluator>();

            evaluator.FindMatches(oldItems, newItems)
            .Returns(matchResults);

            var sut = new AttributeMatchProcessor(evaluator, comparer, _logger);

            var actual = sut.CalculateChanges(oldItems, newItems, options).ToList();

            foreach (var result in actual)
            {
                _output.WriteLine(result.Message);
            }

            actual.Should().NotBeEmpty();
        }
        public void CalculateChangesThrowsExceptionWithNullOptions()
        {
            var oldItems = Model.UsingModule <ConfigurationModule>().Create <List <IAttributeDefinition> >();
            var newItems = Model.UsingModule <ConfigurationModule>().Create <List <IAttributeDefinition> >();

            var comparer  = Substitute.For <IAttributeComparer>();
            var evaluator = Substitute.For <IAttributeEvaluator>();

            var sut = new AttributeMatchProcessor(evaluator, comparer, _logger);

            Action action = () => sut.CalculateChanges(oldItems, newItems, null !);

            action.Should().Throw <ArgumentNullException>();
        }
        public void CalculateChangesReturnsEmptyWhenAttributeComparisonSkipped()
        {
            var oldItems = Model.UsingModule <ConfigurationModule>().Create <List <IAttributeDefinition> >();
            var newItems = Model.UsingModule <ConfigurationModule>().Create <List <IAttributeDefinition> >();
            var options  = ComparerOptions.Default;

            options.CompareAttributes = AttributeCompareOption.Skip;

            var comparer  = Substitute.For <IAttributeComparer>();
            var evaluator = Substitute.For <IAttributeEvaluator>();

            var sut = new AttributeMatchProcessor(evaluator, comparer, _logger);

            var actual = sut.CalculateChanges(oldItems, newItems, options);

            actual.Should().BeEmpty();
        }
Example #5
0
        public static IChangeCalculator BuildCalculator(ILogger?logger)
        {
            var attributeComparer  = new AttributeComparer();
            var attributeMatcher   = new AttributeEvaluator();
            var attributeProcessor = new AttributeMatchProcessor(attributeMatcher, attributeComparer, logger);

            var accessModifierChangeTable  = new AccessModifiersChangeTable();
            var accessModifiersComparer    = new AccessModifiersComparer(accessModifierChangeTable);
            var memberModifiersChangeTable = new PropertyModifiersChangeTable();
            var memberModifiersComparer    = new PropertyModifiersComparer(memberModifiersChangeTable);

            var genericTypeElementComparer = new GenericTypeElementComparer();

            var fieldModifiersChangeTable = new FieldModifiersChangeTable();
            var fieldModifiersComparer    = new FieldModifiersComparer(fieldModifiersChangeTable);
            var fieldComparer             = new FieldComparer(accessModifiersComparer, fieldModifiersComparer, attributeProcessor);
            var fieldMatcher   = new FieldEvaluator();
            var fieldProcessor = new FieldMatchProcessor(fieldMatcher, fieldComparer, logger);

            var propertyAccessorAccessModifiersChangeTable = new PropertyAccessorAccessModifiersChangeTable();
            var propertyAccessorAccessModifiersComparer    = new PropertyAccessorAccessModifiersComparer(propertyAccessorAccessModifiersChangeTable);
            var propertyAccessorComparer  = new PropertyAccessorComparer(propertyAccessorAccessModifiersComparer, attributeProcessor);
            var propertyAccessorEvaluator = new PropertyAccessorEvaluator();
            var propertyAccessorProcessor =
                new PropertyAccessorMatchProcessor(propertyAccessorEvaluator, propertyAccessorComparer, logger);
            var propertyComparer  = new PropertyComparer(accessModifiersComparer, memberModifiersComparer, propertyAccessorProcessor, attributeProcessor);
            var propertyMatcher   = new PropertyEvaluator();
            var propertyProcessor = new PropertyMatchProcessor(propertyMatcher, propertyComparer, logger);

            var methodEvaluator               = new MethodEvaluator();
            var methodModifiersChangeTable    = new MethodModifiersChangeTable();
            var methodModifiersComparer       = new MethodModifiersComparer(methodModifiersChangeTable);
            var parameterModifiersChangeTable = new ParameterModifiersChangeTable();
            var parameterModifiersComparer    = new ParameterModifiersComparer(parameterModifiersChangeTable);
            var parameterComparer             = new ParameterComparer(parameterModifiersComparer, attributeProcessor);
            var methodComparer  = new MethodComparer(accessModifiersComparer, methodModifiersComparer, genericTypeElementComparer, parameterComparer, attributeProcessor);
            var methodProcessor = new MethodMatchProcessor(methodEvaluator, methodComparer, logger);

            var classModifiersChangeTable = new ClassModifiersChangeTable();
            var classModifiersComparer    = new ClassModifiersComparer(classModifiersChangeTable);
            var classComparer             = new ClassComparer(
                accessModifiersComparer,
                classModifiersComparer,
                genericTypeElementComparer,
                fieldProcessor,
                propertyProcessor,
                methodProcessor, attributeProcessor);

            var interfaceComparer = new InterfaceComparer(
                accessModifiersComparer,
                genericTypeElementComparer,
                propertyProcessor,
                methodProcessor,
                attributeProcessor);

            var structModifiersChangeTable = new StructModifiersChangeTable();
            var structModifiersComparer    = new StructModifiersComparer(structModifiersChangeTable);
            var structComparer             = new StructComparer(
                accessModifiersComparer,
                structModifiersComparer,
                genericTypeElementComparer,
                fieldProcessor,
                propertyProcessor,
                methodProcessor,
                attributeProcessor);

            var aggregateTypeComparer = new AggregateTypeComparer(classComparer, interfaceComparer, structComparer);

            var typeEvaluator = new TypeEvaluator();
            var typeProcessor = new TypeMatchProcessor(typeEvaluator, aggregateTypeComparer, logger);

            return(new ChangeCalculator(typeProcessor, logger));
        }