Skip to content

Commit fac01d6

Browse files
committed
Test cases for 6.3.4: Duplicate PackageReference or PackageVersion during parsing
1 parent 54d05f8 commit fac01d6

File tree

5 files changed

+96
-23
lines changed

5 files changed

+96
-23
lines changed
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
using Blackduck.Detect.Nuget.Inspector.DependencyResolution.Nuget;
2+
using Blackduck.Detect.Nuget.Inspector.Inspection;
3+
4+
namespace Blackduck.Detect.Nuget.Inspector.DependencyResolution.Project.Test;
5+
6+
[TestClass]
7+
public class ProjectXmlResolverTest
8+
{
9+
[TestMethod]
10+
public void ProcessProjectWithDuplicatePackageReferences()
11+
{
12+
string projectDirectory = Directory.GetParent(Environment.CurrentDirectory).Parent.Parent.FullName;
13+
string testProjectPath = Path.Combine(projectDirectory, "Files", "DuplicatePackageReference.csproj");
14+
15+
var nugetSearchService = new NugetSearchService("", "");
16+
var projectXmlResolver = new ProjectXmlResolver(
17+
testProjectPath,
18+
nugetSearchService,
19+
"NONE"
20+
);
21+
22+
DependencyResult dependencyResult = projectXmlResolver.Process();
23+
24+
// Assert that both duplicate package references are captured
25+
var packageA = dependencyResult.Packages
26+
.Where(p => p.PackageId.Name == "PackageA")
27+
.ToList();
28+
29+
Assert.AreEqual(2, packageA.Count);
30+
Assert.IsTrue(packageA.Any(p => p.PackageId.Version == "1.0.0"));
31+
Assert.IsTrue(packageA.Any(p => p.PackageId.Version == "2.0.0"));
32+
}
33+
34+
}
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
<Project Sdk="Microsoft.NET.Sdk">
2+
<PropertyGroup>
3+
<TargetFramework>net6.0</TargetFramework>
4+
</PropertyGroup>
5+
6+
<ItemGroup>
7+
<PackageReference Include="PackageA" Version="1.0.0" />
8+
<PackageReference Include="PackageA" Version="2.0.0" />
9+
</ItemGroup>
10+
</Project>
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
<Project>
2+
<PropertyGroup>
3+
<!-- Enable central package management -->
4+
<ManagePackageVersionsCentrally>true</ManagePackageVersionsCentrally>
5+
</PropertyGroup>
6+
<ItemGroup>
7+
<PackageVersion Include="PackageA" Version="1.0.0" />
8+
<PackageVersion Include="PackageA" Version="2.0.0" />
9+
</ItemGroup>
10+
</Project>

detect-nuget-inspector/detect-nuget-inspector-tests/Inspection/Util/SolutionDirectoryPackagesPropertyLoaderTests.cs

Lines changed: 41 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -14,12 +14,12 @@ private string GetFilePath(string fileName)
1414

1515
return filePath;
1616
}
17-
17+
1818
[TestMethod]
1919
public void ParseStandardDirectoryPackagesPropsFile()
2020
{
21-
string propertyPath = GetFilePath("Standard_Directory.Packages.props");
22-
21+
string propertyPath = GetFilePath("Standard_Directory.Packages.props");
22+
2323
var solutionDirectoryPackagesPropertyLoader =
2424
new SolutionDirectoryPackagesPropertyLoader(GetFilePath(propertyPath), "NONE");
2525

@@ -28,59 +28,78 @@ public void ParseStandardDirectoryPackagesPropsFile()
2828

2929
Assert.IsNotNull(packageVersions);
3030
Assert.AreEqual(22, packageVersions.Count);
31-
Assert.AreEqual(true,versionOverrideEnabled);
32-
Assert.AreEqual("2.88.6",packageVersions.First(pkg => pkg.Name.Equals("SkiaSharp.Views.Uno.WinUI")).Version);
33-
Assert.AreEqual("4.6.0",packageVersions.First(pkg => pkg.Name.Equals("Microsoft.CodeAnalysis.CSharp")).Version);
34-
Assert.AreEqual("1.1.2-beta1.23357.1",packageVersions.First(pkg => pkg.Name.Equals("Microsoft.CodeAnalysis.CSharp.CodeFix.Testing.XUnit")).Version);
31+
Assert.AreEqual(true, versionOverrideEnabled);
32+
Assert.AreEqual("2.88.6", packageVersions.First(pkg => pkg.Name.Equals("SkiaSharp.Views.Uno.WinUI")).Version);
33+
Assert.AreEqual("4.6.0", packageVersions.First(pkg => pkg.Name.Equals("Microsoft.CodeAnalysis.CSharp")).Version);
34+
Assert.AreEqual("1.1.2-beta1.23357.1", packageVersions.First(pkg => pkg.Name.Equals("Microsoft.CodeAnalysis.CSharp.CodeFix.Testing.XUnit")).Version);
3535
}
3636

