private ValidationResult ValidateAssets(IPackageReference reference, AssetsProperty property, IProject project)
        {
            var inProject = Array.Empty <string>();

            switch (property)
            {
            case AssetsProperty.Include:
                inProject = reference.IncludeAssets;
                break;

            case AssetsProperty.Exclude:
                inProject = reference.ExcludeAssets;
                break;

            case AssetsProperty.Private:
                inProject = reference.PrivateAssets;
                break;
            }

            var inConfig = Array.Empty <string>();

            switch (property)
            {
            case AssetsProperty.Include:
                inConfig = _data.IncludeAssets;
                break;

            case AssetsProperty.Exclude:
                inConfig = _data.ExcludeAssets;
                break;

            case AssetsProperty.Private:
                inConfig = _data.PrivateAssets;
                break;
            }

            if (inProject.Any(x => x == "none") && inConfig.Length == 0 ||
                inProject.Length == 0 && inConfig.Any(x => x == "none"))
            {
                return(ValidationResult.Success());
            }

            var missingInProject = inConfig.Except(inProject).ToList();

            if (missingInProject.Any())
            {
                return(ValidationResult.Error(project,
                                              $"Missing {property}Asset entry in project: {string.Join(",", missingInProject)}"));
            }

            var extraInProject = inProject.Except(inConfig).ToList();

            if (extraInProject.Any())
            {
                return(ValidationResult.Error(project,
                                              $"Extra {property}Asset entry in project: {string.Join(",", extraInProject)}"));
            }

            return(ValidationResult.Success());
        }
Beispiel #2
0
        public async Task ValidateShouldSucceedWhenAssetValueNoneIsSpecifiedInConfig(AssetsProperty property)
        {
            // Arrange
            var projectBuilder = new ProjectBuilder()
                                 .WithItemGroup()
                                 .WithPackageReference("Package", "1.0");

            var data = new PackageReferenceRuleData
            {
                Name = "Package"
            };

            if (property == AssetsProperty.Include)
            {
                data.IncludeAssets = new[] { "none" }
            }
            ;
            else if (property == AssetsProperty.Exclude)
            {
                data.ExcludeAssets = new[] { "none" }
            }
            ;
            else if (property == AssetsProperty.Private)
            {
                data.PrivateAssets = new[] { "none" }
            }
            ;

            var project = projectBuilder.Build();
            var sut     = new PackageReferenceRule(data);

            // Act
            var actual = await sut.Validate(project);

            // Assert
            Assert.False(actual.IsError);
        }
Beispiel #3
0
        public async Task ValidateShouldSucceedWhenSingleAssetMatches(AssetsProperty property)
        {
            // Arrange
            var projectBuilder = new ProjectBuilder()
                                 .WithItemGroup();

            var data = new PackageReferenceRuleData
            {
                Name = "Package"
            };

            if (property == AssetsProperty.Include)
            {
                projectBuilder     = projectBuilder.WithPackageReference("Package", "1.0", false, "build");
                data.IncludeAssets = new[] { "build" };
            }
            else if (property == AssetsProperty.Exclude)
            {
                projectBuilder     = projectBuilder.WithPackageReference("Package", "1.0", false, null, "build");
                data.ExcludeAssets = new[] { "build" };
            }
            else if (property == AssetsProperty.Private)
            {
                projectBuilder     = projectBuilder.WithPackageReference("Package", "1.0", false, null, null, "build");
                data.PrivateAssets = new[] { "build" };
            }

            var project = projectBuilder.Build();
            var sut     = new PackageReferenceRule(data);

            // Act
            var actual = await sut.Validate(project);

            // Assert
            Assert.False(actual.IsError);
        }
Beispiel #4
0
        public async Task ValidateShouldFailWhenAssetsInProjectDoesNotContainAllValues(AssetsProperty property)
        {
            // Arrange
            var projectBuilder = new ProjectBuilder()
                                 .WithItemGroup();

            var data = new PackageReferenceRuleData
            {
                Name = "Package"
            };

            if (property == AssetsProperty.Include)
            {
                projectBuilder     = projectBuilder.WithPackageReference("Package", "1.0", false, "build");
                data.IncludeAssets = new[] { "compile", "build" };
            }
            else if (property == AssetsProperty.Exclude)
            {
                projectBuilder     = projectBuilder.WithPackageReference("Package", "1.0", false, null, "build");
                data.ExcludeAssets = new[] { "compile", "build" };
            }
            else if (property == AssetsProperty.Private)
            {
                projectBuilder     = projectBuilder.WithPackageReference("Package", "1.0", false, null, null, "build");
                data.PrivateAssets = new[] { "compile", "build" };
            }

            var project = projectBuilder.Build();
            var sut     = new PackageReferenceRule(data);

            // Act
            var actual = await sut.Validate(project);

            // Assert
            Assert.True(actual.IsError);
        }