public void FromChanges_NoChanges() { var catalogs = IProjectCatalogSnapshotFactory.Create(); var targetFramework = new TargetFramework("tfm1"); var targetFrameworks = ImmutableArray <TargetFramework> .Empty.Add(targetFramework); var dependenciesByTargetFramework = CreateDependenciesByTargetFramework(catalogs, targetFramework); var previousSnapshot = new DependenciesSnapshot( activeTargetFramework: targetFramework, dependenciesByTargetFramework); var snapshot = DependenciesSnapshot.FromChanges( previousSnapshot, targetFramework, changes: null, catalogs, targetFrameworks, activeTargetFramework: targetFramework, ImmutableArray <IDependenciesSnapshotFilter> .Empty, new Dictionary <string, IProjectDependenciesSubTreeProvider>(), null); Assert.Same(previousSnapshot, snapshot); }
public void FromChanges_NotEmpty_NoChanges() { const string projectPath = @"c:\somefolder\someproject\a.csproj"; var targetFramework = new TargetFramework("tfm1"); var dependencyTop1 = new TestDependency { Id = @"tfm1\xxx\topdependency1", ProviderType = "Xxx", Resolved = true, TopLevel = true }; var catalogs = IProjectCatalogSnapshotFactory.Create(); var previousSnapshot = ITargetedDependenciesSnapshotFactory.Implement( projectPath: projectPath, targetFramework: targetFramework, catalogs: catalogs, dependenciesWorld: new [] { dependencyTop1 }, topLevelDependencies: new [] { dependencyTop1 }); var changes = new DependenciesChangesBuilder(); var snapshot = TargetedDependenciesSnapshot.FromChanges( projectPath, previousSnapshot, changes.Build(), catalogs, ImmutableArray <IDependenciesSnapshotFilter> .Empty, new Dictionary <string, IProjectDependenciesSubTreeProvider>(), null); Assert.Same(previousSnapshot, snapshot); }
public void FromChanges_ProjectPathAndActiveTargetChange() { const string previousProjectPath = @"c:\somefolder\someproject\a.csproj"; const string newProjectPath = @"c:\somefolder\someproject\b.csproj"; var catalogs = IProjectCatalogSnapshotFactory.Create(); var targetFramework1 = new TargetFramework("tfm1"); var targetFramework2 = new TargetFramework("tfm2"); var targetFrameworks = ImmutableArray <ITargetFramework> .Empty.Add(targetFramework1).Add(targetFramework2); var dependenciesByTargetFramework = CreateDependenciesByTargetFramework(previousProjectPath, catalogs, targetFramework1, targetFramework2); var previousSnapshot = new DependenciesSnapshot( previousProjectPath, activeTargetFramework: targetFramework1, dependenciesByTargetFramework); var targetChanges = new DependenciesChangesBuilder(); var changes = new Dictionary <ITargetFramework, IDependenciesChanges> { [targetFramework1] = targetChanges.Build(), [targetFramework2] = targetChanges.Build() }; var snapshot = DependenciesSnapshot.FromChanges( newProjectPath, previousSnapshot, changes.ToImmutableDictionary(), catalogs, targetFrameworks, activeTargetFramework: targetFramework2, ImmutableArray <IDependenciesSnapshotFilter> .Empty, new Dictionary <string, IProjectDependenciesSubTreeProvider>(), null); Assert.NotSame(previousSnapshot, snapshot); Assert.Same(newProjectPath, snapshot.ProjectPath); Assert.Same(targetFramework2, snapshot.ActiveTargetFramework); Assert.NotSame(previousSnapshot.DependenciesByTargetFramework, snapshot.DependenciesByTargetFramework); Assert.Equal(2, snapshot.DependenciesByTargetFramework.Count); var targetedSnapshot1 = snapshot.DependenciesByTargetFramework[targetFramework1]; var targetedSnapshot2 = snapshot.DependenciesByTargetFramework[targetFramework2]; Assert.Equal(newProjectPath, targetedSnapshot1.ProjectPath); Assert.Equal(newProjectPath, targetedSnapshot2.ProjectPath); Assert.Equal(targetFramework1, targetedSnapshot1.TargetFramework); Assert.Equal(targetFramework2, targetedSnapshot2.TargetFramework); Assert.Empty(targetedSnapshot1.TopLevelDependencies); Assert.Empty(targetedSnapshot2.TopLevelDependencies); Assert.Empty(targetedSnapshot1.DependenciesWorld); Assert.Empty(targetedSnapshot2.DependenciesWorld); Assert.Same(catalogs, targetedSnapshot1.Catalogs); Assert.Same(catalogs, targetedSnapshot2.Catalogs); Assert.Same( dependenciesByTargetFramework[targetFramework1].DependenciesWorld, targetedSnapshot1.DependenciesWorld); Assert.Same( dependenciesByTargetFramework[targetFramework2].DependenciesWorld, targetedSnapshot2.DependenciesWorld); }
public void FromChanges_NoChange() { const string projectPath = @"c:\somefolder\someproject\a.csproj"; var catalogs = IProjectCatalogSnapshotFactory.Create(); var targetFramework = new TargetFramework("tfm1"); var targetFrameworks = ImmutableArray <ITargetFramework> .Empty.Add(targetFramework); var dependenciesByTargetFramework = CreateDependenciesByTargetFramework(projectPath, catalogs, targetFramework); var previousSnapshot = new DependenciesSnapshot( projectPath, activeTargetFramework: targetFramework, dependenciesByTargetFramework); var targetChanges = new DependenciesChangesBuilder(); var changes = new Dictionary <ITargetFramework, IDependenciesChanges> { [targetFramework] = targetChanges.Build() }; var snapshot = DependenciesSnapshot.FromChanges( projectPath, previousSnapshot, changes.ToImmutableDictionary(), catalogs, targetFrameworks, activeTargetFramework: targetFramework, ImmutableArray <IDependenciesSnapshotFilter> .Empty, new Dictionary <string, IProjectDependenciesSubTreeProvider>(), null); Assert.Same(previousSnapshot, snapshot); }
public void FromChanges_CatalogsChanged() { const string projectPath = @"c:\somefolder\someproject\a.csproj"; var previousCatalogs = IProjectCatalogSnapshotFactory.Create(); var updatedCatalogs = IProjectCatalogSnapshotFactory.Create(); var targetFramework = new TargetFramework("tfm1"); var targetFrameworks = ImmutableArray <ITargetFramework> .Empty.Add(targetFramework); var dependenciesByTargetFramework = CreateDependenciesByTargetFramework(projectPath, previousCatalogs, targetFramework); var previousSnapshot = new DependenciesSnapshot( projectPath, activeTargetFramework: targetFramework, dependenciesByTargetFramework); var snapshot = DependenciesSnapshot.FromChanges( projectPath, previousSnapshot, targetFramework, changes: null, updatedCatalogs, targetFrameworks, activeTargetFramework: targetFramework, ImmutableArray <IDependenciesSnapshotFilter> .Empty, new Dictionary <string, IProjectDependenciesSubTreeProvider>(), null); Assert.NotSame(previousSnapshot, snapshot); Assert.Same(projectPath, snapshot.ProjectPath); Assert.Same(targetFramework, snapshot.ActiveTargetFramework); Assert.NotSame(previousSnapshot.DependenciesByTargetFramework, snapshot.DependenciesByTargetFramework); Assert.Single(snapshot.DependenciesByTargetFramework); }
public void FromChanges_UpdatesLevelDependencies() { var targetFramework = new TargetFramework("tfm1"); var dependencyPrevious = new TestDependency { ProviderType = "Xxx", Id = "dependency1", OriginalItemSpec = "Dependency1", Caption = "Dependency1", SchemaItemType = "Xxx", Resolved = true }; var dependencyModelAdded = new TestDependencyModel { ProviderType = "Xxx", Id = "dependency1", OriginalItemSpec = "Dependency1", Caption = "Dependency1", SchemaItemType = "Xxx", Resolved = true, Icon = KnownMonikers.Uninstall, ExpandedIcon = KnownMonikers.Uninstall }; var dependencyUpdated = new TestDependency { ProviderType = "Xxx", Id = "dependency1", OriginalItemSpec = "Dependency1", Caption = "Dependency1", SchemaItemType = "Xxx", Resolved = true }; var catalogs = IProjectCatalogSnapshotFactory.Create(); var previousSnapshot = new TargetedDependenciesSnapshot( targetFramework, catalogs, ImmutableArray.Create <IDependency>(dependencyPrevious)); var changes = new DependenciesChangesBuilder(); changes.Added(dependencyModelAdded); var snapshotFilter = new TestDependenciesSnapshotFilter() .BeforeAddAccept("Xxx", "dependency1", dependencyUpdated); var snapshot = TargetedDependenciesSnapshot.FromChanges( previousSnapshot, changes.TryBuildChanges() !, catalogs, ImmutableArray.Create <IDependenciesSnapshotFilter>(snapshotFilter)); Assert.True(snapshotFilter.Completed); Assert.NotSame(previousSnapshot, snapshot); Assert.Same(dependencyUpdated, snapshot.Dependencies.Single()); }
public void FromChanges_Empty_ProjectPathChange() { const string previousProjectPath = @"c:\somefolder\someproject\a.csproj"; const string newProjectPath = @"c:\somefolder\someproject\b.csproj"; var catalogs = IProjectCatalogSnapshotFactory.Create(); var activeTarget = new TargetFramework("tfm1"); var previousSnapshot = new DependenciesSnapshot( previousProjectPath, activeTarget, ImmutableDictionary <ITargetFramework, ITargetedDependenciesSnapshot> .Empty); var targetChanges = new DependenciesChangesBuilder(); var changes = new Dictionary <ITargetFramework, IDependenciesChanges> { [activeTarget] = targetChanges.Build() }; var snapshot = DependenciesSnapshot.FromChanges( newProjectPath, previousSnapshot, changes.ToImmutableDictionary(), catalogs, activeTarget, ImmutableArray <IDependenciesSnapshotFilter> .Empty, new Dictionary <string, IProjectDependenciesSubTreeProvider>(), null); Assert.NotSame(previousSnapshot, snapshot); Assert.Same(newProjectPath, snapshot.ProjectPath); Assert.Same(activeTarget, snapshot.ActiveTarget); Assert.Same(previousSnapshot.Targets, snapshot.Targets); }
public void TFromChanges_AddingToEmpty() { const string projectPath = @"c:\somefolder\someproject\a.csproj"; var targetFramework = ITargetFrameworkFactory.Implement("tfm1"); var catalogs = IProjectCatalogSnapshotFactory.Create(); var previousSnapshot = TargetedDependenciesSnapshot.CreateEmpty(projectPath, targetFramework, catalogs); var resolvedTop = IDependencyModelFactory.FromJson(@" { ""ProviderType"": ""Xxx"", ""Id"": ""dependency1"", ""Name"": ""Dependency1"", ""Caption"": ""Dependency1"", ""Resolved"": ""true"", ""TopLevel"": ""true"" }", icon: KnownMonikers.Uninstall, expandedIcon: KnownMonikers.Uninstall); var unresolved = IDependencyModelFactory.FromJson(@" { ""ProviderType"": ""Xxx"", ""Id"": ""dependency2"", ""Name"": ""Dependency2"", ""Caption"": ""Dependency2"", ""Resolved"": ""false"", ""TopLevel"": ""false"" }", icon: KnownMonikers.Uninstall, expandedIcon: KnownMonikers.Uninstall); var changes = new DependenciesChanges(); changes.IncludeAddedChange(resolvedTop); changes.IncludeAddedChange(unresolved); const string updatedProjectPath = "updatedProjectPath"; var snapshot = TargetedDependenciesSnapshot.FromChanges( updatedProjectPath, previousSnapshot, changes, catalogs, Array.Empty <IDependenciesSnapshotFilter>(), new Dictionary <string, IProjectDependenciesSubTreeProvider>(), null); Assert.NotSame(previousSnapshot, snapshot); Assert.Same(updatedProjectPath, snapshot.ProjectPath); Assert.Same(catalogs, snapshot.Catalogs); Assert.True(snapshot.HasUnresolvedDependency); AssertEx.CollectionLength(snapshot.DependenciesWorld, 2); AssertEx.CollectionLength(snapshot.TopLevelDependencies, 1); Assert.True(resolvedTop.Matches(snapshot.TopLevelDependencies.Single(), targetFramework)); Assert.True(resolvedTop.Matches(snapshot.DependenciesWorld["tfm1\\Xxx\\dependency1"], targetFramework)); Assert.True(unresolved.Matches(snapshot.DependenciesWorld["tfm1\\Xxx\\dependency2"], targetFramework)); }
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 = new TestDependency { ProviderType = "Xxx", Id = Dependency.GetID(targetFramework, "Xxx", "topdependency1"), Name = "TopDependency1", Caption = "TopDependency1", SchemaItemType = "Xxx", Resolved = true, TopLevel = true }; var dependencyChild1 = new TestDependency { ProviderType = "Xxx", Id = Dependency.GetID(targetFramework, "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 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 FromChanges_NoChanges() { var targetFramework = new TargetFramework("tfm1"); var catalogs = IProjectCatalogSnapshotFactory.Create(); var previousSnapshot = TargetedDependenciesSnapshot.CreateEmpty(targetFramework, catalogs); var snapshot = TargetedDependenciesSnapshot.FromChanges( previousSnapshot, changes: null, catalogs, ImmutableArray <IDependenciesSnapshotFilter> .Empty); Assert.Same(previousSnapshot, snapshot); }
public void FromChanges_WithDependenciesChanges() { const string previousProjectPath = @"c:\somefolder\someproject\a.csproj"; const string newProjectPath = @"c:\somefolder\someproject\b.csproj"; var catalogs = IProjectCatalogSnapshotFactory.Create(); var targetFramework = new TargetFramework("tfm1"); var dependenciesByTargetFramework = CreateDependenciesByTargetFramework(previousProjectPath, catalogs, targetFramework); var previousSnapshot = new DependenciesSnapshot( previousProjectPath, activeTargetFramework: targetFramework, dependenciesByTargetFramework); var targetChanges = new DependenciesChangesBuilder(); var model = new TestDependencyModel { ProviderType = "Xxx", Id = "dependency1", TopLevel = true }; targetChanges.Added(model); var snapshot = DependenciesSnapshot.FromChanges( newProjectPath, previousSnapshot, targetFramework, targetChanges.TryBuildChanges() !, catalogs, targetFrameworks: ImmutableArray.Create <ITargetFramework>(targetFramework), activeTargetFramework: targetFramework, ImmutableArray <IDependenciesSnapshotFilter> .Empty, new Dictionary <string, IProjectDependenciesSubTreeProvider>(), null); Assert.NotSame(previousSnapshot, snapshot); Assert.Same(newProjectPath, snapshot.ProjectPath); Assert.Same(targetFramework, snapshot.ActiveTargetFramework); Assert.NotSame(previousSnapshot.DependenciesByTargetFramework, snapshot.DependenciesByTargetFramework); var(actualTfm, targetedSnapshot) = Assert.Single(snapshot.DependenciesByTargetFramework); Assert.Same(targetFramework, actualTfm); var dependency = Assert.Single(targetedSnapshot.TopLevelDependencies); Assert.Equal(@"tfm1\Xxx\dependency1", dependency.Id); Assert.Equal("Xxx", dependency.ProviderType); Assert.Same(dependency, targetedSnapshot.DependenciesWorld.Single().Value); }
public void Constructor() { var catalogs = IProjectCatalogSnapshotFactory.Create(); var targetFramework = new TargetFramework("tfm1"); var dependenciesByTargetFramework = CreateDependenciesByTargetFramework(catalogs, targetFramework); var snapshot = new DependenciesSnapshot( activeTargetFramework: targetFramework, dependenciesByTargetFramework); Assert.Same(targetFramework, snapshot.ActiveTargetFramework); Assert.Same(dependenciesByTargetFramework, snapshot.DependenciesByTargetFramework); Assert.False(snapshot.HasVisibleUnresolvedDependency); }