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(); }
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)); }