diff --git a/src/UnityNuGet.Tests/RegistryCacheTests.cs b/src/UnityNuGet.Tests/RegistryCacheTests.cs index be845527..9ddc5c23 100644 --- a/src/UnityNuGet.Tests/RegistryCacheTests.cs +++ b/src/UnityNuGet.Tests/RegistryCacheTests.cs @@ -26,7 +26,7 @@ public void GetNpmVersion(string version, string expected) Assert.That(RegistryCache.GetNpmVersion(NuGetVersion.Parse(version)), Is.EqualTo(expected)); } - [Test] + [Test, Order(99)] public async Task TestBuild() { bool errorsTriggered = false; diff --git a/src/UnityNuGet.Tests/RegistryTests.cs b/src/UnityNuGet.Tests/RegistryTests.cs index 538f913f..973f6d26 100644 --- a/src/UnityNuGet.Tests/RegistryTests.cs +++ b/src/UnityNuGet.Tests/RegistryTests.cs @@ -24,7 +24,7 @@ namespace UnityNuGet.Tests { public class RegistryTests { - private readonly RegistryOptions _registryOptions = new() { RegistryFilePath = "registry.json" }; + private static readonly RegistryOptions s_registryOptions = new() { RegistryFilePath = "registry.json" }; [Test] [TestCase("scriban")] @@ -37,7 +37,7 @@ public async Task Make_Sure_That_The_Registry_Is_Case_Insensitive(string package var loggerFactory = new LoggerFactory(); loggerFactory.AddProvider(new FakeLoggerProvider()); - var registry = new Registry(hostEnvironmentMock.Object, loggerFactory, Options.Create(_registryOptions)); + var registry = new Registry(hostEnvironmentMock.Object, loggerFactory, Options.Create(s_registryOptions)); await registry.StartAsync(CancellationToken.None); @@ -57,7 +57,7 @@ public async Task Make_Sure_That_The_Order_In_The_Registry_Is_Respected() var loggerFactory = new LoggerFactory(); loggerFactory.AddProvider(new FakeLoggerProvider()); - var registry = new Registry(hostEnvironmentMock.Object, loggerFactory, Options.Create(_registryOptions)); + var registry = new Registry(hostEnvironmentMock.Object, loggerFactory, Options.Create(s_registryOptions)); await registry.StartAsync(CancellationToken.None); @@ -76,7 +76,7 @@ public async Task Ensure_That_Packages_Already_Included_In_Net_Standard_Are_not_ var loggerFactory = new LoggerFactory(); loggerFactory.AddProvider(new FakeLoggerProvider()); - var registry = new Registry(hostEnvironmentMock.Object, loggerFactory, Options.Create(_registryOptions)); + var registry = new Registry(hostEnvironmentMock.Object, loggerFactory, Options.Create(s_registryOptions)); await registry.StartAsync(CancellationToken.None); @@ -140,8 +140,7 @@ public async Task CanParse_PackageWithRuntimes() Assert.That(libFiles.SetEquals(runtimeFiles), Is.True); } - [Test] - public async Task Ensure_Min_Version_Is_Correct_Ignoring_Analyzers_And_Native_Libs() + static async Task AllRegistries() { var hostEnvironmentMock = new Mock(); hostEnvironmentMock.Setup(h => h.EnvironmentName).Returns(Environments.Development); @@ -149,7 +148,7 @@ public async Task Ensure_Min_Version_Is_Correct_Ignoring_Analyzers_And_Native_Li var loggerFactory = new LoggerFactory(); loggerFactory.AddProvider(new FakeLoggerProvider()); - var registry = new Registry(hostEnvironmentMock.Object, loggerFactory, Options.Create(_registryOptions)); + var registry = new Registry(hostEnvironmentMock.Object, loggerFactory, Options.Create(s_registryOptions)); var logger = new NuGetConsoleTestLogger(); CancellationToken cancellationToken = CancellationToken.None; @@ -211,118 +210,57 @@ public async Task Ensure_Min_Version_Is_Correct_Ignoring_Analyzers_And_Native_Li var excludedPackagesRegex = new Regex(@$"^{string.Join('|', excludedPackages)}$"); - foreach (KeyValuePair registryKvp in registry.Where(r => !r.Value.Analyzer && !r.Value.Ignored)) + return registry.Where(r => !r.Value.Analyzer && !r.Value.Ignored).OrderBy((pair) => pair.Key).Select((pair) => { - string packageId = registryKvp.Key; - - if (excludedPackagesRegex.IsMatch(packageId)) - { - continue; - } - - VersionRange? versionRange = registryKvp.Value.Version; - - IEnumerable dependencyPackageMetas = await resource.GetMetadataAsync( - packageId, - includePrerelease: false, - includeUnlisted: false, - cache, - logger, - cancellationToken); - - PackageIdentity? packageIdentity = NuGetHelper.GetMinimumCompatiblePackageIdentity(dependencyPackageMetas, nuGetFrameworks, includeAny: false); - - if (packageIdentity != null) - { - Assert.That(versionRange!.MinVersion, Is.EqualTo(packageIdentity.Version), $"Package {packageId}"); - } - else - { - ISettings settings = Settings.LoadDefaultSettings(root: null); - - DownloadResourceResult downloadResult = await PackageDownloader.GetDownloadResourceResultAsync( - [repository], - new PackageIdentity(registryKvp.Key, registryKvp.Value.Version!.MinVersion), - new PackageDownloadContext(cache), - SettingsUtility.GetGlobalPackagesFolder(settings), - logger, cancellationToken); - - bool hasNativeLib = await NativeLibraries.GetSupportedNativeLibsAsync(downloadResult.PackageReader, logger).AnyAsync(); - - if (hasNativeLib) - { - continue; - } - else - { - Assert.Fail(packageId); - } - } - } + return new TestCaseData(resource,logger,cache,repository,excludedPackagesRegex,nuGetFrameworks,pair.Key,pair.Value.Version).SetArgDisplayNames(pair.Key,pair.Value.Version!.ToString()); + }).ToArray(); } - [Test] - public async Task Ensure_Do_Not_Exceed_The_Maximum_Number_Of_Allowed_Versions() + const int MaxAllowedVersions = 100; + + [TestCaseSource(nameof(AllRegistries))] + public async Task Ensure_Min_Version_Is_Correct_Ignoring_Analyzers_And_Native_Libs(PackageMetadataResource resource, + NuGetConsoleTestLogger logger, + SourceCacheContext cache, + SourceRepository repository, + Regex excludedPackagesRegex, + RegistryTargetFramework[] nuGetFrameworks, + string packageId, + VersionRange versionRange) { - const int maxAllowedVersions = 100; - - var hostEnvironmentMock = new Mock(); - hostEnvironmentMock.Setup(h => h.EnvironmentName).Returns(Environments.Development); + IEnumerable dependencyPackageMetas = await resource.GetMetadataAsync( + packageId, + includePrerelease: false, + includeUnlisted: false, + cache, + logger, + CancellationToken.None); - var loggerFactory = new LoggerFactory(); - loggerFactory.AddProvider(new FakeLoggerProvider()); + IPackageSearchMetadata[] versions = dependencyPackageMetas.Where(v => versionRange!.Satisfies(v.Identity.Version)).ToArray(); + Warn.If(versions, Has.Length.GreaterThan(MaxAllowedVersions)); - var registry = new Registry(hostEnvironmentMock.Object, loggerFactory, Options.Create(_registryOptions)); - - var logger = new NuGetConsoleTestLogger(); - CancellationToken cancellationToken = CancellationToken.None; + if (excludedPackagesRegex.IsMatch(packageId)) + return; - await registry.StartAsync(cancellationToken); + PackageIdentity? packageIdentity = NuGetHelper.GetMinimumCompatiblePackageIdentity(dependencyPackageMetas, nuGetFrameworks, includeAny: false); - var cache = new SourceCacheContext(); - SourceRepository repository = Repository.Factory.GetCoreV3("https://api.nuget.org/v3/index.json"); - PackageMetadataResource resource = await repository.GetResourceAsync(); - - List<(string packageId, int versionCount)> packages = []; - - foreach (KeyValuePair registryKvp in registry.Where(r => !r.Value.Analyzer && !r.Value.Ignored)) + if (packageIdentity != null) { - string packageId = registryKvp.Key; - - VersionRange? versionRange = registryKvp.Value.Version; - - IEnumerable dependencyPackageMetas = await resource.GetMetadataAsync( - packageId, - includePrerelease: false, - includeUnlisted: false, - cache, - logger, - cancellationToken); - - IPackageSearchMetadata[] versions = dependencyPackageMetas.Where(v => versionRange!.Satisfies(v.Identity.Version)).ToArray(); - - if (versions.Length > maxAllowedVersions) - { - packages.Add((registryKvp.Key, versions.Length)); - } + Assert.That(versionRange!.MinVersion, Is.EqualTo(packageIdentity.Version), $"Package {packageId}"); } - - StringBuilder stringBuilder = new(); - - foreach ((string packageId, int versionCount) in packages.OrderByDescending(p => p.versionCount)) + else { - stringBuilder.AppendLine($"{packageId} -> {versionCount}"); - } + ISettings settings = Settings.LoadDefaultSettings(root: null); - if (stringBuilder.Length == 0) - { - const bool trueConstant = true; + DownloadResourceResult downloadResult = await PackageDownloader.GetDownloadResourceResultAsync( + [repository], + new PackageIdentity(packageId, versionRange!.MinVersion), + new PackageDownloadContext(cache), + SettingsUtility.GetGlobalPackagesFolder(settings), + logger, CancellationToken.None); - Assert.That(trueConstant, Is.True); - } - else - { - Assert.Inconclusive(stringBuilder.ToString()); + bool hasNativeLib = await NativeLibraries.GetSupportedNativeLibsAsync(downloadResult.PackageReader, logger).AnyAsync(); + Assert.That(hasNativeLib, packageId); } } } diff --git a/src/UnityNuGet.Tests/UnityNuGet.Tests.csproj b/src/UnityNuGet.Tests/UnityNuGet.Tests.csproj index 634f0e3e..d2f23c28 100644 --- a/src/UnityNuGet.Tests/UnityNuGet.Tests.csproj +++ b/src/UnityNuGet.Tests/UnityNuGet.Tests.csproj @@ -19,6 +19,7 @@ +