3737
[TestMethod]
3838
public void ParseDirectoryPackagesPropsFileWithCpmDisabled()
3939
{
4040
string propertyPath = GetFilePath("CPM_Disabled_Directory.Packages.props");
41-
41+
4242
var solutionDirectoryPackagesPropertyLoader =
43-
new SolutionDirectoryPackagesPropertyLoader(GetFilePath(propertyPath),"NONE");
44-
43+
new SolutionDirectoryPackagesPropertyLoader(GetFilePath(propertyPath), "NONE");
44+
4545
StringWriter stringWriter = new StringWriter();
4646
Console.SetOut(stringWriter);
47-
47+
4848
HashSet<PackageId> packageVersions = solutionDirectoryPackagesPropertyLoader.Process();
49-
49+
5050
Assert.AreEqual(0, packageVersions.Count);
51-
Assert.AreEqual( "The user has disabled Central Package Management. Will skip parsing over this file\n",stringWriter.ToString());
51+
Assert.AreEqual("The user has disabled Central Package Management. Will skip parsing over this file\n", stringWriter.ToString());
5252
}
5353

5454
[TestMethod]
5555
public void ParseDirectoryPackagesPropsFileWithVersionOverrideDisabled()
5656
{
5757
string propertyPath = GetFilePath("VersionOverride_Disabled_Directory.Packages.props");
58-
58+
5959
var solutionDirectoryPackagesPropertyLoader =
6060
new SolutionDirectoryPackagesPropertyLoader(GetFilePath(propertyPath), "NONE");
61-
61+
6262
bool versionOverrideEnabled = solutionDirectoryPackagesPropertyLoader.GetVersionOverrideEnabled();
63-
63+
6464
Assert.AreEqual(false, versionOverrideEnabled);
6565
}
66-
66+
6767
[TestMethod]
6868
public void ParseDirectoryPackagesPropsFileWithGlobalPackageReferences()
6969
{
7070
string propertyPath = GetFilePath("GlobalPackageReference_Directory.Packages.props");
71-
71+
7272
var solutionDirectoryPackagesPropertyLoader =
7373
new SolutionDirectoryPackagesPropertyLoader(GetFilePath(propertyPath), "NONE");
7474

7575
HashSet<PackageId> packageVersions = solutionDirectoryPackagesPropertyLoader.Process();
7676

7777
HashSet<PackageId> globalPackageReferences =
7878
solutionDirectoryPackagesPropertyLoader.GetGlobalPackageReferences();
79+
80+
Assert.AreEqual(19, packageVersions.Count);
81+
Assert.AreEqual(7, globalPackageReferences.Count);
82+
Assert.AreEqual("1.2.0.507", globalPackageReferences.First(pkg => pkg.Name.Equals("StyleCop.Analyzers.Unstable")).Version);
83+
Assert.AreEqual("1.1.1", globalPackageReferences.First(pkg => pkg.Name.Equals("Microsoft.SourceLink.GitHub")).Version);
84+
}
85+
86+
[TestMethod]
87+
public void ParseDirectoryPackagesPropsFileWithDuplicatePackageVersions()
88+
{
89+
string propertyPath = GetFilePath("Duplicate_PackageVersion_Directory.Packages.props");
7990

80-
Assert.AreEqual(19,packageVersions.Count);
81-
Assert.AreEqual(7,globalPackageReferences.Count);
82-
Assert.AreEqual("1.2.0.507",globalPackageReferences.First(pkg => pkg.Name.Equals("StyleCop.Analyzers.Unstable")).Version);
83-
Assert.AreEqual("1.1.1",globalPackageReferences.First(pkg => pkg.Name.Equals("Microsoft.SourceLink.GitHub")).Version);
91+
var solutionDirectoryPackagesPropertyLoader =
92+
new SolutionDirectoryPackagesPropertyLoader(GetFilePath(propertyPath), "NONE");
93+
94+
HashSet<PackageId> packages = solutionDirectoryPackagesPropertyLoader.Process();
95+
96+
// Confirm there are two package entries for PackageA with different versions
97+
Assert.IsNotNull(packages);
98+
Assert.AreEqual(2, packages.Count);
99+
var packageAVersions = packages.Where(pkg => pkg.Name.Equals("PackageA")).ToList();
100+
Assert.AreEqual(2, packageAVersions.Count);
101+
Assert.IsTrue(packageAVersions.Any(pkg => pkg.Version == "1.0.0"));
102+
Assert.IsTrue(packageAVersions.Any(pkg => pkg.Version == "2.0.0"));
84103
}
85104
}
86105
}

detect-nuget-inspector/detect-nuget-inspector/DependencyResolution/Project/ProjectXmlResolver.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99

1010
namespace Blackduck.Detect.Nuget.Inspector.DependencyResolution.Project
1111
{
12-
class ProjectXmlResolver : DependencyResolver
12+
public class ProjectXmlResolver : DependencyResolver
1313
{
1414

1515
private string ProjectPath;

0 commit comments

Comments
 (0)