public void ShouldAppearUnresolved_CircularDependency_DoesNotRecurseInfinitely()
        {
            const string id1          = @"tfm1\xxx\dependency1";
            const string id2          = @"tfm1\xxx\dependency2";
            const string providerType = "Xxx";

            var dependency1 = new TestDependency
            {
                Id            = id1,
                ProviderType  = providerType,
                TopLevel      = true,
                DependencyIDs = ImmutableArray.Create(id2)
            };

            var dependency2 = new TestDependency
            {
                Id            = id2,
                ProviderType  = providerType,
                TopLevel      = true,
                DependencyIDs = ImmutableArray.Create(id1)
            };

            var snapshot = TargetedDependenciesSnapshotFactory.ImplementFromDependencies(new IDependency[] { dependency1, dependency2 });

            // verify it doesn't stack overflow
            snapshot.ShouldAppearUnresolved(dependency1);
        }
예제 #2
0
        public void CreateTargetViewModel_HasUnresolvedDependency()
        {
            var project          = UnconfiguredProjectFactory.Create();
            var targetFramework  = new TargetFramework(moniker: "tFm1");
            var targetedSnapshot = TargetedDependenciesSnapshotFactory.ImplementHasUnresolvedDependency(hasUnresolvedDependency: true, targetFramework);

            var factory = new DependenciesViewModelFactory(project);

            var result = factory.CreateTargetViewModel(targetedSnapshot);

            Assert.NotNull(result);
            Assert.Equal(targetFramework.FullName, result.Caption);
            Assert.Equal(ManagedImageMonikers.LibraryWarning, result.Icon);
            Assert.Equal(ManagedImageMonikers.LibraryWarning, result.ExpandedIcon);
            Assert.True(result.Flags.Contains(DependencyTreeFlags.TargetNode));
            Assert.True(result.Flags.Contains("$TFM:tFm1"));
        }
        public void ShouldAppearUnresolved()
        {
            var unresolvedTopLevel = new TestDependency
            {
                ProviderType = "Yyy",
                Id           = "tfm1\\yyy\\unresolvedTopLevel",
                Resolved     = false,
                TopLevel     = true
            };

            var unresolvedReachable = new TestDependency
            {
                ProviderType = "Yyy",
                Id           = "tfm1\\yyy\\unresolvedReachable",
                Resolved     = false,
                TopLevel     = false
            };

            var resolvedUnreachableWithHiddenParent = new TestDependency
            {
                ProviderType = "Yyy",
                Id           = "tfm1\\yyy\\resolvedUnreachableWithHiddenParent",
                Resolved     = true,
                TopLevel     = false
            };

            var resolvedHiddenParent = new TestDependency
            {
                ProviderType  = "Yyy",
                Id            = "tfm1\\yyy\\resolvedHiddenParent",
                Resolved      = true,
                TopLevel      = true,
                Visible       = false,
                DependencyIDs = ImmutableArray.Create(resolvedUnreachableWithHiddenParent.Id)
            };

            var resolvedTopLevelWithUnresolvedChild = new TestDependency
            {
                ProviderType  = "Yyy",
                Id            = "tfm1\\yyy\\resolvedTopLevelWithUnresolvedChild",
                Resolved      = true,
                TopLevel      = true,
                DependencyIDs = ImmutableArray.Create(unresolvedReachable.Id)
            };

            var resolvedTopLevel = new TestDependency
            {
                ProviderType = "Yyy",
                Id           = "tfm1\\yyy\\resolvedTopLevel",
                Resolved     = true,
                TopLevel     = true
            };

            var resolvedUnreachable = new TestDependency
            {
                ProviderType = "Yyy",
                Id           = "tfm1\\yyy\\resolvedUnreachable",
                Resolved     = true,
                TopLevel     = false
            };

            var resolvedChildWithVisibleUnresolvedParent = new TestDependency
            {
                ProviderType = "Yyy",
                Id           = "tfm1\\yyy\\resolvedChildWithVisibleUnresolvedParent",
                Resolved     = true,
                TopLevel     = false
            };

            var unresolvedTopLevelWithUnresolvedChild = new TestDependency
            {
                ProviderType  = "Yyy",
                Id            = "tfm1\\yyy\\unresolvedTopLevelWithUnresolvedChild",
                Resolved      = false,
                TopLevel      = true,
                DependencyIDs = ImmutableArray.Create(resolvedChildWithVisibleUnresolvedParent.Id)
            };

            var snapshot = TargetedDependenciesSnapshotFactory.ImplementFromDependencies(new IDependency[]
            {
                unresolvedTopLevel, unresolvedReachable, resolvedUnreachableWithHiddenParent, resolvedHiddenParent,
                resolvedTopLevelWithUnresolvedChild, resolvedTopLevel, resolvedUnreachable, resolvedChildWithVisibleUnresolvedParent,
                unresolvedTopLevelWithUnresolvedChild
            });

            Assert.True(snapshot.ShouldAppearUnresolved(unresolvedTopLevel));
            Assert.True(snapshot.ShouldAppearUnresolved(unresolvedReachable));
            Assert.True(snapshot.ShouldAppearUnresolved(resolvedTopLevelWithUnresolvedChild));
            Assert.True(snapshot.ShouldAppearUnresolved(unresolvedTopLevelWithUnresolvedChild));
            Assert.False(snapshot.ShouldAppearUnresolved(resolvedTopLevel));
            Assert.False(snapshot.ShouldAppearUnresolved(resolvedChildWithVisibleUnresolvedParent));
#if DEBUG
            // These throw in unit tests but assert elsewhere
            Assert.ThrowsAny <Exception>(() => snapshot.ShouldAppearUnresolved(resolvedUnreachable));
            Assert.ThrowsAny <Exception>(() => snapshot.ShouldAppearUnresolved(resolvedHiddenParent));
            Assert.ThrowsAny <Exception>(() => snapshot.ShouldAppearUnresolved(resolvedUnreachableWithHiddenParent));
            Assert.ThrowsAny <Exception>(() => snapshot.ShouldAppearUnresolved(new TestDependency {
                Id = "ID", Resolved = false
            }));
            Assert.ThrowsAny <Exception>(() => snapshot.ShouldAppearUnresolved(new TestDependency {
                Id = "ID", Resolved = true
            }));
#else
            Assert.False(snapshot.ShouldAppearUnresolved(resolvedUnreachable));
            Assert.False(snapshot.ShouldAppearUnresolved(resolvedHiddenParent));
            Assert.False(snapshot.ShouldAppearUnresolved(resolvedUnreachableWithHiddenParent));
            Assert.True(snapshot.ShouldAppearUnresolved(new TestDependency {
                Id = "ID", Resolved = false
            }));
            Assert.False(snapshot.ShouldAppearUnresolved(new TestDependency {
                Id = "ID", Resolved = true
            }));
#endif
        }
        public void ToViewModel()
        {
            var iconSet = new DependencyIconSet(
                KnownMonikers.Uninstall,
                KnownMonikers.AbsolutePosition,
                KnownMonikers.AboutBox,
                KnownMonikers.Abbreviation);

            // This is a resolved dependency
            var dependencyResolved = new TestDependency
            {
                ProviderType   = "Yyy",
                Id             = "tfm1\\yyy\\dependencyResolved",
                Name           = "dependencyResolved",
                Caption        = "DependencyResolved",
                SchemaName     = "MySchema",
                SchemaItemType = "MySchemaItemType",
                Priority       = 1,
                Resolved       = true,
                TopLevel       = true,
                IconSet        = iconSet
            };

            // This is an unresolved dependency
            var dependencyUnresolved = new TestDependency
            {
                ProviderType   = "Yyy",
                Id             = "tfm1\\yyy\\dependencyUnresolved",
                Name           = "dependencyUnresolved",
                Caption        = "DependencyUnresolved",
                SchemaName     = "MySchema",
                SchemaItemType = "MySchemaItemType",
                Priority       = 1,
                Resolved       = false,
                TopLevel       = true,
                IconSet        = iconSet
            };

            // This is a resolved dependency with an unresolved child dependency
            var dependencyUnresolvedChild = new TestDependency
            {
                ProviderType   = "Yyy",
                Id             = "tfm1\\yyy\\dependencyUnresolvedChild",
                Name           = "dependencyUnresolvedChild",
                Caption        = "DependencyUnresolvedChild",
                SchemaName     = "MySchema",
                SchemaItemType = "MySchemaItemType",
                Priority       = 1,
                Resolved       = true,
                TopLevel       = true,
                IconSet        = iconSet,
                DependencyIDs  = ImmutableArray.Create(dependencyUnresolved.Id)
            };

            var snapshotResolved        = TargetedDependenciesSnapshotFactory.ImplementFromDependencies(new[] { dependencyResolved });
            var snapshotUnresolved      = TargetedDependenciesSnapshotFactory.ImplementFromDependencies(new[] { dependencyUnresolved });
            var snapshotUnresolvedChild = TargetedDependenciesSnapshotFactory.ImplementFromDependencies(new[] { dependencyUnresolved, dependencyUnresolvedChild });

            Assert.False(snapshotResolved.ShouldAppearUnresolved(dependencyResolved));
            Assert.True(snapshotUnresolved.ShouldAppearUnresolved(dependencyUnresolved));
            Assert.True(snapshotUnresolvedChild.ShouldAppearUnresolved(dependencyUnresolvedChild));

            var viewModelResolved = dependencyResolved.ToViewModel(snapshotResolved);

            Assert.Equal(dependencyResolved.Caption, viewModelResolved.Caption);
            Assert.Equal(dependencyResolved.Flags, viewModelResolved.Flags);
            Assert.Equal(dependencyResolved.Id, viewModelResolved.FilePath);
            Assert.Equal(dependencyResolved.SchemaName, viewModelResolved.SchemaName);
            Assert.Equal(dependencyResolved.SchemaItemType, viewModelResolved.SchemaItemType);
            Assert.Equal(dependencyResolved.Priority, viewModelResolved.Priority);
            Assert.Equal(iconSet.Icon, viewModelResolved.Icon);
            Assert.Equal(iconSet.ExpandedIcon, viewModelResolved.ExpandedIcon);

            var viewModelUnresolved = dependencyUnresolved.ToViewModel(snapshotResolved);

            Assert.Equal(dependencyUnresolved.Caption, viewModelUnresolved.Caption);
            Assert.Equal(dependencyUnresolved.Flags, viewModelUnresolved.Flags);
            Assert.Equal(dependencyUnresolved.Id, viewModelUnresolved.FilePath);
            Assert.Equal(dependencyUnresolved.SchemaName, viewModelUnresolved.SchemaName);
            Assert.Equal(dependencyUnresolved.SchemaItemType, viewModelUnresolved.SchemaItemType);
            Assert.Equal(dependencyUnresolved.Priority, viewModelUnresolved.Priority);
            Assert.Equal(iconSet.UnresolvedIcon, viewModelUnresolved.Icon);
            Assert.Equal(iconSet.UnresolvedExpandedIcon, viewModelUnresolved.ExpandedIcon);

            var viewModelUnresolvedChild = dependencyUnresolvedChild.ToViewModel(snapshotUnresolvedChild);

            Assert.Equal(dependencyUnresolvedChild.Caption, viewModelUnresolvedChild.Caption);
            Assert.Equal(dependencyUnresolvedChild.Flags, viewModelUnresolvedChild.Flags);
            Assert.Equal(dependencyUnresolvedChild.Id, viewModelUnresolvedChild.FilePath);
            Assert.Equal(dependencyUnresolvedChild.SchemaName, viewModelUnresolvedChild.SchemaName);
            Assert.Equal(dependencyUnresolvedChild.SchemaItemType, viewModelUnresolvedChild.SchemaItemType);
            Assert.Equal(dependencyUnresolvedChild.Priority, viewModelUnresolvedChild.Priority);
            Assert.Equal(iconSet.UnresolvedIcon, viewModelUnresolvedChild.Icon);
            Assert.Equal(iconSet.UnresolvedExpandedIcon, viewModelUnresolvedChild.ExpandedIcon);
        }