diff --git a/src/NuGetUtility/NuGetUtility.csproj b/src/NuGetUtility/NuGetUtility.csproj
index 0f50f7f8..8917e923 100644
--- a/src/NuGetUtility/NuGetUtility.csproj
+++ b/src/NuGetUtility/NuGetUtility.csproj
@@ -35,13 +35,13 @@
-
+
-
+
all
runtime; build; native; contentfiles; analyzers; buildtransitive
diff --git a/src/NuGetUtility/ReferencedPackagesReader/ReferencedPackageReader.cs b/src/NuGetUtility/ReferencedPackagesReader/ReferencedPackageReader.cs
index 1da23f12..a1973bfe 100644
--- a/src/NuGetUtility/ReferencedPackagesReader/ReferencedPackageReader.cs
+++ b/src/NuGetUtility/ReferencedPackagesReader/ReferencedPackageReader.cs
@@ -69,87 +69,29 @@ private bool TryGetInstalledPackagesFromAssetsFile(bool includeTransitive,
[NotNullWhen(true)] out IEnumerable? installedPackages)
{
installedPackages = null;
- if (!TryLoadAssetsFile(project, out ILockFile? assetsFile, out string? assetsPath))
+ if (!TryLoadAssetsFile(project, out ILockFile? assetsFile))
{
return false;
}
- var referencedLibraries = new HashSet();
- List selectedTargets;
string? normalizedRequestedTargetFramework = NormalizeTargetFrameworkOrNull(targetFramework);
- Dictionary> publishFalsePackagesByFramework = new Dictionary>(StringComparer.OrdinalIgnoreCase);
- Dictionary directDependenciesByFramework = new Dictionary(StringComparer.OrdinalIgnoreCase);
- Dictionary>> packageDependenciesByFramework = new Dictionary>>(StringComparer.OrdinalIgnoreCase);
- Dictionary> recursiveExclusionsByInput = new Dictionary>(StringComparer.Ordinal);
+ List selectedTargets = GetSelectedTargets(assetsFile, normalizedRequestedTargetFramework, targetFramework);
- if (normalizedRequestedTargetFramework is not null)
- {
- selectedTargets = assetsFile.Targets!
- .Where(t => _nuGetFrameworkUtility.IsEquivalent(normalizedRequestedTargetFramework, t.TargetFramework))
- .ToList();
- if (!selectedTargets.Any())
- {
- throw new ReferencedPackageReaderException($"Target framework {targetFramework} not found.");
- }
- }
- else
- {
- selectedTargets = assetsFile.Targets!.ToList();
- }
+ HashSet referencedLibraries = new HashSet();
+ PublishExclusionContext publishExclusionContext = new PublishExclusionContext(normalizedRequestedTargetFramework);
foreach (ILockFileTarget target in selectedTargets)
{
- HashSet targetReferencedLibraries =
- new HashSet(GetReferencedLibrariesForTarget(includeTransitive, assetsFile, target));
+ HashSet targetReferencedLibraries = [.. GetReferencedLibrariesForTarget(includeTransitive, assetsFile, target)];
if (excludePublishFalse)
{
- string targetFrameworkForPublishMetadata = normalizedRequestedTargetFramework ?? _nuGetFrameworkUtility.Normalize(target.TargetFramework);
- string targetFrameworkCacheKey = targetFrameworkForPublishMetadata ?? string.Empty;
-
- // Remove packages with Publish=false metadata from the evaluated PackageReferences for this target only.
- if (!publishFalsePackagesByFramework.TryGetValue(targetFrameworkCacheKey, out HashSet? cachedPublishFalsePackages))
- {
- cachedPublishFalsePackages = GetPackagesExcludedFromPublish(project, targetFrameworkForPublishMetadata);
- publishFalsePackagesByFramework[targetFrameworkCacheKey] = cachedPublishFalsePackages;
- }
-
- HashSet excludedPackages = new HashSet(cachedPublishFalsePackages, StringComparer.OrdinalIgnoreCase);
- if (includeTransitive && excludedPackages.Any())
- {
- if (!directDependenciesByFramework.TryGetValue(targetFrameworkCacheKey, out string[]? directDependenciesForFramework))
- {
- directDependenciesForFramework = GetDirectDependenciesForTargets(assetsFile, new[] { target }).ToArray();
- directDependenciesByFramework[targetFrameworkCacheKey] = directDependenciesForFramework;
- }
-
- if (!packageDependenciesByFramework.TryGetValue(targetFrameworkCacheKey, out Dictionary>? packageDependencies))
- {
- packageDependencies = _assetsPackageDependencyReader.GetPackageDependenciesForTargetFramework(
- assetsPath!,
- targetFrameworkCacheKey);
- packageDependenciesByFramework[targetFrameworkCacheKey] = packageDependencies;
- }
-
- if (packageDependencies.Count > 0)
- {
- string recursiveExclusionCacheKey = BuildExclusionCacheKey(
- targetFrameworkCacheKey,
- directDependenciesForFramework,
- excludedPackages);
-
- if (!recursiveExclusionsByInput.TryGetValue(recursiveExclusionCacheKey, out HashSet? recursivelyExcludedPackages))
- {
- recursivelyExcludedPackages = GetPackagesExcludedFromPublishDependencyPaths(
- packageDependencies,
- directDependenciesForFramework,
- excludedPackages);
- recursiveExclusionsByInput[recursiveExclusionCacheKey] = recursivelyExcludedPackages;
- }
-
- excludedPackages.UnionWith(recursivelyExcludedPackages);
- }
- }
+ HashSet excludedPackages = GetExcludedPackagesForTarget(
+ project,
+ assetsFile,
+ target,
+ includeTransitive,
+ publishExclusionContext);
targetReferencedLibraries.RemoveWhere(library => excludedPackages.Contains(library.Name));
}
@@ -161,6 +103,85 @@ private bool TryGetInstalledPackagesFromAssetsFile(bool includeTransitive,
return true;
}
+ private List GetSelectedTargets(ILockFile assetsFile,
+ string? normalizedRequestedTargetFramework,
+ string? targetFramework)
+ {
+ if (normalizedRequestedTargetFramework is null)
+ {
+ return assetsFile.Targets.ToList();
+ }
+
+ List selectedTargets = assetsFile.Targets
+ .Where(t => _nuGetFrameworkUtility.IsEquivalent(normalizedRequestedTargetFramework, t.TargetFramework))
+ .ToList();
+ if (!selectedTargets.Any())
+ {
+ throw new ReferencedPackageReaderException($"Target framework {targetFramework} not found.");
+ }
+
+ return selectedTargets;
+ }
+
+ private HashSet GetExcludedPackagesForTarget(IProject project,
+ ILockFile assetsFile,
+ ILockFileTarget target,
+ bool includeTransitive,
+ PublishExclusionContext context)
+ {
+ string targetFrameworkForPublishMetadata = context.NormalizedRequestedTargetFramework ?? _nuGetFrameworkUtility.Normalize(target.TargetFramework);
+ string targetFrameworkCacheKey = targetFrameworkForPublishMetadata ?? string.Empty;
+
+ // Remove packages with Publish=false metadata from the evaluated PackageReferences for this target only.
+ if (!context.PublishFalsePackagesByFramework.TryGetValue(targetFrameworkCacheKey, out HashSet? cachedPublishFalsePackages))
+ {
+ cachedPublishFalsePackages = GetPackagesExcludedFromPublish(project, targetFrameworkForPublishMetadata);
+ context.PublishFalsePackagesByFramework[targetFrameworkCacheKey] = cachedPublishFalsePackages;
+ }
+
+ HashSet excludedPackages = new HashSet(cachedPublishFalsePackages, StringComparer.OrdinalIgnoreCase);
+ if (!includeTransitive || !excludedPackages.Any())
+ {
+ return excludedPackages;
+ }
+
+ if (!context.DirectDependenciesByFramework.TryGetValue(targetFrameworkCacheKey, out HashSet? directDependenciesForFramework))
+ {
+ directDependenciesForFramework = GetDirectDependenciesForTargets(assetsFile, [target]);
+ context.DirectDependenciesByFramework[targetFrameworkCacheKey] = directDependenciesForFramework;
+ }
+
+ if (!context.PackageDependenciesByFramework.TryGetValue(targetFrameworkCacheKey, out Dictionary>? packageDependencies))
+ {
+ packageDependencies = _assetsPackageDependencyReader.GetPackageDependenciesForTargetFramework(
+ assetsFile,
+ targetFrameworkCacheKey);
+ context.PackageDependenciesByFramework[targetFrameworkCacheKey] = packageDependencies;
+ }
+
+ if (packageDependencies.Count == 0)
+ {
+ return excludedPackages;
+ }
+
+ string recursiveExclusionCacheKey = BuildExclusionCacheKey(
+ targetFrameworkCacheKey,
+ directDependenciesForFramework,
+ excludedPackages);
+
+ if (!context.RecursiveExclusionsByInput.TryGetValue(recursiveExclusionCacheKey, out HashSet? recursivelyExcludedPackages))
+ {
+ recursivelyExcludedPackages = GetPackagesExcludedFromPublishDependencyPaths(
+ packageDependencies,
+ directDependenciesForFramework,
+ excludedPackages);
+ context.RecursiveExclusionsByInput[recursiveExclusionCacheKey] = recursivelyExcludedPackages;
+ }
+
+ excludedPackages.UnionWith(recursivelyExcludedPackages);
+ return excludedPackages;
+ }
+
private static IEnumerable GetReferencedLibrariesForTarget(bool includeTransitive,
ILockFile assetsFile,
ILockFileTarget target)
@@ -191,7 +212,7 @@ private static ITargetFrameworkInformation GetTargetFrameworkInformation(ILockFi
}
}
- private static IEnumerable GetDirectDependenciesForTargets(ILockFile assetsFile,
+ private static HashSet GetDirectDependenciesForTargets(ILockFile assetsFile,
IEnumerable selectedTargets)
{
HashSet directDependencies = new HashSet(StringComparer.OrdinalIgnoreCase);
@@ -288,13 +309,11 @@ private static HashSet GetReachablePackages(Dictionary GetPackagesExcludedFromPublish(IProject project,
return excludedPackages;
}
+
+ private sealed record PublishExclusionContext(string? NormalizedRequestedTargetFramework)
+ {
+ public Dictionary> PublishFalsePackagesByFramework { get; } = new Dictionary>(StringComparer.OrdinalIgnoreCase);
+
+ public Dictionary> DirectDependenciesByFramework { get; } = new Dictionary>(StringComparer.OrdinalIgnoreCase);
+
+ public Dictionary>> PackageDependenciesByFramework { get; } = new Dictionary>>(StringComparer.OrdinalIgnoreCase);
+
+ public Dictionary> RecursiveExclusionsByInput { get; } = new Dictionary>(StringComparer.Ordinal);
+ }
}
}
diff --git a/src/NuGetUtility/Wrapper/NuGetWrapper/Packaging/Core/IPackageDependency.cs b/src/NuGetUtility/Wrapper/NuGetWrapper/Packaging/Core/IPackageDependency.cs
new file mode 100644
index 00000000..9c02aaa1
--- /dev/null
+++ b/src/NuGetUtility/Wrapper/NuGetWrapper/Packaging/Core/IPackageDependency.cs
@@ -0,0 +1,10 @@
+// Licensed to the projects contributors.
+// The license conditions are provided in the LICENSE file located in the project root
+
+namespace NuGetUtility.Wrapper.NuGetWrapper.Packaging.Core
+{
+ public interface IPackageDependency
+ {
+ string Id { get; }
+ }
+}
diff --git a/src/NuGetUtility/Wrapper/NuGetWrapper/Packaging/Core/WrappedPackageDependency.cs b/src/NuGetUtility/Wrapper/NuGetWrapper/Packaging/Core/WrappedPackageDependency.cs
new file mode 100644
index 00000000..a67c4b73
--- /dev/null
+++ b/src/NuGetUtility/Wrapper/NuGetWrapper/Packaging/Core/WrappedPackageDependency.cs
@@ -0,0 +1,17 @@
+// Licensed to the projects contributors.
+// The license conditions are provided in the LICENSE file located in the project root
+
+using NuGet.Packaging.Core;
+
+namespace NuGetUtility.Wrapper.NuGetWrapper.Packaging.Core
+{
+ internal class WrappedPackageDependency : IPackageDependency
+ {
+ public WrappedPackageDependency(PackageDependency dependency)
+ {
+ Id = dependency.Id;
+ }
+ public string Id { get; }
+ }
+}
+
diff --git a/src/NuGetUtility/Wrapper/NuGetWrapper/ProjectModel/AssetsPackageDependencyReader.cs b/src/NuGetUtility/Wrapper/NuGetWrapper/ProjectModel/AssetsPackageDependencyReader.cs
index 0a75b644..b3ce76a6 100644
--- a/src/NuGetUtility/Wrapper/NuGetWrapper/ProjectModel/AssetsPackageDependencyReader.cs
+++ b/src/NuGetUtility/Wrapper/NuGetWrapper/ProjectModel/AssetsPackageDependencyReader.cs
@@ -2,7 +2,6 @@
// The license conditions are provided in the LICENSE file located in the project root
using System.Diagnostics;
-using NuGet.ProjectModel;
using NuGetUtility.Wrapper.NuGetWrapper.Frameworks;
namespace NuGetUtility.Wrapper.NuGetWrapper.ProjectModel
@@ -42,33 +41,22 @@ public AssetsPackageDependencyReader(INuGetFrameworkUtility nuGetFrameworkUtilit
///
/// Thrown when or is .
///
- public Dictionary> GetPackageDependenciesForTargetFramework(string assetsPath, string normalizedTargetFramework)
+ public Dictionary> GetPackageDependenciesForTargetFramework(ILockFile lockFile, string normalizedTargetFramework)
{
- if (assetsPath is null)
- {
- throw new ArgumentNullException(nameof(assetsPath));
- }
-
if (normalizedTargetFramework is null)
{
throw new ArgumentNullException(nameof(normalizedTargetFramework));
}
- if (!File.Exists(assetsPath))
- {
- return new Dictionary>(StringComparer.OrdinalIgnoreCase);
- }
-
try
{
- LockFile lockFile = new LockFileFormat().Read(assetsPath);
return BuildDependencyMapFromAssetsFile(lockFile, normalizedTargetFramework);
}
catch (IOException exception)
{
Trace.TraceWarning(
"Failed to analyze transitive Publish=false exclusions due to I/O error. AssetsPath={0}, TargetFramework={1}, Exception={2}",
- assetsPath,
+ lockFile.Path,
normalizedTargetFramework,
exception);
return new Dictionary>(StringComparer.OrdinalIgnoreCase);
@@ -77,25 +65,25 @@ public Dictionary> GetPackageDependenciesForTargetFramew
{
Trace.TraceWarning(
"Failed to analyze transitive Publish=false exclusions due to invalid assets data. AssetsPath={0}, TargetFramework={1}, Exception={2}",
- assetsPath,
+ lockFile.Path,
normalizedTargetFramework,
exception);
return new Dictionary>(StringComparer.OrdinalIgnoreCase);
}
}
- private Dictionary> BuildDependencyMapFromAssetsFile(LockFile lockFile, string requestedTargetFramework)
+ private Dictionary> BuildDependencyMapFromAssetsFile(ILockFile lockFile, string requestedTargetFramework)
{
Dictionary> packageDependencies = new Dictionary>(StringComparer.OrdinalIgnoreCase);
- foreach (LockFileTarget target in lockFile.Targets)
+ foreach (ILockFileTarget target in lockFile.Targets)
{
- if (!_nuGetFrameworkUtility.IsEquivalent(requestedTargetFramework, new WrappedNuGetFramework(target.TargetFramework)))
+ if (!_nuGetFrameworkUtility.IsEquivalent(requestedTargetFramework, target.TargetFramework))
{
continue;
}
- foreach (LockFileTargetLibrary library in target.Libraries)
+ foreach (ILockFileTargetLibrary library in target.Libraries)
{
if (!string.Equals(library.Type, PackageTypeIdentifier, StringComparison.OrdinalIgnoreCase))
{
@@ -120,9 +108,8 @@ private Dictionary> BuildDependencyMapFromAssetsFile(Loc
packageDependencies[packageNameValue] = dependencies;
}
- foreach (NuGet.Packaging.Core.PackageDependency dependency in library.Dependencies)
+ foreach (string dependencyName in library.Dependencies.Select(d => d.Id))
{
- string dependencyName = dependency.Id;
dependencies.Add(dependencyName);
if (!packageDependencies.ContainsKey(dependencyName))
{
diff --git a/src/NuGetUtility/Wrapper/NuGetWrapper/ProjectModel/IAssetsPackageDependencyReader.cs b/src/NuGetUtility/Wrapper/NuGetWrapper/ProjectModel/IAssetsPackageDependencyReader.cs
index fe617695..3a3c6825 100644
--- a/src/NuGetUtility/Wrapper/NuGetWrapper/ProjectModel/IAssetsPackageDependencyReader.cs
+++ b/src/NuGetUtility/Wrapper/NuGetWrapper/ProjectModel/IAssetsPackageDependencyReader.cs
@@ -5,6 +5,6 @@ namespace NuGetUtility.Wrapper.NuGetWrapper.ProjectModel
{
public interface IAssetsPackageDependencyReader
{
- Dictionary> GetPackageDependenciesForTargetFramework(string assetsPath, string normalizedTargetFramework);
+ Dictionary> GetPackageDependenciesForTargetFramework(ILockFile lockFile, string normalizedTargetFramework);
}
}
diff --git a/src/NuGetUtility/Wrapper/NuGetWrapper/ProjectModel/ILockFile.cs b/src/NuGetUtility/Wrapper/NuGetWrapper/ProjectModel/ILockFile.cs
index 50f582ed..18a03797 100644
--- a/src/NuGetUtility/Wrapper/NuGetWrapper/ProjectModel/ILockFile.cs
+++ b/src/NuGetUtility/Wrapper/NuGetWrapper/ProjectModel/ILockFile.cs
@@ -7,6 +7,7 @@ public interface ILockFile
{
bool TryGetErrors(out string[] errors);
IPackageSpec PackageSpec { get; }
- IEnumerable? Targets { get; }
+ IEnumerable Targets { get; }
+ string Path { get; }
}
}
diff --git a/src/NuGetUtility/Wrapper/NuGetWrapper/ProjectModel/ILockFileTarget.cs b/src/NuGetUtility/Wrapper/NuGetWrapper/ProjectModel/ILockFileTarget.cs
index 4492d129..0c162678 100644
--- a/src/NuGetUtility/Wrapper/NuGetWrapper/ProjectModel/ILockFileTarget.cs
+++ b/src/NuGetUtility/Wrapper/NuGetWrapper/ProjectModel/ILockFileTarget.cs
@@ -8,6 +8,6 @@ namespace NuGetUtility.Wrapper.NuGetWrapper.ProjectModel
public interface ILockFileTarget
{
INuGetFramework TargetFramework { get; }
- IEnumerable Libraries { get; }
+ IEnumerable Libraries { get; }
}
}
diff --git a/src/NuGetUtility/Wrapper/NuGetWrapper/ProjectModel/ILockFileTargetLibrary.cs b/src/NuGetUtility/Wrapper/NuGetWrapper/ProjectModel/ILockFileTargetLibrary.cs
new file mode 100644
index 00000000..76c1f016
--- /dev/null
+++ b/src/NuGetUtility/Wrapper/NuGetWrapper/ProjectModel/ILockFileTargetLibrary.cs
@@ -0,0 +1,13 @@
+// Licensed to the projects contributors.
+// The license conditions are provided in the LICENSE file located in the project root
+
+using NuGetUtility.Wrapper.NuGetWrapper.Packaging.Core;
+using NuGetUtility.Wrapper.NuGetWrapper.Versioning;
+
+namespace NuGetUtility.Wrapper.NuGetWrapper.ProjectModel
+{
+ public interface ILockFileTargetLibrary : ILockFileLibrary
+ {
+ IReadOnlyList Dependencies { get; }
+ }
+}
diff --git a/src/NuGetUtility/Wrapper/NuGetWrapper/ProjectModel/WrappedLockFile.cs b/src/NuGetUtility/Wrapper/NuGetWrapper/ProjectModel/WrappedLockFile.cs
index b1d06559..6e70795c 100644
--- a/src/NuGetUtility/Wrapper/NuGetWrapper/ProjectModel/WrappedLockFile.cs
+++ b/src/NuGetUtility/Wrapper/NuGetWrapper/ProjectModel/WrappedLockFile.cs
@@ -17,7 +17,8 @@ public WrappedLockFile(LockFile file)
public IEnumerable Libraries => _file.Libraries.Select(l => new WrappedLockFileLibrary(l));
public IPackageSpec PackageSpec => new WrappedPackageSpec(_file.PackageSpec);
- public IEnumerable? Targets => _file.Targets?.Select(t => new WrappedLockFileTarget(t));
+ public IEnumerable Targets => _file.Targets.Select(t => new WrappedLockFileTarget(t));
+ public string Path => _file.Path;
public bool TryGetErrors(out string[] errors)
{
diff --git a/src/NuGetUtility/Wrapper/NuGetWrapper/ProjectModel/WrappedLockFileTarget.cs b/src/NuGetUtility/Wrapper/NuGetWrapper/ProjectModel/WrappedLockFileTarget.cs
index 02544c7f..b42def18 100644
--- a/src/NuGetUtility/Wrapper/NuGetWrapper/ProjectModel/WrappedLockFileTarget.cs
+++ b/src/NuGetUtility/Wrapper/NuGetWrapper/ProjectModel/WrappedLockFileTarget.cs
@@ -17,6 +17,6 @@ public WrappedLockFileTarget(LockFileTarget target)
public INuGetFramework TargetFramework => new WrappedNuGetFramework(_target.TargetFramework);
- public IEnumerable Libraries => _target.Libraries.Select(l => new WrappedLockFileTargetLibrary(l));
+ public IEnumerable Libraries => _target.Libraries.Select(l => new WrappedLockFileTargetLibrary(l));
}
}
diff --git a/src/NuGetUtility/Wrapper/NuGetWrapper/ProjectModel/WrappedLockFileTargetLibrary.cs b/src/NuGetUtility/Wrapper/NuGetWrapper/ProjectModel/WrappedLockFileTargetLibrary.cs
index 65e06ce2..a1043364 100644
--- a/src/NuGetUtility/Wrapper/NuGetWrapper/ProjectModel/WrappedLockFileTargetLibrary.cs
+++ b/src/NuGetUtility/Wrapper/NuGetWrapper/ProjectModel/WrappedLockFileTargetLibrary.cs
@@ -2,17 +2,19 @@
// The license conditions are provided in the LICENSE file located in the project root
using NuGet.ProjectModel;
+using NuGetUtility.Wrapper.NuGetWrapper.Packaging.Core;
using NuGetUtility.Wrapper.NuGetWrapper.Versioning;
namespace NuGetUtility.Wrapper.NuGetWrapper.ProjectModel
{
- internal class WrappedLockFileTargetLibrary : ILockFileLibrary
+ internal class WrappedLockFileTargetLibrary : ILockFileTargetLibrary
{
public WrappedLockFileTargetLibrary(LockFileTargetLibrary library)
{
Type = library.Type ?? throw new ArgumentNullException(nameof(library), $"The field {nameof(library.Type)} on {nameof(library)} must not be null");
Name = library.Name ?? throw new ArgumentNullException(nameof(library), $"The field {nameof(library.Name)} on {nameof(library)} must not be null");
Version = new WrappedNuGetVersion(library.Version ?? throw new ArgumentNullException(nameof(library), $"The field {nameof(library.Version)} on {nameof(library)} must not be null"));
+ Dependencies = library.Dependencies.Select(d => new WrappedPackageDependency(d)).ToArray();
}
public string Type { get; }
@@ -20,5 +22,6 @@ public WrappedLockFileTargetLibrary(LockFileTargetLibrary library)
public string Name { get; }
public INuGetVersion Version { get; }
+ public IReadOnlyList Dependencies { get; }
}
}
diff --git a/tests/FileLicenseMatcher.Test/FileLicenseMatcher.Test.csproj b/tests/FileLicenseMatcher.Test/FileLicenseMatcher.Test.csproj
index 9ac4703c..90589cc0 100644
--- a/tests/FileLicenseMatcher.Test/FileLicenseMatcher.Test.csproj
+++ b/tests/FileLicenseMatcher.Test/FileLicenseMatcher.Test.csproj
@@ -16,7 +16,7 @@
-
+
all
runtime; build; native; contentfiles; analyzers; buildtransitive
diff --git a/tests/NuGetUtility.Test/Extensions/StringExtensionsTest.cs b/tests/NuGetUtility.Test/Extensions/StringExtensionsTest.cs
index 24f35c5f..610dc038 100644
--- a/tests/NuGetUtility.Test/Extensions/StringExtensionsTest.cs
+++ b/tests/NuGetUtility.Test/Extensions/StringExtensionsTest.cs
@@ -41,13 +41,13 @@ internal class PathLikeTests
{
[TestCase("test", "test", true)]
[TestCase("test", "TEST", true)]
- [TestCase("C:\\Projects\\MyProject\\MyProject.csproj", "*.csproj", true)]
- [TestCase("C:\\Projects\\MyProject\\MyProject.csproj", "MyProject.csproj", true)]
- [TestCase("C:\\Projects\\MyProject\\MyProject.csproj", "MyProject.*", true)]
- [TestCase("C:\\Projects\\MyProject\\MyProject.csproj", "*MyProject.csproj", true)]
- [TestCase("C:\\Projects\\MyProject\\MyProject.csproj", "C:\\Projects\\*\\*.csproj", true)]
- [TestCase("C:\\Projects\\MyProject\\MyProject.csproj", "*.vbproj", false)]
- [TestCase("C:\\Projects\\MyProject\\MyProject.csproj", "OtherProject.csproj", false)]
+ [TestCase("C:\\Projects\\MyProject\\MyProject.csproj", "*.csproj", true, TestName = "PathLike_Windows_MyProject_ExtensionMatch")]
+ [TestCase("C:\\Projects\\MyProject\\MyProject.csproj", "MyProject.csproj", true, TestName = "PathLike_Windows_MyProject_ExactFileNameMatch")]
+ [TestCase("C:\\Projects\\MyProject\\MyProject.csproj", "MyProject.*", true, TestName = "PathLike_Windows_MyProject_WildcardFileNameMatch")]
+ [TestCase("C:\\Projects\\MyProject\\MyProject.csproj", "*MyProject.csproj", true, TestName = "PathLike_Windows_MyProject_SuffixFileNameMatch")]
+ [TestCase("C:\\Projects\\MyProject\\MyProject.csproj", "C:\\Projects\\*\\*.csproj", true, TestName = "PathLike_Windows_MyProject_FullPathPatternMatch")]
+ [TestCase("C:\\Projects\\MyProject\\MyProject.csproj", "*.vbproj", false, TestName = "PathLike_Windows_MyProject_NonMatchingExtension")]
+ [TestCase("C:\\Projects\\MyProject\\MyProject.csproj", "OtherProject.csproj", false, TestName = "PathLike_Windows_MyProject_NonMatchingFileName")]
[TestCase("/home/user/projects/MyProject/MyProject.csproj", "*.csproj", true)]
[TestCase("/home/user/projects/MyProject/MyProject.csproj", "MyProject.csproj", true)]
[TestCase("/home/user/projects/MyProject/MyProject.csproj", "MyProject.*", true)]
@@ -55,13 +55,13 @@ internal class PathLikeTests
[TestCase("/home/user/projects/MyProject/MyProject.csproj", "/home/user/*/MyProject/*.csproj", true)]
[TestCase("/home/user/projects/MyProject/MyProject.csproj", "*.vbproj", false)]
[TestCase("/home/user/projects/MyProject/MyProject.csproj", "OtherProject.csproj", false)]
- [TestCase("C:\\Projects\\Testing\\Test.pyproj", "*.pyproj", true)]
- [TestCase("C:\\Projects\\Testing\\Test.pyproj", "Test.pyproj", true)]
- [TestCase("C:\\Projects\\Testing\\Test.pyproj", "*Testing*", true)]
- [TestCase("C:\\Projects\\Mosaik.Testing.Something\\Project.csproj", "*Mosaik.Testing*", true)]
- [TestCase("C:\\Projects\\Mosaik.Testing.Something\\Project.csproj", "Project.csproj", true)]
+ [TestCase("C:\\Projects\\Testing\\Test.pyproj", "*.pyproj", true, TestName = "PathLike_Windows_Testing_PythonProjectExtensionMatch")]
+ [TestCase("C:\\Projects\\Testing\\Test.pyproj", "Test.pyproj", true, TestName = "PathLike_Windows_Testing_PythonProjectFileNameMatch")]
+ [TestCase("C:\\Projects\\Testing\\Test.pyproj", "*Testing*", true, TestName = "PathLike_Windows_Testing_FolderPatternMatch")]
+ [TestCase("C:\\Projects\\Mosaik.Testing.Something\\Project.csproj", "*Mosaik.Testing*", true, TestName = "PathLike_Windows_MosaikTesting_FolderPatternMatch")]
+ [TestCase("C:\\Projects\\Mosaik.Testing.Something\\Project.csproj", "Project.csproj", true, TestName = "PathLike_Windows_MosaikTesting_FileNameMatch")]
[TestCase("Project.Name.Test", "Project.Name*", true)]
- [TestCase("Some\\Path\\Project.Name.Test", "Project.Name*", true)]
+ [TestCase("Some\\Path\\Project.Name.Test", "Project.Name*", true, TestName = "PathLike_Windows_RelativePath_FileNamePatternMatch")]
public void PathLike_Should_MatchPattern_AgainstFullPathOrFileName(string path, string pattern, bool expected)
{
Assert.That(path.PathLike(pattern), Is.EqualTo(expected));
diff --git a/tests/NuGetUtility.Test/ReferencedPackagesReader/ReferencedPackageReaderTest.cs b/tests/NuGetUtility.Test/ReferencedPackagesReader/ReferencedPackageReaderTest.cs
index 71be9d76..fcce84ed 100644
--- a/tests/NuGetUtility.Test/ReferencedPackagesReader/ReferencedPackageReaderTest.cs
+++ b/tests/NuGetUtility.Test/ReferencedPackagesReader/ReferencedPackageReaderTest.cs
@@ -1,8 +1,6 @@
// Licensed to the projects contributors.
// The license conditions are provided in the LICENSE file located in the project root
-using System.Collections.Generic;
-using System.IO;
using AutoFixture;
using AutoFixture.AutoNSubstitute;
using NSubstitute;
@@ -32,7 +30,7 @@ public void SetUp()
_packageSpecMock = Substitute.For();
_packagesConfigReader = Substitute.For();
_lockFileTargets = _fixture.CreateMany(TargetFrameworkCount).ToArray();
- _lockFileLibraries = _fixture.CreateMany(50).ToArray();
+ _lockFileLibraries = _fixture.CreateMany(50).ToArray();
_packageSpecTargetFrameworks =
_fixture.CreateMany(TargetFrameworkCount).ToArray();
_targetFrameworks = _fixture.CreateMany(TargetFrameworkCount).ToArray();
@@ -74,7 +72,7 @@ public void SetUp()
targetFrameworksIterator.MoveNext();
lockFileTarget.TargetFramework.Returns(targetFrameworksIterator.Current);
- ILockFileLibrary[] referencedLibraries = _lockFileLibraries.Shuffle(rnd)
+ ILockFileTargetLibrary[] referencedLibraries = _lockFileLibraries.Shuffle(rnd)
.Take(5)
.ToArray();
_referencedPackagesForFramework[targetFrameworksIterator.Current] = referencedLibraries.Select(l => new PackageIdentity(l.Name, l.Version!)).ToArray();
@@ -122,7 +120,7 @@ public void SetUp()
private ILockFile _lockFileMock = null!;
private IPackageSpec _packageSpecMock = null!;
private IEnumerable _lockFileTargets = null!;
- private IEnumerable _lockFileLibraries = null!;
+ private IEnumerable _lockFileLibraries = null!;
private IEnumerable _packageSpecTargetFrameworks = null!;
private IEnumerable _targetFrameworks = null!;
private IFixture _fixture = null!;
@@ -209,15 +207,15 @@ public void
INuGetFramework frameworkNet80 = Substitute.For();
frameworkNet80.ToString().Returns("net8.0");
targetNet80.TargetFramework.Returns(frameworkNet80);
- targetNet80.Libraries.Returns(Array.Empty());
+ targetNet80.Libraries.Returns(Array.Empty());
ILockFileTarget targetNet90 = Substitute.For();
INuGetFramework frameworkNet90 = Substitute.For();
frameworkNet90.ToString().Returns("net9.0");
targetNet90.TargetFramework.Returns(frameworkNet90);
- targetNet90.Libraries.Returns(Array.Empty());
+ targetNet90.Libraries.Returns(Array.Empty());
- _lockFileMock.Targets.Returns(new[] { targetNet80, targetNet90 });
+ _lockFileMock.Targets.Returns([targetNet80, targetNet90]);
ReferencedPackageReaderException? exception = Assert.Throws(() =>
_uut.GetInstalledPackages(_projectPath, false, targetFramework));
@@ -263,26 +261,26 @@ public void GetInstalledPackages_Should_OnlyReturnPackages_For_TargetFramework()
{
const string requestedTargetFramework = "net8.0";
- ILockFileLibrary net80Library = CreateLibrary("PackageNet80");
- ILockFileLibrary net90Library = CreateLibrary("PackageNet90");
+ ILockFileTargetLibrary net80Library = CreateLibrary("PackageNet80");
+ ILockFileTargetLibrary net90Library = CreateLibrary("PackageNet90");
ILockFileTarget targetNet80 = Substitute.For();
INuGetFramework frameworkNet80 = Substitute.For();
frameworkNet80.ToString().Returns("net8.0");
targetNet80.TargetFramework.Returns(frameworkNet80);
- targetNet80.Libraries.Returns(new[] { net80Library });
+ targetNet80.Libraries.Returns([net80Library]);
ILockFileTarget targetNet90 = Substitute.For();
INuGetFramework frameworkNet90 = Substitute.For();
frameworkNet90.ToString().Returns("net9.0");
targetNet90.TargetFramework.Returns(frameworkNet90);
- targetNet90.Libraries.Returns(new[] { net90Library });
+ targetNet90.Libraries.Returns([net90Library]);
- _lockFileMock.Targets.Returns(new[] { targetNet80, targetNet90 });
+ _lockFileMock.Targets.Returns([targetNet80, targetNet90]);
IEnumerable result = _uut.GetInstalledPackages(_projectPath, true, requestedTargetFramework);
- Assert.That(result.Select(package => package.Id), Is.EquivalentTo(new[] { "PackageNet80" }));
+ Assert.That(result.Select(package => package.Id), Is.EquivalentTo(["PackageNet80"]));
Assert.That(result.Select(package => package.Id), Does.Not.Contain("PackageNet90"));
}
@@ -291,26 +289,26 @@ public void GetInstalledPackages_Should_OnlyReturnPackages_For_Equivalent_Target
{
const string requestedTargetFramework = "net8.0";
- ILockFileLibrary equivalentTargetLibrary = CreateLibrary("PackageEquivalent");
- ILockFileLibrary otherTargetLibrary = CreateLibrary("PackageOther");
+ ILockFileTargetLibrary equivalentTargetLibrary = CreateLibrary("PackageEquivalent");
+ ILockFileTargetLibrary otherTargetLibrary = CreateLibrary("PackageOther");
ILockFileTarget targetEquivalent = Substitute.For();
INuGetFramework frameworkEquivalent = Substitute.For();
frameworkEquivalent.ToString().Returns(".NETCoreApp,Version=v8.0");
targetEquivalent.TargetFramework.Returns(frameworkEquivalent);
- targetEquivalent.Libraries.Returns(new[] { equivalentTargetLibrary });
+ targetEquivalent.Libraries.Returns([equivalentTargetLibrary]);
ILockFileTarget targetOther = Substitute.For();
INuGetFramework frameworkOther = Substitute.For();
frameworkOther.ToString().Returns("net9.0");
targetOther.TargetFramework.Returns(frameworkOther);
- targetOther.Libraries.Returns(new[] { otherTargetLibrary });
+ targetOther.Libraries.Returns([otherTargetLibrary]);
- _lockFileMock.Targets.Returns(new[] { targetEquivalent, targetOther });
+ _lockFileMock.Targets.Returns([targetEquivalent, targetOther]);
IEnumerable result = _uut.GetInstalledPackages(_projectPath, true, requestedTargetFramework);
- Assert.That(result.Select(package => package.Id), Is.EquivalentTo(new[] { "PackageEquivalent" }));
+ Assert.That(result.Select(package => package.Id), Is.EquivalentTo(["PackageEquivalent"]));
Assert.That(result.Select(package => package.Id), Does.Not.Contain("PackageOther"));
}
@@ -320,26 +318,26 @@ public void GetInstalledPackages_Should_OnlyReturnPackages_For_Equivalent_Target
[TestCase(".NETCoreApp,Version=v8.0")]
public void GetInstalledPackages_Should_OnlyReturnPackages_For_TargetFramework_Variants(string requestedTargetFramework)
{
- ILockFileLibrary variantTargetLibrary = CreateLibrary("PackageVariant");
- ILockFileLibrary otherTargetLibrary = CreateLibrary("PackageOther");
+ ILockFileTargetLibrary variantTargetLibrary = CreateLibrary("PackageVariant");
+ ILockFileTargetLibrary otherTargetLibrary = CreateLibrary("PackageOther");
ILockFileTarget targetVariant = Substitute.For();
INuGetFramework frameworkVariant = Substitute.For();
frameworkVariant.ToString().Returns("net8.0");
targetVariant.TargetFramework.Returns(frameworkVariant);
- targetVariant.Libraries.Returns(new[] { variantTargetLibrary });
+ targetVariant.Libraries.Returns([variantTargetLibrary]);
ILockFileTarget targetOther = Substitute.For();
INuGetFramework frameworkOther = Substitute.For();
frameworkOther.ToString().Returns("net9.0");
targetOther.TargetFramework.Returns(frameworkOther);
- targetOther.Libraries.Returns(new[] { otherTargetLibrary });
+ targetOther.Libraries.Returns([otherTargetLibrary]);
- _lockFileMock.Targets.Returns(new[] { targetVariant, targetOther });
+ _lockFileMock.Targets.Returns([targetVariant, targetOther]);
IEnumerable result = _uut.GetInstalledPackages(_projectPath, true, requestedTargetFramework);
- Assert.That(result.Select(package => package.Id), Is.EquivalentTo(new[] { "PackageVariant" }));
+ Assert.That(result.Select(package => package.Id), Is.EquivalentTo(["PackageVariant"]));
Assert.That(result.Select(package => package.Id), Does.Not.Contain("PackageOther"));
}
@@ -404,44 +402,44 @@ public void GetInstalledPackages_Should_ExcludePackages_With_PublishFalse_Metada
string excludedPackage = _fixture.Create();
string includedPackage = _fixture.Create();
- ILockFileLibrary excludedLibrary = Substitute.For();
+ ILockFileTargetLibrary excludedLibrary = Substitute.For();
excludedLibrary.Name.Returns(excludedPackage);
excludedLibrary.Version.Returns(Substitute.For());
- ILockFileLibrary includedLibrary = Substitute.For();
+ ILockFileTargetLibrary includedLibrary = Substitute.For();
includedLibrary.Name.Returns(includedPackage);
includedLibrary.Version.Returns(Substitute.For());
ILockFileTarget target = Substitute.For();
- target.Libraries.Returns(new[] { excludedLibrary, includedLibrary });
+ target.Libraries.Returns([excludedLibrary, includedLibrary]);
INuGetFramework targetFramework = Substitute.For();
targetFramework.ToString().Returns("net8.0");
target.TargetFramework.Returns(targetFramework);
- _lockFileMock.Targets.Returns(new[] { target });
+ _lockFileMock.Targets.Returns([target]);
- _projectMock.GetPackageReferences().Returns(new[]
- {
+ _projectMock.GetPackageReferences().Returns(
+ [
new PackageReferenceMetadata(excludedPackage, new Dictionary(StringComparer.OrdinalIgnoreCase)
{
["Publish"] = "false"
}),
new PackageReferenceMetadata(includedPackage, new Dictionary())
- });
- _projectMock.GetPackageReferencesForTarget("net8.0").Returns(new[]
- {
+ ]);
+ _projectMock.GetPackageReferencesForTarget("net8.0").Returns(
+ [
new PackageReferenceMetadata(excludedPackage, new Dictionary(StringComparer.OrdinalIgnoreCase)
{
["Publish"] = "false"
}),
new PackageReferenceMetadata(includedPackage, new Dictionary())
- });
+ ]);
ITargetFrameworkInformation targetFrameworkInformation = Substitute.For();
targetFrameworkInformation.FrameworkName.Returns(targetFramework);
ILibraryDependency excludedDependency = CreateDependency(excludedPackage);
ILibraryDependency includedDependency = CreateDependency(includedPackage);
- targetFrameworkInformation.Dependencies.Returns(new[] { excludedDependency, includedDependency });
- _packageSpecMock.TargetFrameworks.Returns(new[] { targetFrameworkInformation });
+ targetFrameworkInformation.Dependencies.Returns([excludedDependency, includedDependency]);
+ _packageSpecMock.TargetFrameworks.Returns([targetFrameworkInformation]);
IEnumerable result = _uut.GetInstalledPackages(_projectPath, true, null, true);
@@ -462,43 +460,43 @@ public void GetInstalledPackages_Should_Apply_PublishFalse_PerTarget_When_Target
ILockFileTarget targetNet80 = Substitute.For();
targetNet80.TargetFramework.Returns(net80);
- ILockFileLibrary net80Library = CreateLibrary(packageName);
- targetNet80.Libraries.Returns(new[] { net80Library });
+ ILockFileTargetLibrary net80Library = CreateLibrary(packageName);
+ targetNet80.Libraries.Returns([net80Library]);
ILockFileTarget targetNet90 = Substitute.For();
targetNet90.TargetFramework.Returns(net90);
- ILockFileLibrary net90Library = CreateLibrary(packageName);
- targetNet90.Libraries.Returns(new[] { net90Library });
+ ILockFileTargetLibrary net90Library = CreateLibrary(packageName);
+ targetNet90.Libraries.Returns([net90Library]);
- _lockFileMock.Targets.Returns(new[] { targetNet80, targetNet90 });
+ _lockFileMock.Targets.Returns([targetNet80, targetNet90]);
ITargetFrameworkInformation net80Info = Substitute.For();
net80Info.FrameworkName.Returns(net80);
ILibraryDependency net80Dependency = CreateDependency(packageName);
- net80Info.Dependencies.Returns(new[] { net80Dependency });
+ net80Info.Dependencies.Returns([net80Dependency]);
ITargetFrameworkInformation net90Info = Substitute.For();
net90Info.FrameworkName.Returns(net90);
ILibraryDependency net90Dependency = CreateDependency(packageName);
- net90Info.Dependencies.Returns(new[] { net90Dependency });
+ net90Info.Dependencies.Returns([net90Dependency]);
- _packageSpecMock.TargetFrameworks.Returns(new[] { net80Info, net90Info });
+ _packageSpecMock.TargetFrameworks.Returns([net80Info, net90Info]);
- _projectMock.GetPackageReferences().Returns(new[]
- {
+ _projectMock.GetPackageReferences().Returns(
+ [
new PackageReferenceMetadata(packageName, new Dictionary(StringComparer.OrdinalIgnoreCase)
{
["Publish"] = "false"
})
- });
+ ]);
- _projectMock.GetPackageReferencesForTarget("net8.0").Returns(new[]
- {
+ _projectMock.GetPackageReferencesForTarget("net8.0").Returns(
+ [
new PackageReferenceMetadata(packageName, new Dictionary(StringComparer.OrdinalIgnoreCase)
{
["Publish"] = "false"
})
- });
+ ]);
_projectMock.GetPackageReferencesForTarget("net9.0").Returns(Array.Empty());
@@ -513,262 +511,103 @@ public void GetInstalledPackages_Should_Apply_PublishFalse_PerTarget_When_Target
[Test]
public void GetInstalledPackages_Should_Keep_SharedTransitiveDependency_If_ReachableFrom_PublishableRoot()
{
- string tempAssetsPath = Path.GetTempFileName();
- try
- {
- _assetsFilePath = tempAssetsPath;
- _lockFileFactory.GetFromFile(tempAssetsPath).Returns(_lockFileMock);
- File.WriteAllText(tempAssetsPath,
- """
- {
- "targets": {
- "net10.0": {
- "PackageA/1.0.0": {
- "type": "package",
- "dependencies": {
- "PackageC": "1.0.0"
- }
- },
- "PackageB/1.0.0": {
- "type": "package",
- "dependencies": {
- "PackageC": "1.0.0"
- }
- },
- "PackageC/1.0.0": {
- "type": "package"
- }
- }
- }
- }
- """);
-
- INuGetFramework targetFramework = Substitute.For();
- targetFramework.ToString().Returns("net10.0");
-
- ILockFileTarget target = Substitute.For();
- target.TargetFramework.Returns(targetFramework);
- ILockFileLibrary[] targetLibraries =
- {
- CreateLibrary("PackageA"),
- CreateLibrary("PackageB"),
- CreateLibrary("PackageC")
- };
- target.Libraries.Returns(targetLibraries);
- _lockFileMock.Targets.Returns(new[] { target });
-
- ITargetFrameworkInformation targetFrameworkInformation = Substitute.For();
- targetFrameworkInformation.FrameworkName.Returns(targetFramework);
- ILibraryDependency[] directDependencies =
- {
- CreateDependency("PackageA"),
- CreateDependency("PackageB")
- };
- targetFrameworkInformation.Dependencies.Returns(directDependencies);
- _packageSpecMock.TargetFrameworks.Returns(new[] { targetFrameworkInformation });
+ INuGetFramework targetFramework = Substitute.For();
+ targetFramework.ToString().Returns("net10.0");
- _projectMock.GetPackageReferences().Returns(new[]
- {
- new PackageReferenceMetadata("PackageA", new Dictionary()),
+ ILockFileTarget target = Substitute.For();
+ target.TargetFramework.Returns(targetFramework);
+ ILockFileTargetLibrary[] targetLibraries =
+ [
+ CreateLibrary("PackageA", "PackageC"),
+ CreateLibrary("PackageB", "PackageC"),
+ CreateLibrary("PackageC")
+ ];
+ target.Libraries.Returns(targetLibraries);
+ _lockFileMock.Targets.Returns([target]);
+
+ ITargetFrameworkInformation targetFrameworkInformation = Substitute.For();
+ targetFrameworkInformation.FrameworkName.Returns(targetFramework);
+ ILibraryDependency[] directDependencies =
+ [
+ CreateDependency("PackageA"),
+ CreateDependency("PackageB")
+ ];
+ targetFrameworkInformation.Dependencies.Returns(directDependencies);
+ _packageSpecMock.TargetFrameworks.Returns([targetFrameworkInformation]);
+
+ _projectMock.GetPackageReferences().Returns(
+ [
+ new PackageReferenceMetadata("PackageA", new Dictionary()),
new PackageReferenceMetadata("PackageB", new Dictionary
{
["Publish"] = "false"
})
- });
- _projectMock.GetPackageReferencesForTarget("net10.0").Returns(new[]
- {
- new PackageReferenceMetadata("PackageA", new Dictionary()),
+ ]);
+ _projectMock.GetPackageReferencesForTarget("net10.0").Returns(
+ [
+ new PackageReferenceMetadata("PackageA", new Dictionary()),
new PackageReferenceMetadata("PackageB", new Dictionary
{
["Publish"] = "false"
})
- });
+ ]);
- IEnumerable result = _uut.GetInstalledPackages(_projectPath, true, null, true);
+ IEnumerable result = _uut.GetInstalledPackages(_projectPath, true, null, true);
- Assert.That(result.Select(p => p.Id), Does.Contain("PackageA"));
- Assert.That(result.Select(p => p.Id), Does.Not.Contain("PackageB"));
- Assert.That(result.Select(p => p.Id), Does.Contain("PackageC"));
- }
- finally
- {
- if (File.Exists(tempAssetsPath))
- {
- File.Delete(tempAssetsPath);
- }
- }
+ Assert.That(result.Select(p => p.Id), Does.Contain("PackageA"));
+ Assert.That(result.Select(p => p.Id), Does.Not.Contain("PackageB"));
+ Assert.That(result.Select(p => p.Id), Does.Contain("PackageC"));
}
[Test]
public void GetInstalledPackages_Should_Exclude_TransitiveDependency_If_OnlyReachableFrom_PublishFalseRoot()
{
- string tempAssetsPath = Path.GetTempFileName();
- try
- {
- _assetsFilePath = tempAssetsPath;
- _lockFileFactory.GetFromFile(tempAssetsPath).Returns(_lockFileMock);
- File.WriteAllText(tempAssetsPath,
- """
- {
- "targets": {
- "net10.0": {
- "PackageA/1.0.0": {
- "type": "package"
- },
- "PackageB/1.0.0": {
- "type": "package",
- "dependencies": {
- "PackageC": "1.0.0"
- }
- },
- "PackageC/1.0.0": {
- "type": "package"
- }
- }
- }
- }
- """);
-
- INuGetFramework targetFramework = Substitute.For();
- targetFramework.ToString().Returns("net10.0");
-
- ILockFileTarget target = Substitute.For();
- target.TargetFramework.Returns(targetFramework);
- ILockFileLibrary[] targetLibraries =
- {
- CreateLibrary("PackageA"),
- CreateLibrary("PackageB"),
- CreateLibrary("PackageC")
- };
- target.Libraries.Returns(targetLibraries);
- _lockFileMock.Targets.Returns(new[] { target });
-
- ITargetFrameworkInformation targetFrameworkInformation = Substitute.For();
- targetFrameworkInformation.FrameworkName.Returns(targetFramework);
- ILibraryDependency[] directDependencies =
- {
- CreateDependency("PackageA"),
- CreateDependency("PackageB")
- };
- targetFrameworkInformation.Dependencies.Returns(directDependencies);
- _packageSpecMock.TargetFrameworks.Returns(new[] { targetFrameworkInformation });
-
- _projectMock.GetPackageReferences().Returns(new[]
- {
- new PackageReferenceMetadata("PackageA", new Dictionary()),
- new PackageReferenceMetadata("PackageB", new Dictionary
- {
- ["Publish"] = "false"
- })
- });
- _projectMock.GetPackageReferencesForTarget("net10.0").Returns(new[]
- {
- new PackageReferenceMetadata("PackageA", new Dictionary()),
- new PackageReferenceMetadata("PackageB", new Dictionary
- {
- ["Publish"] = "false"
- })
- });
-
- IEnumerable result = _uut.GetInstalledPackages(_projectPath, true, null, true);
-
- Assert.That(result.Select(p => p.Id), Does.Contain("PackageA"));
- Assert.That(result.Select(p => p.Id), Does.Not.Contain("PackageB"));
- Assert.That(result.Select(p => p.Id), Does.Not.Contain("PackageC"));
- }
- finally
- {
- if (File.Exists(tempAssetsPath))
- {
- File.Delete(tempAssetsPath);
- }
- }
- }
+ INuGetFramework targetFramework = Substitute.For();
+ targetFramework.ToString().Returns("net10.0");
- [Test]
- public void GetInstalledPackages_Should_Exclude_TransitiveDependency_For_RidQualified_TargetKey()
- {
- string tempAssetsPath = Path.GetTempFileName();
- try
- {
- _assetsFilePath = tempAssetsPath;
- _lockFileFactory.GetFromFile(tempAssetsPath).Returns(_lockFileMock);
- File.WriteAllText(tempAssetsPath,
- """
- {
- "targets": {
- "net10.0/win-x64": {
- "PackageA/1.0.0": {
- "type": "package"
- },
- "PackageB/1.0.0": {
- "type": "package",
- "dependencies": {
- "PackageC": "1.0.0"
- }
- },
- "PackageC/1.0.0": {
- "type": "package"
- }
- }
- }
- }
- """);
-
- INuGetFramework targetFramework = Substitute.For();
- targetFramework.ToString().Returns("net10.0");
-
- ILockFileTarget target = Substitute.For();
- target.TargetFramework.Returns(targetFramework);
- ILockFileLibrary[] targetLibraries =
- {
- CreateLibrary("PackageA"),
- CreateLibrary("PackageB"),
- CreateLibrary("PackageC")
- };
- target.Libraries.Returns(targetLibraries);
- _lockFileMock.Targets.Returns(new[] { target });
-
- ITargetFrameworkInformation targetFrameworkInformation = Substitute.For();
- targetFrameworkInformation.FrameworkName.Returns(targetFramework);
- ILibraryDependency[] directDependencies =
- {
- CreateDependency("PackageA"),
- CreateDependency("PackageB")
- };
- targetFrameworkInformation.Dependencies.Returns(directDependencies);
- _packageSpecMock.TargetFrameworks.Returns(new[] { targetFrameworkInformation });
+ ILockFileTarget target = Substitute.For();
+ target.TargetFramework.Returns(targetFramework);
+ ILockFileTargetLibrary[] targetLibraries =
+ [
+ CreateLibrary("PackageA"),
+ CreateLibrary("PackageB", "PackageC"),
+ CreateLibrary("PackageC")
+ ];
+ target.Libraries.Returns(targetLibraries);
+ _lockFileMock.Targets.Returns([target]);
- _projectMock.GetPackageReferences().Returns(new[]
- {
- new PackageReferenceMetadata("PackageA", new Dictionary()),
+ ITargetFrameworkInformation targetFrameworkInformation = Substitute.For();
+ targetFrameworkInformation.FrameworkName.Returns(targetFramework);
+ ILibraryDependency[] directDependencies =
+ [
+ CreateDependency("PackageA"),
+ CreateDependency("PackageB")
+ ];
+ targetFrameworkInformation.Dependencies.Returns(directDependencies);
+ _packageSpecMock.TargetFrameworks.Returns([targetFrameworkInformation]);
+
+ _projectMock.GetPackageReferences().Returns(
+ [
+ new PackageReferenceMetadata("PackageA", new Dictionary()),
new PackageReferenceMetadata("PackageB", new Dictionary
{
["Publish"] = "false"
})
- });
- _projectMock.GetPackageReferencesForTarget("net10.0").Returns(new[]
- {
- new PackageReferenceMetadata("PackageA", new Dictionary()),
+ ]);
+ _projectMock.GetPackageReferencesForTarget("net10.0").Returns(
+ [
+ new PackageReferenceMetadata("PackageA", new Dictionary()),
new PackageReferenceMetadata("PackageB", new Dictionary
{
["Publish"] = "false"
})
- });
+ ]);
- IEnumerable result = _uut.GetInstalledPackages(_projectPath, true, null, true);
+ IEnumerable result = _uut.GetInstalledPackages(_projectPath, true, null, true);
- Assert.That(result.Select(p => p.Id), Does.Contain("PackageA"));
- Assert.That(result.Select(p => p.Id), Does.Not.Contain("PackageB"));
- Assert.That(result.Select(p => p.Id), Does.Not.Contain("PackageC"));
- }
- finally
- {
- if (File.Exists(tempAssetsPath))
- {
- File.Delete(tempAssetsPath);
- }
- }
+ Assert.That(result.Select(p => p.Id), Does.Contain("PackageA"));
+ Assert.That(result.Select(p => p.Id), Does.Not.Contain("PackageB"));
+ Assert.That(result.Select(p => p.Id), Does.Not.Contain("PackageC"));
}
private static ILibraryDependency CreateDependency(string packageName)
@@ -778,13 +617,22 @@ private static ILibraryDependency CreateDependency(string packageName)
return dependency;
}
- private static ILockFileLibrary CreateLibrary(string packageName)
+ private static ILockFileTargetLibrary CreateLibrary(string packageName, params string[] dependencyNames)
{
- ILockFileLibrary library = Substitute.For();
+ ILockFileTargetLibrary library = Substitute.For();
library.Name.Returns(packageName);
library.Type.Returns("package");
library.Version.Returns(Substitute.For());
+ IPackageDependency[] dependencies = dependencyNames.Select(CreatePackageDependency).ToArray();
+ library.Dependencies.Returns(dependencies);
return library;
}
+
+ private static IPackageDependency CreatePackageDependency(string dependencyName)
+ {
+ IPackageDependency packageDependency = Substitute.For();
+ packageDependency.Id.Returns(dependencyName);
+ return packageDependency;
+ }
}
}
diff --git a/tests/NuGetUtility.UrlToLicenseMapping.Test/NuGetUtility.UrlToLicenseMapping.Test.csproj b/tests/NuGetUtility.UrlToLicenseMapping.Test/NuGetUtility.UrlToLicenseMapping.Test.csproj
index 70da25c5..bd1ae994 100644
--- a/tests/NuGetUtility.UrlToLicenseMapping.Test/NuGetUtility.UrlToLicenseMapping.Test.csproj
+++ b/tests/NuGetUtility.UrlToLicenseMapping.Test/NuGetUtility.UrlToLicenseMapping.Test.csproj
@@ -16,7 +16,7 @@
-
+
all
runtime; build; native; contentfiles; analyzers; buildtransitive
diff --git a/tests/targets/PackagesConfigProject/PackagesConfigProject.csproj b/tests/targets/PackagesConfigProject/PackagesConfigProject.csproj
index 17255b38..e607cb2c 100644
--- a/tests/targets/PackagesConfigProject/PackagesConfigProject.csproj
+++ b/tests/targets/PackagesConfigProject/PackagesConfigProject.csproj
@@ -47,8 +47,8 @@
-
- ..\..\..\packages\TinyCsvParser.2.7.2\lib\netstandard2.0\TinyCsvParser.dll
+
+ ..\..\..\packages\TinyCsvParser.3.0.1\lib\netstandard2.0\TinyCsvParser.dll
diff --git a/tests/targets/PackagesConfigProject/packages.config b/tests/targets/PackagesConfigProject/packages.config
index fedabdab..a0309e0b 100644
--- a/tests/targets/PackagesConfigProject/packages.config
+++ b/tests/targets/PackagesConfigProject/packages.config
@@ -1,4 +1,4 @@
-
+
\ No newline at end of file