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()); }
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); }
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); }
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); }