public void Implicit() { var properties = ImmutableStringDictionary <string> .EmptyOrdinal.Add("myProp", "myVal"); var model = new SharedProjectDependencyModel( "c:\\myPath.dll", "myOriginalItemSpec", isResolved: true, isImplicit: true, properties: properties); Assert.Equal(ProjectRuleHandler.ProviderTypeString, model.ProviderType); Assert.Equal("c:\\myPath.dll", model.Path); Assert.Equal("myOriginalItemSpec", model.OriginalItemSpec); Assert.Equal("myPath", model.Caption); Assert.Equal(ResolvedProjectReference.SchemaName, model.SchemaName); Assert.True(model.Resolved); Assert.True(model.Implicit); Assert.Equal(properties, model.Properties); Assert.Equal(Dependency.ProjectNodePriority, model.Priority); Assert.Equal(ProjectReference.PrimaryDataSourceItemType, model.SchemaItemType); Assert.Equal(ManagedImageMonikers.SharedProjectPrivate, model.Icon); Assert.Equal(ManagedImageMonikers.SharedProjectPrivate, model.ExpandedIcon); Assert.Equal(ManagedImageMonikers.SharedProjectWarning, model.UnresolvedIcon); Assert.Equal(ManagedImageMonikers.SharedProjectWarning, model.UnresolvedExpandedIcon); Assert.Equal( DependencyTreeFlags.ProjectDependency + DependencyTreeFlags.SharedProjectFlags + DependencyTreeFlags.GenericResolvedDependencyFlags - DependencyTreeFlags.SupportsRuleProperties - DependencyTreeFlags.SupportsRemove, model.Flags); }
public void Implicit() { var properties = ImmutableDictionary <string, string> .Empty.Add("myProp", "myVal"); var flag = ProjectTreeFlags.Create("MyCustomFlag"); var model = new SharedProjectDependencyModel( "myProvider", "c:\\myPath.dll", "myOriginalItemSpec", flags: flag, resolved: true, isImplicit: true, properties: properties); Assert.Equal("myProvider", model.ProviderType); Assert.Equal("c:\\myPath.dll", model.Path); Assert.Equal("myOriginalItemSpec", model.OriginalItemSpec); Assert.Equal("myPath", model.Caption); Assert.Equal(ResolvedProjectReference.SchemaName, model.SchemaName); Assert.Equal(true, model.Resolved); Assert.Equal(true, model.Implicit); Assert.Equal(properties, model.Properties); Assert.Equal(Dependency.ProjectNodePriority, model.Priority); Assert.Equal(ProjectReference.PrimaryDataSourceItemType, model.SchemaItemType); Assert.Equal(ManagedImageMonikers.SharedProjectPrivate, model.Icon); Assert.Equal(ManagedImageMonikers.SharedProjectPrivate, model.ExpandedIcon); Assert.Equal(ManagedImageMonikers.SharedProjectWarning, model.UnresolvedIcon); Assert.Equal(ManagedImageMonikers.SharedProjectWarning, model.UnresolvedExpandedIcon); Assert.True(model.Flags.Contains(DependencyTreeFlags.SharedProjectFlags)); Assert.False(model.Flags.Contains(DependencyTreeFlags.SupportsRuleProperties)); Assert.True(model.Flags.Contains(flag)); }
private void ProcessSharedProjectsUpdates( IProjectSharedFoldersSnapshot sharedFolders, ITargetedProjectContext targetContext, DependenciesRuleChangeContext dependencyChangeContext) { Requires.NotNull(sharedFolders, nameof(sharedFolders)); Requires.NotNull(targetContext, nameof(targetContext)); Requires.NotNull(dependencyChangeContext, nameof(dependencyChangeContext)); IDependenciesSnapshot snapshot = _dependenciesSnapshotProvider.CurrentSnapshot; if (!snapshot.Targets.TryGetValue(targetContext.TargetFramework, out ITargetedDependenciesSnapshot targetedSnapshot)) { return; } IEnumerable <string> sharedFolderProjectPaths = sharedFolders.Value.Select(sf => sf.ProjectPath); var currentSharedImportNodes = targetedSnapshot.TopLevelDependencies .Where(x => x.Flags.Contains(DependencyTreeFlags.SharedProjectFlags)) .ToList(); IEnumerable <string> currentSharedImportNodePaths = currentSharedImportNodes.Select(x => x.Path); // process added nodes IEnumerable <string> addedSharedImportPaths = sharedFolderProjectPaths.Except(currentSharedImportNodePaths); foreach (string addedSharedImportPath in addedSharedImportPaths) { IDependencyModel added = new SharedProjectDependencyModel( addedSharedImportPath, addedSharedImportPath, isResolved: true, isImplicit: false, properties: ImmutableStringDictionary <string> .EmptyOrdinal); dependencyChangeContext.IncludeAddedChange(targetContext.TargetFramework, added); } // process removed nodes IEnumerable <string> removedSharedImportPaths = currentSharedImportNodePaths.Except(sharedFolderProjectPaths); foreach (string removedSharedImportPath in removedSharedImportPaths) { bool exists = currentSharedImportNodes.Any(node => PathHelper.IsSamePath(node.Path, removedSharedImportPath)); if (exists) { dependencyChangeContext.IncludeRemovedChange( targetContext.TargetFramework, ProjectRuleHandler.ProviderTypeString, dependencyId: removedSharedImportPath); } } }
private void ProcessSharedProjectsUpdates( IProjectSharedFoldersSnapshot sharedFolders, TargetFramework targetFramework, DependenciesChangesBuilder changesBuilder) { Requires.NotNull(sharedFolders, nameof(sharedFolders)); Requires.NotNull(targetFramework, nameof(targetFramework)); Requires.NotNull(changesBuilder, nameof(changesBuilder)); DependenciesSnapshot snapshot = _dependenciesSnapshotProvider.CurrentSnapshot; if (!snapshot.DependenciesByTargetFramework.TryGetValue(targetFramework, out TargetedDependenciesSnapshot? targetedSnapshot)) { return; } IEnumerable <string> sharedFolderProjectPaths = sharedFolders.Value.Select(sf => sf.ProjectPath); var currentSharedImportNodePaths = targetedSnapshot.Dependencies .Where(pair => pair.Flags.Contains(DependencyTreeFlags.SharedProjectDependency)) .Select(pair => pair.FilePath !) .ToList(); var diff = new SetDiff <string>(currentSharedImportNodePaths, sharedFolderProjectPaths); // process added nodes foreach (string addedSharedImportPath in diff.Added) { IDependencyModel added = new SharedProjectDependencyModel( addedSharedImportPath, addedSharedImportPath, isResolved: true, isImplicit: false, properties: ImmutableStringDictionary <string> .EmptyOrdinal); changesBuilder.Added(targetFramework, added); } // process removed nodes foreach (string removedSharedImportPath in diff.Removed) { bool exists = currentSharedImportNodePaths.Any(nodePath => PathHelper.IsSamePath(nodePath, removedSharedImportPath)); if (exists) { changesBuilder.Removed( targetFramework, ProjectRuleHandler.ProviderTypeString, dependencyId: removedSharedImportPath); } } }