public void FindMatchesDoesNotReturnMatchWhenDeclaringTypesAreDifferent()
        {
            var oldParent = new TestClassDefinition();
            var newParent = new TestClassDefinition();
            var oldItem   = new TestClassDefinition().Set(x => x.DeclaringType = oldParent);
            var newItem   = new TestClassDefinition().Set(x =>
            {
                x.RawName       = oldItem.RawName;
                x.Namespace     = oldItem.Namespace;
                x.DeclaringType = newParent;
            });
            var oldItems = new List <ITypeDefinition>
            {
                oldItem
            };
            var newItems = new List <ITypeDefinition>
            {
                newItem
            };

            var sut = new TypeEvaluator();

            var actual = sut.FindMatches(oldItems, newItems);

            actual.ItemsRemoved.Should().BeEquivalentTo(oldItems);
            actual.ItemsAdded.Should().BeEquivalentTo(newItems);
            actual.MatchingItems.Should().BeEmpty();
        }
        public void FindMatchesReturnsMatchWhenTypesHaveSameSignatures()
        {
            var oldItem = new TestClassDefinition();
            var newItem = new TestClassDefinition().Set(x =>
            {
                x.RawName   = oldItem.RawName;
                x.Namespace = oldItem.Namespace;
            });
            var oldItems = new List <ITypeDefinition>
            {
                oldItem
            };
            var newItems = new List <ITypeDefinition>
            {
                newItem
            };

            var sut = new TypeEvaluator();

            var actual = sut.FindMatches(oldItems, newItems);

            actual.ItemsRemoved.Should().BeEmpty();
            actual.ItemsAdded.Should().BeEmpty();
            actual.MatchingItems.Should().HaveCount(1);

            var match = actual.MatchingItems.First();

            match.OldItem.Should().Be(oldItem);
            match.NewItem.Should().Be(newItem);
        }
        public void FindMatchesReturnsMatchOnMovedTypeWithDeclaringTypes()
        {
            var oldParent = new TestClassDefinition();
            var newParent = new TestClassDefinition().Set(x => { x.RawName = oldParent.RawName; });
            var oldItem   = new TestClassDefinition().Set(x => x.DeclaringType = oldParent);
            var newItem   = new TestClassDefinition().Set(x =>
            {
                x.RawName       = oldItem.RawName;
                x.DeclaringType = newParent;
            });
            var oldItems = new List <ITypeDefinition>
            {
                oldItem
            };
            var newItems = new List <ITypeDefinition>
            {
                newItem
            };

            var sut = new TypeEvaluator();

            var actual = sut.FindMatches(oldItems, newItems);

            actual.ItemsRemoved.Should().BeEmpty();
            actual.ItemsAdded.Should().BeEmpty();
            actual.MatchingItems.Should().HaveCount(1);

            var match = actual.MatchingItems.First();

            match.OldItem.Should().Be(oldItem);
            match.NewItem.Should().Be(newItem);
        }
        public void FindMatchesDoesNotReturnMatchOnMovedTypeWhenGenericTypeCountsAreDifferent()
        {
            var oldItem = new TestClassDefinition();
            var newItem = new TestClassDefinition().Set(x =>
            {
                x.RawName = oldItem.RawName;

                var updatedGenericTypeParameters = new List <string>(x.GenericTypeParameters)
                {
                    Guid.NewGuid().ToString()
                };

                x.GenericTypeParameters = updatedGenericTypeParameters.AsReadOnly();
            });
            var oldItems = new List <ITypeDefinition>
            {
                oldItem
            };
            var newItems = new List <ITypeDefinition>
            {
                newItem
            };

            var sut = new TypeEvaluator();

            var actual = sut.FindMatches(oldItems, newItems);

            actual.ItemsRemoved.Should().BeEquivalentTo(oldItems);
            actual.ItemsAdded.Should().BeEquivalentTo(newItems);
            actual.MatchingItems.Should().BeEmpty();
        }
        public void FindMatchesDoesNotReturnMatchWhenNoItemsAddedOrRemoved()
        {
            var oldItems = Array.Empty <ITypeDefinition>();
            var newItems = Array.Empty <ITypeDefinition>();

            var sut = new TypeEvaluator();

            var actual = sut.FindMatches(oldItems, newItems);

            actual.ItemsRemoved.Should().BeEmpty();
            actual.ItemsAdded.Should().BeEmpty();
            actual.MatchingItems.Should().BeEmpty();
        }
        public void FindMatchesDoesNotReturnMatchWhenNamespaceAndRawNameAreDifferent()
        {
            var oldItem  = new TestClassDefinition();
            var newItem  = new TestClassDefinition();
            var oldItems = new List <ITypeDefinition>
            {
                oldItem
            };
            var newItems = new List <ITypeDefinition>
            {
                newItem
            };

            var sut = new TypeEvaluator();

            var actual = sut.FindMatches(oldItems, newItems);

            actual.ItemsRemoved.Should().BeEquivalentTo(oldItems);
            actual.ItemsAdded.Should().BeEquivalentTo(newItems);
            actual.MatchingItems.Should().BeEmpty();
        }
        public void FindMatchesDoesNotReturnMatchWhenMultipleNewItemsMatchAsPossibleMovedType()
        {
            var oldItem      = new TestClassDefinition();
            var newItem      = new TestClassDefinition().Set(x => { x.RawName = oldItem.RawName; });
            var otherNewItem = new TestClassDefinition().Set(x => { x.RawName = oldItem.RawName; });
            var oldItems     = new List <ITypeDefinition>
            {
                oldItem
            };
            var newItems = new List <ITypeDefinition>
            {
                newItem,
                otherNewItem
            };

            var sut = new TypeEvaluator();

            var actual = sut.FindMatches(oldItems, newItems);

            actual.ItemsRemoved.Should().BeEquivalentTo(oldItems);
            actual.ItemsAdded.Should().BeEquivalentTo(newItems);
            actual.MatchingItems.Should().BeEmpty();
        }