public void DependencyExtensionsTests_GetActualPath() { const string projectPath = @"c:\somepath\someproject\project.csproj"; var dependency1 = IDependencyFactory.FromJson(@" { ""Id"":""id1"", ""ProviderType"": ""ProjectDependency"" }"); Assert.Null(dependency1.GetActualPath(projectPath)); var dependency2 = IDependencyFactory.FromJson(@" { ""Id"":""id1"", ""OriginalItemSpec"": ""c:\\somerootedpath\\xxx"" }"); Assert.Equal("c:\\somerootedpath\\xxx", dependency2.GetActualPath(projectPath)); var dependency3 = IDependencyFactory.FromJson(@" { ""Id"":""id1"", ""OriginalItemSpec"": ""subfolder\\xxx"" }"); Assert.Equal(@"c:\somepath\someproject\subfolder\xxx", dependency3.GetActualPath(projectPath)); }
public void DependencyExtensionsTests_GetIcons() { var dependency = IDependencyFactory.FromJson(@" { ""ProviderType"": ""Yyy"", ""Id"": ""tfm1\\yyy\\dependencyExisting"", ""Name"":""dependencyExisting"", ""Caption"":""DependencyExisting"", ""HasUnresolvedDependency"":""false"", ""SchemaName"":""MySchema"", ""SchemaItemType"":""MySchemaItemType"", ""Priority"":""1"", ""Resolved"":""true"" }", icon: KnownMonikers.Uninstall, expandedIcon: KnownMonikers.AbsolutePosition, unresolvedIcon: KnownMonikers.AboutBox, unresolvedExpandedIcon: KnownMonikers.Abbreviation); var icons = dependency.GetIcons(); Assert.Equal(4, icons.Count()); Assert.True(icons.Any(x => x.Equals(KnownMonikers.Uninstall))); Assert.True(icons.Any(x => x.Equals(KnownMonikers.AbsolutePosition))); Assert.True(icons.Any(x => x.Equals(KnownMonikers.AboutBox))); Assert.True(icons.Any(x => x.Equals(KnownMonikers.Abbreviation))); }
public void TargetedDependenciesSnapshot_FromChanges_NoChanges() { const string projectPath = @"c:\somefolder\someproject\a.csproj"; var targetFramework = ITargetFrameworkFactory.Implement("tfm1"); var dependencyModelTop1 = IDependencyFactory.FromJson(@" { ""ProviderType"": ""Xxx"", ""Id"": ""tfm1\\xxx\\topdependency1"", ""Name"":""TopDependency1"", ""Caption"":""TopDependency1"", ""SchemaItemType"":""Xxx"", ""Resolved"":""true"" }", icon: KnownMonikers.Uninstall, expandedIcon: KnownMonikers.Uninstall); var dependencyModelChild1 = IDependencyFactory.FromJson(@" { ""ProviderType"": ""Xxx"", ""Id"": ""tfm1\\xxx\\childdependency1"", ""Name"":""ChildDependency1"", ""Caption"":""ChildDependency1"", ""SchemaItemType"":""Xxx"", ""Resolved"":""true"" }", icon: KnownMonikers.Uninstall, expandedIcon: KnownMonikers.Uninstall); var previousSnapshot = ITargetedDependenciesSnapshotFactory.Implement( dependenciesWorld: new Dictionary <string, IDependency>() { { dependencyModelTop1.Id, dependencyModelTop1 }, { dependencyModelChild1.Id, dependencyModelChild1 }, }, topLevelDependencies: new List <IDependency>() { dependencyModelTop1 }); var addedNodes = new List <IDependencyModel>(); var removedNodes = new List <IDependencyModel>(); var changes = IDependenciesChangesFactory.Implement(addedNodes: addedNodes, removedNodes: removedNodes); IEnumerable <IDependenciesSnapshotFilter> snapshotFilters = null; var catalogs = IProjectCatalogSnapshotFactory.Create(); var snapshot = TargetedDependenciesSnapshot.FromChanges( projectPath, targetFramework, previousSnapshot, changes, catalogs, snapshotFilters, out bool anyChanges); Assert.NotNull(snapshot.TargetFramework); Assert.Equal("tfm1", snapshot.TargetFramework.Moniker); Assert.Equal(projectPath, snapshot.ProjectPath); Assert.Equal(catalogs, snapshot.Catalogs); Assert.False(anyChanges); Assert.Equal(1, snapshot.TopLevelDependencies.Count); Assert.Equal(2, snapshot.DependenciesWorld.Count); }
public void DependenciesViewModelFactoryTests_CreateRootViewModel() { var project = UnconfiguredProjectFactory.Create(); var dependency = IDependencyFactory.FromJson(@" { ""ProviderType"": ""MyProvider1"", ""Id"": ""ZzzDependencyRoot"", ""Name"":""ZzzDependencyRoot"", ""Caption"":""ZzzDependencyRoot"" }", icon: KnownMonikers.AboutBox); var subTreeProvider1 = IProjectDependenciesSubTreeProviderFactory.Implement( providerType: "MyProvider1", createRootDependencyNode: dependency); var subTreeProvider2 = IProjectDependenciesSubTreeProviderFactory.Implement( providerType: "MyProvider2"); var factory = new TestableDependenciesViewModelFactory(project, new[] { subTreeProvider1, subTreeProvider2 }); var result = factory.CreateRootViewModel("MyProvider1", hasUnresolvedDependency: false); Assert.NotNull(result); Assert.Equal("ZzzDependencyRoot", result.Caption); Assert.Equal(KnownMonikers.AboutBox, result.Icon); }
public void DependencyExtensionsTests_ToViewModel() { var dependencyResolved = IDependencyFactory.FromJson(@" { ""ProviderType"": ""Yyy"", ""Id"": ""tfm1\\yyy\\dependencyExisting"", ""Name"":""dependencyExisting"", ""Caption"":""DependencyExisting"", ""HasUnresolvedDependency"":""false"", ""SchemaName"":""MySchema"", ""SchemaItemType"":""MySchemaItemType"", ""Priority"":""1"", ""Resolved"":""true"" }", icon: KnownMonikers.Uninstall, expandedIcon: KnownMonikers.AbsolutePosition, unresolvedIcon: KnownMonikers.AboutBox, unresolvedExpandedIcon: KnownMonikers.Abbreviation); var dependencyUnresolved = IDependencyFactory.FromJson(@" { ""ProviderType"": ""Yyy"", ""Id"": ""tfm1\\yyy\\dependencyExisting"", ""Name"":""dependencyExisting"", ""Caption"":""DependencyExisting"", ""HasUnresolvedDependency"":""false"", ""SchemaName"":""MySchema"", ""SchemaItemType"":""MySchemaItemType"", ""Priority"":""1"", ""Resolved"":""false"" }", icon: KnownMonikers.Uninstall, expandedIcon: KnownMonikers.AbsolutePosition, unresolvedIcon: KnownMonikers.AboutBox, unresolvedExpandedIcon: KnownMonikers.Abbreviation); var mockSnapshot = ITargetedDependenciesSnapshotFactory.ImplementHasUnresolvedDependency("someId1", true); var viewModelResolved = dependencyResolved.ToViewModel(mockSnapshot); 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(dependencyResolved.Icon, viewModelResolved.Icon); Assert.Equal(dependencyResolved.ExpandedIcon, viewModelResolved.ExpandedIcon); Assert.Equal(dependencyResolved.Properties, viewModelResolved.Properties); var viewModelUnresolved = dependencyUnresolved.ToViewModel(mockSnapshot); 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(dependencyUnresolved.UnresolvedIcon, viewModelUnresolved.Icon); Assert.Equal(dependencyUnresolved.UnresolvedExpandedIcon, viewModelUnresolved.ExpandedIcon); Assert.Equal(dependencyUnresolved.Properties, viewModelUnresolved.Properties); }
public void TFromChanges_NoChangesAfterBeforeRemoveFilterDeclinedChange() { const string projectPath = @"c:\somefolder\someproject\a.csproj"; var targetFramework = ITargetFrameworkFactory.Implement("tfm1"); var dependencyTop1 = IDependencyFactory.FromJson(@" { ""ProviderType"": ""Xxx"", ""Id"": ""tfm1\\xxx\\topdependency1"", ""Name"":""TopDependency1"", ""Caption"":""TopDependency1"", ""SchemaItemType"":""Xxx"", ""Resolved"":""true"", ""TopLevel"":""true"" }", icon: KnownMonikers.Uninstall, expandedIcon: KnownMonikers.Uninstall); var dependencyChild1 = IDependencyFactory.FromJson(@" { ""ProviderType"": ""Xxx"", ""Id"": ""tfm1\\xxx\\childdependency1"", ""Name"":""ChildDependency1"", ""Caption"":""ChildDependency1"", ""SchemaItemType"":""Xxx"", ""Resolved"":""true"", ""TopLevel"":""false"" }", icon: KnownMonikers.Uninstall, expandedIcon: KnownMonikers.Uninstall); var catalogs = IProjectCatalogSnapshotFactory.Create(); var previousSnapshot = ITargetedDependenciesSnapshotFactory.Implement( projectPath: projectPath, targetFramework: targetFramework, catalogs: catalogs, dependenciesWorld: new [] { dependencyTop1, dependencyChild1 }, topLevelDependencies: new [] { dependencyTop1 }); var changes = new DependenciesChanges(); changes.IncludeRemovedChange(dependencyTop1.ProviderType, dependencyTop1.Id); var snapshotFilter = new TestDependenciesSnapshotFilter() .ImplementBeforeRemoveResult(FilterAction.Cancel, @"tfm1\xxx\newdependency1", null); var snapshot = TargetedDependenciesSnapshot.FromChanges( projectPath, previousSnapshot, changes, catalogs, new[] { snapshotFilter }, new Dictionary <string, IProjectDependenciesSubTreeProvider>(), null); Assert.Same(previousSnapshot, snapshot); }
public void FromChanges_NoChangesAfterBeforeRemoveFilterDeclinedChange() { const string projectPath = @"c:\somefolder\someproject\a.csproj"; var targetFramework = new TargetFramework("tfm1"); var dependencyTop1 = IDependencyFactory.FromJson(@" { ""ProviderType"": ""Xxx"", ""Id"": ""tfm1\\xxx\\topdependency1"", ""Name"":""TopDependency1"", ""Caption"":""TopDependency1"", ""SchemaItemType"":""Xxx"", ""Resolved"":""true"", ""TopLevel"":""true"" }"); var dependencyChild1 = IDependencyFactory.FromJson(@" { ""ProviderType"": ""Xxx"", ""Id"": ""tfm1\\xxx\\childdependency1"", ""Name"":""ChildDependency1"", ""Caption"":""ChildDependency1"", ""SchemaItemType"":""Xxx"", ""Resolved"":""true"", ""TopLevel"":""false"" }"); var catalogs = IProjectCatalogSnapshotFactory.Create(); var previousSnapshot = ITargetedDependenciesSnapshotFactory.Implement( projectPath: projectPath, targetFramework: targetFramework, catalogs: catalogs, dependenciesWorld: new [] { dependencyTop1, dependencyChild1 }, topLevelDependencies: new [] { dependencyTop1 }); var changes = new DependenciesChangesBuilder(); changes.Removed(dependencyTop1.ProviderType, dependencyTop1.Id); var snapshotFilter = new TestDependenciesSnapshotFilter(); var snapshot = TargetedDependenciesSnapshot.FromChanges( projectPath, previousSnapshot, changes.Build(), catalogs, ImmutableArray.Create <IDependenciesSnapshotFilter>(snapshotFilter), new Dictionary <string, IProjectDependenciesSubTreeProvider>(), null); Assert.Same(previousSnapshot, snapshot); }
public void DependencyExtensionsTests_IsPackage() { var dependency = IDependencyFactory.FromJson(@" { ""ProviderType"": ""NuGetDependency"" }"); Assert.True(dependency.IsPackage()); var dependency2 = IDependencyFactory.FromJson(@" { ""ProviderType"": ""Project"" }"); Assert.False(dependency2.IsPackage()); }
public void IsProject() { var dependency = IDependencyFactory.FromJson(@" { ""ProviderType"": ""ProjectDependency"" }"); Assert.True(dependency.IsProject()); var dependency2 = IDependencyFactory.FromJson(@" { ""ProviderType"": ""NotProject"" }"); Assert.False(dependency2.IsProject()); }
public void TCheckForUnresolvedDependencies_CircularDependency_DoesNotRecurseInfinitely() { var dependencyTop1 = IDependencyFactory.FromJson(@" { ""ProviderType"": ""Xxx"", ""Id"": ""tfm1\\xxx\\topdependency1"", ""Name"":""TopDependency1"", ""Caption"":""TopDependency1"", ""SchemaItemType"":""Xxx"", ""Resolved"":""true"", ""TopLevel"":""true"", ""DependencyIDs"": [ ""tfm1\\xxx\\topdependency2"" ] }", icon: KnownMonikers.Uninstall, expandedIcon: KnownMonikers.Uninstall); var dependencyTop2 = IDependencyFactory.FromJson(@" { ""ProviderType"": ""Xxx"", ""Id"": ""tfm1\\xxx\\topdependency2"", ""Name"":""TopDependency2"", ""Caption"":""TopDependency2"", ""SchemaItemType"":""Xxx"", ""Resolved"":""true"", ""TopLevel"":""false"", ""DependencyIDs"": [ ""tfm1\\xxx\\topdependency1"" ] }", icon: KnownMonikers.Uninstall, expandedIcon: KnownMonikers.Uninstall); var previousSnapshot = new TargetedDependenciesSnapshot( "ProjectPath", TargetFramework.Any, catalogs: null, dependenciesWorld: new Dictionary <string, IDependency>() { { dependencyTop1.Id, dependencyTop1 }, { dependencyTop2.Id, dependencyTop2 }, }.ToImmutableDictionary()); // verify it doesn't stack overflow previousSnapshot.CheckForUnresolvedDependencies(dependencyTop1); }
public void GetTopLevelId() { var dependency1 = IDependencyFactory.FromJson(@" { ""Id"":""id1"", ""ProviderType"": ""ProjectDependency"" }"); Assert.Equal("id1", dependency1.GetTopLevelId()); var dependency2 = IDependencyFactory.FromJson(@" { ""Id"":""id1"", ""Path"":""xxxxxxx"", ""ProviderType"": ""MyProvider"" }", targetFramework: ITargetFrameworkFactory.Implement("tfm1")); Assert.Equal("tfm1\\MyProvider\\xxxxxxx", dependency2.GetTopLevelId()); }
public void IsOrHasUnresolvedDependency() { var dependency1 = IDependencyFactory.FromJson(@" { ""ProviderType"": ""Yyy"", ""Id"": ""tfm1\\yyy\\dependencyExisting"", ""Name"":""dependencyExisting"", ""Caption"":""DependencyExisting"", ""Resolved"":""false"" }"); var mockSnapshot = ITargetedDependenciesSnapshotFactory.Implement(); Assert.True(dependency1.IsOrHasUnresolvedDependency(mockSnapshot)); var dependency2 = IDependencyFactory.FromJson(@" { ""ProviderType"": ""Yyy"", ""Id"": ""tfm1\\yyy\\dependencyExisting"", ""Name"":""dependencyExisting"", ""Caption"":""DependencyExisting"", ""Resolved"":""true"" }"); mockSnapshot = ITargetedDependenciesSnapshotFactory.ImplementHasUnresolvedDependency("tfm1\\yyy\\dependencyExisting", true); Assert.True(dependency2.IsOrHasUnresolvedDependency(mockSnapshot)); var dependency3 = IDependencyFactory.FromJson(@" { ""ProviderType"": ""Yyy"", ""Id"": ""tfm1\\yyy\\dependencyExisting"", ""Name"":""dependencyExisting"", ""Caption"":""DependencyExisting"", ""Resolved"":""true"" }"); mockSnapshot = ITargetedDependenciesSnapshotFactory.ImplementHasUnresolvedDependency("tfm1\\yyy\\dependencyExisting", false); Assert.False(dependency3.IsOrHasUnresolvedDependency(mockSnapshot)); }
public void DependencyExtensionsTests_Contains() { var dependency3 = IDependencyFactory.FromJson(@" { ""Id"":""id3"", ""ProviderType"": ""ProjectDependency"" }", dependenciesIds: new string[] { }); var dependency2 = IDependencyFactory.FromJson(@" { ""Id"":""id2"", ""ProviderType"": ""ProjectDependency"" }", dependenciesIds: new[] { "id3" }, dependencies: new[] { dependency3 }); var dependency1 = IDependencyFactory.FromJson(@" { ""Id"":""id1"", ""ProviderType"": ""ProjectDependency"" }", dependenciesIds: new[] { "id2" }, dependencies: new[] { dependency2 }); Assert.True(dependency1.Contains(dependency3)); }
public void DependencyExtensionsTests_IsOrHasUnresolvedDependency() { var dependency1 = IDependencyFactory.FromJson(@" { ""ProviderType"": ""Yyy"", ""Id"": ""tfm1\\yyy\\dependencyExisting"", ""Name"":""dependencyExisting"", ""Caption"":""DependencyExisting"", ""HasUnresolvedDependency"":""false"", ""Resolved"":""false"" }"); var dependency2 = IDependencyFactory.FromJson(@" { ""ProviderType"": ""Yyy"", ""Id"": ""tfm1\\yyy\\dependencyExisting"", ""Name"":""dependencyExisting"", ""Caption"":""DependencyExisting"", ""HasUnresolvedDependency"":""true"", ""Resolved"":""true"" }"); var dependency3 = IDependencyFactory.FromJson(@" { ""ProviderType"": ""Yyy"", ""Id"": ""tfm1\\yyy\\dependencyExisting"", ""Name"":""dependencyExisting"", ""Caption"":""DependencyExisting"", ""HasUnresolvedDependency"":""false"", ""Resolved"":""true"" }"); Assert.True(dependency1.IsOrHasUnresolvedDependency()); Assert.True(dependency2.IsOrHasUnresolvedDependency()); Assert.False(dependency3.IsOrHasUnresolvedDependency()); }
public void TFromChanges_RemovedAndAddedChanges() { const string projectPath = @"c:\somefolder\someproject\a.csproj"; var targetFramework = ITargetFrameworkFactory.Implement("tfm1"); var dependencyModelTop1 = IDependencyFactory.FromJson(@" { ""ProviderType"": ""Xxx"", ""Id"": ""topdependency1"", ""Name"":""TopDependency1"", ""Caption"":""TopDependency1"", ""SchemaItemType"":""Xxx"", ""Resolved"":""true"" }", icon: KnownMonikers.Uninstall, expandedIcon: KnownMonikers.Uninstall); var dependencyModelChild1 = IDependencyFactory.FromJson(@" { ""ProviderType"": ""Xxx"", ""Id"": ""childdependency1"", ""Name"":""ChildDependency1"", ""Caption"":""ChildDependency1"", ""SchemaItemType"":""Xxx"", ""Resolved"":""true"" }", icon: KnownMonikers.Uninstall, expandedIcon: KnownMonikers.Uninstall); var dependencyModelAdded1 = IDependencyFactory.FromJson(@" { ""ProviderType"": ""Xxx"", ""Id"": ""addeddependency1"", ""Name"":""AddedDependency1"", ""Caption"":""AddedDependency1"", ""SchemaItemType"":""Xxx"", ""Resolved"":""true"" }", icon: KnownMonikers.Uninstall, expandedIcon: KnownMonikers.Uninstall); var dependencyModelAdded2 = IDependencyFactory.FromJson(@" { ""ProviderType"": ""Xxx"", ""Id"": ""addeddependency2"", ""Name"":""AddedDependency2"", ""Caption"":""AddedDependency2"", ""SchemaItemType"":""Xxx"", ""Resolved"":""true"" }", icon: KnownMonikers.Uninstall, expandedIcon: KnownMonikers.Uninstall); var dependencyModelAdded3 = IDependencyFactory.FromJson(@" { ""ProviderType"": ""Xxx"", ""Id"": ""addeddependency3"", ""Name"":""AddedDependency3"", ""Caption"":""AddedDependency3"", ""SchemaItemType"":""Xxx"", ""Resolved"":""true"", ""TopLevel"":""false"" }", icon: KnownMonikers.Uninstall, expandedIcon: KnownMonikers.Uninstall); var dependencyAdded2Changed = IDependencyFactory.FromJson(@" { ""ProviderType"": ""Xxx"", ""Id"": ""tfm1\\xxx\\addeddependency2"", ""Name"":""AddedDependency2Changed"", ""Caption"":""AddedDependency2Changed"", ""SchemaItemType"":""Xxx"", ""Resolved"":""true"" }", icon: KnownMonikers.Uninstall, expandedIcon: KnownMonikers.Uninstall); var dependencyRemoved1 = IDependencyFactory.FromJson(@" { ""ProviderType"": ""Xxx"", ""Id"": ""tfm1\\xxx\\Removeddependency1"", ""Name"":""RemovedDependency1"", ""Caption"":""RemovedDependency1"", ""SchemaItemType"":""Xxx"", ""Resolved"":""true"" }", icon: KnownMonikers.Uninstall, expandedIcon: KnownMonikers.Uninstall); var dependencyModelRemoved1 = IDependencyFactory.FromJson(@" { ""ProviderType"": ""Xxx"", ""Id"": ""Removeddependency1"", ""Name"":""RemovedDependency1"", ""Caption"":""RemovedDependency1"", ""SchemaItemType"":""Xxx"", ""Resolved"":""true"" }", icon: KnownMonikers.Uninstall, expandedIcon: KnownMonikers.Uninstall); var dependencyInsteadRemoved1 = IDependencyFactory.FromJson(@" { ""ProviderType"": ""Xxx"", ""Id"": ""tfm1\\xxx\\InsteadRemoveddependency1"", ""Name"":""InsteadRemovedDependency1"", ""Caption"":""InsteadRemovedDependency1"", ""SchemaItemType"":""Xxx"", ""Resolved"":""true"" }", icon: KnownMonikers.Uninstall, expandedIcon: KnownMonikers.Uninstall); var previousSnapshot = ITargetedDependenciesSnapshotFactory.Implement( dependenciesWorld: new Dictionary <string, IDependency>() { { @"tfm1\xxx\topdependency1", dependencyModelTop1 }, { @"tfm1\xxx\childdependency1", dependencyModelChild1 }, { @"tfm1\xxx\Removeddependency1", dependencyRemoved1 }, }, topLevelDependencies: new List <IDependency>() { dependencyModelTop1 }); var addedNodes = new List <IDependencyModel> { dependencyModelAdded1, dependencyModelAdded2, dependencyModelAdded3 }; var removedNodes = new List <IDependencyModel> { dependencyModelRemoved1 }; var changes = IDependenciesChangesFactory.Implement(addedNodes: addedNodes, removedNodes: removedNodes); var snapshotFilter = new TestDependenciesSnapshotFilter() .ImplementBeforeAddResult(FilterAction.Cancel, @"tfm1\xxx\addeddependency1", null) .ImplementBeforeAddResult(FilterAction.ShouldBeAdded, @"tfm1\xxx\addeddependency2", dependencyAdded2Changed) .ImplementBeforeRemoveResult(FilterAction.ShouldBeAdded, @"tfm1\xxx\Removeddependency1", dependencyInsteadRemoved1); var catalogs = IProjectCatalogSnapshotFactory.Create(); var snapshot = TargetedDependenciesSnapshot.FromChanges( projectPath, targetFramework, previousSnapshot, changes, catalogs, new[] { snapshotFilter }, null, null, out bool anyChanges); Assert.NotNull(snapshot.TargetFramework); Assert.Equal("tfm1", snapshot.TargetFramework.FullName); Assert.Equal(projectPath, snapshot.ProjectPath); Assert.Equal(catalogs, snapshot.Catalogs); Assert.True(anyChanges); AssertEx.CollectionLength(snapshot.TopLevelDependencies, 2); Assert.Contains(snapshot.TopLevelDependencies, x => x.Id.Equals(@"topdependency1")); Assert.Contains(snapshot.TopLevelDependencies, x => x.Id.Equals(@"tfm1\xxx\addeddependency2") && x.Caption.Equals("AddedDependency2Changed")); AssertEx.CollectionLength(snapshot.DependenciesWorld, 5); Assert.True(snapshot.DependenciesWorld.ContainsKey(@"tfm1\xxx\topdependency1")); Assert.True(snapshot.DependenciesWorld.ContainsKey(@"tfm1\xxx\childdependency1")); Assert.True(snapshot.DependenciesWorld.ContainsKey(@"tfm1\xxx\addeddependency2")); Assert.True(snapshot.DependenciesWorld.ContainsKey(@"tfm1\xxx\InsteadRemoveddependency1")); Assert.True(snapshot.DependenciesWorld.ContainsKey(@"tfm1\xxx\addeddependency3")); }
public void FromChanges_ReportedChangesAfterBeforeRemoveFilterDeclinedChange() { const string projectPath = @"c:\somefolder\someproject\a.csproj"; var targetFramework = new TargetFramework("tfm1"); var dependencyTop1 = IDependencyFactory.FromJson(@" { ""ProviderType"": ""Xxx"", ""Id"": ""tfm1\\xxx\\topdependency1"", ""Name"":""TopDependency1"", ""Caption"":""TopDependency1"", ""SchemaItemType"":""Xxx"", ""Resolved"":""true"", ""TopLevel"":""true"" }"); var dependencyChild1 = IDependencyFactory.FromJson(@" { ""ProviderType"": ""Xxx"", ""Id"": ""tfm1\\xxx\\childdependency1"", ""Name"":""ChildDependency1"", ""Caption"":""ChildDependency1"", ""SchemaItemType"":""Xxx"", ""Resolved"":""true"", ""TopLevel"":""false"" }"); var catalogs = IProjectCatalogSnapshotFactory.Create(); var previousSnapshot = ITargetedDependenciesSnapshotFactory.Implement( projectPath: projectPath, targetFramework: targetFramework, catalogs: catalogs, dependenciesWorld: new [] { dependencyTop1, dependencyChild1 }, topLevelDependencies: new [] { dependencyTop1 }); var changes = new DependenciesChangesBuilder(); changes.Removed("Xxx", "topdependency1"); var addedOnRemove = new TestDependency { Id = "SomethingElse", TopLevel = false }; var snapshotFilter = new TestDependenciesSnapshotFilter() .BeforeRemoveReject(@"tfm1\xxx\topdependency1", addOrUpdate: addedOnRemove); var snapshot = TargetedDependenciesSnapshot.FromChanges( projectPath, previousSnapshot, changes.Build(), catalogs, ImmutableArray.Create <IDependenciesSnapshotFilter>(snapshotFilter), new Dictionary <string, IProjectDependenciesSubTreeProvider>(), null); Assert.NotSame(previousSnapshot, snapshot); Assert.Same(previousSnapshot.TargetFramework, snapshot.TargetFramework); Assert.Same(projectPath, snapshot.ProjectPath); Assert.Same(catalogs, snapshot.Catalogs); Assert.Single(snapshot.TopLevelDependencies); AssertEx.CollectionLength(snapshot.DependenciesWorld, 3); Assert.Contains(addedOnRemove, snapshot.DependenciesWorld.Values); }
public void TFromChanges_ReportedChangesAfterBeforeAddFilterDeclinedChange() { const string projectPath = @"c:\somefolder\someproject\a.csproj"; var targetFramework = ITargetFrameworkFactory.Implement("tfm1"); var dependencyModelTop1 = IDependencyFactory.FromJson(@" { ""ProviderType"": ""Xxx"", ""Id"": ""tfm1\\xxx\\topdependency1"", ""Name"":""TopDependency1"", ""Caption"":""TopDependency1"", ""SchemaItemType"":""Xxx"", ""Resolved"":""true"" }", icon: KnownMonikers.Uninstall, expandedIcon: KnownMonikers.Uninstall); var dependencyModelChild1 = IDependencyFactory.FromJson(@" { ""ProviderType"": ""Xxx"", ""Id"": ""tfm1\\xxx\\childdependency1"", ""Name"":""ChildDependency1"", ""Caption"":""ChildDependency1"", ""SchemaItemType"":""Xxx"", ""Resolved"":""true"" }", icon: KnownMonikers.Uninstall, expandedIcon: KnownMonikers.Uninstall); var dependencyModelNew1 = IDependencyFactory.FromJson(@" { ""ProviderType"": ""Xxx"", ""Id"": ""newdependency1"", ""Name"":""NewDependency1"", ""Caption"":""NewDependency1"", ""SchemaItemType"":""Xxx"", ""Resolved"":""true"" }", icon: KnownMonikers.Uninstall, expandedIcon: KnownMonikers.Uninstall); var previousSnapshot = ITargetedDependenciesSnapshotFactory.Implement( dependenciesWorld: new Dictionary <string, IDependency>() { { dependencyModelTop1.Id, dependencyModelTop1 }, { dependencyModelChild1.Id, dependencyModelChild1 }, }, topLevelDependencies: new List <IDependency>() { dependencyModelTop1 }); var addedNodes = new List <IDependencyModel> { dependencyModelNew1 }; var removedNodes = new List <IDependencyModel>(); var changes = IDependenciesChangesFactory.Implement(addedNodes: addedNodes, removedNodes: removedNodes); var snapshotFilter = new TestDependenciesSnapshotFilter() .ImplementBeforeAddResult(FilterAction.Cancel, @"tfm1\xxx\newdependency1", null) .ImplementFilterAnyChanges(true); var catalogs = IProjectCatalogSnapshotFactory.Create(); var snapshot = TargetedDependenciesSnapshot.FromChanges( projectPath, targetFramework, previousSnapshot, changes, catalogs, new[] { snapshotFilter }, null, null, out bool anyChanges); Assert.NotNull(snapshot.TargetFramework); Assert.Equal("tfm1", snapshot.TargetFramework.FullName); Assert.Equal(projectPath, snapshot.ProjectPath); Assert.Equal(catalogs, snapshot.Catalogs); Assert.True(anyChanges); Assert.Single(snapshot.TopLevelDependencies); AssertEx.CollectionLength(snapshot.DependenciesWorld, 2); }
public void FromChanges_ReportedChangesAfterBeforeAddFilterDeclinedChange() { const string projectPath = @"c:\somefolder\someproject\a.csproj"; var targetFramework = new TargetFramework("tfm1"); var dependencyTop1 = IDependencyFactory.FromJson(@" { ""ProviderType"": ""Xxx"", ""Id"": ""tfm1\\xxx\\topdependency1"", ""Name"":""TopDependency1"", ""Caption"":""TopDependency1"", ""SchemaItemType"":""Xxx"", ""Resolved"":""true"", ""TopLevel"":""true"" }"); var dependencyChild1 = IDependencyFactory.FromJson(@" { ""ProviderType"": ""Xxx"", ""Id"": ""tfm1\\xxx\\childdependency1"", ""Name"":""ChildDependency1"", ""Caption"":""ChildDependency1"", ""SchemaItemType"":""Xxx"", ""Resolved"":""true"", ""TopLevel"":""false"" }"); var dependencyModelNew1 = IDependencyModelFactory.FromJson(@" { ""ProviderType"": ""Xxx"", ""Id"": ""newdependency1"", ""Name"":""NewDependency1"", ""Caption"":""NewDependency1"", ""SchemaItemType"":""Xxx"", ""Resolved"":""true"" }", icon: KnownMonikers.Uninstall, expandedIcon: KnownMonikers.Uninstall); var catalogs = IProjectCatalogSnapshotFactory.Create(); var previousSnapshot = ITargetedDependenciesSnapshotFactory.Implement( projectPath: projectPath, targetFramework: targetFramework, catalogs: catalogs, dependenciesWorld: new [] { dependencyTop1, dependencyChild1 }, topLevelDependencies: new [] { dependencyTop1 }); var changes = new DependenciesChangesBuilder(); changes.Added(dependencyModelNew1); var filterAddedDependency = new TestDependency { Id = "unexpected", TopLevel = true }; var snapshotFilter = new TestDependenciesSnapshotFilter() .BeforeAddReject(@"tfm1\xxx\newdependency1", addOrUpdate: filterAddedDependency); var snapshot = TargetedDependenciesSnapshot.FromChanges( projectPath, previousSnapshot, changes.Build(), catalogs, ImmutableArray.Create <IDependenciesSnapshotFilter>(snapshotFilter), new Dictionary <string, IProjectDependenciesSubTreeProvider>(), null); Assert.NotSame(previousSnapshot, snapshot); Assert.Same(previousSnapshot.TargetFramework, snapshot.TargetFramework); Assert.Same(previousSnapshot.ProjectPath, snapshot.ProjectPath); Assert.Same(previousSnapshot.Catalogs, snapshot.Catalogs); AssertEx.CollectionLength(snapshot.TopLevelDependencies, 2); Assert.Contains(dependencyTop1, snapshot.TopLevelDependencies); Assert.Contains(filterAddedDependency, snapshot.TopLevelDependencies); AssertEx.CollectionLength(snapshot.DependenciesWorld, 3); Assert.Contains(dependencyTop1, snapshot.DependenciesWorld.Values); Assert.Contains(dependencyChild1, snapshot.DependenciesWorld.Values); Assert.Contains(filterAddedDependency, snapshot.DependenciesWorld.Values); }
public void ToViewModel() { var iconSet = new DependencyIconSet( KnownMonikers.Uninstall, KnownMonikers.AbsolutePosition, KnownMonikers.AboutBox, KnownMonikers.Abbreviation); var dependencyResolved = IDependencyFactory.FromJson(@" { ""ProviderType"": ""Yyy"", ""Id"": ""tfm1\\yyy\\dependencyExisting"", ""Name"":""dependencyExisting"", ""Caption"":""DependencyExisting"", ""HasUnresolvedDependency"":""false"", ""SchemaName"":""MySchema"", ""SchemaItemType"":""MySchemaItemType"", ""Priority"":""1"", ""Resolved"":""true"" }", iconSet: iconSet); var dependencyUnresolved = IDependencyFactory.FromJson(@" { ""ProviderType"": ""Yyy"", ""Id"": ""tfm1\\yyy\\dependencyExisting"", ""Name"":""dependencyExisting"", ""Caption"":""DependencyExisting"", ""HasUnresolvedDependency"":""false"", ""SchemaName"":""MySchema"", ""SchemaItemType"":""MySchemaItemType"", ""Priority"":""1"", ""Resolved"":""false"" }", iconSet: iconSet); var mockSnapshot = ITargetedDependenciesSnapshotFactory.ImplementMock(checkForUnresolvedDependencies: false).Object; var mockSnapshotUnresolvedDependency = ITargetedDependenciesSnapshotFactory.ImplementMock(checkForUnresolvedDependencies: true).Object; var viewModelResolved = dependencyResolved.ToViewModel(mockSnapshot); 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(mockSnapshot); 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 viewModelUnresolvedDependency = dependencyResolved.ToViewModel(mockSnapshotUnresolvedDependency); Assert.Equal(dependencyUnresolved.Caption, viewModelUnresolvedDependency.Caption); Assert.Equal(dependencyUnresolved.Flags, viewModelUnresolvedDependency.Flags); Assert.Equal(dependencyUnresolved.Id, viewModelUnresolvedDependency.FilePath); Assert.Equal(dependencyUnresolved.SchemaName, viewModelUnresolvedDependency.SchemaName); Assert.Equal(dependencyUnresolved.SchemaItemType, viewModelUnresolvedDependency.SchemaItemType); Assert.Equal(dependencyUnresolved.Priority, viewModelUnresolvedDependency.Priority); Assert.Equal(iconSet.UnresolvedIcon, viewModelUnresolvedDependency.Icon); Assert.Equal(iconSet.UnresolvedExpandedIcon, viewModelUnresolvedDependency.ExpandedIcon); }
public void FromChanges_RemovedAndAddedChanges() { const string projectPath = @"c:\somefolder\someproject\a.csproj"; var targetFramework = new TargetFramework("tfm1"); var dependencyTop1 = IDependencyFactory.FromJson(@" { ""ProviderType"": ""Xxx"", ""Id"": ""tfm1\\xxx\\topdependency1"", ""Name"":""TopDependency1"", ""Caption"":""TopDependency1"", ""SchemaItemType"":""Xxx"", ""Resolved"":""true"", ""TopLevel"":""true"" }"); var dependencyChild1 = IDependencyFactory.FromJson(@" { ""ProviderType"": ""Xxx"", ""Id"": ""tfm1\\xxx\\childdependency1"", ""Name"":""ChildDependency1"", ""Caption"":""ChildDependency1"", ""SchemaItemType"":""Xxx"", ""Resolved"":""true"", ""TopLevel"":""false"" }"); var dependencyModelAdded1 = IDependencyModelFactory.FromJson(@" { ""ProviderType"": ""Xxx"", ""Id"": ""addeddependency1"", ""Name"":""AddedDependency1"", ""Caption"":""AddedDependency1"", ""SchemaItemType"":""Xxx"", ""Resolved"":""true"", ""TopLevel"":""false"" }", icon: KnownMonikers.Uninstall, expandedIcon: KnownMonikers.Uninstall); var dependencyModelAdded2 = IDependencyModelFactory.FromJson(@" { ""ProviderType"": ""Xxx"", ""Id"": ""addeddependency2"", ""Name"":""AddedDependency2"", ""Caption"":""AddedDependency2"", ""SchemaItemType"":""Xxx"", ""Resolved"":""true"", ""TopLevel"":""false"" }", icon: KnownMonikers.Uninstall, expandedIcon: KnownMonikers.Uninstall); var dependencyModelAdded3 = IDependencyModelFactory.FromJson(@" { ""ProviderType"": ""Xxx"", ""Id"": ""addeddependency3"", ""Name"":""AddedDependency3"", ""Caption"":""AddedDependency3"", ""SchemaItemType"":""Xxx"", ""Resolved"":""true"", ""TopLevel"":""false"" }", icon: KnownMonikers.Uninstall, expandedIcon: KnownMonikers.Uninstall); var dependencyAdded2Changed = IDependencyFactory.FromJson(@" { ""ProviderType"": ""Xxx"", ""Id"": ""tfm1\\xxx\\addeddependency2"", ""Name"":""AddedDependency2Changed"", ""Caption"":""AddedDependency2Changed"", ""SchemaItemType"":""Xxx"", ""Resolved"":""true"", ""TopLevel"":""true"" }"); var dependencyRemoved1 = IDependencyFactory.FromJson(@" { ""ProviderType"": ""Xxx"", ""Id"": ""tfm1\\xxx\\Removeddependency1"", ""Name"":""RemovedDependency1"", ""Caption"":""RemovedDependency1"", ""SchemaItemType"":""Xxx"", ""Resolved"":""true"", ""TopLevel"":""false"" }"); var dependencyInsteadRemoved1 = IDependencyFactory.FromJson(@" { ""ProviderType"": ""Xxx"", ""Id"": ""tfm1\\xxx\\InsteadRemoveddependency1"", ""Name"":""InsteadRemovedDependency1"", ""Caption"":""InsteadRemovedDependency1"", ""SchemaItemType"":""Xxx"", ""Resolved"":""true"", ""TopLevel"":""false"" }"); Assert.True(dependencyTop1.TopLevel); Assert.False(dependencyChild1.TopLevel); Assert.False(dependencyRemoved1.TopLevel); var catalogs = IProjectCatalogSnapshotFactory.Create(); var previousSnapshot = ITargetedDependenciesSnapshotFactory.Implement( projectPath: projectPath, targetFramework: targetFramework, catalogs: catalogs, dependenciesWorld: new [] { dependencyTop1, dependencyChild1, dependencyRemoved1 }, topLevelDependencies: new [] { dependencyTop1 }); var changes = new DependenciesChangesBuilder(); changes.Added(dependencyModelAdded1); changes.Added(dependencyModelAdded2); changes.Added(dependencyModelAdded3); changes.Removed("Xxx", "Removeddependency1"); var snapshotFilter = new TestDependenciesSnapshotFilter() .BeforeAddReject(@"tfm1\xxx\addeddependency1") .BeforeAddAccept(@"tfm1\xxx\addeddependency2", dependencyAdded2Changed) .BeforeAddAccept(@"tfm1\xxx\addeddependency3") .BeforeRemoveAccept(@"tfm1\xxx\Removeddependency1", dependencyInsteadRemoved1); var snapshot = TargetedDependenciesSnapshot.FromChanges( projectPath, previousSnapshot, changes.Build(), catalogs, ImmutableArray.Create <IDependenciesSnapshotFilter>(snapshotFilter), new Dictionary <string, IProjectDependenciesSubTreeProvider>(), null); Assert.NotSame(previousSnapshot, snapshot); Assert.Same(previousSnapshot.TargetFramework, snapshot.TargetFramework); Assert.Same(projectPath, snapshot.ProjectPath); Assert.Same(catalogs, snapshot.Catalogs); AssertEx.CollectionLength(snapshot.TopLevelDependencies, 2); Assert.Contains(snapshot.TopLevelDependencies, x => x.Id.Equals(@"tfm1\xxx\topdependency1")); Assert.Contains(snapshot.TopLevelDependencies, x => x.Id.Equals(@"tfm1\xxx\addeddependency2") && x.Caption.Equals("AddedDependency2Changed")); AssertEx.CollectionLength(snapshot.DependenciesWorld, 5); Assert.True(snapshot.DependenciesWorld.ContainsKey(@"tfm1\xxx\topdependency1")); Assert.True(snapshot.DependenciesWorld.ContainsKey(@"tfm1\xxx\childdependency1")); Assert.True(snapshot.DependenciesWorld.ContainsKey(@"tfm1\xxx\addeddependency2")); Assert.True(snapshot.DependenciesWorld.ContainsKey(@"tfm1\xxx\InsteadRemoveddependency1")); Assert.True(snapshot.DependenciesWorld.ContainsKey(@"tfm1\xxx\addeddependency3")); }
public void TFromChanges_UpdatesTopLevelDependencies() { const string projectPath = @"c:\somefolder\someproject\a.csproj"; var targetFramework = ITargetFrameworkFactory.Implement("tfm1"); var dependencyTopPrevious = IDependencyFactory.FromJson(@" { ""ProviderType"": ""Xxx"", ""Id"": ""tfm1\\xxx\\topdependency1"", ""Name"": ""TopDependency1"", ""Caption"": ""TopDependency1"", ""SchemaItemType"": ""Xxx"", ""Resolved"": ""true"" }", icon: KnownMonikers.Uninstall, expandedIcon: KnownMonikers.Uninstall); var dependencyModelTopAdded = IDependencyModelFactory.FromJson(@" { ""ProviderType"": ""Xxx"", ""Id"": ""topdependency1"", ""Name"": ""TopDependency1"", ""Caption"": ""TopDependency1"", ""SchemaItemType"": ""Xxx"", ""Resolved"": ""true"" }", icon: KnownMonikers.Uninstall, expandedIcon: KnownMonikers.Uninstall); var dependencyTopUpdated = IDependencyFactory.FromJson(@" { ""ProviderType"": ""Xxx"", ""Id"": ""tfm1\\xxx\\topdependency1"", ""Name"": ""TopDependency1"", ""Caption"": ""TopDependency1"", ""SchemaItemType"": ""Xxx"", ""Resolved"": ""true"" }", icon: KnownMonikers.Uninstall, expandedIcon: KnownMonikers.Uninstall); var catalogs = IProjectCatalogSnapshotFactory.Create(); var previousSnapshot = ITargetedDependenciesSnapshotFactory.Implement( projectPath: projectPath, targetFramework: targetFramework, catalogs: catalogs, dependenciesWorld: new[] { dependencyTopPrevious }, topLevelDependencies: new[] { dependencyTopPrevious }); var changes = new DependenciesChanges(); changes.IncludeAddedChange(dependencyModelTopAdded); var snapshotFilter = new TestDependenciesSnapshotFilter() .ImplementBeforeAddResult(FilterAction.ShouldBeAdded, @"tfm1\xxx\topdependency1", dependencyTopUpdated); var snapshot = TargetedDependenciesSnapshot.FromChanges( projectPath, previousSnapshot, changes, catalogs, new[] { snapshotFilter }, new Dictionary <string, IProjectDependenciesSubTreeProvider>(), null); Assert.NotSame(previousSnapshot, snapshot); Assert.Same(dependencyTopUpdated, snapshot.TopLevelDependencies.Single()); }
public void GrouppedByTargetTreeViewProvider_WhenOneTargetSnapshotAndDependencySupportsRule_ShouldCreateRule() { var dependencyRootYyy = IDependencyFactory.FromJson(@" { ""ProviderType"": ""Yyy"", ""Id"": ""YyyDependencyRoot"", ""Name"":""YyyDependencyRoot"", ""Caption"":""YyyDependencyRoot"", ""Resolved"":""true"" }"); var dependencyYyyExisting = IDependencyFactory.FromJson(@" { ""ProviderType"": ""Yyy"", ""Id"": ""tfm1\\yyy\\dependencyExisting"", ""Name"":""dependencyExisting"", ""Caption"":""DependencyExisting"", ""SchemaItemType"":""Yyy"", ""Resolved"":""true"" }", icon: KnownMonikers.Uninstall, expandedIcon: KnownMonikers.Uninstall, flags: DependencyTreeFlags.SupportsRuleProperties); var dependencies = new List <IDependency> { dependencyYyyExisting }; var dependencyYyyExistingTree = new TestProjectTree { Caption = "DependencyExisting", FilePath = "tfm1\\yyy\\dependencyExisting", Flags = DependencyTreeFlags.ResolvedFlags }; var dependencyRootYyyTree = new TestProjectTree { Caption = "YyyDependencyRoot", FilePath = "YyyDependencyRoot" }; dependencyRootYyyTree.Add(dependencyYyyExistingTree); var dependenciesRoot = new TestProjectTree { Caption = "MyDependencies", FilePath = "" }; dependenciesRoot.Add(dependencyRootYyyTree); var treeViewModelFactory = IMockDependenciesViewModelFactory.Implement( getDependenciesRootIcon: KnownMonikers.AboutBox, createRootViewModel: new[] { dependencyRootYyy }); var testData = new Dictionary <ITargetFramework, List <IDependency> > { { ITargetFrameworkFactory.Implement(moniker: "tfm1"), dependencies } }; var project = UnconfiguredProjectFactory.Create(filePath: @"c:\somefodler\someproject.csproj"); var commonServices = IUnconfiguredProjectCommonServicesFactory.Create(project: project); var provider = new GroupedByTargetTreeViewProvider( new MockIDependenciesTreeServices(), treeViewModelFactory, commonServices); // Act var resultTree = provider.BuildTree(dependenciesRoot, GetSnapshot(testData)); // Assert var expectedFlatHierarchy = @"Caption=MyDependencies, FilePath=, IconHash=325248080, ExpandedIconHash=325248080, Rule=, IsProjectItem=False, CustomTag= Caption=YyyDependencyRoot, FilePath=YyyDependencyRoot, IconHash=0, ExpandedIconHash=0, Rule=, IsProjectItem=False, CustomTag= Caption=DependencyExisting, FilePath=tfm1\yyy\dependencyExisting, IconHash=325249260, ExpandedIconHash=325249260, Rule=Yyy, IsProjectItem=False, CustomTag= "; Assert.Equal(expectedFlatHierarchy, ((TestProjectTree)resultTree).FlatHierarchy); }
public void GrouppedByTargetTreeViewProvider_WhenMultipleTargetSnapshotsWithExistingDependencies_ShouldApplyChanges() { var tfm1 = ITargetFrameworkFactory.Implement(moniker: "tfm1"); var tfm2 = ITargetFrameworkFactory.Implement(moniker: "tfm2"); var tfmAny = ITargetFrameworkFactory.Implement(moniker: "any"); var dependencyRootXxx = IDependencyFactory.FromJson(@" { ""ProviderType"": ""Xxx"", ""Id"": ""XxxDependencyRoot"", ""Name"":""XxxDependencyRoot"", ""Caption"":""XxxDependencyRoot"", ""Resolved"":""true"" }"); var dependencyXxx1 = IDependencyFactory.FromJson(@" { ""ProviderType"": ""Xxx"", ""Id"": ""xxx\\dependency1"", ""Path"": ""dependencyxxxpath"", ""Name"":""dependency1"", ""Caption"":""Dependency1"", ""SchemaItemType"":""Xxx"", ""Resolved"":""true"" }", icon: KnownMonikers.Uninstall, expandedIcon: KnownMonikers.Uninstall, targetFramework: tfm1); var dependencyRootYyy = IDependencyFactory.FromJson(@" { ""ProviderType"": ""Yyy"", ""Id"": ""YyyDependencyRoot"", ""Name"":""YyyDependencyRoot"", ""Caption"":""YyyDependencyRoot"" }"); var dependencyYyy1 = IDependencyFactory.FromJson(@" { ""ProviderType"": ""Yyy"", ""Id"": ""yyy\\dependency1"", ""Path"": ""dependencyyyypath"", ""Name"":""dependency1"", ""Caption"":""Dependency1"", ""SchemaItemType"":""Yyy"", ""Resolved"":""true"" }", icon: KnownMonikers.Uninstall, expandedIcon: KnownMonikers.Uninstall, targetFramework: tfm1); var dependencyYyyExisting = IDependencyFactory.FromJson(@" { ""ProviderType"": ""Yyy"", ""Id"": ""yyy\\dependencyExisting"", ""Path"": ""dependencyyyyExistingpath"", ""Name"":""dependencyExisting"", ""Caption"":""DependencyExisting"", ""SchemaItemType"":""Yyy"", ""Resolved"":""true"" }", icon: KnownMonikers.Uninstall, expandedIcon: KnownMonikers.Uninstall, targetFramework: tfm1); var dependencyRootZzz = IDependencyFactory.FromJson(@" { ""ProviderType"": ""Zzz"", ""Id"": ""ZzzDependencyRoot"", ""Name"":""ZzzDependencyRoot"", ""Caption"":""ZzzDependencyRoot"", ""Resolved"":""true"" }", flags: ProjectTreeFlags.Create(ProjectTreeFlags.Common.BubbleUp)); var dependencyAny1 = IDependencyFactory.FromJson(@" { ""ProviderType"": ""Zzz"", ""Id"": ""ZzzDependencyAny1"", ""Path"": ""ZzzDependencyAny1path"", ""Name"":""ZzzDependencyAny1"", ""Caption"":""ZzzDependencyAny1"" }", targetFramework: tfmAny); var dependencies = new List <IDependency> { dependencyXxx1, dependencyYyy1, dependencyYyyExisting }; var dependenciesAny = new List <IDependency> { dependencyAny1 }; var oldRootChildToBeRemoved = new TestProjectTree { Caption = "OldRootChildToBeRemoved", FilePath = "" }; var dependencyYyyExistingTree = new TestProjectTree { Caption = "DependencyExisting", FilePath = "yyy\\dependencyExisting" }; var dependencyRootYyyTree = new TestProjectTree { Caption = "YyyDependencyRoot", FilePath = "YyyDependencyRoot" }; dependencyRootYyyTree.Add(dependencyYyyExistingTree); var dependenciesRoot = new TestProjectTree { Caption = "MyDependencies", FilePath = "" }; dependenciesRoot.Add(oldRootChildToBeRemoved); dependenciesRoot.Add(dependencyRootYyyTree); var target1 = IDependencyFactory.FromJson(@" { ""Id"": ""tfm1"", ""Name"":""tfm1"", ""Caption"":""tfm1"" }"); var target2 = IDependencyFactory.FromJson(@" { ""Id"": ""tfm2"", ""Name"":""tfm2"", ""Caption"":""tfm2"" }"); var targetAny = IDependencyFactory.FromJson(@" { ""Id"": ""any"", ""Name"":""any"", ""Caption"":""any"" }"); var treeViewModelFactory = IMockDependenciesViewModelFactory.Implement( getDependenciesRootIcon: KnownMonikers.AboutBox, createRootViewModel: new[] { dependencyRootXxx, dependencyRootYyy, dependencyRootZzz }, createTargetViewModel: new[] { target1, target2 }); var testData = new Dictionary <ITargetFramework, List <IDependency> > { { tfm1, dependencies }, { tfm2, dependencies }, { tfmAny, dependenciesAny } }; var project = UnconfiguredProjectFactory.Create(filePath: @"c:\somefodler\someproject.csproj"); var commonServices = IUnconfiguredProjectCommonServicesFactory.Create(project: project); var provider = new GroupedByTargetTreeViewProvider( new MockIDependenciesTreeServices(), treeViewModelFactory, commonServices); // Act var resultTree = provider.BuildTree(dependenciesRoot, GetSnapshot(testData)); // Assert var expectedFlatHierarchy = @"Caption=MyDependencies, FilePath=, IconHash=325248080, ExpandedIconHash=325248080, Rule=, IsProjectItem=False, CustomTag= Caption=tfm2, FilePath=tfm2, IconHash=0, ExpandedIconHash=0, Rule=, IsProjectItem=False, CustomTag=, BubbleUpFlag=True Caption=YyyDependencyRoot, FilePath=YyyDependencyRoot, IconHash=0, ExpandedIconHash=0, Rule=, IsProjectItem=False, CustomTag= Caption=Dependency1, FilePath=tfm1\Yyy\dependencyyyypath, IconHash=325249260, ExpandedIconHash=325249260, Rule=, IsProjectItem=False, CustomTag= Caption=DependencyExisting, FilePath=tfm1\Yyy\dependencyyyyExistingpath, IconHash=325249260, ExpandedIconHash=325249260, Rule=, IsProjectItem=False, CustomTag= Caption=XxxDependencyRoot, FilePath=XxxDependencyRoot, IconHash=0, ExpandedIconHash=0, Rule=, IsProjectItem=False, CustomTag= Caption=Dependency1, FilePath=tfm1\Xxx\dependencyxxxpath, IconHash=325249260, ExpandedIconHash=325249260, Rule=, IsProjectItem=False, CustomTag= Caption=ZzzDependencyRoot, FilePath=ZzzDependencyRoot, IconHash=0, ExpandedIconHash=0, Rule=, IsProjectItem=False, CustomTag= Caption=ZzzDependencyAny1, FilePath=ZzzDependencyAny1, IconHash=0, ExpandedIconHash=0, Rule=, IsProjectItem=False, CustomTag= Caption=tfm1, FilePath=tfm1, IconHash=0, ExpandedIconHash=0, Rule=, IsProjectItem=False, CustomTag=, BubbleUpFlag=True Caption=YyyDependencyRoot, FilePath=YyyDependencyRoot, IconHash=0, ExpandedIconHash=0, Rule=, IsProjectItem=False, CustomTag= Caption=Dependency1, FilePath=tfm1\Yyy\dependencyyyypath, IconHash=325249260, ExpandedIconHash=325249260, Rule=, IsProjectItem=True, CustomTag= Caption=DependencyExisting, FilePath=tfm1\Yyy\dependencyyyyExistingpath, IconHash=325249260, ExpandedIconHash=325249260, Rule=, IsProjectItem=True, CustomTag= Caption=XxxDependencyRoot, FilePath=XxxDependencyRoot, IconHash=0, ExpandedIconHash=0, Rule=, IsProjectItem=False, CustomTag= Caption=Dependency1, FilePath=tfm1\Xxx\dependencyxxxpath, IconHash=325249260, ExpandedIconHash=325249260, Rule=, IsProjectItem=True, CustomTag= "; Assert.Equal(expectedFlatHierarchy, ((TestProjectTree)resultTree).FlatHierarchy); }
public void GrouppedByTargetTreeViewProvider_WheEmptySnapshotAndVisibilityMarkerNotProvided_ShouldHideSubTreeRoot() { var dependencyRootYyy = IDependencyFactory.FromJson(@" { ""ProviderType"": ""Yyy"", ""Id"": ""YyyDependencyRoot"", ""Name"":""YyyDependencyRoot"", ""Caption"":""YyyDependencyRoot"", ""Resolved"":""true"" }"); var dependencyVisibilityMarker = IDependencyFactory.FromJson(@" { ""ProviderType"": ""Yyy"", ""Id"": ""someid"", ""Name"":""someid"", ""Caption"":""someid"", ""Resolved"":""false"", ""Visible"":""false"" }"); var dependencies = new List <IDependency> { dependencyVisibilityMarker }; var dependencyRootYyyTree = new TestProjectTree { Caption = "YyyDependencyRoot", FilePath = "YyyDependencyRoot" }; var dependenciesRoot = new TestProjectTree { Caption = "MyDependencies", FilePath = "" }; dependenciesRoot.Add(dependencyRootYyyTree); var treeViewModelFactory = IMockDependenciesViewModelFactory.Implement( getDependenciesRootIcon: KnownMonikers.AboutBox, createRootViewModel: new[] { dependencyRootYyy }); var testData = new Dictionary <ITargetFramework, List <IDependency> > { { ITargetFrameworkFactory.Implement(moniker: "tfm1"), dependencies } }; var project = UnconfiguredProjectFactory.Create(filePath: @"c:\somefodler\someproject.csproj"); var commonServices = IUnconfiguredProjectCommonServicesFactory.Create(project: project); var provider = new GroupedByTargetTreeViewProvider( new MockIDependenciesTreeServices(), treeViewModelFactory, commonServices); // Act var resultTree = provider.BuildTree(dependenciesRoot, GetSnapshot(testData)); // Assert var expectedFlatHierarchy = @"Caption=MyDependencies, FilePath=, IconHash=325248080, ExpandedIconHash=325248080, Rule=, IsProjectItem=False, CustomTag= "; Assert.Equal(expectedFlatHierarchy, ((TestProjectTree)resultTree).FlatHierarchy); }