Пример #1
0
        public void BeforeAddOrUpdate_WhenUnresolvedAndExistsResolvedInSnapshot_ShouldReturnNull()
        {
            var unresolvedDependency = new TestDependency {
                Id = "dependency", Resolved = false
            };
            var resolvedDependency = new TestDependency {
                Id = "dependency", Resolved = true
            };

            var dependencyById = new Dictionary <DependencyId, IDependency>
            {
                { resolvedDependency.GetDependencyId(), resolvedDependency }
            };

            var context = new AddDependencyContext(dependencyById);

            var filter = new UnresolvedDependenciesSnapshotFilter();

            filter.BeforeAddOrUpdate(
                unresolvedDependency,
                null !,
                null,
                context);

            // Dependency rejected
            Assert.Null(context.GetResult(filter));

            // Nothing else changed
            Assert.False(context.Changed);
        }
Пример #2
0
        public void BeforeAddOrUpdate_WhenNeedToApplyImplicit_ShouldSetProperties()
        {
            const string providerType    = "providerType";
            const string projectItemSpec = "projectItemSpec";
            var          implicitIcon    = KnownMonikers.Abbreviation;

            var dependency = new TestDependency
            {
                Id               = "dependency1",
                ProviderType     = providerType,
                Implicit         = false,
                Resolved         = true,
                Flags            = DependencyTreeFlags.ResolvedDependencyFlags,
                OriginalItemSpec = projectItemSpec,
                IconSet          = new DependencyIconSet(KnownMonikers.Reference, KnownMonikers.Reference, KnownMonikers.Reference, KnownMonikers.Reference)
            };

            var dependencyById = new Dictionary <DependencyId, IDependency>
            {
                { dependency.GetDependencyId(), dependency }
            };

            var context = new AddDependencyContext(dependencyById);

            var filter = new ImplicitDependenciesSnapshotFilter();

            var subTreeProvider = IProjectDependenciesSubTreeProviderFactory.ImplementInternal(
                providerType: providerType,
                implicitIcon: implicitIcon);

            filter.BeforeAddOrUpdate(
                dependency,
                new Dictionary <string, IProjectDependenciesSubTreeProvider> {
                { providerType, subTreeProvider }
            },
                ImmutableHashSet <string> .Empty,
                context);

            var acceptedDependency = context.GetResult(filter);

            // Returns changed dependency
            Assert.NotNull(acceptedDependency);
            Assert.NotSame(dependency, acceptedDependency);
            DependencyAssert.Equal(
                new TestDependency
            {
                ClonePropertiesFrom = dependency,
                Implicit            = true,
                IconSet             = new DependencyIconSet(
                    implicitIcon,
                    implicitIcon,
                    KnownMonikers.Reference,
                    KnownMonikers.Reference),
                Flags = DependencyTreeFlags.ResolvedDependencyFlags.Except(DependencyTreeFlags.SupportsRemove)
            }, acceptedDependency !);

            // No other changes made
            Assert.False(context.Changed);
        }
        public void BeforeAddOrUpdate_WhenThereIsMatchingDependencyWithAliasApplied_ShouldUpdateCaptionForCurrentDependency()
        {
            // Same provider type
            // Duplicate caption, though with parenthesized text after one instance
            //   -> Changes caption of non-parenthesized

            const string providerType = "provider";
            const string caption      = "caption";

            var dependency = new TestDependency
            {
                Id = "id1",
                OriginalItemSpec = "originalItemSpec1",
                ProviderType     = providerType,
                Caption          = caption
            };

            var otherDependency = new TestDependency
            {
                ClonePropertiesFrom = dependency,

                Id = "id2",
                OriginalItemSpec = "originalItemSpec2",
                Caption          = $"{caption} (originalItemSpec2)" // caption already includes alias
            };

            var dependencyById = new IDependency[] { dependency, otherDependency }.ToDictionary(IDependencyExtensions.GetDependencyId);

            var context = new AddDependencyContext(dependencyById);

            var filter = new DeduplicateCaptionsSnapshotFilter();

            filter.BeforeAddOrUpdate(
                dependency,
                null !,
                null,
                context);

            // The context was unchanged, beyond the filtered dependency
            Assert.False(context.Changed);

            // The filtered dependency had its caption changed to its alias
            var dependencyAfter = context.GetResult(filter);

            DependencyAssert.Equal(new TestDependency {
                ClonePropertiesFrom = dependency, Caption = "caption (originalItemSpec1)"
            }, dependencyAfter !);

            // The other dependency had its caption changed to its alias
            Assert.True(context.TryGetDependency(otherDependency.GetDependencyId(), out IDependency otherDependencyAfter));
            DependencyAssert.Equal(new TestDependency {
                ClonePropertiesFrom = otherDependency, Caption = "caption (originalItemSpec2)"
            }, otherDependencyAfter);
        }
        public void BeforeAddOrUpdate_WhenThereIsMatchingDependencies_ShouldUpdateCaptionForAll()
        {
            // Same provider type
            // Same captions
            //   -> Changes caption for both to match alias

            const string providerType = "provider";
            const string caption      = "caption";

            var dependency = new TestDependency
            {
                Id = "id1",
                OriginalItemSpec = "originalItemSpec1",
                ProviderType     = providerType,
                Caption          = caption
            };

            var otherDependency = new TestDependency
            {
                ClonePropertiesFrom = dependency, // clone, with changes

                Id = "id2",
                OriginalItemSpec = "originalItemSpec2"
            };

            var dependencyById = new IDependency[] { dependency, otherDependency }.ToDictionary(IDependencyExtensions.GetDependencyId);

            var context = new AddDependencyContext(dependencyById);

            var filter = new DeduplicateCaptionsSnapshotFilter();

            filter.BeforeAddOrUpdate(
                dependency,
                null !,
                null,
                context);

            // The context changed, beyond just the filtered dependency
            Assert.True(context.Changed);

            // The filtered dependency had its caption changed to its alias
            var dependencyAfter = context.GetResult(filter);

            DependencyAssert.Equal(new TestDependency {
                ClonePropertiesFrom = dependency, Caption = "caption (originalItemSpec1)"
            }, dependencyAfter !);

            // The other dependency had its caption changed to its alias
            Assert.True(context.TryGetDependency(otherDependency.GetDependencyId(), out IDependency otherDependencyAfter));
            DependencyAssert.Equal(new TestDependency {
                ClonePropertiesFrom = otherDependency, Caption = "caption (originalItemSpec2)"
            }, otherDependencyAfter);
        }
        public void BeforeRemove_WhenPackageRemoving_ShouldCleanupSdk()
        {
            const string packageName = "packageName";

            var sdkDependency = new TestDependency
            {
                Id           = packageName,
                ProviderType = SdkRuleHandler.ProviderTypeString,
                Resolved     = true,
                Flags        = DependencyTreeFlags.SdkDependency.Union(ProjectTreeFlags.ResolvedReference)
            };

            var packageDependency = new TestDependency
            {
                Id           = packageName,
                ProviderType = PackageRuleHandler.ProviderTypeString,
                Flags        = DependencyTreeFlags.PackageDependency,
                Resolved     = true
            };

            var builder = new IDependency[] { packageDependency, sdkDependency }.ToDictionary(IDependencyExtensions.GetDependencyId);

            var context = new RemoveDependencyContext(builder);

            var filter = new SdkAndPackagesDependenciesSnapshotFilter();

            filter.BeforeRemove(
                dependency: packageDependency,
                context);

            // Accepts removal
            Assert.True(context.GetResult(filter));

            // Makes other changes too
            Assert.True(context.Changed);

            Assert.True(builder.TryGetValue(packageDependency.GetDependencyId(), out var afterPackageDependency));
            Assert.Same(packageDependency, afterPackageDependency);

            Assert.True(builder.TryGetValue(sdkDependency.GetDependencyId(), out var afterSdkDependency));
            DependencyAssert.Equal(
                afterSdkDependency.ToUnresolved(SdkReference.SchemaName),
                afterSdkDependency);
        }
        public void BeforeAddOrUpdate_WhenPackage_ShouldFindMatchingSdkAndSetProperties()
        {
            const string packageName = "packageName";

            var sdkDependency = new TestDependency
            {
                Id           = packageName,
                ProviderType = SdkRuleHandler.ProviderTypeString,
                Resolved     = true,
                Flags        = DependencyTreeFlags.PackageDependency.Union(ProjectTreeFlags.BrokenReference) // to see if unresolved is fixed
            };

            var packageDependency = new TestDependency
            {
                Id           = packageName,
                ProviderType = PackageRuleHandler.ProviderTypeString,
                Flags        = DependencyTreeFlags.PackageDependency,
                Resolved     = true
            };

            var builder = new IDependency[] { packageDependency, sdkDependency }.ToDictionary(IDependencyExtensions.GetDependencyId);

            var context = new AddDependencyContext(builder);

            var filter = new SdkAndPackagesDependenciesSnapshotFilter();

            filter.BeforeAddOrUpdate(
                packageDependency,
                null !,
                null,
                context);

            // Accepts unchanged dependency
            Assert.Same(packageDependency, context.GetResult(filter));

            // Other changes made
            Assert.True(context.Changed);

            Assert.True(context.TryGetDependency(sdkDependency.GetDependencyId(), out IDependency sdkDependencyAfter));
            DependencyAssert.Equal(
                sdkDependency.ToResolved(schemaName: ResolvedSdkReference.SchemaName, diagnosticLevel: DiagnosticLevel.None),
                sdkDependencyAfter);
        }