public void ExtractPathNoWarnProperties_CorrectlyReadsPackageSpecificNoWarns()
        {
            // Arrange
            var packageId         = "test_package";
            var framework         = NuGetFramework.Parse("net461");
            var expectedNoWarnSet = new HashSet <NuGetLogCode> {
                NuGetLogCode.NU1603, NuGetLogCode.NU1605
            };

            var pathWarningProperties = new TransitiveNoWarnUtils.NodeWarningProperties(
                null,
                new Dictionary <string, HashSet <NuGetLogCode> >
            {
                { packageId, expectedNoWarnSet }
            });

            // Act
            var extractedNoWarnSet = TransitiveNoWarnUtils.ExtractPathNoWarnProperties(
                pathWarningProperties,
                packageId);

            // Assert
            extractedNoWarnSet.Should().NotBeNullOrEmpty();
            extractedNoWarnSet.Should().BeEquivalentTo(expectedNoWarnSet);
        }
        public void ExtractPathNoWarnProperties_CorrectlyReadsPackageSpecificAndProjectWideNoWarns()
        {
            // Arrange
            var packageId         = "test_package";
            var expectedNoWarnSet = new HashSet <NuGetLogCode> {
                NuGetLogCode.NU1601, NuGetLogCode.NU1603, NuGetLogCode.NU1605, NuGetLogCode.NU1107
            };
            var projectWideNoWarnSet = new HashSet <NuGetLogCode> {
                NuGetLogCode.NU1601, NuGetLogCode.NU1605
            };
            var packageSpecificNoWarnSet = new HashSet <NuGetLogCode> {
                NuGetLogCode.NU1603, NuGetLogCode.NU1107
            };
            var otherPackageSpecificNoWarnSet = new HashSet <NuGetLogCode> {
                NuGetLogCode.NU1603, NuGetLogCode.NU1701
            };

            var pathWarningProperties = new TransitiveNoWarnUtils.NodeWarningProperties(
                projectWideNoWarnSet,
                new Dictionary <string, HashSet <NuGetLogCode> >
            {
                { packageId, packageSpecificNoWarnSet },
                { "other_package", otherPackageSpecificNoWarnSet }
            });

            // Act
            var extractedNoWarnSet = TransitiveNoWarnUtils.ExtractPathNoWarnProperties(
                pathWarningProperties,
                packageId);

            // Assert
            extractedNoWarnSet.Should().NotBeNullOrEmpty();
            extractedNoWarnSet.Should().BeEquivalentTo(expectedNoWarnSet);
        }
        public void ExtractPathNoWarnProperties_ReturnsEmptySetIfPathPropertiesAreNull()
        {
            // Arrange & Act
            var extractedNoWarnSet = TransitiveNoWarnUtils.ExtractPathNoWarnProperties(null, "test_id");

            // Assert
            extractedNoWarnSet.Should().NotBeNull();
            extractedNoWarnSet.Should().BeEmpty();
        }
        public void ExtractPackageSpecificNoWarnForFrameworks_InputWithNullProperties()
        {
            // Arrange
            var input = new PackageSpecificWarningProperties();

            // Act
            var result = TransitiveNoWarnUtils.ExtractPackageSpecificNoWarnPerFramework(input);

            // Assert
            result.Should().BeNull();
        }
        public void MergeProjectWideWarningProperties_ReturnsNullIfBothAreNull()
        {
            // Arrange
            HashSet <NuGetLogCode> first  = null;
            HashSet <NuGetLogCode> second = null;

            // Act
            var merged = TransitiveNoWarnUtils.MergeCodes(first, second);

            // Assert
            merged.Should().BeNull();
        }
        public void ExtractPackageSpecificNoWarnForFramework_NullInput()
        {
            // Arrange
            PackageSpecificWarningProperties input = null;
            NuGetFramework framework = null;

            // Act
            var result = TransitiveNoWarnUtils.ExtractPackageSpecificNoWarnForFramework(input, framework);

            // Assert
            result.Should().BeNull();
        }
        public void MergePackageSpecificWarningProperties_ReturnsNullIfBothAreNull()
        {
            // Arrange
            Dictionary <string, HashSet <NuGetLogCode> > first  = null;
            Dictionary <string, HashSet <NuGetLogCode> > second = null;

            // Act
            var merged = TransitiveNoWarnUtils.MergePackageSpecificNoWarn(first, second);

            // Assert
            merged.Should().BeNull();
        }
        public void MergeProjectWideWarningProperties_MergesEmptyCollections()
        {
            // Arrange
            var first  = new HashSet <NuGetLogCode>();
            var second = new HashSet <NuGetLogCode>();

            // Act
            var merged = TransitiveNoWarnUtils.MergeCodes(first, second);

            // Assert
            merged.Should().NotBeNull();
            merged.Should().BeEmpty();
        }
        public void MergeProjectWideWarningProperties_ReturnsSecondIfNotNull()
        {
            // Arrange
            HashSet <NuGetLogCode> first = null;
            var second = new HashSet <NuGetLogCode>();

            // Act
            var merged = TransitiveNoWarnUtils.MergeCodes(first, second);

            // Assert
            merged.Should().NotBeNull();
            merged.Should().BeSameAs(second);
        }
        public void MergePackageSpecificWarningProperties_MergesEmptyCollections()
        {
            // Arrange
            var first  = new Dictionary <string, HashSet <NuGetLogCode> >();
            var second = new Dictionary <string, HashSet <NuGetLogCode> >();

            // Act
            var merged = TransitiveNoWarnUtils.MergePackageSpecificNoWarn(first, second);

            // Assert
            merged.Should().NotBeNull();
            merged.Should().BeEmpty();
        }
        public void MergePackageSpecificWarningProperties_ReturnsSecondIfNotNull()
        {
            // Arrange
            Dictionary <string, HashSet <NuGetLogCode> > first = null;
            var second = new Dictionary <string, HashSet <NuGetLogCode> >();

            // Act
            var merged = TransitiveNoWarnUtils.MergePackageSpecificNoWarn(first, second);

            // Assert
            merged.Should().NotBeNull();
            merged.Should().BeSameAs(second);
        }
        public void TryMergeNullObjects_ReturnsNullIfBothAreNull()
        {
            // Arrange
            object mergedObject;
            object first  = null;
            object second = null;

            // Act
            var success = TransitiveNoWarnUtils.TryMergeNullObjects(first, second, out mergedObject);

            // Assert
            success.Should().BeTrue();
            mergedObject.Should().BeNull();
        }
        public void TryMergeNullObjects_ReturnsFailureIfNoneNull()
        {
            // Arrange
            object mergedObject;
            var    first  = new object();
            var    second = new object();

            // Act
            var success = TransitiveNoWarnUtils.TryMergeNullObjects(first, second, out mergedObject);

            // Assert
            success.Should().BeFalse();
            mergedObject.Should().BeNull();
        }
        public void TryMergeNullObjects_ReturnsSecondIfNotNull()
        {
            // Arrange
            object mergedObject;
            object first  = null;
            var    second = new object();

            // Act
            var success = TransitiveNoWarnUtils.TryMergeNullObjects(first, second, out mergedObject);

            // Assert
            success.Should().BeTrue();
            mergedObject.Should().Be(second);
        }
        public void MergeProjectWideWarningProperties_MergesNonEmptyCollections(
            string firstNoWarn,
            string secondNoWarn,
            string expectedNoWarn)
        {
            // Arrange
            var first = new HashSet <NuGetLogCode>(MSBuildStringUtility.GetNuGetLogCodes(firstNoWarn));

            var second = new HashSet <NuGetLogCode>(MSBuildStringUtility.GetNuGetLogCodes(secondNoWarn));

            var expected = new HashSet <NuGetLogCode>(MSBuildStringUtility.GetNuGetLogCodes(expectedNoWarn));

            // Act
            var merged = TransitiveNoWarnUtils.MergeCodes(first, second);

            // Assert
            merged.Should().NotBeNull();
            merged.Should().BeEquivalentTo(expected);
        }
        public void ExtractPathNoWarnProperties_CorrectlyReadsProjectWideNoWarns()
        {
            // Arrange
            var projectWideNoWarn = new HashSet <NuGetLogCode> {
                NuGetLogCode.NU1601, NuGetLogCode.NU1603
            };
            var pathWarningProperties = new TransitiveNoWarnUtils.NodeWarningProperties(
                projectWideNoWarn,
                null);

            // Act
            var extractedNoWarnSet = TransitiveNoWarnUtils.ExtractPathNoWarnProperties(
                pathWarningProperties,
                "test_id");

            // Assert
            extractedNoWarnSet.Should().NotBeNullOrEmpty();
            extractedNoWarnSet.Should().BeEquivalentTo(projectWideNoWarn);
        }
        public void ExtractPackageSpecificNoWarnForFramework_InputWithProperties()
        {
            // Arrange

            var packageId1 = "test_id1";
            var packageId2 = "test_id2";
            var net461     = NuGetFramework.Parse("net461");
            var netcoreapp = NuGetFramework.Parse("netcoreapp2.0");
            var input      = new PackageSpecificWarningProperties();

            input.AddRangeOfCodes(
                new List <NuGetLogCode> {
                NuGetLogCode.NU1601, NuGetLogCode.NU1605
            },
                packageId1,
                net461);
            input.AddRangeOfFrameworks(
                NuGetLogCode.NU1701,
                packageId2,
                new List <NuGetFramework> {
                net461, netcoreapp
            });
            input.AddRangeOfFrameworks(
                NuGetLogCode.NU1701,
                packageId1,
                new List <NuGetFramework> {
                net461, netcoreapp
            });
            input.AddRangeOfFrameworks(
                NuGetLogCode.NU1701,
                packageId2,
                new List <NuGetFramework> {
                net461, netcoreapp
            });
            input.AddRangeOfFrameworks(
                NuGetLogCode.NU1604,
                packageId1,
                new List <NuGetFramework> {
                net461
            });

            var expected = new Dictionary <NuGetFramework, Dictionary <string, HashSet <NuGetLogCode> > >
            {
                [net461] = new Dictionary <string, HashSet <NuGetLogCode> >(StringComparer.OrdinalIgnoreCase)
                {
                    [packageId1.ToUpper()] = new HashSet <NuGetLogCode>
                    {
                        NuGetLogCode.NU1601,
                        NuGetLogCode.NU1604,
                        NuGetLogCode.NU1605,
                        NuGetLogCode.NU1701,
                    },
                    [packageId2.ToUpper()] = new HashSet <NuGetLogCode>
                    {
                        NuGetLogCode.NU1701
                    }
                },
                [netcoreapp] = new Dictionary <string, HashSet <NuGetLogCode> >(StringComparer.OrdinalIgnoreCase)
                {
                    [packageId1.ToLower()] = new HashSet <NuGetLogCode>
                    {
                        NuGetLogCode.NU1701,
                    },
                    [packageId2.ToLower()] = new HashSet <NuGetLogCode>
                    {
                        NuGetLogCode.NU1701
                    }
                }
            };

            // Act
            var resultNet461     = TransitiveNoWarnUtils.ExtractPackageSpecificNoWarnForFramework(input, net461);
            var resultNetcoreapp = TransitiveNoWarnUtils.ExtractPackageSpecificNoWarnForFramework(input, netcoreapp);

            // Assert
            resultNet461.Should().NotBeNull();
            resultNet461.Should().BeEquivalentTo(expected[net461]);
            resultNetcoreapp.Should().NotBeNull();
            resultNetcoreapp.Should().BeEquivalentTo(expected[netcoreapp]);
        }
 public void NodeWarningPropertiesIsSubSetOf_PackageSpecificNoWarnsHaveSameKeySameValue_Succeeds()
 {
     // Arrange
     var first = new TransitiveNoWarnUtils.NodeWarningProperties(
         null,
         new Dictionary <string, HashSet <NuGetLogCode> > {
        public void MergePackageSpecificWarningProperties_MergesNonEmptyCollections()
        {
            // Arrange
            var packageId1     = "test_id1";
            var packageId2     = "test_id2";
            var net461         = NuGetFramework.Parse("net461");
            var netcoreapp     = NuGetFramework.Parse("netcoreapp2.0");
            var expectedResult = new PackageSpecificWarningProperties();

            expectedResult.AddRangeOfCodes(
                new List <NuGetLogCode> {
                NuGetLogCode.NU1601, NuGetLogCode.NU1605
            },
                packageId1,
                net461);
            expectedResult.AddRangeOfFrameworks(
                NuGetLogCode.NU1701,
                packageId2,
                new List <NuGetFramework> {
                net461, netcoreapp
            });
            expectedResult.AddRangeOfFrameworks(
                NuGetLogCode.NU1701,
                packageId1,
                new List <NuGetFramework> {
                net461, netcoreapp
            });
            expectedResult.AddRangeOfFrameworks(
                NuGetLogCode.NU1701,
                packageId2,
                new List <NuGetFramework> {
                net461, netcoreapp
            });
            expectedResult.AddRangeOfFrameworks(
                NuGetLogCode.NU1604,
                packageId1,
                new List <NuGetFramework> {
                net461, netcoreapp
            });


            var first = new PackageSpecificWarningProperties();

            first.AddRangeOfCodes(
                new List <NuGetLogCode> {
                NuGetLogCode.NU1601, NuGetLogCode.NU1605
            },
                packageId1,
                net461);
            first.AddRangeOfFrameworks(
                NuGetLogCode.NU1701,
                packageId2,
                new List <NuGetFramework> {
                net461, netcoreapp
            });
            first.AddRangeOfFrameworks(
                NuGetLogCode.NU1701,
                packageId1,
                new List <NuGetFramework> {
                netcoreapp
            });

            var second = new PackageSpecificWarningProperties();

            second.AddRangeOfFrameworks(
                NuGetLogCode.NU1701,
                packageId2,
                new List <NuGetFramework> {
                net461, netcoreapp
            });
            second.AddRangeOfFrameworks(
                NuGetLogCode.NU1604,
                packageId1,
                new List <NuGetFramework> {
                net461, netcoreapp
            });
            second.AddRangeOfFrameworks(
                NuGetLogCode.NU1701,
                packageId1,
                new List <NuGetFramework> {
                net461
            });


            var expectedNoWarnForNet461     = TransitiveNoWarnUtils.ExtractPackageSpecificNoWarnForFramework(expectedResult, net461);
            var expectedNoWarnForNetcoreapp = TransitiveNoWarnUtils.ExtractPackageSpecificNoWarnForFramework(expectedResult, netcoreapp);

            var firstNoWarnForNet461     = TransitiveNoWarnUtils.ExtractPackageSpecificNoWarnForFramework(first, net461);
            var firstNoWarnForNetcoreapp = TransitiveNoWarnUtils.ExtractPackageSpecificNoWarnForFramework(first, netcoreapp);

            var secondNoWarnForNet461     = TransitiveNoWarnUtils.ExtractPackageSpecificNoWarnForFramework(second, net461);
            var secondNoWarnForNetcoreapp = TransitiveNoWarnUtils.ExtractPackageSpecificNoWarnForFramework(second, netcoreapp);

            // Act
            var mergedNoWarnForNet461     = TransitiveNoWarnUtils.MergePackageSpecificNoWarn(firstNoWarnForNet461, secondNoWarnForNet461);
            var mergedNoWarnForNetcoreapp = TransitiveNoWarnUtils.MergePackageSpecificNoWarn(firstNoWarnForNetcoreapp, secondNoWarnForNetcoreapp);

            // Assert
            mergedNoWarnForNet461.Should().NotBeNull();
            mergedNoWarnForNet461.Should().BeEquivalentTo(expectedNoWarnForNet461);

            mergedNoWarnForNetcoreapp.Should().NotBeNull();
            mergedNoWarnForNetcoreapp.Should().BeEquivalentTo(expectedNoWarnForNetcoreapp);
        }