diff --git a/src/NuGet.Core/NuGet.ProjectModel/JsonPackageSpecReader.Utf8JsonStreamReader.cs b/src/NuGet.Core/NuGet.ProjectModel/JsonPackageSpecReader.Utf8JsonStreamReader.cs index c15205fd750..796f0103ae3 100644 --- a/src/NuGet.Core/NuGet.ProjectModel/JsonPackageSpecReader.Utf8JsonStreamReader.cs +++ b/src/NuGet.Core/NuGet.ProjectModel/JsonPackageSpecReader.Utf8JsonStreamReader.cs @@ -112,19 +112,7 @@ public partial class JsonPackageSpecReader internal static PackageSpec GetPackageSpecUtf8JsonStreamReader(Stream stream, string name, string packageSpecPath, string snapshotValue) { var reader = new Utf8JsonStreamReader(stream); - PackageSpec packageSpec; - packageSpec = GetPackageSpec(ref reader, name, packageSpecPath, snapshotValue); - - if (!string.IsNullOrEmpty(name)) - { - packageSpec.Name = name; - if (!string.IsNullOrEmpty(packageSpecPath)) - { - packageSpec.FilePath = Path.GetFullPath(packageSpecPath); - - } - } - return packageSpec; + return GetPackageSpec(ref reader, name, packageSpecPath, snapshotValue); } internal static PackageSpec GetPackageSpec(ref Utf8JsonStreamReader jsonReader, string name, string packageSpecPath, string snapshotValue) @@ -277,9 +265,10 @@ internal static PackageSpec GetPackageSpec(ref Utf8JsonStreamReader jsonReader, internal static void ReadCentralTransitiveDependencyGroup( ref Utf8JsonStreamReader jsonReader, - IList results, + out IList results, string packageSpecPath) { + results = null; if (jsonReader.Read() && jsonReader.TokenType == JsonTokenType.StartObject) { while (jsonReader.Read() && jsonReader.TokenType == JsonTokenType.PropertyName) @@ -295,10 +284,12 @@ internal static void ReadCentralTransitiveDependencyGroup( if (jsonReader.Read()) { var libraryDependency = ReadLibraryDependency(ref jsonReader, packageSpecPath, libraryName); + results ??= []; results.Add(libraryDependency); } } } + results ??= Array.Empty(); } private static LibraryDependency ReadLibraryDependency(ref Utf8JsonStreamReader jsonReader, string packageSpecPath, string libraryName) @@ -733,10 +724,15 @@ private static void ReadDownloadDependencies( packageSpecPath); } - string[] versions = versionValue.Split(VersionSeparators, StringSplitOptions.RemoveEmptyEntries); + var versions = new LazyStringSplit(versionValue, VersionSeparator); foreach (string singleVersionValue in versions) { + if (string.IsNullOrEmpty(singleVersionValue)) + { + continue; + } + try { VersionRange version = VersionRange.Parse(singleVersionValue); @@ -938,7 +934,7 @@ private static void ReadMSBuildMetadata(ref Utf8JsonStreamReader jsonReader, Pac RestoreLockProperties restoreLockProperties = null; var skipContentFileWrite = false; List sources = null; - List targetFrameworks = null; + IList targetFrameworks = null; var validateRuntimeAssets = false; WarningProperties warningProperties = null; RestoreAuditProperties auditProperties = null; @@ -1294,7 +1290,7 @@ private static void ReadPackageTypes(PackageSpec packageSpec, ref Utf8JsonStream packageTypes = new[] { packageType }; break; case JsonTokenType.StartArray: - var types = new List(); + List types = null; while (jsonReader.Read() && jsonReader.TokenType != JsonTokenType.EndArray) { @@ -1309,8 +1305,10 @@ private static void ReadPackageTypes(PackageSpec packageSpec, ref Utf8JsonStream } packageType = CreatePackageType(ref jsonReader); + types ??= []; types.Add(packageType); } + packageTypes = types; break; case JsonTokenType.Null: @@ -1541,14 +1539,14 @@ private static RuntimeDescription ReadRuntimeDescription(ref Utf8JsonStreamReade private static List ReadRuntimes(ref Utf8JsonStreamReader jsonReader) { - var runtimeDescriptions = new List(); + List runtimeDescriptions = null; if (jsonReader.Read() && jsonReader.TokenType == JsonTokenType.StartObject) { while (jsonReader.Read() && jsonReader.TokenType == JsonTokenType.PropertyName) { RuntimeDescription runtimeDescription = ReadRuntimeDescription(ref jsonReader, jsonReader.GetString()); - + runtimeDescriptions ??= []; runtimeDescriptions.Add(runtimeDescription); } } @@ -1572,14 +1570,15 @@ private static void ReadScripts(ref Utf8JsonStreamReader jsonReader, PackageSpec } else if (jsonReader.TokenType == JsonTokenType.StartArray) { - var list = new List(); + IList list = null; while (jsonReader.Read() && jsonReader.TokenType == JsonTokenType.String) { + list ??= []; list.Add(jsonReader.GetString()); } - packageSpec.Scripts[propertyName] = list; + packageSpec.Scripts[propertyName] = list ?? Enumerable.Empty(); } else { @@ -1594,7 +1593,7 @@ private static void ReadScripts(ref Utf8JsonStreamReader jsonReader, PackageSpec private static List ReadSupports(ref Utf8JsonStreamReader jsonReader) { - var compatibilityProfiles = new List(); + List compatibilityProfiles = null; if (jsonReader.Read() && jsonReader.TokenType == JsonTokenType.StartObject) { @@ -1602,7 +1601,7 @@ private static List ReadSupports(ref Utf8JsonStreamReader { var propertyName = jsonReader.GetString(); CompatibilityProfile compatibilityProfile = ReadCompatibilityProfile(ref jsonReader, propertyName); - + compatibilityProfiles ??= []; compatibilityProfiles.Add(compatibilityProfile); } } @@ -1640,7 +1639,7 @@ private static LibraryDependencyTarget ReadTarget( private static List ReadTargetFrameworks(ref Utf8JsonStreamReader jsonReader) { - var targetFrameworks = new List(); + List targetFrameworks = null; if (jsonReader.Read() && jsonReader.TokenType == JsonTokenType.StartObject) { @@ -1723,7 +1722,7 @@ private static List ReadTargetFrameworks(re jsonReader.Skip(); } } - + targetFrameworks ??= []; targetFrameworks.Add(frameworkGroup); } } diff --git a/src/NuGet.Core/NuGet.ProjectModel/JsonPackageSpecReader.cs b/src/NuGet.Core/NuGet.ProjectModel/JsonPackageSpecReader.cs index e5e4284020c..7f651b40bc7 100644 --- a/src/NuGet.Core/NuGet.ProjectModel/JsonPackageSpecReader.cs +++ b/src/NuGet.Core/NuGet.ProjectModel/JsonPackageSpecReader.cs @@ -23,6 +23,7 @@ public static partial class JsonPackageSpecReader { private static readonly char[] DelimitedStringSeparators = { ' ', ',' }; private static readonly char[] VersionSeparators = new[] { ';' }; + private const char VersionSeparator = ';'; public static readonly string RestoreOptions = "restore"; public static readonly string RestoreSettings = "restoreSettings"; public static readonly string HideWarningsAndErrors = "hideWarningsAndErrors"; @@ -75,10 +76,9 @@ internal static PackageSpec GetPackageSpec(JsonTextReader jsonReader, string pac return GetPackageSpec(jsonReader, name: null, packageSpecPath, snapshotValue: null); } - internal static PackageSpec GetPackageSpec(Stream stream, string name, string packageSpecPath, string snapshotValue, IEnvironmentVariableReader environmentVariableReader) + internal static PackageSpec GetPackageSpec(Stream stream, string name, string packageSpecPath, string snapshotValue, IEnvironmentVariableReader environmentVariableReader, bool bypassCache = false) { - var useNj = environmentVariableReader.GetEnvironmentVariable("NUGET_EXPERIMENTAL_USE_NJ_FOR_FILE_PARSING"); - if (string.IsNullOrEmpty(useNj) || useNj.Equals("false", StringComparison.OrdinalIgnoreCase)) + if (!JsonUtility.UseNewtonsoftJsonForParsing(environmentVariableReader, bypassCache)) { return GetPackageSpecUtf8JsonStreamReader(stream, name, packageSpecPath, snapshotValue); } diff --git a/src/NuGet.Core/NuGet.ProjectModel/JsonUtility.cs b/src/NuGet.Core/NuGet.ProjectModel/JsonUtility.cs index 742629ad4b5..4de5162b05c 100644 --- a/src/NuGet.Core/NuGet.ProjectModel/JsonUtility.cs +++ b/src/NuGet.Core/NuGet.ProjectModel/JsonUtility.cs @@ -6,6 +6,7 @@ using System.IO; using Newtonsoft.Json; using Newtonsoft.Json.Linq; +using NuGet.Common; using NuGet.Packaging.Core; using NuGet.Versioning; @@ -13,6 +14,8 @@ namespace NuGet.ProjectModel { internal static class JsonUtility { + internal static string NUGET_EXPERIMENTAL_USE_NJ_FOR_FILE_PARSING = nameof(NUGET_EXPERIMENTAL_USE_NJ_FOR_FILE_PARSING); + internal static bool? UseNewtonsoftJson = null; internal static readonly char[] PathSplitChars = new[] { LockFile.DirectorySeparatorChar }; /// @@ -43,6 +46,12 @@ internal static JObject LoadJson(TextReader reader) } } + internal static T LoadJson(Stream stream, IUtf8JsonStreamReaderConverter converter) + { + var streamingJsonReader = new Utf8JsonStreamReader(stream); + return converter.Read(ref streamingJsonReader); + } + internal static PackageDependency ReadPackageDependency(string property, JToken json) { var versionStr = json.Value(); @@ -51,6 +60,23 @@ internal static PackageDependency ReadPackageDependency(string property, JToken versionStr == null ? null : VersionRange.Parse(versionStr)); } + internal static bool UseNewtonsoftJsonForParsing(IEnvironmentVariableReader environmentVariableReader, bool bypassCache) + { + if (!UseNewtonsoftJson.HasValue || bypassCache) + { + if (bool.TryParse(environmentVariableReader.GetEnvironmentVariable(NUGET_EXPERIMENTAL_USE_NJ_FOR_FILE_PARSING), out var useNj)) + { + UseNewtonsoftJson = useNj; + } + else + { + UseNewtonsoftJson = false; + } + } + + return UseNewtonsoftJson.Value; + } + internal static JProperty WritePackageDependencyWithLegacyString(PackageDependency item) { return new JProperty( diff --git a/src/NuGet.Core/NuGet.ProjectModel/LazyStringSplit.cs b/src/NuGet.Core/NuGet.ProjectModel/LazyStringSplit.cs new file mode 100644 index 00000000000..6ccb0f3fc9c --- /dev/null +++ b/src/NuGet.Core/NuGet.ProjectModel/LazyStringSplit.cs @@ -0,0 +1,138 @@ +// Copyright (c) .NET Foundation. All rights reserved. +// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. +#nullable enable + +using System; +using System.Collections; +using System.Collections.Generic; +using System.Linq; + +namespace NuGet.ProjectModel +{ + /// + /// Splits a string by a delimiter, producing substrings lazily during enumeration. + /// Skips empty items, behaving equivalently to with + /// . + /// + /// + /// Unlike and overloads, + /// does not allocate an array for the return, and allocates strings on demand during + /// enumeration. A custom enumerator type is used so that the only allocations made are + /// the substrings themselves. We also avoid the large internal arrays assigned by the + /// methods on . + /// + internal readonly struct LazyStringSplit : IEnumerable + { + private readonly string _input; + private readonly char _delimiter; + + public LazyStringSplit(string input, char delimiter) + { + if (input is null) + { + throw new ArgumentNullException(nameof(input)); + } + + _input = input; + _delimiter = delimiter; + } + + public Enumerator GetEnumerator() => new(this); + + IEnumerator IEnumerable.GetEnumerator() => GetEnumerator(); + + IEnumerator IEnumerable.GetEnumerator() => GetEnumerator(); + + public IEnumerable Select(Func func) + { + foreach (string value in this) + { + yield return func(value); + } + } + + public string First() + { + return FirstOrDefault() ?? throw new InvalidOperationException("Sequence is empty."); + } + + public string? FirstOrDefault() + { + var enumerator = new Enumerator(this); + return enumerator.MoveNext() ? enumerator.Current : null; + } + + public struct Enumerator : IEnumerator + { + private readonly string _input; + private readonly char _delimiter; + private int _index; + + internal Enumerator(in LazyStringSplit split) + { + _index = 0; + _input = split._input; + _delimiter = split._delimiter; + Current = null!; + } + + public string Current { get; private set; } + + public bool MoveNext() + { + while (_index != _input.Length) + { + int delimiterIndex = _input.IndexOf(_delimiter, _index); + + if (delimiterIndex == -1) + { + Current = _input.Substring(_index); + _index = _input.Length; + return true; + } + + int length = delimiterIndex - _index; + + if (length == 0) + { + _index++; + continue; + } + + Current = _input.Substring(_index, length); + _index = delimiterIndex + 1; + return true; + } + + return false; + } + + object IEnumerator.Current => Current; + + void IEnumerator.Reset() + { + _index = 0; + Current = null!; + } + + void IDisposable.Dispose() { } + } + } + + internal static class LazyStringSplitExtensions + { + /// + /// This extension method has special knowledge of the type and + /// can compute its result without allocation. + /// + /// + public static string? FirstOrDefault(this LazyStringSplit lazyStringSplit) + { + LazyStringSplit.Enumerator enumerator = lazyStringSplit.GetEnumerator(); + + return enumerator.MoveNext() + ? enumerator.Current + : null; + } + } +} diff --git a/src/NuGet.Core/NuGet.ProjectModel/LockFile/LockFileFormat.cs b/src/NuGet.Core/NuGet.ProjectModel/LockFile/LockFileFormat.cs index f40c498518b..dbc8a0f310f 100644 --- a/src/NuGet.Core/NuGet.ProjectModel/LockFile/LockFileFormat.cs +++ b/src/NuGet.Core/NuGet.ProjectModel/LockFile/LockFileFormat.cs @@ -6,6 +6,7 @@ using System.Globalization; using System.IO; using System.Linq; +using System.Text; using Newtonsoft.Json; using Newtonsoft.Json.Linq; using NuGet.Common; @@ -60,11 +61,10 @@ public LockFile Parse(string lockFileContent, string path) public LockFile Parse(string lockFileContent, ILogger log, string path) { - using (var reader = new StringReader(lockFileContent)) + byte[] byteArray = Encoding.UTF8.GetBytes(lockFileContent); + using (var stream = new MemoryStream(byteArray)) { -#pragma warning disable CS0612 // Type or member is obsolete - return Read(reader, log, path); -#pragma warning restore CS0612 // Type or member is obsolete + return Read(stream, log, path); } } @@ -88,21 +88,33 @@ public LockFile Read(Stream stream, string path) public LockFile Read(Stream stream, ILogger log, string path) { - using (var textReader = new StreamReader(stream)) + return Read(stream, log, path, EnvironmentVariableWrapper.Instance); + } + + internal LockFile Read(Stream stream, ILogger log, string path, IEnvironmentVariableReader environmentVariableReader, bool bypassCache = false) + { + if (!JsonUtility.UseNewtonsoftJsonForParsing(environmentVariableReader, bypassCache)) + { + return Utf8JsonRead(stream, log, path); + } + else { -#pragma warning disable CS0612 // Type or member is obsolete - return Read(textReader, log, path); -#pragma warning restore CS0612 // Type or member is obsolete + using (var reader = new StreamReader(stream)) + { +#pragma warning disable CS0618 // Type or member is obsolete + return Read(reader, log, path); +#pragma warning restore CS0618 // Type or member is obsolete + } } } - [Obsolete] + [Obsolete("This method is deprecated. Use Read(Stream, string) instead.")] public LockFile Read(TextReader reader, string path) { return Read(reader, NullLogger.Instance, path); } - [Obsolete] + [Obsolete("This method is deprecated. Use Read(Stream, ILogger, string) instead.")] public LockFile Read(TextReader reader, ILogger log, string path) { try @@ -167,6 +179,29 @@ public string Render(LockFile lockFile) } } + private LockFile Utf8JsonRead(Stream stream, ILogger log, string path) + { + try + { + var lockFile = JsonUtility.LoadJson(stream, Utf8JsonReaderExtensions.LockFileConverter); + lockFile.Path = path; + return lockFile; + } + catch (Exception ex) + { + log.LogInformation(string.Format(CultureInfo.CurrentCulture, + Strings.Log_ErrorReadingLockFile, + path, ex.Message)); + + // Ran into parsing errors, mark it as unlocked and out-of-date + return new LockFile + { + Version = int.MinValue, + Path = path + }; + } + } + [Obsolete] private static LockFile ReadLockFile(JObject cursor, string path) { diff --git a/src/NuGet.Core/NuGet.ProjectModel/LockFile/Utf8JsonStreamIAssetsLogMessageConverter.cs b/src/NuGet.Core/NuGet.ProjectModel/LockFile/Utf8JsonStreamIAssetsLogMessageConverter.cs new file mode 100644 index 00000000000..30ff0ad1c00 --- /dev/null +++ b/src/NuGet.Core/NuGet.ProjectModel/LockFile/Utf8JsonStreamIAssetsLogMessageConverter.cs @@ -0,0 +1,148 @@ +// Copyright (c) .NET Foundation. All rights reserved. +// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. + +using System; +using System.Collections.Generic; +using System.Text; +using System.Text.Json; +using NuGet.Common; + +namespace NuGet.ProjectModel +{ + /// + /// A to allow read JSON into + /// + /// + /// { + /// "code": "", + /// "level": "", + /// "message": "test log message", + /// "warningLevel": , + /// "filePath": "C:\a\file\path.txt", + /// "startLineNumber": 1, + /// "startColumnNumber": 2, + /// "endLineNumber": 10, + /// "endcolumnNumber": 20, + /// "libraryId": "libraryId", + /// "targetGraphs": [ + /// "targetGraph1" + /// ] + /// } + /// + internal class Utf8JsonStreamIAssetsLogMessageConverter : IUtf8JsonStreamReaderConverter + { + private static readonly byte[] LevelPropertyName = Encoding.UTF8.GetBytes(LogMessageProperties.LEVEL); + private static readonly byte[] CodePropertyName = Encoding.UTF8.GetBytes(LogMessageProperties.CODE); + private static readonly byte[] WarningLevelPropertyName = Encoding.UTF8.GetBytes(LogMessageProperties.WARNING_LEVEL); + private static readonly byte[] FilePathPropertyName = Encoding.UTF8.GetBytes(LogMessageProperties.FILE_PATH); + private static readonly byte[] StartLineNumberPropertyName = Encoding.UTF8.GetBytes(LogMessageProperties.START_LINE_NUMBER); + private static readonly byte[] StartColumnNumberPropertyName = Encoding.UTF8.GetBytes(LogMessageProperties.START_COLUMN_NUMBER); + private static readonly byte[] EndLineNumberPropertyName = Encoding.UTF8.GetBytes(LogMessageProperties.END_LINE_NUMBER); + private static readonly byte[] EndColumnNumberPropertyName = Encoding.UTF8.GetBytes(LogMessageProperties.END_COLUMN_NUMBER); + private static readonly byte[] MessagePropertyName = Encoding.UTF8.GetBytes(LogMessageProperties.MESSAGE); + private static readonly byte[] LibraryIdPropertyName = Encoding.UTF8.GetBytes(LogMessageProperties.LIBRARY_ID); + private static readonly byte[] TargetGraphsPropertyName = Encoding.UTF8.GetBytes(LogMessageProperties.TARGET_GRAPHS); + + public IAssetsLogMessage Read(ref Utf8JsonStreamReader reader) + { + if (reader.TokenType != JsonTokenType.StartObject) + { + throw new JsonException("Expected StartObject, found " + reader.TokenType); + } + + var isValid = true; + LogLevel level = default; + NuGetLogCode code = default; + //matching default warning level when AssetLogMessage object is created + WarningLevel warningLevel = WarningLevel.Severe; + string message = default; + string filePath = default; + int startLineNumber = default; + int startColNumber = default; + int endLineNumber = default; + int endColNumber = default; + string libraryId = default; + IReadOnlyList targetGraphs = null; + + while (reader.Read() && reader.TokenType == JsonTokenType.PropertyName) + { + if (!isValid) + { + reader.Skip(); + } + if (reader.ValueTextEquals(LevelPropertyName)) + { + var levelString = reader.ReadNextTokenAsString(); + isValid &= Enum.TryParse(levelString, out level); + } + else if (reader.ValueTextEquals(CodePropertyName)) + { + var codeString = reader.ReadNextTokenAsString(); + isValid &= Enum.TryParse(codeString, out code); + } + else if (reader.ValueTextEquals(WarningLevelPropertyName)) + { + reader.Read(); + warningLevel = (WarningLevel)Enum.ToObject(typeof(WarningLevel), reader.GetInt32()); + } + else if (reader.ValueTextEquals(FilePathPropertyName)) + { + filePath = reader.ReadNextTokenAsString(); + } + else if (reader.ValueTextEquals(StartLineNumberPropertyName)) + { + reader.Read(); + startLineNumber = reader.GetInt32(); + } + else if (reader.ValueTextEquals(StartColumnNumberPropertyName)) + { + reader.Read(); + startColNumber = reader.GetInt32(); + } + else if (reader.ValueTextEquals(EndLineNumberPropertyName)) + { + reader.Read(); + endLineNumber = reader.GetInt32(); + } + else if (reader.ValueTextEquals(EndColumnNumberPropertyName)) + { + reader.Read(); + endColNumber = reader.GetInt32(); + } + else if (reader.ValueTextEquals(MessagePropertyName)) + { + message = reader.ReadNextTokenAsString(); + } + else if (reader.ValueTextEquals(LibraryIdPropertyName)) + { + libraryId = reader.ReadNextTokenAsString(); + } + else if (reader.ValueTextEquals(TargetGraphsPropertyName)) + { + reader.Read(); + targetGraphs = (List)reader.ReadStringArrayAsIList(); + } + else + { + reader.Skip(); + } + } + if (isValid) + { + var assetLogMessage = new AssetsLogMessage(level, code, message) + { + TargetGraphs = targetGraphs ?? Array.Empty(), + FilePath = filePath, + EndColumnNumber = endColNumber, + EndLineNumber = endLineNumber, + LibraryId = libraryId, + StartColumnNumber = startColNumber, + StartLineNumber = startLineNumber, + WarningLevel = warningLevel + }; + return assetLogMessage; + } + return null; + } + } +} diff --git a/src/NuGet.Core/NuGet.ProjectModel/LockFile/Utf8JsonStreamLockFileConverter.cs b/src/NuGet.Core/NuGet.ProjectModel/LockFile/Utf8JsonStreamLockFileConverter.cs new file mode 100644 index 00000000000..07c9e8c0b23 --- /dev/null +++ b/src/NuGet.Core/NuGet.ProjectModel/LockFile/Utf8JsonStreamLockFileConverter.cs @@ -0,0 +1,132 @@ +// Copyright (c) .NET Foundation. All rights reserved. +// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. + +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Text.Json; +using NuGet.Frameworks; + +namespace NuGet.ProjectModel +{ + /// + /// A to allow read JSON into + /// + /// + /// { + /// "version": 3, + /// "targets": { }, + /// "libraries": { }, + /// "projectFileDependencyGroups": { }, + /// "packageFolders": { }, + /// "project": { }, + /// "logs": [ ] + /// } + /// + internal class Utf8JsonStreamLockFileConverter : IUtf8JsonStreamReaderConverter + { + private static readonly byte[] VersionPropertyName = Encoding.UTF8.GetBytes("version"); + private static readonly byte[] LibrariesPropertyName = Encoding.UTF8.GetBytes("libraries"); + private static readonly byte[] TargetsPropertyName = Encoding.UTF8.GetBytes("targets"); + private static readonly byte[] ProjectFileDependencyGroupsPropertyName = Encoding.UTF8.GetBytes("projectFileDependencyGroups"); + private static readonly byte[] PackageFoldersPropertyName = Encoding.UTF8.GetBytes("packageFolders"); + private static readonly byte[] ProjectPropertyName = Encoding.UTF8.GetBytes("project"); + private static readonly byte[] CentralTransitiveDependencyGroupsPropertyName = Encoding.UTF8.GetBytes("centralTransitiveDependencyGroups"); + private static readonly byte[] LogsPropertyName = Encoding.UTF8.GetBytes("logs"); + + public LockFile Read(ref Utf8JsonStreamReader reader) + { + if (reader.TokenType != JsonTokenType.StartObject) + { + throw new JsonException("Expected StartObject, found " + reader.TokenType); + } + + var lockFile = new LockFile(); + + while (reader.Read() && reader.TokenType == JsonTokenType.PropertyName) + { + if (reader.ValueTextEquals(VersionPropertyName)) + { + reader.Read(); + if (reader.TryGetInt32(out int version)) + { + lockFile.Version = version; + } + else + { + lockFile.Version = int.MinValue; + } + } + else if (reader.ValueTextEquals(LibrariesPropertyName)) + { + reader.Read(); + lockFile.Libraries = reader.ReadObjectAsList(Utf8JsonReaderExtensions.LockFileLibraryConverter); + } + else if (reader.ValueTextEquals(TargetsPropertyName)) + { + reader.Read(); + lockFile.Targets = reader.ReadObjectAsList(Utf8JsonReaderExtensions.LockFileTargetConverter); + } + else if (reader.ValueTextEquals(ProjectFileDependencyGroupsPropertyName)) + { + reader.Read(); + lockFile.ProjectFileDependencyGroups = reader.ReadObjectAsList(Utf8JsonReaderExtensions.ProjectFileDepencencyGroupConverter); + } + else if (reader.ValueTextEquals(PackageFoldersPropertyName)) + { + reader.Read(); + lockFile.PackageFolders = reader.ReadObjectAsList(Utf8JsonReaderExtensions.LockFileItemConverter); + } + else if (reader.ValueTextEquals(ProjectPropertyName)) + { + reader.Read(); + lockFile.PackageSpec = JsonPackageSpecReader.GetPackageSpec( + ref reader, + name: null, + packageSpecPath: null, + snapshotValue: null); + } + else if (reader.ValueTextEquals(CentralTransitiveDependencyGroupsPropertyName)) + { + IList results = null; + if (reader.Read() && reader.TokenType == JsonTokenType.StartObject) + { + while (reader.Read() && reader.TokenType == JsonTokenType.PropertyName) + { + results ??= new List(); + var frameworkPropertyName = reader.GetString(); + NuGetFramework framework = NuGetFramework.Parse(frameworkPropertyName); + + JsonPackageSpecReader.ReadCentralTransitiveDependencyGroup( + jsonReader: ref reader, + results: out var dependencies, + packageSpecPath: string.Empty); + results.Add(new CentralTransitiveDependencyGroup(framework, dependencies)); + } + } + lockFile.CentralTransitiveDependencyGroups = results ?? Array.Empty(); + } + else if (reader.ValueTextEquals(LogsPropertyName)) + { + reader.Read(); + lockFile.LogMessages = reader.ReadListOfObjects(Utf8JsonReaderExtensions.IAssetsLogMessageConverter); + } + else + { + reader.Skip(); + } + } + + if (!string.IsNullOrEmpty(lockFile.PackageSpec?.RestoreMetadata?.ProjectPath) && lockFile.LogMessages.Count > 0) + { + foreach (AssetsLogMessage message in lockFile.LogMessages.Where(x => string.IsNullOrEmpty(x.ProjectPath))) + { + message.FilePath = lockFile.PackageSpec.RestoreMetadata.ProjectPath; + } + } + + return lockFile; + } + } +} diff --git a/src/NuGet.Core/NuGet.ProjectModel/LockFile/Utf8JsonStreamLockFileItemConverter.cs b/src/NuGet.Core/NuGet.ProjectModel/LockFile/Utf8JsonStreamLockFileItemConverter.cs new file mode 100644 index 00000000000..9a2ce569db0 --- /dev/null +++ b/src/NuGet.Core/NuGet.ProjectModel/LockFile/Utf8JsonStreamLockFileItemConverter.cs @@ -0,0 +1,55 @@ +// Copyright (c) .NET Foundation. All rights reserved. +// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. + +using System; +using System.Text.Json; + +namespace NuGet.ProjectModel +{ + /// + /// A to allow read JSON into + /// + /// + /// "path/to/the.dll": { + /// "property1": "val1", + /// "property2": 2 + /// "property3": true + /// "property4": false + /// } + /// + internal class Utf8JsonStreamLockFileItemConverter : IUtf8JsonStreamReaderConverter where T : LockFileItem + { + private Func _lockFileItemCreator; + + public Utf8JsonStreamLockFileItemConverter(Func lockFileItemCreator) + { + _lockFileItemCreator = lockFileItemCreator; + } + + public T Read(ref Utf8JsonStreamReader reader) + { + var genericType = typeof(T); + + if (reader.TokenType != JsonTokenType.PropertyName) + { + throw new JsonException("Expected PropertyName, found " + reader.TokenType); + } + + //We want to read the property name right away + var lockItemPath = reader.GetString(); + LockFileItem lockFileItem = _lockFileItemCreator(lockItemPath); + + reader.Read(); + if (reader.TokenType == JsonTokenType.StartObject) + { + while (reader.Read() && reader.TokenType == JsonTokenType.PropertyName) + { + var propertyName = reader.GetString(); + lockFileItem.Properties[propertyName] = reader.ReadNextTokenAsString(); + } + } + + return lockFileItem as T; + } + } +} diff --git a/src/NuGet.Core/NuGet.ProjectModel/LockFile/Utf8JsonStreamLockFileLibraryConverter.cs b/src/NuGet.Core/NuGet.ProjectModel/LockFile/Utf8JsonStreamLockFileLibraryConverter.cs new file mode 100644 index 00000000000..43006240f4a --- /dev/null +++ b/src/NuGet.Core/NuGet.ProjectModel/LockFile/Utf8JsonStreamLockFileLibraryConverter.cs @@ -0,0 +1,102 @@ +// Copyright (c) .NET Foundation. All rights reserved. +// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. + +using System.Text; +using System.Text.Json; +using NuGet.Versioning; + +namespace NuGet.ProjectModel +{ + /// + /// A to allow read JSON into + /// + /// + /// "PackageA/1.0.0": { + /// "sha512": "ASha512", + /// "type": "package", + /// "path": "C:\a\test\path", + /// "files": [ + /// "PackageA.nuspec", + /// "lib/netstandard2.0/PackageA.dll" + /// ], + /// "msbuildProject": "bar", + /// "servicable": true, + /// "hasTools": true, + /// } + /// + internal class Utf8JsonStreamLockFileLibraryConverter : IUtf8JsonStreamReaderConverter + { + private static readonly byte[] Sha512PropertyName = Encoding.UTF8.GetBytes("sha512"); + private static readonly byte[] TypePropertyName = Encoding.UTF8.GetBytes("type"); + private static readonly byte[] PathPropertyName = Encoding.UTF8.GetBytes("path"); + private static readonly byte[] MsbuildProjectPropertyName = Encoding.UTF8.GetBytes("msbuildProject"); + private static readonly byte[] ServicablePropertyName = Encoding.UTF8.GetBytes("servicable"); + private static readonly byte[] HasToolsPropertyName = Encoding.UTF8.GetBytes("hasTools"); + private static readonly byte[] FilesPropertyName = Encoding.UTF8.GetBytes("files"); + + public LockFileLibrary Read(ref Utf8JsonStreamReader reader) + { + + if (reader.TokenType != JsonTokenType.PropertyName) + { + throw new JsonException("Expected PropertyName, found " + reader.TokenType); + } + + var lockFileLibrary = new LockFileLibrary(); + //We want to read the property name right away + var propertyName = reader.GetString(); + var (name, version) = propertyName.SplitInTwo(LockFile.DirectorySeparatorChar); + lockFileLibrary.Name = name; + if (!string.IsNullOrWhiteSpace(version)) + { + lockFileLibrary.Version = NuGetVersion.Parse(version); + } + + reader.Read(); + if (reader.TokenType != JsonTokenType.StartObject) + { + throw new JsonException("Expected StartObject, found " + reader.TokenType); + } + + while (reader.Read() && reader.TokenType == JsonTokenType.PropertyName) + { + if (reader.ValueTextEquals(TypePropertyName)) + { + lockFileLibrary.Type = reader.ReadNextTokenAsString(); + } + else if (reader.ValueTextEquals(PathPropertyName)) + { + lockFileLibrary.Path = reader.ReadNextTokenAsString(); + } + else if (reader.ValueTextEquals(MsbuildProjectPropertyName)) + { + lockFileLibrary.MSBuildProject = reader.ReadNextTokenAsString(); + } + else if (reader.ValueTextEquals(Sha512PropertyName)) + { + lockFileLibrary.Sha512 = reader.ReadNextTokenAsString(); + } + else if (reader.ValueTextEquals(ServicablePropertyName)) + { + reader.Read(); + lockFileLibrary.IsServiceable = reader.GetBoolean(); + } + else if (reader.ValueTextEquals(HasToolsPropertyName)) + { + reader.Read(); + lockFileLibrary.HasTools = reader.GetBoolean(); + } + else if (reader.ValueTextEquals(FilesPropertyName)) + { + reader.Read(); + reader.ReadStringArrayAsIList(lockFileLibrary.Files); + } + else + { + reader.Skip(); + } + } + return lockFileLibrary; + } + } +} diff --git a/src/NuGet.Core/NuGet.ProjectModel/LockFile/Utf8JsonStreamLockFileTargetConverter.cs b/src/NuGet.Core/NuGet.ProjectModel/LockFile/Utf8JsonStreamLockFileTargetConverter.cs new file mode 100644 index 00000000000..1de4e0de65f --- /dev/null +++ b/src/NuGet.Core/NuGet.ProjectModel/LockFile/Utf8JsonStreamLockFileTargetConverter.cs @@ -0,0 +1,40 @@ +// Copyright (c) .NET Foundation. All rights reserved. +// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. + +using System.Text.Json; +using NuGet.Frameworks; + +namespace NuGet.ProjectModel +{ + /// + /// A to allow read JSON into + /// + /// + /// "net45/win8": { + /// , + /// } + /// + internal class Utf8JsonStreamLockFileTargetConverter : IUtf8JsonStreamReaderConverter + { + public LockFileTarget Read(ref Utf8JsonStreamReader reader) + { + if (reader.TokenType != JsonTokenType.PropertyName) + { + throw new JsonException("Expected PropertyName, found " + reader.TokenType); + } + + var lockFileTarget = new LockFileTarget(); + //We want to read the property name right away + var propertyName = reader.GetString(); + var (targetFramework, runTimeFramework) = propertyName.SplitInTwo(LockFile.DirectorySeparatorChar); + + lockFileTarget.TargetFramework = NuGetFramework.Parse(targetFramework); + lockFileTarget.RuntimeIdentifier = runTimeFramework; + + reader.Read(); + lockFileTarget.Libraries = reader.ReadObjectAsList(Utf8JsonReaderExtensions.LockFileTargetLibraryConverter); + + return lockFileTarget; + } + } +} diff --git a/src/NuGet.Core/NuGet.ProjectModel/LockFile/Utf8JsonStreamLockFileTargetLibraryConverter.cs b/src/NuGet.Core/NuGet.ProjectModel/LockFile/Utf8JsonStreamLockFileTargetLibraryConverter.cs new file mode 100644 index 00000000000..4f88c3d0dcc --- /dev/null +++ b/src/NuGet.Core/NuGet.ProjectModel/LockFile/Utf8JsonStreamLockFileTargetLibraryConverter.cs @@ -0,0 +1,195 @@ +// Copyright (c) .NET Foundation. All rights reserved. +// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. + +using System; +using System.Collections.Generic; +using System.Text; +using System.Text.Json; +using NuGet.Packaging.Core; +using NuGet.Versioning; + +namespace NuGet.ProjectModel +{ + /// + /// A to allow read JSON into + /// + /// + /// "Lirbary/1.0.0": { + /// "type": "package", + /// "framework": ".NETCoreApp,Version=v6.0", + /// "dependencies": { + /// "Library.Name": "1.0.1", + /// "Parser.Json": "10.0.0", + /// }, + /// "frameworkAssemblies": [ + /// "System" + /// ], + /// "compile": { + /// , + /// }, + /// "runtime": { + /// , + /// }, + /// "resource": { + /// , + /// }, + /// "contentFiles": { + /// , + /// }, + /// "runtimeTargets": { + /// , + /// }, + /// "tools": { + /// , + /// }, + /// "embed": { + /// , + /// }, + /// "frameworkReferences": [ + /// "Framework1", + /// ] + /// } + /// + internal class Utf8JsonStreamLockFileTargetLibraryConverter : IUtf8JsonStreamReaderConverter + { + private static readonly byte[] TypePropertyName = Encoding.UTF8.GetBytes("type"); + private static readonly byte[] FrameworkPropertyName = Encoding.UTF8.GetBytes("framework"); + private static readonly byte[] DependenciesPropertyName = Encoding.UTF8.GetBytes("dependencies"); + private static readonly byte[] FrameworkAssembliesPropertyName = Encoding.UTF8.GetBytes("frameworkAssemblies"); + private static readonly byte[] RuntimePropertyName = Encoding.UTF8.GetBytes("runtime"); + private static readonly byte[] CompilePropertyName = Encoding.UTF8.GetBytes("compile"); + private static readonly byte[] ResourcePropertyName = Encoding.UTF8.GetBytes("resource"); + private static readonly byte[] NativePropertyName = Encoding.UTF8.GetBytes("native"); + private static readonly byte[] BuildPropertyName = Encoding.UTF8.GetBytes("build"); + private static readonly byte[] BuildMultiTargetingPropertyName = Encoding.UTF8.GetBytes("buildMultiTargeting"); + private static readonly byte[] ContentFilesPropertyName = Encoding.UTF8.GetBytes("contentFiles"); + private static readonly byte[] RuntimeTargetsPropertyName = Encoding.UTF8.GetBytes("runtimeTargets"); + private static readonly byte[] ToolsPropertyName = Encoding.UTF8.GetBytes("tools"); + private static readonly byte[] EmbedPropertyName = Encoding.UTF8.GetBytes("embed"); + private static readonly byte[] FrameworkReferencesPropertyName = Encoding.UTF8.GetBytes("frameworkReferences"); + + public LockFileTargetLibrary Read(ref Utf8JsonStreamReader reader) + { + if (reader.TokenType != JsonTokenType.PropertyName) + { + throw new JsonException("Expected PropertyName, found " + reader.TokenType); + } + + var lockFileTargetLibrary = new LockFileTargetLibrary(); + + //We want to read the property name right away + var propertyName = reader.GetString(); + var (targetLibraryName, version) = propertyName.SplitInTwo('/'); + lockFileTargetLibrary.Name = targetLibraryName; + lockFileTargetLibrary.Version = version is null ? null : NuGetVersion.Parse(version); + + reader.Read(); + if (reader.TokenType != JsonTokenType.StartObject) + { + throw new JsonException("Expected StartObject, found " + reader.TokenType); + } + + while (reader.Read() && reader.TokenType == JsonTokenType.PropertyName) + { + if (reader.ValueTextEquals(TypePropertyName)) + { + lockFileTargetLibrary.Type = reader.ReadNextTokenAsString(); + } + else if (reader.ValueTextEquals(FrameworkPropertyName)) + { + lockFileTargetLibrary.Framework = reader.ReadNextTokenAsString(); + } + else if (reader.ValueTextEquals(DependenciesPropertyName)) + { + reader.Read(); + lockFileTargetLibrary.Dependencies = ReadPackageDependencyList(ref reader); + } + else if (reader.ValueTextEquals(FrameworkAssembliesPropertyName)) + { + reader.Read(); + lockFileTargetLibrary.FrameworkAssemblies = reader.ReadStringArrayAsIList() ?? Array.Empty(); + } + else if (reader.ValueTextEquals(RuntimePropertyName)) + { + reader.Read(); + lockFileTargetLibrary.RuntimeAssemblies = reader.ReadObjectAsList(Utf8JsonReaderExtensions.LockFileItemConverter); + } + else if (reader.ValueTextEquals(CompilePropertyName)) + { + reader.Read(); + lockFileTargetLibrary.CompileTimeAssemblies = reader.ReadObjectAsList(Utf8JsonReaderExtensions.LockFileItemConverter); + } + else if (reader.ValueTextEquals(ResourcePropertyName)) + { + reader.Read(); + lockFileTargetLibrary.ResourceAssemblies = reader.ReadObjectAsList(Utf8JsonReaderExtensions.LockFileItemConverter); + } + else if (reader.ValueTextEquals(NativePropertyName)) + { + reader.Read(); + lockFileTargetLibrary.NativeLibraries = reader.ReadObjectAsList(Utf8JsonReaderExtensions.LockFileItemConverter); + } + else if (reader.ValueTextEquals(BuildPropertyName)) + { + reader.Read(); + lockFileTargetLibrary.Build = reader.ReadObjectAsList(Utf8JsonReaderExtensions.LockFileItemConverter); + } + else if (reader.ValueTextEquals(BuildMultiTargetingPropertyName)) + { + reader.Read(); + lockFileTargetLibrary.BuildMultiTargeting = reader.ReadObjectAsList(Utf8JsonReaderExtensions.LockFileItemConverter); + } + else if (reader.ValueTextEquals(ContentFilesPropertyName)) + { + reader.Read(); + lockFileTargetLibrary.ContentFiles = reader.ReadObjectAsList(Utf8JsonReaderExtensions.LockFileContentFileConverter); + } + else if (reader.ValueTextEquals(RuntimeTargetsPropertyName)) + { + reader.Read(); + lockFileTargetLibrary.RuntimeTargets = reader.ReadObjectAsList(Utf8JsonReaderExtensions.LockFileRuntimeTargetConverter); + } + else if (reader.ValueTextEquals(ToolsPropertyName)) + { + reader.Read(); + lockFileTargetLibrary.ToolsAssemblies = reader.ReadObjectAsList(Utf8JsonReaderExtensions.LockFileItemConverter); + } + else if (reader.ValueTextEquals(EmbedPropertyName)) + { + reader.Read(); + lockFileTargetLibrary.EmbedAssemblies = reader.ReadObjectAsList(Utf8JsonReaderExtensions.LockFileItemConverter); + } + else if (reader.ValueTextEquals(FrameworkReferencesPropertyName)) + { + reader.Read(); + lockFileTargetLibrary.FrameworkReferences = reader.ReadStringArrayAsIList(); + } + else + { + reader.Skip(); + } + } + lockFileTargetLibrary.Freeze(); + return lockFileTargetLibrary; + } + + private IList ReadPackageDependencyList(ref Utf8JsonStreamReader reader) + { + if (reader.TokenType != JsonTokenType.StartObject) + { + return Array.Empty(); + } + + var packageDependencies = new List(10); + while (reader.Read() && reader.TokenType == JsonTokenType.PropertyName) + { + string propertyName = reader.GetString(); + string versionString = reader.ReadNextTokenAsString(); + packageDependencies.Add(new PackageDependency( + propertyName, + versionString == null ? null : VersionRange.Parse(versionString))); + } + return packageDependencies; + } + } +} diff --git a/src/NuGet.Core/NuGet.ProjectModel/StringExtensions.cs b/src/NuGet.Core/NuGet.ProjectModel/StringExtensions.cs new file mode 100644 index 00000000000..925bda42fd2 --- /dev/null +++ b/src/NuGet.Core/NuGet.ProjectModel/StringExtensions.cs @@ -0,0 +1,30 @@ +// Copyright (c) .NET Foundation. All rights reserved. +// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. +#nullable enable + +using System.Globalization; + +namespace NuGet.ProjectModel +{ + internal static class StringExtensions + { + internal static (string firstPart, string? secondPart) SplitInTwo(this string s, char separator) + { + if (string.IsNullOrEmpty(s)) + { + return (s, null); + } + var index = CultureInfo.CurrentCulture.CompareInfo.IndexOf(s, separator, CompareOptions.Ordinal); + + if (index == -1) + { + return (s, null); + } + + return (s.Substring(0, index), + index >= s.Length - 1 ? + null : + s.Substring(index + 1)); + } + } +} diff --git a/src/NuGet.Core/NuGet.ProjectModel/Utf8JsonReaderExtensions.cs b/src/NuGet.Core/NuGet.ProjectModel/Utf8JsonReaderExtensions.cs index 7b40b3f1b30..bf53c40bba2 100644 --- a/src/NuGet.Core/NuGet.ProjectModel/Utf8JsonReaderExtensions.cs +++ b/src/NuGet.Core/NuGet.ProjectModel/Utf8JsonReaderExtensions.cs @@ -8,6 +8,17 @@ namespace NuGet.ProjectModel { internal static class Utf8JsonReaderExtensions { + internal static readonly Utf8JsonStreamLockFileConverter LockFileConverter = new Utf8JsonStreamLockFileConverter(); + internal static readonly Utf8JsonStreamLockFileItemConverter LockFileItemConverter = new Utf8JsonStreamLockFileItemConverter((string filePath) => new LockFileItem(filePath)); + internal static readonly Utf8JsonStreamLockFileItemConverter LockFileContentFileConverter = new Utf8JsonStreamLockFileItemConverter((string filePath) => new LockFileContentFile(filePath)); + internal static readonly Utf8JsonStreamLockFileItemConverter LockFileRuntimeTargetConverter = new Utf8JsonStreamLockFileItemConverter((string filePath) => new LockFileRuntimeTarget(filePath)); + internal static readonly Utf8JsonStreamLockFileTargetLibraryConverter LockFileTargetLibraryConverter = new Utf8JsonStreamLockFileTargetLibraryConverter(); + internal static readonly Utf8JsonStreamLockFileLibraryConverter LockFileLibraryConverter = new Utf8JsonStreamLockFileLibraryConverter(); + internal static readonly Utf8JsonStreamLockFileTargetConverter LockFileTargetConverter = new Utf8JsonStreamLockFileTargetConverter(); + internal static readonly Utf8JsonStreamProjectFileDependencyGroupConverter ProjectFileDepencencyGroupConverter = new Utf8JsonStreamProjectFileDependencyGroupConverter(); + internal static readonly Utf8JsonStreamIAssetsLogMessageConverter IAssetsLogMessageConverter = new Utf8JsonStreamIAssetsLogMessageConverter(); + + internal static string ReadTokenAsString(this ref Utf8JsonReader reader) { switch (reader.TokenType) diff --git a/src/NuGet.Core/NuGet.ProjectModel/Utf8JsonStreamProjectFileDependencyGroupConverter.cs b/src/NuGet.Core/NuGet.ProjectModel/Utf8JsonStreamProjectFileDependencyGroupConverter.cs new file mode 100644 index 00000000000..b452497341a --- /dev/null +++ b/src/NuGet.Core/NuGet.ProjectModel/Utf8JsonStreamProjectFileDependencyGroupConverter.cs @@ -0,0 +1,33 @@ +// Copyright (c) .NET Foundation. All rights reserved. +// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. + +using System; +using System.Text.Json; + +namespace NuGet.ProjectModel +{ + /// + /// A to allow reading JSON into + /// + /// + /// "net45": [ + /// "Json.Parser (>= 1.0.1)", + /// ] + /// + internal class Utf8JsonStreamProjectFileDependencyGroupConverter : IUtf8JsonStreamReaderConverter + { + public ProjectFileDependencyGroup Read(ref Utf8JsonStreamReader reader) + { + if (reader.TokenType != JsonTokenType.PropertyName) + { + throw new JsonException("Expected PropertyName, found " + reader.TokenType); + } + + var frameworkName = reader.GetString(); + reader.Read(); + var dependencies = reader.ReadStringArrayAsIList() ?? Array.Empty(); + + return new ProjectFileDependencyGroup(frameworkName, dependencies); + } + } +} diff --git a/src/NuGet.Core/NuGet.ProjectModel/Utf8JsonStreamReader.cs b/src/NuGet.Core/NuGet.ProjectModel/Utf8JsonStreamReader.cs index 96b6c1f4c69..e92a2dc0c98 100644 --- a/src/NuGet.Core/NuGet.ProjectModel/Utf8JsonStreamReader.cs +++ b/src/NuGet.Core/NuGet.ProjectModel/Utf8JsonStreamReader.cs @@ -18,6 +18,11 @@ internal ref struct Utf8JsonStreamReader { private static readonly char[] DelimitedStringDelimiters = [' ', ',']; private static readonly byte[] Utf8Bom = [0xEF, 0xBB, 0xBF]; + private static readonly JsonReaderOptions DefaultJsonReaderOptions = new JsonReaderOptions + { + AllowTrailingCommas = true, + CommentHandling = JsonCommentHandling.Skip, + }; private const int BufferSizeDefault = 16 * 1024; private const int MinBufferSize = 1024; @@ -53,13 +58,9 @@ internal Utf8JsonStreamReader(Stream stream, int bufferSize = BufferSizeDefault, _bufferUsed = 3; } - var iniialJsonReaderState = new JsonReaderState(new JsonReaderOptions - { - AllowTrailingCommas = true, - CommentHandling = JsonCommentHandling.Skip, - }); + var initialJsonReaderState = new JsonReaderState(DefaultJsonReaderOptions); - ReadStreamIntoBuffer(iniialJsonReaderState); + ReadStreamIntoBuffer(initialJsonReaderState); _reader.Read(); } @@ -104,6 +105,59 @@ internal void Skip() } } + internal IList ReadObjectAsList(IUtf8JsonStreamReaderConverter streamReaderConverter) + { + if (TokenType == JsonTokenType.Null) + { + return Array.Empty(); + } + + if (TokenType != JsonTokenType.StartObject) + { + throw new JsonException($"Expected start object token but instead found '{TokenType}'"); + } + //We use JsonObjects for the arrays so we advance to the first property in the object which is the name/ver of the first library + Read(); + + if (TokenType == JsonTokenType.EndObject) + { + return Array.Empty(); + } + + var listObjects = new List(); + do + { + listObjects.Add(streamReaderConverter.Read(ref this)); + //At this point we're looking at the EndObject token for the object, need to advance. + Read(); + } + while (TokenType != JsonTokenType.EndObject); + return listObjects; + } + + internal IList ReadListOfObjects(IUtf8JsonStreamReaderConverter streamReaderConverter) + { + if (TokenType != JsonTokenType.StartArray) + { + throw new JsonException($"Expected start array token but instead found '{TokenType}'"); + } + + IList objectList = null; + if (TokenType == JsonTokenType.StartArray) + { + while (Read() && TokenType != JsonTokenType.EndArray) + { + var convertedObject = streamReaderConverter.Read(ref this); + if (convertedObject != null) + { + objectList ??= new List(); + objectList.Add(convertedObject); + } + } + } + return objectList ?? Array.Empty(); + } + internal string ReadNextTokenAsString() { ThrowExceptionIfDisposed(); @@ -124,7 +178,7 @@ internal IList ReadStringArrayAsIList(IList strings = null) { string value = _reader.ReadTokenAsString(); - strings = strings ?? new List(); + strings ??= new List(); strings.Add(value); } @@ -196,7 +250,7 @@ internal IReadOnlyList ReadStringArrayAsReadOnlyListFromArrayStart() { string value = _reader.ReadTokenAsString(); - strings = strings ?? new List(); + strings ??= new List(); strings.Add(value); } diff --git a/src/NuGet.Core/NuGet.ProjectModel/Utf8JsonStreamReaderConverter.cs b/src/NuGet.Core/NuGet.ProjectModel/Utf8JsonStreamReaderConverter.cs index 167750c3828..730560501c7 100644 --- a/src/NuGet.Core/NuGet.ProjectModel/Utf8JsonStreamReaderConverter.cs +++ b/src/NuGet.Core/NuGet.ProjectModel/Utf8JsonStreamReaderConverter.cs @@ -6,8 +6,8 @@ namespace NuGet.ProjectModel /// An abstract class that defines a function for reading a into a /// /// - internal abstract class Utf8JsonStreamReaderConverter + internal interface IUtf8JsonStreamReaderConverter { - public abstract T Read(ref Utf8JsonStreamReader reader); + T Read(ref Utf8JsonStreamReader reader); } } diff --git a/test/NuGet.Core.Tests/NuGet.ProjectModel.Test/DependencyTargetTests.cs b/test/NuGet.Core.Tests/NuGet.ProjectModel.Test/DependencyTargetTests.cs index b0e65bb8cc4..0fe32011470 100644 --- a/test/NuGet.Core.Tests/NuGet.ProjectModel.Test/DependencyTargetTests.cs +++ b/test/NuGet.Core.Tests/NuGet.ProjectModel.Test/DependencyTargetTests.cs @@ -1,7 +1,6 @@ // Copyright (c) .NET Foundation. All rights reserved. // Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. -using System; using System.IO; using System.Linq; using System.Text; @@ -11,11 +10,10 @@ namespace NuGet.ProjectModel.Test { - [Obsolete] public class DependencyTargetTests { [Theory] - [MemberData(nameof(JsonPackageSpecReaderTests.TestEnvironmentVariableReader), MemberType = typeof(JsonPackageSpecReaderTests))] + [MemberData(nameof(LockFileParsingEnvironmentVariable.TestEnvironmentVariableReader), MemberType = typeof(LockFileParsingEnvironmentVariable))] public void DependencyTarget_ExternalProjectValue(IEnvironmentVariableReader environmentVariableReader) { // Arrange @@ -40,7 +38,7 @@ public void DependencyTarget_ExternalProjectValue(IEnvironmentVariableReader env } [Theory] - [MemberData(nameof(JsonPackageSpecReaderTests.TestEnvironmentVariableReader), MemberType = typeof(JsonPackageSpecReaderTests))] + [MemberData(nameof(LockFileParsingEnvironmentVariable.TestEnvironmentVariableReader), MemberType = typeof(LockFileParsingEnvironmentVariable))] public void DependencyTarget_ProjectValue(IEnvironmentVariableReader environmentVariableReader) { // Arrange @@ -65,7 +63,7 @@ public void DependencyTarget_ProjectValue(IEnvironmentVariableReader environment } [Theory] - [MemberData(nameof(JsonPackageSpecReaderTests.TestEnvironmentVariableReader), MemberType = typeof(JsonPackageSpecReaderTests))] + [MemberData(nameof(LockFileParsingEnvironmentVariable.TestEnvironmentVariableReader), MemberType = typeof(LockFileParsingEnvironmentVariable))] public void DependencyTarget_PackageValue(IEnvironmentVariableReader environmentVariableReader) { // Arrange @@ -90,7 +88,7 @@ public void DependencyTarget_PackageValue(IEnvironmentVariableReader environment } [Theory] - [MemberData(nameof(JsonPackageSpecReaderTests.TestEnvironmentVariableReader), MemberType = typeof(JsonPackageSpecReaderTests))] + [MemberData(nameof(LockFileParsingEnvironmentVariable.TestEnvironmentVariableReader), MemberType = typeof(LockFileParsingEnvironmentVariable))] public void DependencyTarget_CaseInsensitive(IEnvironmentVariableReader environmentVariableReader) { // Arrange @@ -115,7 +113,7 @@ public void DependencyTarget_CaseInsensitive(IEnvironmentVariableReader environm } [Theory] - [MemberData(nameof(JsonPackageSpecReaderTests.TestEnvironmentVariableReader), MemberType = typeof(JsonPackageSpecReaderTests))] + [MemberData(nameof(LockFileParsingEnvironmentVariable.TestEnvironmentVariableReader), MemberType = typeof(LockFileParsingEnvironmentVariable))] public void DependencyTarget_DefaultValueDefault(IEnvironmentVariableReader environmentVariableReader) { // Arrange @@ -138,7 +136,7 @@ public void DependencyTarget_DefaultValueDefault(IEnvironmentVariableReader envi } [Theory] - [MemberData(nameof(JsonPackageSpecReaderTests.TestEnvironmentVariableReader), MemberType = typeof(JsonPackageSpecReaderTests))] + [MemberData(nameof(LockFileParsingEnvironmentVariable.TestEnvironmentVariableReader), MemberType = typeof(LockFileParsingEnvironmentVariable))] public void DependencyTarget_UnknownValueFails(IEnvironmentVariableReader environmentVariableReader) { // Arrange @@ -173,14 +171,14 @@ public void DependencyTarget_UnknownValueFails(IEnvironmentVariableReader enviro Assert.Equal("Invalid dependency target value 'blah'.", exception.Message); Assert.EndsWith("project.json", exception.Path); - if (string.Equals(bool.TrueString, environmentVariableReader.GetEnvironmentVariable("NUGET_EXPERIMENTAL_USE_NJ_FOR_FILE_PARSING"))) + if (string.Equals(bool.TrueString, environmentVariableReader.GetEnvironmentVariable(JsonUtility.NUGET_EXPERIMENTAL_USE_NJ_FOR_FILE_PARSING))) { Assert.Equal(5, exception.Line); } } [Theory] - [MemberData(nameof(JsonPackageSpecReaderTests.TestEnvironmentVariableReader), MemberType = typeof(JsonPackageSpecReaderTests))] + [MemberData(nameof(LockFileParsingEnvironmentVariable.TestEnvironmentVariableReader), MemberType = typeof(LockFileParsingEnvironmentVariable))] public void DependencyTarget_NonWhiteListValueFails(IEnvironmentVariableReader environmentVariableReader) { // Arrange @@ -215,14 +213,14 @@ public void DependencyTarget_NonWhiteListValueFails(IEnvironmentVariableReader e Assert.Equal("Invalid dependency target value 'winmd'.", exception.Message); Assert.EndsWith("project.json", exception.Path); - if (string.Equals(bool.TrueString, environmentVariableReader.GetEnvironmentVariable("NUGET_EXPERIMENTAL_USE_NJ_FOR_FILE_PARSING"))) + if (string.Equals(bool.TrueString, environmentVariableReader.GetEnvironmentVariable(JsonUtility.NUGET_EXPERIMENTAL_USE_NJ_FOR_FILE_PARSING))) { Assert.Equal(5, exception.Line); } } [Theory] - [MemberData(nameof(JsonPackageSpecReaderTests.TestEnvironmentVariableReader), MemberType = typeof(JsonPackageSpecReaderTests))] + [MemberData(nameof(LockFileParsingEnvironmentVariable.TestEnvironmentVariableReader), MemberType = typeof(LockFileParsingEnvironmentVariable))] public void DependencyTarget_MultipleValuesFail(IEnvironmentVariableReader environmentVariableReader) { // Arrange @@ -257,14 +255,14 @@ public void DependencyTarget_MultipleValuesFail(IEnvironmentVariableReader envir Assert.Equal("Invalid dependency target value 'package,project'.", exception.Message); Assert.EndsWith("project.json", exception.Path); - if (string.Equals(bool.TrueString, environmentVariableReader.GetEnvironmentVariable("NUGET_EXPERIMENTAL_USE_NJ_FOR_FILE_PARSING"))) + if (string.Equals(bool.TrueString, environmentVariableReader.GetEnvironmentVariable(JsonUtility.NUGET_EXPERIMENTAL_USE_NJ_FOR_FILE_PARSING))) { Assert.Equal(5, exception.Line); } } [Theory] - [MemberData(nameof(JsonPackageSpecReaderTests.TestEnvironmentVariableReader), MemberType = typeof(JsonPackageSpecReaderTests))] + [MemberData(nameof(LockFileParsingEnvironmentVariable.TestEnvironmentVariableReader), MemberType = typeof(LockFileParsingEnvironmentVariable))] public void DependencyTarget_AcceptsWhitespace(IEnvironmentVariableReader environmentVariableReader) { // Arrange @@ -292,7 +290,7 @@ public void DependencyTarget_AcceptsWhitespace(IEnvironmentVariableReader enviro private static PackageSpec GetPackageSpec(string json, string name, string packageSpecPath, IEnvironmentVariableReader environmentVariableReader) { using var stream = new MemoryStream(Encoding.UTF8.GetBytes(json)); - return JsonPackageSpecReader.GetPackageSpec(stream, name, packageSpecPath, null, environmentVariableReader); + return JsonPackageSpecReader.GetPackageSpec(stream, name, packageSpecPath, null, environmentVariableReader, true); } } diff --git a/test/NuGet.Core.Tests/NuGet.ProjectModel.Test/JsonPackageSpecReaderTests.cs b/test/NuGet.Core.Tests/NuGet.ProjectModel.Test/JsonPackageSpecReaderTests.cs index ee0288bb3b9..f129e1098a3 100644 --- a/test/NuGet.Core.Tests/NuGet.ProjectModel.Test/JsonPackageSpecReaderTests.cs +++ b/test/NuGet.Core.Tests/NuGet.ProjectModel.Test/JsonPackageSpecReaderTests.cs @@ -26,7 +26,7 @@ namespace NuGet.ProjectModel.Test public class JsonPackageSpecReaderTests { [Theory] - [MemberData(nameof(TestEnvironmentVariableReader))] + [MemberData(nameof(LockFileParsingEnvironmentVariable.TestEnvironmentVariableReader), MemberType = typeof(LockFileParsingEnvironmentVariable))] public void PackageSpecReader_PackageMissingVersion(IEnvironmentVariableReader environmentVariableReader) { // Arrange @@ -58,7 +58,7 @@ public void PackageSpecReader_PackageMissingVersion(IEnvironmentVariableReader e } [Theory] - [MemberData(nameof(TestEnvironmentVariableReader))] + [MemberData(nameof(LockFileParsingEnvironmentVariable.TestEnvironmentVariableReader), MemberType = typeof(LockFileParsingEnvironmentVariable))] public void PackageSpecReader_ProjectMissingVersion(IEnvironmentVariableReader environmentVariableReader) { // Arrange @@ -83,7 +83,7 @@ public void PackageSpecReader_ProjectMissingVersion(IEnvironmentVariableReader e } [Theory] - [MemberData(nameof(TestEnvironmentVariableReader))] + [MemberData(nameof(LockFileParsingEnvironmentVariable.TestEnvironmentVariableReader), MemberType = typeof(LockFileParsingEnvironmentVariable))] public void PackageSpecReader_PackageEmptyVersion(IEnvironmentVariableReader environmentVariableReader) { // Arrange @@ -115,7 +115,7 @@ public void PackageSpecReader_PackageEmptyVersion(IEnvironmentVariableReader env } [Theory] - [MemberData(nameof(TestEnvironmentVariableReader))] + [MemberData(nameof(LockFileParsingEnvironmentVariable.TestEnvironmentVariableReader), MemberType = typeof(LockFileParsingEnvironmentVariable))] public void PackageSpecReader_PackageWhitespaceVersion(IEnvironmentVariableReader environmentVariableReader) { // Arrange @@ -147,7 +147,7 @@ public void PackageSpecReader_PackageWhitespaceVersion(IEnvironmentVariableReade } [Theory] - [MemberData(nameof(TestEnvironmentVariableReader))] + [MemberData(nameof(LockFileParsingEnvironmentVariable.TestEnvironmentVariableReader), MemberType = typeof(LockFileParsingEnvironmentVariable))] public void PackageSpecReader_FrameworkAssemblyEmptyVersion(IEnvironmentVariableReader environmentVariableReader) { // Arrange @@ -170,7 +170,7 @@ public void PackageSpecReader_FrameworkAssemblyEmptyVersion(IEnvironmentVariable } [Theory] - [MemberData(nameof(TestEnvironmentVariableReader))] + [MemberData(nameof(LockFileParsingEnvironmentVariable.TestEnvironmentVariableReader), MemberType = typeof(LockFileParsingEnvironmentVariable))] public void PackageSpecReader_ExplicitIncludesOverrideTypePlatform(IEnvironmentVariableReader environmentVariableReader) { // Arrange @@ -196,26 +196,25 @@ public void PackageSpecReader_ExplicitIncludesOverrideTypePlatform(IEnvironmentV } [Theory] - [MemberData(nameof(TestEnvironmentVariableReader), "{}")] - [MemberData(nameof(TestEnvironmentVariableReader), "{}")] + [MemberData(nameof(TestEnvironmentVariableReader), "{}", MemberType = typeof(LockFileParsingEnvironmentVariable))] [MemberData(nameof(TestEnvironmentVariableReader), @"{ ""packOptions"": {} - }")] + }", MemberType = typeof(LockFileParsingEnvironmentVariable))] [MemberData(nameof(TestEnvironmentVariableReader), @"{ ""packOptions"": { ""foo"": [1, 2] } - }")] + }", MemberType = typeof(LockFileParsingEnvironmentVariable))] [MemberData(nameof(TestEnvironmentVariableReader), @"{ ""packOptions"": { ""packageType"": null } - }")] + }", MemberType = typeof(LockFileParsingEnvironmentVariable))] [MemberData(nameof(TestEnvironmentVariableReader), @"{ ""packOptions"": { ""packageType"": [] } - }")] + }", MemberType = typeof(LockFileParsingEnvironmentVariable))] #pragma warning disable CS0612 // Type or member is obsolete public void PackageSpecReader_PackOptions_Default(IEnvironmentVariableReader environmentVariableReader, string json) { @@ -234,7 +233,7 @@ public void PackageSpecReader_PackOptions_Default(IEnvironmentVariableReader env ""packOptions"": { ""packageType"": ""foo"" } - }")] + }", MemberType = typeof(LockFileParsingEnvironmentVariable))] public void PackageSpecReader_Malformed_Default(IEnvironmentVariableReader environmentVariableReader, string json) { // Arrange & Act @@ -251,27 +250,27 @@ public void PackageSpecReader_Malformed_Default(IEnvironmentVariableReader envir ""packOptions"": { ""packageType"": ""foo"" } - }", new[] { "foo" })] + }", new[] { "foo" }, MemberType = typeof(LockFileParsingEnvironmentVariable))] [MemberData(nameof(TestEnvironmentVariableReader), @"{ ""packOptions"": { ""packageType"": ""foo, bar"" } - }", new[] { "foo, bar" })] + }", new[] { "foo, bar" }, MemberType = typeof(LockFileParsingEnvironmentVariable))] [MemberData(nameof(TestEnvironmentVariableReader), @"{ ""packOptions"": { ""packageType"": [ ""foo"" ] } - }", new[] { "foo" })] + }", new[] { "foo" }, MemberType = typeof(LockFileParsingEnvironmentVariable))] [MemberData(nameof(TestEnvironmentVariableReader), @"{ ""packOptions"": { ""packageType"": [ ""foo, bar"" ] } - }", new[] { "foo, bar" })] + }", new[] { "foo, bar" }, MemberType = typeof(LockFileParsingEnvironmentVariable))] [MemberData(nameof(TestEnvironmentVariableReader), @"{ ""packOptions"": { ""packageType"": [ ""foo"", ""bar"" ] } - }", new[] { "foo", "bar" })] + }", new[] { "foo", "bar" }, MemberType = typeof(LockFileParsingEnvironmentVariable))] public void PackageSpecReader_PackOptions_ValidPackageType(IEnvironmentVariableReader environmentVariableReader, string json, string[] expectedNames) { // Arrange @@ -294,29 +293,29 @@ public void PackageSpecReader_PackOptions_ValidPackageType(IEnvironmentVariableR ""packOptions"": { ""packageType"": 1 } - }")] + }", MemberType = typeof(LockFileParsingEnvironmentVariable))] [MemberData(nameof(TestEnvironmentVariableReader), @"{ ""packOptions"": { ""packageType"": false } - }")] + }", MemberType = typeof(LockFileParsingEnvironmentVariable))] [MemberData(nameof(TestEnvironmentVariableReader), @"{ ""packOptions"": { ""packageType"": 1.0 } - }")] + }", MemberType = typeof(LockFileParsingEnvironmentVariable))] [MemberData(nameof(TestEnvironmentVariableReader), @"{ ""packOptions"": { ""packageType"": {} } - }")] + }", MemberType = typeof(LockFileParsingEnvironmentVariable))] [MemberData(nameof(TestEnvironmentVariableReader), @"{ ""packOptions"": { ""packageType"": { ""name"": ""foo"" } } - }")] + }", MemberType = typeof(LockFileParsingEnvironmentVariable))] [MemberData(nameof(TestEnvironmentVariableReader), @"{ ""packOptions"": { ""packageType"": [ @@ -324,7 +323,7 @@ public void PackageSpecReader_PackOptions_ValidPackageType(IEnvironmentVariableR { ""name"": ""bar"" } ] } - }")] + }", MemberType = typeof(LockFileParsingEnvironmentVariable))] [MemberData(nameof(TestEnvironmentVariableReader), @"{ ""packOptions"": { ""packageType"": [ @@ -332,7 +331,7 @@ public void PackageSpecReader_PackOptions_ValidPackageType(IEnvironmentVariableR null ] } - }")] + }", MemberType = typeof(LockFileParsingEnvironmentVariable))] [MemberData(nameof(TestEnvironmentVariableReader), @"{ ""packOptions"": { ""packageType"": [ @@ -340,7 +339,7 @@ public void PackageSpecReader_PackOptions_ValidPackageType(IEnvironmentVariableR true ] } - }")] + }", MemberType = typeof(LockFileParsingEnvironmentVariable))] public void PackageSpecReader_PackOptions_InvalidPackageType(IEnvironmentVariableReader environmentVariableReader, string json) { // Arrange & Act & Assert @@ -351,7 +350,7 @@ public void PackageSpecReader_PackOptions_InvalidPackageType(IEnvironmentVariabl } [Theory] - [MemberData(nameof(TestEnvironmentVariableReader))] + [MemberData(nameof(LockFileParsingEnvironmentVariable.TestEnvironmentVariableReader), MemberType = typeof(LockFileParsingEnvironmentVariable))] public void PackageSpecReader_PackOptions_Files1(IEnvironmentVariableReader environmentVariableReader) { // Arrange & Act @@ -391,7 +390,7 @@ public void PackageSpecReader_PackOptions_Files1(IEnvironmentVariableReader envi } [Theory] - [MemberData(nameof(TestEnvironmentVariableReader))] + [MemberData(nameof(LockFileParsingEnvironmentVariable.TestEnvironmentVariableReader), MemberType = typeof(LockFileParsingEnvironmentVariable))] public void PackageSpecReader_PackOptions_Files2(IEnvironmentVariableReader environmentVariableReader) { // Arrange & Act @@ -445,26 +444,26 @@ public void PackageSpecReader_PackOptions_Files2(IEnvironmentVariableReader envi } [Theory] - [MemberData(nameof(TestEnvironmentVariableReader), "{}", null, true)] + [MemberData(nameof(TestEnvironmentVariableReader), "{}", null, true, MemberType = typeof(LockFileParsingEnvironmentVariable))] [MemberData(nameof(TestEnvironmentVariableReader), @"{ ""buildOptions"": {} - }", null, false)] + }", null, false, MemberType = typeof(LockFileParsingEnvironmentVariable))] [MemberData(nameof(TestEnvironmentVariableReader), @"{ ""buildOptions"": { ""outputName"": ""dllName"" } - }", "dllName", false)] + }", "dllName", false, MemberType = typeof(LockFileParsingEnvironmentVariable))] [MemberData(nameof(TestEnvironmentVariableReader), @"{ ""buildOptions"": { ""outputName"": ""dllName2"", ""emitEntryPoint"": true } - }", "dllName2", false)] + }", "dllName2", false, MemberType = typeof(LockFileParsingEnvironmentVariable))] [MemberData(nameof(TestEnvironmentVariableReader), @"{ ""buildOptions"": { ""outputName"": null } - }", null, false)] + }", null, false, MemberType = typeof(LockFileParsingEnvironmentVariable))] public void PackageSpecReader_BuildOptions(IEnvironmentVariableReader environmentVariableReader, string json, string expectedValue, bool nullBuildOptions) { // Arrange & Act @@ -484,7 +483,7 @@ public void PackageSpecReader_BuildOptions(IEnvironmentVariableReader environmen #pragma warning restore CS0612 // Type or member is obsolete [Theory] - [MemberData(nameof(TestEnvironmentVariableReader))] + [MemberData(nameof(LockFileParsingEnvironmentVariable.TestEnvironmentVariableReader), MemberType = typeof(LockFileParsingEnvironmentVariable))] public void PackageSpecReader_ReadsWithoutRestoreSettings(IEnvironmentVariableReader environmentVariableReader) { // Arrange @@ -509,7 +508,7 @@ public void PackageSpecReader_ReadsWithoutRestoreSettings(IEnvironmentVariableRe } [Theory] - [MemberData(nameof(TestEnvironmentVariableReader))] + [MemberData(nameof(LockFileParsingEnvironmentVariable.TestEnvironmentVariableReader), MemberType = typeof(LockFileParsingEnvironmentVariable))] public void PackageSpecReader_ReadsDependencyWithMultipleNoWarn(IEnvironmentVariableReader environmentVariableReader) { // Arrange @@ -541,7 +540,7 @@ public void PackageSpecReader_ReadsDependencyWithMultipleNoWarn(IEnvironmentVari } [Theory] - [MemberData(nameof(TestEnvironmentVariableReader))] + [MemberData(nameof(LockFileParsingEnvironmentVariable.TestEnvironmentVariableReader), MemberType = typeof(LockFileParsingEnvironmentVariable))] public void PackageSpecReader_ReadsDependencyWithSingleNoWarn(IEnvironmentVariableReader environmentVariableReader) { // Arrange @@ -571,7 +570,7 @@ public void PackageSpecReader_ReadsDependencyWithSingleNoWarn(IEnvironmentVariab } [Theory] - [MemberData(nameof(TestEnvironmentVariableReader))] + [MemberData(nameof(LockFileParsingEnvironmentVariable.TestEnvironmentVariableReader), MemberType = typeof(LockFileParsingEnvironmentVariable))] public void PackageSpecReader_ReadsDependencyWithSingleEmptyNoWarn(IEnvironmentVariableReader environmentVariableReader) { // Arrange @@ -599,7 +598,7 @@ public void PackageSpecReader_ReadsDependencyWithSingleEmptyNoWarn(IEnvironmentV } [Theory] - [MemberData(nameof(TestEnvironmentVariableReader))] + [MemberData(nameof(LockFileParsingEnvironmentVariable.TestEnvironmentVariableReader), MemberType = typeof(LockFileParsingEnvironmentVariable))] public void PackageSpecReader_ReadsRestoreMetadataWithWarningProperties(IEnvironmentVariableReader environmentVariableReader) { // Arrange @@ -673,7 +672,7 @@ public void PackageSpecReader_ReadsRestoreMetadataWithWarningProperties(IEnviron } [Theory] - [MemberData(nameof(TestEnvironmentVariableReader))] + [MemberData(nameof(LockFileParsingEnvironmentVariable.TestEnvironmentVariableReader), MemberType = typeof(LockFileParsingEnvironmentVariable))] public void PackageSpecReader_ReadsRestoreMetadataWithWarningPropertiesAndNo_NoWarn(IEnvironmentVariableReader environmentVariableReader) { // Arrange @@ -736,7 +735,7 @@ public void PackageSpecReader_ReadsRestoreMetadataWithWarningPropertiesAndNo_NoW } [Theory] - [MemberData(nameof(TestEnvironmentVariableReader))] + [MemberData(nameof(LockFileParsingEnvironmentVariable.TestEnvironmentVariableReader), MemberType = typeof(LockFileParsingEnvironmentVariable))] public void PackageSpecReader_ReadsRestoreMetadataWithWarningPropertiesAndNo_WarnAsError(IEnvironmentVariableReader environmentVariableReader) { // Arrange @@ -797,7 +796,7 @@ public void PackageSpecReader_ReadsRestoreMetadataWithWarningPropertiesAndNo_War } [Theory] - [MemberData(nameof(TestEnvironmentVariableReader))] + [MemberData(nameof(LockFileParsingEnvironmentVariable.TestEnvironmentVariableReader), MemberType = typeof(LockFileParsingEnvironmentVariable))] public void PackageSpecReader_ReadsRestoreMetadataWithWarningPropertiesAndNo_AllWarningsAsErrors(IEnvironmentVariableReader environmentVariableReader) { // Arrange @@ -863,7 +862,7 @@ public void PackageSpecReader_ReadsRestoreMetadataWithWarningPropertiesAndNo_All } [Theory] - [MemberData(nameof(TestEnvironmentVariableReader))] + [MemberData(nameof(LockFileParsingEnvironmentVariable.TestEnvironmentVariableReader), MemberType = typeof(LockFileParsingEnvironmentVariable))] public void PackageSpecReader_ReadsRestoreMetadataWithEmptyWarningPropertiesAnd(IEnvironmentVariableReader environmentVariableReader) { // Arrange @@ -919,7 +918,7 @@ public void PackageSpecReader_ReadsRestoreMetadataWithEmptyWarningPropertiesAnd( } [Theory] - [MemberData(nameof(TestEnvironmentVariableReader))] + [MemberData(nameof(LockFileParsingEnvironmentVariable.TestEnvironmentVariableReader), MemberType = typeof(LockFileParsingEnvironmentVariable))] public void PackageSpecReader_ReadsRestoreMetadataWithNoWarningProperties(IEnvironmentVariableReader environmentVariableReader) { // Arrange @@ -970,7 +969,7 @@ public void PackageSpecReader_ReadsRestoreMetadataWithNoWarningProperties(IEnvir } [Theory] - [MemberData(nameof(TestEnvironmentVariableReader))] + [MemberData(nameof(LockFileParsingEnvironmentVariable.TestEnvironmentVariableReader), MemberType = typeof(LockFileParsingEnvironmentVariable))] public void PackageSpecReader_RuntimeIdentifierPathNullIfEmpty(IEnvironmentVariableReader environmentVariableReader) { // Arrange @@ -999,7 +998,7 @@ public void PackageSpecReader_RuntimeIdentifierPathNullIfEmpty(IEnvironmentVaria #pragma warning disable CS0612 // Type or member is obsolete [Theory] - [MemberData(nameof(TestEnvironmentVariableReader))] + [MemberData(nameof(LockFileParsingEnvironmentVariable.TestEnvironmentVariableReader), MemberType = typeof(LockFileParsingEnvironmentVariable))] public void GetPackageSpec_WhenAuthorsPropertyIsAbsent_ReturnsEmptyAuthors(IEnvironmentVariableReader environmentVariableReader) { PackageSpec packageSpec = GetPackageSpec("{}", environmentVariableReader); @@ -1008,7 +1007,7 @@ public void GetPackageSpec_WhenAuthorsPropertyIsAbsent_ReturnsEmptyAuthors(IEnvi } [Theory] - [MemberData(nameof(TestEnvironmentVariableReader))] + [MemberData(nameof(LockFileParsingEnvironmentVariable.TestEnvironmentVariableReader), MemberType = typeof(LockFileParsingEnvironmentVariable))] public void GetPackageSpec_WhenAuthorsValueIsNull_ReturnsEmptyAuthors(IEnvironmentVariableReader environmentVariableReader) { PackageSpec packageSpec = GetPackageSpec("{\"authors\":null}", environmentVariableReader); @@ -1017,7 +1016,7 @@ public void GetPackageSpec_WhenAuthorsValueIsNull_ReturnsEmptyAuthors(IEnvironme } [Theory] - [MemberData(nameof(TestEnvironmentVariableReader))] + [MemberData(nameof(LockFileParsingEnvironmentVariable.TestEnvironmentVariableReader), MemberType = typeof(LockFileParsingEnvironmentVariable))] public void GetPackageSpec_WhenAuthorsValueIsString_ReturnsEmptyAuthors(IEnvironmentVariableReader environmentVariableReader) { PackageSpec packageSpec = GetPackageSpec("{\"authors\":\"b\"}", environmentVariableReader); @@ -1026,8 +1025,8 @@ public void GetPackageSpec_WhenAuthorsValueIsString_ReturnsEmptyAuthors(IEnviron } [Theory] - [MemberData(nameof(TestEnvironmentVariableReader), "")] - [MemberData(nameof(TestEnvironmentVariableReader), "/**/")] + [MemberData(nameof(TestEnvironmentVariableReader), "", MemberType = typeof(LockFileParsingEnvironmentVariable))] + [MemberData(nameof(TestEnvironmentVariableReader), "/**/", MemberType = typeof(LockFileParsingEnvironmentVariable))] public void GetPackageSpec_WhenAuthorsValueIsEmptyArray_ReturnsEmptyAuthors(IEnvironmentVariableReader environmentVariableReader, string value) { PackageSpec packageSpec = GetPackageSpec($"{{\"authors\":[{value}]}}", environmentVariableReader); @@ -1036,8 +1035,8 @@ public void GetPackageSpec_WhenAuthorsValueIsEmptyArray_ReturnsEmptyAuthors(IEnv } [Theory] - [MemberData(nameof(TestEnvironmentVariableReader), "{}")] - [MemberData(nameof(TestEnvironmentVariableReader), "[]")] + [MemberData(nameof(TestEnvironmentVariableReader), "{}", MemberType = typeof(LockFileParsingEnvironmentVariable))] + [MemberData(nameof(TestEnvironmentVariableReader), "[]", MemberType = typeof(LockFileParsingEnvironmentVariable))] public void GetPackageSpec_WhenAuthorsValueElementIsNotConvertibleToString_Throws(IEnvironmentVariableReader environmentVariableReader, string value) { var json = $"{{\"authors\":[{value}]}}"; @@ -1046,10 +1045,10 @@ public void GetPackageSpec_WhenAuthorsValueElementIsNotConvertibleToString_Throw } [Theory] - [MemberData(nameof(TestEnvironmentVariableReader), "\"a\"", "a")] - [MemberData(nameof(TestEnvironmentVariableReader), "true", "True")] - [MemberData(nameof(TestEnvironmentVariableReader), "-2", "-2")] - [MemberData(nameof(TestEnvironmentVariableReader), "3.14", "3.14")] + [MemberData(nameof(TestEnvironmentVariableReader), "\"a\"", "a", MemberType = typeof(LockFileParsingEnvironmentVariable))] + [MemberData(nameof(TestEnvironmentVariableReader), "true", "True", MemberType = typeof(LockFileParsingEnvironmentVariable))] + [MemberData(nameof(TestEnvironmentVariableReader), "-2", "-2", MemberType = typeof(LockFileParsingEnvironmentVariable))] + [MemberData(nameof(TestEnvironmentVariableReader), "3.14", "3.14", MemberType = typeof(LockFileParsingEnvironmentVariable))] public void GetPackageSpec_WhenAuthorsValueElementIsConvertibleToString_ReturnsAuthor(IEnvironmentVariableReader environmentVariableReader, string value, string expectedValue) { PackageSpec packageSpec = GetPackageSpec($"{{\"authors\":[{value}]}}", environmentVariableReader); @@ -1058,7 +1057,7 @@ public void GetPackageSpec_WhenAuthorsValueElementIsConvertibleToString_ReturnsA } [Theory] - [MemberData(nameof(TestEnvironmentVariableReader))] + [MemberData(nameof(LockFileParsingEnvironmentVariable.TestEnvironmentVariableReader), MemberType = typeof(LockFileParsingEnvironmentVariable))] public void GetPackageSpec_WhenBuildOptionsPropertyIsAbsent_ReturnsNullBuildOptions(IEnvironmentVariableReader environmentVariableReader) { PackageSpec packageSpec = GetPackageSpec("{}", environmentVariableReader); @@ -1067,7 +1066,7 @@ public void GetPackageSpec_WhenBuildOptionsPropertyIsAbsent_ReturnsNullBuildOpti } [Theory] - [MemberData(nameof(TestEnvironmentVariableReader))] + [MemberData(nameof(LockFileParsingEnvironmentVariable.TestEnvironmentVariableReader), MemberType = typeof(LockFileParsingEnvironmentVariable))] public void GetPackageSpec_WhenBuildOptionsValueIsEmptyObject_ReturnsBuildOptions(IEnvironmentVariableReader environmentVariableReader) { PackageSpec packageSpec = GetPackageSpec("{\"buildOptions\":{}}", environmentVariableReader); @@ -1077,7 +1076,7 @@ public void GetPackageSpec_WhenBuildOptionsValueIsEmptyObject_ReturnsBuildOption } [Theory] - [MemberData(nameof(TestEnvironmentVariableReader))] + [MemberData(nameof(LockFileParsingEnvironmentVariable.TestEnvironmentVariableReader), MemberType = typeof(LockFileParsingEnvironmentVariable))] public void GetPackageSpec_WhenBuildOptionsValueOutputNameIsNull_ReturnsNullOutputName(IEnvironmentVariableReader environmentVariableReader) { PackageSpec packageSpec = GetPackageSpec("{\"buildOptions\":{\"outputName\":null}}", environmentVariableReader); @@ -1086,7 +1085,7 @@ public void GetPackageSpec_WhenBuildOptionsValueOutputNameIsNull_ReturnsNullOutp } [Theory] - [MemberData(nameof(TestEnvironmentVariableReader))] + [MemberData(nameof(LockFileParsingEnvironmentVariable.TestEnvironmentVariableReader), MemberType = typeof(LockFileParsingEnvironmentVariable))] public void GetPackageSpec_WhenBuildOptionsValueOutputNameIsValid_ReturnsOutputName(IEnvironmentVariableReader environmentVariableReader) { const string expectedResult = "a"; @@ -1099,9 +1098,9 @@ public void GetPackageSpec_WhenBuildOptionsValueOutputNameIsValid_ReturnsOutputN } [Theory] - [MemberData(nameof(TestEnvironmentVariableReader), "-2", "-2")] - [MemberData(nameof(TestEnvironmentVariableReader), "3.14", "3.14")] - [MemberData(nameof(TestEnvironmentVariableReader), "true", "True")] + [MemberData(nameof(TestEnvironmentVariableReader), "-2", "-2", MemberType = typeof(LockFileParsingEnvironmentVariable))] + [MemberData(nameof(TestEnvironmentVariableReader), "3.14", "3.14", MemberType = typeof(LockFileParsingEnvironmentVariable))] + [MemberData(nameof(TestEnvironmentVariableReader), "true", "True", MemberType = typeof(LockFileParsingEnvironmentVariable))] public void GetPackageSpec_WhenBuildOptionsValueOutputNameIsConvertibleToString_ReturnsOutputName(IEnvironmentVariableReader environmentVariableReader, string outputName, string expectedValue) { PackageSpec packageSpec = GetPackageSpec($"{{\"buildOptions\":{{\"outputName\":{outputName}}}}}", environmentVariableReader); @@ -1110,7 +1109,7 @@ public void GetPackageSpec_WhenBuildOptionsValueOutputNameIsConvertibleToString_ } [Theory] - [MemberData(nameof(TestEnvironmentVariableReader))] + [MemberData(nameof(LockFileParsingEnvironmentVariable.TestEnvironmentVariableReader), MemberType = typeof(LockFileParsingEnvironmentVariable))] public void GetPackageSpec_WhenContentFilesPropertyIsAbsent_ReturnsEmptyContentFiles(IEnvironmentVariableReader environmentVariableReader) { PackageSpec packageSpec = GetPackageSpec("{}", environmentVariableReader); @@ -1119,7 +1118,7 @@ public void GetPackageSpec_WhenContentFilesPropertyIsAbsent_ReturnsEmptyContentF } [Theory] - [MemberData(nameof(TestEnvironmentVariableReader))] + [MemberData(nameof(LockFileParsingEnvironmentVariable.TestEnvironmentVariableReader), MemberType = typeof(LockFileParsingEnvironmentVariable))] public void GetPackageSpec_WhenContentFilesValueIsNull_ReturnsEmptyContentFiles(IEnvironmentVariableReader environmentVariableReader) { PackageSpec packageSpec = GetPackageSpec("{\"contentFiles\":null}", environmentVariableReader); @@ -1128,7 +1127,7 @@ public void GetPackageSpec_WhenContentFilesValueIsNull_ReturnsEmptyContentFiles( } [Theory] - [MemberData(nameof(TestEnvironmentVariableReader))] + [MemberData(nameof(LockFileParsingEnvironmentVariable.TestEnvironmentVariableReader), MemberType = typeof(LockFileParsingEnvironmentVariable))] public void GetPackageSpec_WhenContentFilesValueIsString_ReturnsEmptyContentFiles(IEnvironmentVariableReader environmentVariableReader) { PackageSpec packageSpec = GetPackageSpec("{\"contentFiles\":\"a\"}", environmentVariableReader); @@ -1137,8 +1136,8 @@ public void GetPackageSpec_WhenContentFilesValueIsString_ReturnsEmptyContentFile } [Theory] - [MemberData(nameof(TestEnvironmentVariableReader), "")] - [MemberData(nameof(TestEnvironmentVariableReader), "/**/")] + [MemberData(nameof(TestEnvironmentVariableReader), "", MemberType = typeof(LockFileParsingEnvironmentVariable))] + [MemberData(nameof(TestEnvironmentVariableReader), "/**/", MemberType = typeof(LockFileParsingEnvironmentVariable))] public void GetPackageSpec_WhenContentFilesValueIsEmptyArray_ReturnsEmptyContentFiles(IEnvironmentVariableReader environmentVariableReader, string value) { PackageSpec packageSpec = GetPackageSpec($"{{\"contentFiles\":[{value}]}}", environmentVariableReader); @@ -1147,8 +1146,8 @@ public void GetPackageSpec_WhenContentFilesValueIsEmptyArray_ReturnsEmptyContent } [Theory] - [MemberData(nameof(TestEnvironmentVariableReader), "{}")] - [MemberData(nameof(TestEnvironmentVariableReader), "[]")] + [MemberData(nameof(TestEnvironmentVariableReader), "{}", MemberType = typeof(LockFileParsingEnvironmentVariable))] + [MemberData(nameof(TestEnvironmentVariableReader), "[]", MemberType = typeof(LockFileParsingEnvironmentVariable))] public void GetPackageSpec_WhenContentFilesValueElementIsNotConvertibleToString_Throws(IEnvironmentVariableReader environmentVariableReader, string value) { var json = $"{{\"contentFiles\":[{value}]}}"; @@ -1157,10 +1156,10 @@ public void GetPackageSpec_WhenContentFilesValueElementIsNotConvertibleToString_ } [Theory] - [MemberData(nameof(TestEnvironmentVariableReader), "\"a\"", "a")] - [MemberData(nameof(TestEnvironmentVariableReader), "true", "True")] - [MemberData(nameof(TestEnvironmentVariableReader), "-2", "-2")] - [MemberData(nameof(TestEnvironmentVariableReader), "3.14", "3.14")] + [MemberData(nameof(TestEnvironmentVariableReader), "\"a\"", "a", MemberType = typeof(LockFileParsingEnvironmentVariable))] + [MemberData(nameof(TestEnvironmentVariableReader), "true", "True", MemberType = typeof(LockFileParsingEnvironmentVariable))] + [MemberData(nameof(TestEnvironmentVariableReader), "-2", "-2", MemberType = typeof(LockFileParsingEnvironmentVariable))] + [MemberData(nameof(TestEnvironmentVariableReader), "3.14", "3.14", MemberType = typeof(LockFileParsingEnvironmentVariable))] public void GetPackageSpec_WhenContentFilesValueElementIsConvertibleToString_ReturnsContentFile(IEnvironmentVariableReader environmentVariableReader, string value, string expectedValue) { PackageSpec packageSpec = GetPackageSpec($"{{\"contentFiles\":[{value}]}}", environmentVariableReader); @@ -1169,7 +1168,7 @@ public void GetPackageSpec_WhenContentFilesValueElementIsConvertibleToString_Ret } [Theory] - [MemberData(nameof(TestEnvironmentVariableReader))] + [MemberData(nameof(LockFileParsingEnvironmentVariable.TestEnvironmentVariableReader), MemberType = typeof(LockFileParsingEnvironmentVariable))] public void GetPackageSpec_WhenCopyrightPropertyIsAbsent_ReturnsNullCopyright(IEnvironmentVariableReader environmentVariableReader) { PackageSpec packageSpec = GetPackageSpec("{}", environmentVariableReader); @@ -1178,7 +1177,7 @@ public void GetPackageSpec_WhenCopyrightPropertyIsAbsent_ReturnsNullCopyright(IE } [Theory] - [MemberData(nameof(TestEnvironmentVariableReader))] + [MemberData(nameof(LockFileParsingEnvironmentVariable.TestEnvironmentVariableReader), MemberType = typeof(LockFileParsingEnvironmentVariable))] public void GetPackageSpec_WhenCopyrightValueIsNull_ReturnsNullCopyright(IEnvironmentVariableReader environmentVariableReader) { PackageSpec packageSpec = GetPackageSpec("{\"copyright\":null}", environmentVariableReader); @@ -1187,7 +1186,7 @@ public void GetPackageSpec_WhenCopyrightValueIsNull_ReturnsNullCopyright(IEnviro } [Theory] - [MemberData(nameof(TestEnvironmentVariableReader))] + [MemberData(nameof(LockFileParsingEnvironmentVariable.TestEnvironmentVariableReader), MemberType = typeof(LockFileParsingEnvironmentVariable))] public void GetPackageSpec_WhenCopyrightValueIsString_ReturnsCopyright(IEnvironmentVariableReader environmentVariableReader) { const string expectedResult = "a"; @@ -1198,10 +1197,10 @@ public void GetPackageSpec_WhenCopyrightValueIsString_ReturnsCopyright(IEnvironm } [Theory] - [MemberData(nameof(TestEnvironmentVariableReader), "\"a\"", "a")] - [MemberData(nameof(TestEnvironmentVariableReader), "true", "True")] - [MemberData(nameof(TestEnvironmentVariableReader), "-2", "-2")] - [MemberData(nameof(TestEnvironmentVariableReader), "3.14", "3.14")] + [MemberData(nameof(TestEnvironmentVariableReader), "\"a\"", "a", MemberType = typeof(LockFileParsingEnvironmentVariable))] + [MemberData(nameof(TestEnvironmentVariableReader), "true", "True", MemberType = typeof(LockFileParsingEnvironmentVariable))] + [MemberData(nameof(TestEnvironmentVariableReader), "-2", "-2", MemberType = typeof(LockFileParsingEnvironmentVariable))] + [MemberData(nameof(TestEnvironmentVariableReader), "3.14", "3.14", MemberType = typeof(LockFileParsingEnvironmentVariable))] public void GetPackageSpec_WhenCopyrightValueIsConvertibleToString_ReturnsCopyright(IEnvironmentVariableReader environmentVariableReader, string value, string expectedValue) { PackageSpec packageSpec = GetPackageSpec($"{{\"copyright\":{value}}}", environmentVariableReader); @@ -1211,7 +1210,7 @@ public void GetPackageSpec_WhenCopyrightValueIsConvertibleToString_ReturnsCopyri #pragma warning restore CS0612 // Type or member is obsolete [Theory] - [MemberData(nameof(TestEnvironmentVariableReader))] + [MemberData(nameof(LockFileParsingEnvironmentVariable.TestEnvironmentVariableReader), MemberType = typeof(LockFileParsingEnvironmentVariable))] public void GetPackageSpec_WhenDependenciesPropertyIsAbsent_ReturnsEmptyDependencies(IEnvironmentVariableReader environmentVariableReader) { PackageSpec packageSpec = GetPackageSpec("{}", environmentVariableReader); @@ -1220,7 +1219,7 @@ public void GetPackageSpec_WhenDependenciesPropertyIsAbsent_ReturnsEmptyDependen } [Theory] - [MemberData(nameof(TestEnvironmentVariableReader))] + [MemberData(nameof(LockFileParsingEnvironmentVariable.TestEnvironmentVariableReader), MemberType = typeof(LockFileParsingEnvironmentVariable))] public void GetPackageSpec_WhenDependenciesValueIsNull_ReturnsEmptyDependencies(IEnvironmentVariableReader environmentVariableReader) { PackageSpec packageSpec = GetPackageSpec("{\"dependencies\":null}", environmentVariableReader); @@ -1229,7 +1228,7 @@ public void GetPackageSpec_WhenDependenciesValueIsNull_ReturnsEmptyDependencies( } [Theory] - [MemberData(nameof(TestEnvironmentVariableReader))] + [MemberData(nameof(LockFileParsingEnvironmentVariable.TestEnvironmentVariableReader), MemberType = typeof(LockFileParsingEnvironmentVariable))] public void GetPackageSpec_WhenDependenciesDependencyNameIsEmptyString_Throws(IEnvironmentVariableReader environmentVariableReader) { const string json = "{\"dependencies\":{\"\":{}}}"; @@ -1238,7 +1237,7 @@ public void GetPackageSpec_WhenDependenciesDependencyNameIsEmptyString_Throws(IE Assert.Equal("Unable to resolve dependency ''.", exception.Message); Assert.Null(exception.InnerException); - if (string.Equals(bool.TrueString, environmentVariableReader.GetEnvironmentVariable("NUGET_EXPERIMENTAL_USE_NJ_FOR_FILE_PARSING"))) + if (string.Equals(bool.TrueString, environmentVariableReader.GetEnvironmentVariable(JsonUtility.NUGET_EXPERIMENTAL_USE_NJ_FOR_FILE_PARSING))) { Assert.Equal(1, exception.Line); Assert.Equal(21, exception.Column); @@ -1246,7 +1245,7 @@ public void GetPackageSpec_WhenDependenciesDependencyNameIsEmptyString_Throws(IE } [Theory] - [MemberData(nameof(TestEnvironmentVariableReader))] + [MemberData(nameof(LockFileParsingEnvironmentVariable.TestEnvironmentVariableReader), MemberType = typeof(LockFileParsingEnvironmentVariable))] public void GetPackageSpec_WhenDependenciesDependencyValueIsVersionString_ReturnsDependencyVersionRange(IEnvironmentVariableReader environmentVariableReader) { var expectedResult = new LibraryRange( @@ -1261,7 +1260,7 @@ public void GetPackageSpec_WhenDependenciesDependencyValueIsVersionString_Return } [Theory] - [MemberData(nameof(TestEnvironmentVariableReader))] + [MemberData(nameof(LockFileParsingEnvironmentVariable.TestEnvironmentVariableReader), MemberType = typeof(LockFileParsingEnvironmentVariable))] public void GetPackageSpec_WhenDependenciesDependencyValueIsVersionRangeString_ReturnsDependencyVersionRange(IEnvironmentVariableReader environmentVariableReader) { var expectedResult = new LibraryRange( @@ -1276,12 +1275,12 @@ public void GetPackageSpec_WhenDependenciesDependencyValueIsVersionRangeString_R } [Theory] - [MemberData(nameof(TestEnvironmentVariableReader), LibraryDependencyTarget.None)] - [MemberData(nameof(TestEnvironmentVariableReader), LibraryDependencyTarget.Assembly)] - [MemberData(nameof(TestEnvironmentVariableReader), LibraryDependencyTarget.Reference)] - [MemberData(nameof(TestEnvironmentVariableReader), LibraryDependencyTarget.WinMD)] - [MemberData(nameof(TestEnvironmentVariableReader), LibraryDependencyTarget.All)] - [MemberData(nameof(TestEnvironmentVariableReader), LibraryDependencyTarget.PackageProjectExternal)] + [MemberData(nameof(TestEnvironmentVariableReader), LibraryDependencyTarget.None, MemberType = typeof(LockFileParsingEnvironmentVariable))] + [MemberData(nameof(TestEnvironmentVariableReader), LibraryDependencyTarget.Assembly, MemberType = typeof(LockFileParsingEnvironmentVariable))] + [MemberData(nameof(TestEnvironmentVariableReader), LibraryDependencyTarget.Reference, MemberType = typeof(LockFileParsingEnvironmentVariable))] + [MemberData(nameof(TestEnvironmentVariableReader), LibraryDependencyTarget.WinMD, MemberType = typeof(LockFileParsingEnvironmentVariable))] + [MemberData(nameof(TestEnvironmentVariableReader), LibraryDependencyTarget.All, MemberType = typeof(LockFileParsingEnvironmentVariable))] + [MemberData(nameof(TestEnvironmentVariableReader), LibraryDependencyTarget.PackageProjectExternal, MemberType = typeof(LockFileParsingEnvironmentVariable))] public void GetPackageSpec_WhenDependenciesDependencyTargetIsUnsupported_Throws(IEnvironmentVariableReader environmentVariableReader, LibraryDependencyTarget target) { var json = $"{{\"dependencies\":{{\"a\":{{\"version\":\"1.2.3\",\"target\":\"{target}\"}}}}}}"; @@ -1291,7 +1290,7 @@ public void GetPackageSpec_WhenDependenciesDependencyTargetIsUnsupported_Throws( Assert.Equal($"Invalid dependency target value '{target}'.", exception.Message); Assert.Null(exception.InnerException); - if (string.Equals(bool.TrueString, environmentVariableReader.GetEnvironmentVariable("NUGET_EXPERIMENTAL_USE_NJ_FOR_FILE_PARSING"))) + if (string.Equals(bool.TrueString, environmentVariableReader.GetEnvironmentVariable(JsonUtility.NUGET_EXPERIMENTAL_USE_NJ_FOR_FILE_PARSING))) { Assert.Equal(1, exception.Line); // The position is after the target name, which is of variable length. @@ -1300,7 +1299,7 @@ public void GetPackageSpec_WhenDependenciesDependencyTargetIsUnsupported_Throws( } [Theory] - [MemberData(nameof(TestEnvironmentVariableReader))] + [MemberData(nameof(LockFileParsingEnvironmentVariable.TestEnvironmentVariableReader), MemberType = typeof(LockFileParsingEnvironmentVariable))] public void GetPackageSpec_WhenDependenciesDependencyAutoreferencedPropertyIsAbsent_ReturnsFalseAutoreferenced(IEnvironmentVariableReader environmentVariableReader) { LibraryDependency dependency = GetDependency($"{{\"dependencies\":{{\"a\":{{\"target\":\"Project\"}}}}}}", environmentVariableReader); @@ -1309,8 +1308,8 @@ public void GetPackageSpec_WhenDependenciesDependencyAutoreferencedPropertyIsAbs } [Theory] - [MemberData(nameof(TestEnvironmentVariableReader), true)] - [MemberData(nameof(TestEnvironmentVariableReader), false)] + [MemberData(nameof(TestEnvironmentVariableReader), true, MemberType = typeof(LockFileParsingEnvironmentVariable))] + [MemberData(nameof(TestEnvironmentVariableReader), false, MemberType = typeof(LockFileParsingEnvironmentVariable))] public void GetPackageSpec_WhenDependenciesDependencyAutoreferencedValueIsBool_ReturnsBoolAutoreferenced(IEnvironmentVariableReader environmentVariableReader, bool expectedValue) { var json = $"{{\"dependencies\":{{\"a\":{{\"autoReferenced\":{expectedValue.ToString().ToLower()},\"target\":\"Project\"}}}}}}"; @@ -1321,9 +1320,9 @@ public void GetPackageSpec_WhenDependenciesDependencyAutoreferencedValueIsBool_R } [Theory] - [MemberData(nameof(TestEnvironmentVariableReader), "exclude")] - [MemberData(nameof(TestEnvironmentVariableReader), "include")] - [MemberData(nameof(TestEnvironmentVariableReader), "suppressParent")] + [MemberData(nameof(TestEnvironmentVariableReader), "exclude", MemberType = typeof(LockFileParsingEnvironmentVariable))] + [MemberData(nameof(TestEnvironmentVariableReader), "include", MemberType = typeof(LockFileParsingEnvironmentVariable))] + [MemberData(nameof(TestEnvironmentVariableReader), "suppressParent", MemberType = typeof(LockFileParsingEnvironmentVariable))] public void GetPackageSpec_WhenDependenciesDependencyValueIsArray_Throws(IEnvironmentVariableReader environmentVariableReader, string propertyName) { var json = $"{{\"dependencies\":{{\"a\":{{\"{propertyName}\":[\"b\"]}}}}}}"; @@ -1332,7 +1331,7 @@ public void GetPackageSpec_WhenDependenciesDependencyValueIsArray_Throws(IEnviro } [Theory] - [MemberData(nameof(TestEnvironmentVariableReader))] + [MemberData(nameof(LockFileParsingEnvironmentVariable.TestEnvironmentVariableReader), MemberType = typeof(LockFileParsingEnvironmentVariable))] public void GetPackageSpec_WhenDependenciesDependencyIncludeAndExcludePropertiesAreAbsent_ReturnsAllIncludeType(IEnvironmentVariableReader environmentVariableReader) { const string json = "{\"dependencies\":{\"a\":{\"version\":\"1.0.0\"}}}"; @@ -1343,8 +1342,8 @@ public void GetPackageSpec_WhenDependenciesDependencyIncludeAndExcludeProperties } [Theory] - [MemberData(nameof(TestEnvironmentVariableReader), "\"Native\"", LibraryIncludeFlags.Native)] - [MemberData(nameof(TestEnvironmentVariableReader), "\"Analyzers, Native\"", LibraryIncludeFlags.Analyzers | LibraryIncludeFlags.Native)] + [MemberData(nameof(TestEnvironmentVariableReader), "\"Native\"", LibraryIncludeFlags.Native, MemberType = typeof(LockFileParsingEnvironmentVariable))] + [MemberData(nameof(TestEnvironmentVariableReader), "\"Analyzers, Native\"", LibraryIncludeFlags.Analyzers | LibraryIncludeFlags.Native, MemberType = typeof(LockFileParsingEnvironmentVariable))] public void GetPackageSpec_WhenDependenciesDependencyExcludeValueIsValid_ReturnsIncludeType( IEnvironmentVariableReader environmentVariableReader, string value, @@ -1358,8 +1357,8 @@ public void GetPackageSpec_WhenDependenciesDependencyExcludeValueIsValid_Returns } [Theory] - [MemberData(nameof(TestEnvironmentVariableReader), "\"Native\"", LibraryIncludeFlags.Native)] - [MemberData(nameof(TestEnvironmentVariableReader), "\"Analyzers, Native\"", LibraryIncludeFlags.Analyzers | LibraryIncludeFlags.Native)] + [MemberData(nameof(TestEnvironmentVariableReader), "\"Native\"", LibraryIncludeFlags.Native, MemberType = typeof(LockFileParsingEnvironmentVariable))] + [MemberData(nameof(TestEnvironmentVariableReader), "\"Analyzers, Native\"", LibraryIncludeFlags.Analyzers | LibraryIncludeFlags.Native, MemberType = typeof(LockFileParsingEnvironmentVariable))] public void GetPackageSpec_WhenDependenciesDependencyIncludeValueIsValid_ReturnsIncludeType( IEnvironmentVariableReader environmentVariableReader, string value, @@ -1373,7 +1372,7 @@ public void GetPackageSpec_WhenDependenciesDependencyIncludeValueIsValid_Returns } [Theory] - [MemberData(nameof(TestEnvironmentVariableReader))] + [MemberData(nameof(LockFileParsingEnvironmentVariable.TestEnvironmentVariableReader), MemberType = typeof(LockFileParsingEnvironmentVariable))] public void GetPackageSpec_WhenDependenciesDependencyIncludeValueOverridesTypeValue_ReturnsIncludeType(IEnvironmentVariableReader environmentVariableReader) { const string json = "{\"dependencies\":{\"a\":{\"include\":\"ContentFiles\",\"type\":\"BecomesNupkgDependency, SharedFramework\",\"version\":\"1.0.0\"}}}"; @@ -1384,7 +1383,7 @@ public void GetPackageSpec_WhenDependenciesDependencyIncludeValueOverridesTypeVa } [Theory] - [MemberData(nameof(TestEnvironmentVariableReader))] + [MemberData(nameof(LockFileParsingEnvironmentVariable.TestEnvironmentVariableReader), MemberType = typeof(LockFileParsingEnvironmentVariable))] public void GetPackageSpec_WhenDependenciesDependencySuppressParentValueOverridesTypeValue_ReturnsSuppressParent(IEnvironmentVariableReader environmentVariableReader) { const string json = "{\"dependencies\":{\"a\":{\"suppressParent\":\"ContentFiles\",\"type\":\"SharedFramework\",\"version\":\"1.0.0\"}}}"; @@ -1395,7 +1394,7 @@ public void GetPackageSpec_WhenDependenciesDependencySuppressParentValueOverride } [Theory] - [MemberData(nameof(TestEnvironmentVariableReader))] + [MemberData(nameof(LockFileParsingEnvironmentVariable.TestEnvironmentVariableReader), MemberType = typeof(LockFileParsingEnvironmentVariable))] public void GetPackageSpec_WhenDependenciesDependencySuppressParentPropertyIsAbsent_ReturnsSuppressParent(IEnvironmentVariableReader environmentVariableReader) { const string json = "{\"dependencies\":{\"a\":{\"version\":\"1.0.0\"}}}"; @@ -1406,8 +1405,8 @@ public void GetPackageSpec_WhenDependenciesDependencySuppressParentPropertyIsAbs } [Theory] - [MemberData(nameof(TestEnvironmentVariableReader), "\"Compile\"", LibraryIncludeFlags.Compile)] - [MemberData(nameof(TestEnvironmentVariableReader), "\"Analyzers, Compile\"", LibraryIncludeFlags.Analyzers | LibraryIncludeFlags.Compile)] + [MemberData(nameof(TestEnvironmentVariableReader), "\"Compile\"", LibraryIncludeFlags.Compile, MemberType = typeof(LockFileParsingEnvironmentVariable))] + [MemberData(nameof(TestEnvironmentVariableReader), "\"Analyzers, Compile\"", LibraryIncludeFlags.Analyzers | LibraryIncludeFlags.Compile, MemberType = typeof(LockFileParsingEnvironmentVariable))] public void GetPackageSpec_WhenDependenciesDependencySuppressParentValueIsValid_ReturnsSuppressParent( IEnvironmentVariableReader environmentVariableReader, string value, @@ -1422,14 +1421,14 @@ LibraryIncludeFlags expectedResult } [Theory] - [MemberData(nameof(TestEnvironmentVariableReader))] + [MemberData(nameof(LockFileParsingEnvironmentVariable.TestEnvironmentVariableReader), MemberType = typeof(LockFileParsingEnvironmentVariable))] public void GetPackageSpec_WhenDependenciesDependencyVersionValueIsInvalid_Throws(IEnvironmentVariableReader environmentVariableReader) { const string json = "{\"dependencies\":{\"a\":{\"version\":\"b\"}}}"; FileFormatException exception = Assert.Throws(() => GetPackageSpec(json, environmentVariableReader)); - if (string.Equals(bool.TrueString, environmentVariableReader.GetEnvironmentVariable("NUGET_EXPERIMENTAL_USE_NJ_FOR_FILE_PARSING"))) + if (string.Equals(bool.TrueString, environmentVariableReader.GetEnvironmentVariable(JsonUtility.NUGET_EXPERIMENTAL_USE_NJ_FOR_FILE_PARSING))) { Assert.Equal("Error reading '' at line 1 column 35 : 'b' is not a valid version string.", exception.Message); Assert.Equal(1, exception.Line); @@ -1442,7 +1441,7 @@ public void GetPackageSpec_WhenDependenciesDependencyVersionValueIsInvalid_Throw } [Theory] - [MemberData(nameof(TestEnvironmentVariableReader))] + [MemberData(nameof(LockFileParsingEnvironmentVariable.TestEnvironmentVariableReader), MemberType = typeof(LockFileParsingEnvironmentVariable))] public void GetPackageSpec_WhenDependenciesDependencyTargetPropertyIsAbsent_ReturnsTarget(IEnvironmentVariableReader environmentVariableReader) { const string json = "{\"dependencies\":{\"a\":{\"version\":\"1.0.0\"}}}"; @@ -1453,7 +1452,7 @@ public void GetPackageSpec_WhenDependenciesDependencyTargetPropertyIsAbsent_Retu } [Theory] - [MemberData(nameof(TestEnvironmentVariableReader))] + [MemberData(nameof(LockFileParsingEnvironmentVariable.TestEnvironmentVariableReader), MemberType = typeof(LockFileParsingEnvironmentVariable))] public void GetPackageSpec_WhenDependenciesDependencyTargetValueIsPackageAndVersionPropertyIsAbsent_Throws(IEnvironmentVariableReader environmentVariableReader) { const string json = "{\"dependencies\":{\"a\":{\"target\":\"Package\"}}}"; @@ -1462,7 +1461,7 @@ public void GetPackageSpec_WhenDependenciesDependencyTargetValueIsPackageAndVers Assert.IsType(exception.InnerException); Assert.Null(exception.InnerException.InnerException); - if (string.Equals(bool.TrueString, environmentVariableReader.GetEnvironmentVariable("NUGET_EXPERIMENTAL_USE_NJ_FOR_FILE_PARSING"))) + if (string.Equals(bool.TrueString, environmentVariableReader.GetEnvironmentVariable(JsonUtility.NUGET_EXPERIMENTAL_USE_NJ_FOR_FILE_PARSING))) { Assert.Equal("Error reading '' at line 1 column 22 : Package dependencies must specify a version range.", exception.Message); Assert.Equal(1, exception.Line); @@ -1475,7 +1474,7 @@ public void GetPackageSpec_WhenDependenciesDependencyTargetValueIsPackageAndVers } [Theory] - [MemberData(nameof(TestEnvironmentVariableReader))] + [MemberData(nameof(LockFileParsingEnvironmentVariable.TestEnvironmentVariableReader), MemberType = typeof(LockFileParsingEnvironmentVariable))] public void GetPackageSpec_WhenDependenciesDependencyTargetValueIsProjectAndVersionPropertyIsAbsent_ReturnsAllVersionRange(IEnvironmentVariableReader environmentVariableReader) { LibraryDependency dependency = GetDependency("{\"dependencies\":{\"a\":{\"target\":\"Project\"}}}", environmentVariableReader); @@ -1484,7 +1483,7 @@ public void GetPackageSpec_WhenDependenciesDependencyTargetValueIsProjectAndVers } [Theory] - [MemberData(nameof(TestEnvironmentVariableReader))] + [MemberData(nameof(LockFileParsingEnvironmentVariable.TestEnvironmentVariableReader), MemberType = typeof(LockFileParsingEnvironmentVariable))] public void GetPackageSpec_WhenDependenciesDependencyNoWarnPropertyIsAbsent_ReturnsEmptyNoWarns(IEnvironmentVariableReader environmentVariableReader) { const string json = "{\"dependencies\":{\"a\":{\"version\":\"1.0.0\"}}}"; @@ -1495,7 +1494,7 @@ public void GetPackageSpec_WhenDependenciesDependencyNoWarnPropertyIsAbsent_Retu } [Theory] - [MemberData(nameof(TestEnvironmentVariableReader))] + [MemberData(nameof(LockFileParsingEnvironmentVariable.TestEnvironmentVariableReader), MemberType = typeof(LockFileParsingEnvironmentVariable))] public void GetPackageSpec_WhenDependenciesDependencyNoWarnValueIsValid_ReturnsNoWarns(IEnvironmentVariableReader environmentVariableReader) { NuGetLogCode[] expectedResults = { NuGetLogCode.NU1000, NuGetLogCode.NU3000 }; @@ -1510,7 +1509,7 @@ public void GetPackageSpec_WhenDependenciesDependencyNoWarnValueIsValid_ReturnsN } [Theory] - [MemberData(nameof(TestEnvironmentVariableReader))] + [MemberData(nameof(LockFileParsingEnvironmentVariable.TestEnvironmentVariableReader), MemberType = typeof(LockFileParsingEnvironmentVariable))] public void GetPackageSpec_WhenDependenciesDependencyGeneratePathPropertyPropertyIsAbsent_ReturnsFalseGeneratePathProperty(IEnvironmentVariableReader environmentVariableReader) { const string json = "{\"dependencies\":{\"a\":{\"version\":\"1.0.0\"}}}"; @@ -1521,8 +1520,8 @@ public void GetPackageSpec_WhenDependenciesDependencyGeneratePathPropertyPropert } [Theory] - [MemberData(nameof(TestEnvironmentVariableReader), true)] - [MemberData(nameof(TestEnvironmentVariableReader), false)] + [MemberData(nameof(TestEnvironmentVariableReader), true, MemberType = typeof(LockFileParsingEnvironmentVariable))] + [MemberData(nameof(TestEnvironmentVariableReader), false, MemberType = typeof(LockFileParsingEnvironmentVariable))] public void GetPackageSpec_WhenDependenciesDependencyGeneratePathPropertyValueIsValid_ReturnsGeneratePathProperty(IEnvironmentVariableReader environmentVariableReader, bool expectedResult) { var json = $"{{\"dependencies\":{{\"a\":{{\"generatePathProperty\":{expectedResult.ToString().ToLowerInvariant()},\"version\":\"1.0.0\"}}}}}}"; @@ -1533,7 +1532,7 @@ public void GetPackageSpec_WhenDependenciesDependencyGeneratePathPropertyValueIs } [Theory] - [MemberData(nameof(TestEnvironmentVariableReader))] + [MemberData(nameof(LockFileParsingEnvironmentVariable.TestEnvironmentVariableReader), MemberType = typeof(LockFileParsingEnvironmentVariable))] public void GetPackageSpec_WhenDependenciesDependencyTypePropertyIsAbsent_ReturnsDefaultTypeConstraint(IEnvironmentVariableReader environmentVariableReader) { const string json = "{\"dependencies\":{\"a\":{\"version\":\"1.0.0\"}}}"; @@ -1546,7 +1545,7 @@ public void GetPackageSpec_WhenDependenciesDependencyTypePropertyIsAbsent_Return } [Theory] - [MemberData(nameof(TestEnvironmentVariableReader))] + [MemberData(nameof(LockFileParsingEnvironmentVariable.TestEnvironmentVariableReader), MemberType = typeof(LockFileParsingEnvironmentVariable))] public void GetPackageSpec_WhenDependenciesDependencyVersionCentrallyManagedPropertyIsAbsent_ReturnsFalseVersionCentrallyManaged(IEnvironmentVariableReader environmentVariableReader) { LibraryDependency dependency = GetDependency($"{{\"dependencies\":{{\"a\":{{\"target\":\"Package\",\"version\":\"1.0.0\"}}}}}}", environmentVariableReader); @@ -1555,8 +1554,8 @@ public void GetPackageSpec_WhenDependenciesDependencyVersionCentrallyManagedProp } [Theory] - [MemberData(nameof(TestEnvironmentVariableReader), true)] - [MemberData(nameof(TestEnvironmentVariableReader), false)] + [MemberData(nameof(TestEnvironmentVariableReader), true, MemberType = typeof(LockFileParsingEnvironmentVariable))] + [MemberData(nameof(TestEnvironmentVariableReader), false, MemberType = typeof(LockFileParsingEnvironmentVariable))] public void GetPackageSpec_WhenDependenciesDependencyVersionCentrallyManagedValueIsBool_ReturnsBoolVersionCentrallyManaged(IEnvironmentVariableReader environmentVariableReader, bool expectedValue) { var json = $"{{\"dependencies\":{{\"a\":{{\"versionCentrallyManaged\":{expectedValue.ToString().ToLower()},\"target\":\"Package\",\"version\":\"1.0.0\"}}}}}}"; @@ -1568,7 +1567,7 @@ public void GetPackageSpec_WhenDependenciesDependencyVersionCentrallyManagedValu #pragma warning disable CS0612 // Type or member is obsolete [Theory] - [MemberData(nameof(TestEnvironmentVariableReader))] + [MemberData(nameof(LockFileParsingEnvironmentVariable.TestEnvironmentVariableReader), MemberType = typeof(LockFileParsingEnvironmentVariable))] public void GetPackageSpec_WhenDescriptionPropertyIsAbsent_ReturnsNullDescription(IEnvironmentVariableReader environmentVariableReader) { PackageSpec packageSpec = GetPackageSpec("{}", environmentVariableReader); @@ -1577,9 +1576,9 @@ public void GetPackageSpec_WhenDescriptionPropertyIsAbsent_ReturnsNullDescriptio } [Theory] - [MemberData(nameof(TestEnvironmentVariableReader), null)] - [MemberData(nameof(TestEnvironmentVariableReader), "")] - [MemberData(nameof(TestEnvironmentVariableReader), "b")] + [MemberData(nameof(TestEnvironmentVariableReader), null, MemberType = typeof(LockFileParsingEnvironmentVariable))] + [MemberData(nameof(TestEnvironmentVariableReader), "", MemberType = typeof(LockFileParsingEnvironmentVariable))] + [MemberData(nameof(TestEnvironmentVariableReader), "b", MemberType = typeof(LockFileParsingEnvironmentVariable))] public void GetPackageSpec_WhenDescriptionValueIsValid_ReturnsDescription(IEnvironmentVariableReader environmentVariableReader, string expectedResult) { string description = expectedResult == null ? "null" : $"\"{expectedResult}\""; @@ -1589,7 +1588,7 @@ public void GetPackageSpec_WhenDescriptionValueIsValid_ReturnsDescription(IEnvir } [Theory] - [MemberData(nameof(TestEnvironmentVariableReader))] + [MemberData(nameof(LockFileParsingEnvironmentVariable.TestEnvironmentVariableReader), MemberType = typeof(LockFileParsingEnvironmentVariable))] public void GetPackageSpec_WhenLanguagePropertyIsAbsent_ReturnsNullLanguage(IEnvironmentVariableReader environmentVariableReader) { PackageSpec packageSpec = GetPackageSpec("{}", environmentVariableReader); @@ -1598,9 +1597,9 @@ public void GetPackageSpec_WhenLanguagePropertyIsAbsent_ReturnsNullLanguage(IEnv } [Theory] - [MemberData(nameof(TestEnvironmentVariableReader), null)] - [MemberData(nameof(TestEnvironmentVariableReader), "")] - [MemberData(nameof(TestEnvironmentVariableReader), "b")] + [MemberData(nameof(TestEnvironmentVariableReader), null, MemberType = typeof(LockFileParsingEnvironmentVariable))] + [MemberData(nameof(TestEnvironmentVariableReader), "", MemberType = typeof(LockFileParsingEnvironmentVariable))] + [MemberData(nameof(TestEnvironmentVariableReader), "b", MemberType = typeof(LockFileParsingEnvironmentVariable))] public void GetPackageSpec_WhenLanguageValueIsValid_ReturnsLanguage(IEnvironmentVariableReader environmentVariableReader, string expectedResult) { string language = expectedResult == null ? "null" : $"\"{expectedResult}\""; @@ -1611,7 +1610,7 @@ public void GetPackageSpec_WhenLanguageValueIsValid_ReturnsLanguage(IEnvironment #pragma warning restore CS0612 // Type or member is obsolete [Theory] - [MemberData(nameof(TestEnvironmentVariableReader))] + [MemberData(nameof(LockFileParsingEnvironmentVariable.TestEnvironmentVariableReader), MemberType = typeof(LockFileParsingEnvironmentVariable))] public void GetPackageSpec_WhenFrameworksPropertyIsAbsent_ReturnsEmptyFrameworks(IEnvironmentVariableReader environmentVariableReader) { PackageSpec packageSpec = GetPackageSpec("{}", environmentVariableReader); @@ -1620,7 +1619,7 @@ public void GetPackageSpec_WhenFrameworksPropertyIsAbsent_ReturnsEmptyFrameworks } [Theory] - [MemberData(nameof(TestEnvironmentVariableReader))] + [MemberData(nameof(LockFileParsingEnvironmentVariable.TestEnvironmentVariableReader), MemberType = typeof(LockFileParsingEnvironmentVariable))] public void GetPackageSpec_WhenFrameworksValueIsEmptyObject_ReturnsEmptyFrameworks(IEnvironmentVariableReader environmentVariableReader) { PackageSpec packageSpec = GetPackageSpec("{\"frameworks\":{}}", environmentVariableReader); @@ -1629,7 +1628,7 @@ public void GetPackageSpec_WhenFrameworksValueIsEmptyObject_ReturnsEmptyFramewor } [Theory] - [MemberData(nameof(TestEnvironmentVariableReader))] + [MemberData(nameof(LockFileParsingEnvironmentVariable.TestEnvironmentVariableReader), MemberType = typeof(LockFileParsingEnvironmentVariable))] public void GetPackageSpec_WhenFrameworksAssetTargetFallbackPropertyIsAbsent_ReturnsFalseAssetTargetFallback(IEnvironmentVariableReader environmentVariableReader) { TargetFrameworkInformation framework = GetFramework("{\"frameworks\":{\"a\":{}}}", environmentVariableReader); @@ -1638,8 +1637,8 @@ public void GetPackageSpec_WhenFrameworksAssetTargetFallbackPropertyIsAbsent_Ret } [Theory] - [MemberData(nameof(TestEnvironmentVariableReader), true)] - [MemberData(nameof(TestEnvironmentVariableReader), false)] + [MemberData(nameof(TestEnvironmentVariableReader), true, MemberType = typeof(LockFileParsingEnvironmentVariable))] + [MemberData(nameof(TestEnvironmentVariableReader), false, MemberType = typeof(LockFileParsingEnvironmentVariable))] public void GetPackageSpec_WhenFrameworksAssetTargetFallbackValueIsValid_ReturnsAssetTargetFallback(IEnvironmentVariableReader environmentVariableReader, bool expectedValue) { var json = $"{{\"frameworks\":{{\"a\":{{\"assetTargetFallback\":{expectedValue.ToString().ToLowerInvariant()}}}}}}}"; @@ -1650,7 +1649,7 @@ public void GetPackageSpec_WhenFrameworksAssetTargetFallbackValueIsValid_Returns } [Theory] - [MemberData(nameof(TestEnvironmentVariableReader))] + [MemberData(nameof(LockFileParsingEnvironmentVariable.TestEnvironmentVariableReader), MemberType = typeof(LockFileParsingEnvironmentVariable))] public void GetPackageSpec_WithAssetTargetFallbackAndImportsValues_ReturnsValidAssetTargetFallbackFramework(IEnvironmentVariableReader environmentVariableReader) { var json = $"{{\"frameworks\":{{\"net5.0\":{{\"assetTargetFallback\": true, \"imports\": [\"net472\", \"net471\"]}}}}}}"; @@ -1666,7 +1665,7 @@ public void GetPackageSpec_WithAssetTargetFallbackAndImportsValues_ReturnsValidA } [Theory] - [MemberData(nameof(TestEnvironmentVariableReader))] + [MemberData(nameof(LockFileParsingEnvironmentVariable.TestEnvironmentVariableReader), MemberType = typeof(LockFileParsingEnvironmentVariable))] public void GetPackageSpec_WhenFrameworksCentralPackageVersionsPropertyIsAbsent_ReturnsEmptyCentralPackageVersions(IEnvironmentVariableReader environmentVariableReader) { TargetFrameworkInformation framework = GetFramework("{\"frameworks\":{\"a\":{}}}", environmentVariableReader); @@ -1675,7 +1674,7 @@ public void GetPackageSpec_WhenFrameworksCentralPackageVersionsPropertyIsAbsent_ } [Theory] - [MemberData(nameof(TestEnvironmentVariableReader))] + [MemberData(nameof(LockFileParsingEnvironmentVariable.TestEnvironmentVariableReader), MemberType = typeof(LockFileParsingEnvironmentVariable))] public void GetPackageSpec_WhenFrameworksCentralPackageVersionsValueIsEmptyObject_ReturnsEmptyCentralPackageVersions(IEnvironmentVariableReader environmentVariableReader) { TargetFrameworkInformation framework = GetFramework("{\"frameworks\":{\"a\":{\"centralPackageVersions\":{}}}}", environmentVariableReader); @@ -1684,7 +1683,7 @@ public void GetPackageSpec_WhenFrameworksCentralPackageVersionsValueIsEmptyObjec } [Theory] - [MemberData(nameof(TestEnvironmentVariableReader))] + [MemberData(nameof(LockFileParsingEnvironmentVariable.TestEnvironmentVariableReader), MemberType = typeof(LockFileParsingEnvironmentVariable))] public void GetPackageSpec_WhenFrameworksCentralPackageVersionsVersionPropertyNameIsEmptyString_Throws(IEnvironmentVariableReader environmentVariableReader) { var json = "{\"frameworks\":{\"a\":{\"centralPackageVersions\":{\"\":\"1.0.0\"}}}}"; @@ -1694,7 +1693,7 @@ public void GetPackageSpec_WhenFrameworksCentralPackageVersionsVersionPropertyNa Assert.IsType(exception.InnerException); Assert.Null(exception.InnerException.InnerException); - if (string.Equals(bool.TrueString, environmentVariableReader.GetEnvironmentVariable("NUGET_EXPERIMENTAL_USE_NJ_FOR_FILE_PARSING"))) + if (string.Equals(bool.TrueString, environmentVariableReader.GetEnvironmentVariable(JsonUtility.NUGET_EXPERIMENTAL_USE_NJ_FOR_FILE_PARSING))) { Assert.Equal("Error reading '' at line 1 column 20 : Unable to resolve central version ''.", exception.Message); Assert.Equal(1, exception.Line); @@ -1707,8 +1706,8 @@ public void GetPackageSpec_WhenFrameworksCentralPackageVersionsVersionPropertyNa } [Theory] - [MemberData(nameof(TestEnvironmentVariableReader), "null")] - [MemberData(nameof(TestEnvironmentVariableReader), "\"\"")] + [MemberData(nameof(TestEnvironmentVariableReader), "null", MemberType = typeof(LockFileParsingEnvironmentVariable))] + [MemberData(nameof(TestEnvironmentVariableReader), "\"\"", MemberType = typeof(LockFileParsingEnvironmentVariable))] public void GetPackageSpec_WhenFrameworksCentralPackageVersionsVersionPropertyValueIsNullOrEmptyString_Throws(IEnvironmentVariableReader environmentVariableReader, string value) { var json = $"{{\"frameworks\":{{\"a\":{{\"centralPackageVersions\":{{\"b\":{value}}}}}}}}}"; @@ -1718,7 +1717,7 @@ public void GetPackageSpec_WhenFrameworksCentralPackageVersionsVersionPropertyVa Assert.IsType(exception.InnerException); Assert.Null(exception.InnerException.InnerException); - if (string.Equals(bool.TrueString, environmentVariableReader.GetEnvironmentVariable("NUGET_EXPERIMENTAL_USE_NJ_FOR_FILE_PARSING"))) + if (string.Equals(bool.TrueString, environmentVariableReader.GetEnvironmentVariable(JsonUtility.NUGET_EXPERIMENTAL_USE_NJ_FOR_FILE_PARSING))) { Assert.Equal("Error reading '' at line 1 column 20 : The version cannot be null or empty.", exception.Message); Assert.Equal(1, exception.Line); @@ -1731,7 +1730,7 @@ public void GetPackageSpec_WhenFrameworksCentralPackageVersionsVersionPropertyVa } [Theory] - [MemberData(nameof(TestEnvironmentVariableReader))] + [MemberData(nameof(LockFileParsingEnvironmentVariable.TestEnvironmentVariableReader), MemberType = typeof(LockFileParsingEnvironmentVariable))] public void GetPackageSpec_WhenFrameworksCentralPackageVersionsIsValid_ReturnsCentralPackageVersions(IEnvironmentVariableReader environmentVariableReader) { const string expectedPackageId = "b"; @@ -1751,7 +1750,7 @@ public void GetPackageSpec_WhenFrameworksCentralPackageVersionsIsValid_ReturnsCe } [Theory] - [MemberData(nameof(TestEnvironmentVariableReader))] + [MemberData(nameof(LockFileParsingEnvironmentVariable.TestEnvironmentVariableReader), MemberType = typeof(LockFileParsingEnvironmentVariable))] public void GetPackageSpec_WhenFrameworksCentralPackageVersionsHasDuplicateKey_LastOneWins(IEnvironmentVariableReader environmentVariableReader) { const string expectedPackageId = "b"; @@ -1773,7 +1772,7 @@ public void GetPackageSpec_WhenFrameworksCentralPackageVersionsHasDuplicateKey_L } [Theory] - [MemberData(nameof(TestEnvironmentVariableReader))] + [MemberData(nameof(LockFileParsingEnvironmentVariable.TestEnvironmentVariableReader), MemberType = typeof(LockFileParsingEnvironmentVariable))] public void GetPackageSpec_WhenFrameworksDependenciesPropertyIsAbsent_ReturnsEmptyDependencies(IEnvironmentVariableReader environmentVariableReader) { TargetFrameworkInformation framework = GetFramework("{\"frameworks\":{\"a\":{}}}", environmentVariableReader); @@ -1782,7 +1781,7 @@ public void GetPackageSpec_WhenFrameworksDependenciesPropertyIsAbsent_ReturnsEmp } [Theory] - [MemberData(nameof(TestEnvironmentVariableReader))] + [MemberData(nameof(LockFileParsingEnvironmentVariable.TestEnvironmentVariableReader), MemberType = typeof(LockFileParsingEnvironmentVariable))] public void GetPackageSpec_WhenFrameworksDependenciesValueIsNull_ReturnsEmptyDependencies(IEnvironmentVariableReader environmentVariableReader) { TargetFrameworkInformation framework = GetFramework("{\"frameworks\":{\"a\":{\"dependencies\":null}}}", environmentVariableReader); @@ -1791,14 +1790,14 @@ public void GetPackageSpec_WhenFrameworksDependenciesValueIsNull_ReturnsEmptyDep } [Theory] - [MemberData(nameof(TestEnvironmentVariableReader))] + [MemberData(nameof(LockFileParsingEnvironmentVariable.TestEnvironmentVariableReader), MemberType = typeof(LockFileParsingEnvironmentVariable))] public void GetPackageSpec_WhenFrameworksDependenciesDependencyNameIsEmptyString_Throws(IEnvironmentVariableReader environmentVariableReader) { const string json = "{\"frameworks\":{\"a\":{\"dependencies\":{\"\":{}}}}}"; FileFormatException exception = Assert.Throws(() => GetPackageSpec(json, environmentVariableReader)); - if (string.Equals(bool.TrueString, environmentVariableReader.GetEnvironmentVariable("NUGET_EXPERIMENTAL_USE_NJ_FOR_FILE_PARSING"))) + if (string.Equals(bool.TrueString, environmentVariableReader.GetEnvironmentVariable(JsonUtility.NUGET_EXPERIMENTAL_USE_NJ_FOR_FILE_PARSING))) { Assert.Equal("Error reading '' at line 1 column 20 : Unable to resolve dependency ''.", exception.Message); Assert.Equal(1, exception.Line); @@ -1813,7 +1812,7 @@ public void GetPackageSpec_WhenFrameworksDependenciesDependencyNameIsEmptyString } [Theory] - [MemberData(nameof(TestEnvironmentVariableReader))] + [MemberData(nameof(LockFileParsingEnvironmentVariable.TestEnvironmentVariableReader), MemberType = typeof(LockFileParsingEnvironmentVariable))] public void GetPackageSpec_WhenFrameworksDependenciesDependencyValueIsVersionString_ReturnsDependencyVersionRange(IEnvironmentVariableReader environmentVariableReader) { var expectedResult = new LibraryRange( @@ -1828,7 +1827,7 @@ public void GetPackageSpec_WhenFrameworksDependenciesDependencyValueIsVersionStr } [Theory] - [MemberData(nameof(TestEnvironmentVariableReader))] + [MemberData(nameof(LockFileParsingEnvironmentVariable.TestEnvironmentVariableReader), MemberType = typeof(LockFileParsingEnvironmentVariable))] public void GetPackageSpec_WhenFrameworksDependenciesDependencyValueIsVersionRangeString_ReturnsDependencyVersionRange(IEnvironmentVariableReader environmentVariableReader) { var expectedResult = new LibraryRange( @@ -1843,12 +1842,12 @@ public void GetPackageSpec_WhenFrameworksDependenciesDependencyValueIsVersionRan } [Theory] - [MemberData(nameof(TestEnvironmentVariableReader), LibraryDependencyTarget.None)] - [MemberData(nameof(TestEnvironmentVariableReader), LibraryDependencyTarget.Assembly)] - [MemberData(nameof(TestEnvironmentVariableReader), LibraryDependencyTarget.Reference)] - [MemberData(nameof(TestEnvironmentVariableReader), LibraryDependencyTarget.WinMD)] - [MemberData(nameof(TestEnvironmentVariableReader), LibraryDependencyTarget.All)] - [MemberData(nameof(TestEnvironmentVariableReader), LibraryDependencyTarget.PackageProjectExternal)] + [MemberData(nameof(TestEnvironmentVariableReader), LibraryDependencyTarget.None, MemberType = typeof(LockFileParsingEnvironmentVariable))] + [MemberData(nameof(TestEnvironmentVariableReader), LibraryDependencyTarget.Assembly, MemberType = typeof(LockFileParsingEnvironmentVariable))] + [MemberData(nameof(TestEnvironmentVariableReader), LibraryDependencyTarget.Reference, MemberType = typeof(LockFileParsingEnvironmentVariable))] + [MemberData(nameof(TestEnvironmentVariableReader), LibraryDependencyTarget.WinMD, MemberType = typeof(LockFileParsingEnvironmentVariable))] + [MemberData(nameof(TestEnvironmentVariableReader), LibraryDependencyTarget.All, MemberType = typeof(LockFileParsingEnvironmentVariable))] + [MemberData(nameof(TestEnvironmentVariableReader), LibraryDependencyTarget.PackageProjectExternal, MemberType = typeof(LockFileParsingEnvironmentVariable))] public void GetPackageSpec_WhenFrameworksDependenciesDependencyTargetValueIsUnsupported_Throws(IEnvironmentVariableReader environmentVariableReader, LibraryDependencyTarget target) { var json = $"{{\"frameworks\":{{\"a\":{{\"dependencies\":{{\"b\":{{\"version\":\"1.2.3\",\"target\":\"{target}\"}}}}}}}}}}"; @@ -1858,7 +1857,7 @@ public void GetPackageSpec_WhenFrameworksDependenciesDependencyTargetValueIsUnsu Assert.IsType(exception.InnerException); Assert.Null(exception.InnerException.InnerException); - if (string.Equals(bool.TrueString, environmentVariableReader.GetEnvironmentVariable("NUGET_EXPERIMENTAL_USE_NJ_FOR_FILE_PARSING"))) + if (string.Equals(bool.TrueString, environmentVariableReader.GetEnvironmentVariable(JsonUtility.NUGET_EXPERIMENTAL_USE_NJ_FOR_FILE_PARSING))) { Assert.Equal($"Error reading '' at line 1 column 20 : Invalid dependency target value '{target}'.", exception.Message); Assert.Equal(1, exception.Line); @@ -1871,7 +1870,7 @@ public void GetPackageSpec_WhenFrameworksDependenciesDependencyTargetValueIsUnsu } [Theory] - [MemberData(nameof(TestEnvironmentVariableReader))] + [MemberData(nameof(LockFileParsingEnvironmentVariable.TestEnvironmentVariableReader), MemberType = typeof(LockFileParsingEnvironmentVariable))] public void GetPackageSpec_WhenFrameworksDependenciesDependencyAutoreferencedPropertyIsAbsent_ReturnsFalseAutoreferenced(IEnvironmentVariableReader environmentVariableReader) { const string json = "{\"frameworks\":{\"a\":{\"dependencies\":{\"b\":{\"target\":\"Project\"}}}}}"; @@ -1882,8 +1881,8 @@ public void GetPackageSpec_WhenFrameworksDependenciesDependencyAutoreferencedPro } [Theory] - [MemberData(nameof(TestEnvironmentVariableReader), true)] - [MemberData(nameof(TestEnvironmentVariableReader), false)] + [MemberData(nameof(TestEnvironmentVariableReader), true, MemberType = typeof(LockFileParsingEnvironmentVariable))] + [MemberData(nameof(TestEnvironmentVariableReader), false, MemberType = typeof(LockFileParsingEnvironmentVariable))] public void GetPackageSpec_WhenFrameworksDependenciesDependencyAutoreferencedValueIsBool_ReturnsBoolAutoreferenced(IEnvironmentVariableReader environmentVariableReader, bool expectedValue) { var json = $"{{\"frameworks\":{{\"a\":{{\"dependencies\":{{\"b\":{{\"autoReferenced\":{expectedValue.ToString().ToLower()},\"target\":\"Project\"}}}}}}}}}}"; @@ -1894,9 +1893,9 @@ public void GetPackageSpec_WhenFrameworksDependenciesDependencyAutoreferencedVal } [Theory] - [MemberData(nameof(TestEnvironmentVariableReader), "exclude")] - [MemberData(nameof(TestEnvironmentVariableReader), "include")] - [MemberData(nameof(TestEnvironmentVariableReader), "suppressParent")] + [MemberData(nameof(TestEnvironmentVariableReader), "exclude", MemberType = typeof(LockFileParsingEnvironmentVariable))] + [MemberData(nameof(TestEnvironmentVariableReader), "include", MemberType = typeof(LockFileParsingEnvironmentVariable))] + [MemberData(nameof(TestEnvironmentVariableReader), "suppressParent", MemberType = typeof(LockFileParsingEnvironmentVariable))] public void GetPackageSpec_WhenFrameworksDependenciesDependencyValueIsArray_Throws(IEnvironmentVariableReader environmentVariableReader, string propertyName) { var json = $"{{\"frameworks\":{{\"a\":{{\"dependencies\":{{\"b\":{{\"{propertyName}\":[\"c\"]}}}}}}}}}}"; @@ -1908,7 +1907,7 @@ public void GetPackageSpec_WhenFrameworksDependenciesDependencyValueIsArray_Thro Assert.IsType(exception.InnerException); Assert.Null(exception.InnerException.InnerException); - if (string.Equals(bool.TrueString, environmentVariableReader.GetEnvironmentVariable("NUGET_EXPERIMENTAL_USE_NJ_FOR_FILE_PARSING"))) + if (string.Equals(bool.TrueString, environmentVariableReader.GetEnvironmentVariable(JsonUtility.NUGET_EXPERIMENTAL_USE_NJ_FOR_FILE_PARSING))) { Assert.Equal("Error reading '' at line 1 column 20 : Specified cast is not valid.", exception.Message); Assert.Equal(1, exception.Line); @@ -1921,7 +1920,7 @@ public void GetPackageSpec_WhenFrameworksDependenciesDependencyValueIsArray_Thro } [Theory] - [MemberData(nameof(TestEnvironmentVariableReader))] + [MemberData(nameof(LockFileParsingEnvironmentVariable.TestEnvironmentVariableReader), MemberType = typeof(LockFileParsingEnvironmentVariable))] public void GetPackageSpec_WhenFrameworksDependenciesDependencyIncludeAndExcludePropertiesAreAbsent_ReturnsAllIncludeType(IEnvironmentVariableReader environmentVariableReader) { const string json = "{\"frameworks\":{\"a\":{\"dependencies\":{\"b\":{\"version\":\"1.0.0\"}}}}}"; @@ -1932,7 +1931,7 @@ public void GetPackageSpec_WhenFrameworksDependenciesDependencyIncludeAndExclude } [Theory] - [MemberData(nameof(TestEnvironmentVariableReader))] + [MemberData(nameof(LockFileParsingEnvironmentVariable.TestEnvironmentVariableReader), MemberType = typeof(LockFileParsingEnvironmentVariable))] public void GetPackageSpec_WhenFrameworksDependenciesDependencyExcludeValueIsValid_ReturnsIncludeType(IEnvironmentVariableReader environmentVariableReader) { const string json = "{\"frameworks\":{\"a\":{\"dependencies\":{\"b\":{\"exclude\":\"Native\",\"version\":\"1.0.0\"}}}}}"; @@ -1943,7 +1942,7 @@ public void GetPackageSpec_WhenFrameworksDependenciesDependencyExcludeValueIsVal } [Theory] - [MemberData(nameof(TestEnvironmentVariableReader))] + [MemberData(nameof(LockFileParsingEnvironmentVariable.TestEnvironmentVariableReader), MemberType = typeof(LockFileParsingEnvironmentVariable))] public void GetPackageSpec_WhenFrameworksDependenciesDependencyIncludeValueIsValid_ReturnsIncludeType(IEnvironmentVariableReader environmentVariableReader) { const string json = "{\"frameworks\":{\"a\":{\"dependencies\":{\"b\":{\"include\":\"ContentFiles\",\"version\":\"1.0.0\"}}}}}"; @@ -1954,7 +1953,7 @@ public void GetPackageSpec_WhenFrameworksDependenciesDependencyIncludeValueIsVal } [Theory] - [MemberData(nameof(TestEnvironmentVariableReader))] + [MemberData(nameof(LockFileParsingEnvironmentVariable.TestEnvironmentVariableReader), MemberType = typeof(LockFileParsingEnvironmentVariable))] public void GetPackageSpec_WhenFrameworksDependenciesDependencyIncludeValueOverridesTypeValue_ReturnsIncludeType(IEnvironmentVariableReader environmentVariableReader) { const string json = "{\"frameworks\":{\"a\":{\"dependencies\":{\"b\":{\"include\":\"ContentFiles\",\"type\":\"BecomesNupkgDependency, SharedFramework\",\"version\":\"1.0.0\"}}}}}"; @@ -1965,7 +1964,7 @@ public void GetPackageSpec_WhenFrameworksDependenciesDependencyIncludeValueOverr } [Theory] - [MemberData(nameof(TestEnvironmentVariableReader))] + [MemberData(nameof(LockFileParsingEnvironmentVariable.TestEnvironmentVariableReader), MemberType = typeof(LockFileParsingEnvironmentVariable))] public void GetPackageSpec_WhenFrameworksDependenciesDependencySuppressParentValueOverridesTypeValue_ReturnsSuppressParent(IEnvironmentVariableReader environmentVariableReader) { const string json = "{\"frameworks\":{\"a\":{\"dependencies\":{\"b\":{\"suppressParent\":\"ContentFiles\",\"type\":\"SharedFramework\",\"version\":\"1.0.0\"}}}}}"; @@ -1976,7 +1975,7 @@ public void GetPackageSpec_WhenFrameworksDependenciesDependencySuppressParentVal } [Theory] - [MemberData(nameof(TestEnvironmentVariableReader))] + [MemberData(nameof(LockFileParsingEnvironmentVariable.TestEnvironmentVariableReader), MemberType = typeof(LockFileParsingEnvironmentVariable))] public void GetPackageSpec_WhenFrameworksDependenciesDependencySuppressParentPropertyIsAbsent_ReturnsSuppressParent(IEnvironmentVariableReader environmentVariableReader) { const string json = "{\"frameworks\":{\"a\":{\"dependencies\":{\"b\":{\"version\":\"1.0.0\"}}}}}"; @@ -1987,7 +1986,7 @@ public void GetPackageSpec_WhenFrameworksDependenciesDependencySuppressParentPro } [Theory] - [MemberData(nameof(TestEnvironmentVariableReader))] + [MemberData(nameof(LockFileParsingEnvironmentVariable.TestEnvironmentVariableReader), MemberType = typeof(LockFileParsingEnvironmentVariable))] public void GetPackageSpec_WhenFrameworksDependenciesDependencySuppressParentValueIsValid_ReturnsSuppressParent(IEnvironmentVariableReader environmentVariableReader) { const string json = "{\"frameworks\":{\"a\":{\"dependencies\":{\"b\":{\"suppressParent\":\"Compile\",\"version\":\"1.0.0\"}}}}}"; @@ -1998,7 +1997,7 @@ public void GetPackageSpec_WhenFrameworksDependenciesDependencySuppressParentVal } [Theory] - [MemberData(nameof(TestEnvironmentVariableReader))] + [MemberData(nameof(LockFileParsingEnvironmentVariable.TestEnvironmentVariableReader), MemberType = typeof(LockFileParsingEnvironmentVariable))] public void GetPackageSpec_WhenFrameworksDependenciesDependencyVersionValueIsInvalid_Throws(IEnvironmentVariableReader environmentVariableReader) { const string json = "{\"frameworks\":{\"a\":{\"dependencies\":{\"b\":{\"version\":\"c\"}}}}}"; @@ -2009,7 +2008,7 @@ public void GetPackageSpec_WhenFrameworksDependenciesDependencyVersionValueIsInv Assert.IsType(exception.InnerException.InnerException); Assert.Null(exception.InnerException.InnerException.InnerException); - if (string.Equals(bool.TrueString, environmentVariableReader.GetEnvironmentVariable("NUGET_EXPERIMENTAL_USE_NJ_FOR_FILE_PARSING"))) + if (string.Equals(bool.TrueString, environmentVariableReader.GetEnvironmentVariable(JsonUtility.NUGET_EXPERIMENTAL_USE_NJ_FOR_FILE_PARSING))) { Assert.Equal("Error reading '' at line 1 column 20 : Error reading '' at line 1 column 54 : 'c' is not a valid version string.", exception.Message); Assert.Equal(1, exception.Line); @@ -2022,7 +2021,7 @@ public void GetPackageSpec_WhenFrameworksDependenciesDependencyVersionValueIsInv } [Theory] - [MemberData(nameof(TestEnvironmentVariableReader))] + [MemberData(nameof(LockFileParsingEnvironmentVariable.TestEnvironmentVariableReader), MemberType = typeof(LockFileParsingEnvironmentVariable))] public void GetPackageSpec_WhenFrameworksDependenciesDependencyTargetPropertyIsAbsent_ReturnsTarget(IEnvironmentVariableReader environmentVariableReader) { const string json = "{\"frameworks\":{\"a\":{\"dependencies\":{\"b\":{\"version\":\"1.0.0\"}}}}}"; @@ -2035,7 +2034,7 @@ public void GetPackageSpec_WhenFrameworksDependenciesDependencyTargetPropertyIsA } [Theory] - [MemberData(nameof(TestEnvironmentVariableReader))] + [MemberData(nameof(LockFileParsingEnvironmentVariable.TestEnvironmentVariableReader), MemberType = typeof(LockFileParsingEnvironmentVariable))] public void GetPackageSpec_WhenFrameworksDependenciesDependencyTargetValueIsPackageAndVersionPropertyIsAbsent_Throws(IEnvironmentVariableReader environmentVariableReader) { const string json = "{\"frameworks\":{\"a\":{\"dependencies\":{\"b\":{\"target\":\"Package\"}}}}}"; @@ -2046,7 +2045,7 @@ public void GetPackageSpec_WhenFrameworksDependenciesDependencyTargetValueIsPack Assert.IsType(exception.InnerException.InnerException); Assert.Null(exception.InnerException.InnerException.InnerException); - if (string.Equals(bool.TrueString, environmentVariableReader.GetEnvironmentVariable("NUGET_EXPERIMENTAL_USE_NJ_FOR_FILE_PARSING"))) + if (string.Equals(bool.TrueString, environmentVariableReader.GetEnvironmentVariable(JsonUtility.NUGET_EXPERIMENTAL_USE_NJ_FOR_FILE_PARSING))) { Assert.Equal("Error reading '' at line 1 column 20 : Error reading '' at line 1 column 41 : Package dependencies must specify a version range.", exception.Message); Assert.Equal(1, exception.Line); @@ -2059,7 +2058,7 @@ public void GetPackageSpec_WhenFrameworksDependenciesDependencyTargetValueIsPack } [Theory] - [MemberData(nameof(TestEnvironmentVariableReader))] + [MemberData(nameof(LockFileParsingEnvironmentVariable.TestEnvironmentVariableReader), MemberType = typeof(LockFileParsingEnvironmentVariable))] public void GetPackageSpec_WhenFrameworksDependenciesDependencyTargetValueIsProjectAndVersionPropertyIsAbsent_ReturnsAllVersionRange(IEnvironmentVariableReader environmentVariableReader) { const string json = "{\"frameworks\":{\"a\":{\"dependencies\":{\"b\":{\"target\":\"Project\"}}}}}"; @@ -2070,7 +2069,7 @@ public void GetPackageSpec_WhenFrameworksDependenciesDependencyTargetValueIsProj } [Theory] - [MemberData(nameof(TestEnvironmentVariableReader))] + [MemberData(nameof(LockFileParsingEnvironmentVariable.TestEnvironmentVariableReader), MemberType = typeof(LockFileParsingEnvironmentVariable))] public void GetPackageSpec_WhenFrameworksDependenciesDependencyNoWarnPropertyIsAbsent_ReturnsEmptyNoWarns(IEnvironmentVariableReader environmentVariableReader) { const string json = "{\"frameworks\":{\"a\":{\"dependencies\":{\"b\":{\"version\":\"1.0.0\"}}}}}"; @@ -2081,7 +2080,7 @@ public void GetPackageSpec_WhenFrameworksDependenciesDependencyNoWarnPropertyIsA } [Theory] - [MemberData(nameof(TestEnvironmentVariableReader))] + [MemberData(nameof(LockFileParsingEnvironmentVariable.TestEnvironmentVariableReader), MemberType = typeof(LockFileParsingEnvironmentVariable))] public void GetPackageSpec_WhenFrameworksDependenciesDependencyNoWarnValueIsValid_ReturnsNoWarns(IEnvironmentVariableReader environmentVariableReader) { NuGetLogCode[] expectedResults = { NuGetLogCode.NU1000, NuGetLogCode.NU3000 }; @@ -2096,7 +2095,7 @@ public void GetPackageSpec_WhenFrameworksDependenciesDependencyNoWarnValueIsVali } [Theory] - [MemberData(nameof(TestEnvironmentVariableReader))] + [MemberData(nameof(LockFileParsingEnvironmentVariable.TestEnvironmentVariableReader), MemberType = typeof(LockFileParsingEnvironmentVariable))] public void GetPackageSpec_WhenFrameworksDependenciesDependencyGeneratePathPropertyPropertyIsAbsent_ReturnsFalseGeneratePathProperty(IEnvironmentVariableReader environmentVariableReader) { const string json = "{\"frameworks\":{\"a\":{\"dependencies\":{\"b\":{\"version\":\"1.0.0\"}}}}}}}"; @@ -2107,8 +2106,8 @@ public void GetPackageSpec_WhenFrameworksDependenciesDependencyGeneratePathPrope } [Theory] - [MemberData(nameof(TestEnvironmentVariableReader), true)] - [MemberData(nameof(TestEnvironmentVariableReader), false)] + [MemberData(nameof(TestEnvironmentVariableReader), true, MemberType = typeof(LockFileParsingEnvironmentVariable))] + [MemberData(nameof(TestEnvironmentVariableReader), false, MemberType = typeof(LockFileParsingEnvironmentVariable))] public void GetPackageSpec_WhenFrameworksDependenciesDependencyGeneratePathPropertyValueIsValid_ReturnsGeneratePathProperty(IEnvironmentVariableReader environmentVariableReader, bool expectedResult) { var json = $"{{\"frameworks\":{{\"a\":{{\"dependencies\":{{\"b\":{{\"generatePathProperty\":{expectedResult.ToString().ToLowerInvariant()},\"version\":\"1.0.0\"}}}}}}}}}}"; @@ -2119,7 +2118,7 @@ public void GetPackageSpec_WhenFrameworksDependenciesDependencyGeneratePathPrope } [Theory] - [MemberData(nameof(TestEnvironmentVariableReader))] + [MemberData(nameof(LockFileParsingEnvironmentVariable.TestEnvironmentVariableReader), MemberType = typeof(LockFileParsingEnvironmentVariable))] public void GetPackageSpec_WhenFrameworksDependenciesDependencyTypePropertyIsAbsent_ReturnsDefaultTypeConstraint(IEnvironmentVariableReader environmentVariableReader) { const string json = "{\"frameworks\":{\"a\":{\"dependencies\":{\"b\":{\"version\":\"1.0.0\"}}}}}"; @@ -2133,7 +2132,7 @@ public void GetPackageSpec_WhenFrameworksDependenciesDependencyTypePropertyIsAbs [Theory] - [MemberData(nameof(TestEnvironmentVariableReader))] + [MemberData(nameof(LockFileParsingEnvironmentVariable.TestEnvironmentVariableReader), MemberType = typeof(LockFileParsingEnvironmentVariable))] public void GetPackageSpec_WhenFrameworksDependenciesDependencyVersionCentrallyManagedPropertyIsAbsent_ReturnsFalseVersionCentrallyManaged(IEnvironmentVariableReader environmentVariableReader) { const string json = "{\"frameworks\":{\"a\":{\"dependencies\":{\"b\":{\"target\":\"Package\",\"version\":\"1.0.0\"}}}}}"; @@ -2144,8 +2143,8 @@ public void GetPackageSpec_WhenFrameworksDependenciesDependencyVersionCentrallyM } [Theory] - [MemberData(nameof(TestEnvironmentVariableReader), true)] - [MemberData(nameof(TestEnvironmentVariableReader), false)] + [MemberData(nameof(TestEnvironmentVariableReader), true, MemberType = typeof(LockFileParsingEnvironmentVariable))] + [MemberData(nameof(TestEnvironmentVariableReader), false, MemberType = typeof(LockFileParsingEnvironmentVariable))] public void GetPackageSpec_WhenFrameworksDependenciesDependencyVersionCentrallyManagedValueIsBool_ReturnsBoolVersionCentrallyManaged(IEnvironmentVariableReader environmentVariableReader, bool expectedValue) { var json = $"{{\"frameworks\":{{\"a\":{{\"dependencies\":{{\"b\":{{\"versionCentrallyManaged\":{expectedValue.ToString().ToLower()},\"target\":\"Package\",\"version\":\"1.0.0\"}}}}}}}}}}"; @@ -2156,7 +2155,7 @@ public void GetPackageSpec_WhenFrameworksDependenciesDependencyVersionCentrallyM } [Theory] - [MemberData(nameof(TestEnvironmentVariableReader))] + [MemberData(nameof(LockFileParsingEnvironmentVariable.TestEnvironmentVariableReader), MemberType = typeof(LockFileParsingEnvironmentVariable))] public void GetPackageSpec_WhenFrameworksDownloadDependenciesPropertyIsAbsent_ReturnsEmptyDownloadDependencies(IEnvironmentVariableReader environmentVariableReader) { const string json = "{\"frameworks\":{\"a\":{}}}"; @@ -2167,7 +2166,7 @@ public void GetPackageSpec_WhenFrameworksDownloadDependenciesPropertyIsAbsent_Re } [Theory] - [MemberData(nameof(TestEnvironmentVariableReader))] + [MemberData(nameof(LockFileParsingEnvironmentVariable.TestEnvironmentVariableReader), MemberType = typeof(LockFileParsingEnvironmentVariable))] public void GetPackageSpec_WhenFrameworksDownloadDependenciesValueIsNull_ReturnsEmptyDownloadDependencies(IEnvironmentVariableReader environmentVariableReader) { const string json = "{\"frameworks\":{\"a\":{\"downloadDependencies\":null}}}"; @@ -2178,7 +2177,7 @@ public void GetPackageSpec_WhenFrameworksDownloadDependenciesValueIsNull_Returns } [Theory] - [MemberData(nameof(TestEnvironmentVariableReader))] + [MemberData(nameof(LockFileParsingEnvironmentVariable.TestEnvironmentVariableReader), MemberType = typeof(LockFileParsingEnvironmentVariable))] public void GetPackageSpec_WhenFrameworksDownloadDependenciesValueIsNotArray_ReturnsEmptyDownloadDependencies(IEnvironmentVariableReader environmentVariableReader) { const string json = "{\"frameworks\":{\"a\":{\"downloadDependencies\":\"b\"}}}"; @@ -2189,7 +2188,7 @@ public void GetPackageSpec_WhenFrameworksDownloadDependenciesValueIsNotArray_Ret } [Theory] - [MemberData(nameof(TestEnvironmentVariableReader))] + [MemberData(nameof(LockFileParsingEnvironmentVariable.TestEnvironmentVariableReader), MemberType = typeof(LockFileParsingEnvironmentVariable))] public void GetPackageSpec_WhenFrameworksDownloadDependenciesValueIsEmptyArray_ReturnsEmptyDownloadDependencies(IEnvironmentVariableReader environmentVariableReader) { const string json = "{\"frameworks\":{\"a\":{\"downloadDependencies\":[]}}}"; @@ -2200,7 +2199,7 @@ public void GetPackageSpec_WhenFrameworksDownloadDependenciesValueIsEmptyArray_R } [Theory] - [MemberData(nameof(TestEnvironmentVariableReader))] + [MemberData(nameof(LockFileParsingEnvironmentVariable.TestEnvironmentVariableReader), MemberType = typeof(LockFileParsingEnvironmentVariable))] public void GetPackageSpec_WhenFrameworksDownloadDependenciesDependencyNameIsAbsent_Throws(IEnvironmentVariableReader environmentVariableReader) { const string json = "{\"frameworks\":{\"a\":{\"downloadDependencies\":[{\"version\":\"1.2.3\"}]}}}"; @@ -2209,7 +2208,7 @@ public void GetPackageSpec_WhenFrameworksDownloadDependenciesDependencyNameIsAbs Assert.IsType(exception.InnerException); Assert.Null(exception.InnerException.InnerException); - if (string.Equals(bool.TrueString, environmentVariableReader.GetEnvironmentVariable("NUGET_EXPERIMENTAL_USE_NJ_FOR_FILE_PARSING"))) + if (string.Equals(bool.TrueString, environmentVariableReader.GetEnvironmentVariable(JsonUtility.NUGET_EXPERIMENTAL_USE_NJ_FOR_FILE_PARSING))) { Assert.Equal("Error reading '' at line 1 column 20 : Unable to resolve downloadDependency ''.", exception.Message); Assert.Equal(1, exception.Line); @@ -2222,7 +2221,7 @@ public void GetPackageSpec_WhenFrameworksDownloadDependenciesDependencyNameIsAbs } [Theory] - [MemberData(nameof(TestEnvironmentVariableReader))] + [MemberData(nameof(LockFileParsingEnvironmentVariable.TestEnvironmentVariableReader), MemberType = typeof(LockFileParsingEnvironmentVariable))] public void GetPackageSpec_WhenFrameworksDownloadDependenciesDependencyNameIsNull_ReturnsDownloadDependencies(IEnvironmentVariableReader environmentVariableReader) { var expectedResult = new DownloadDependency(name: null, new VersionRange(new NuGetVersion("1.2.3"))); @@ -2237,7 +2236,7 @@ public void GetPackageSpec_WhenFrameworksDownloadDependenciesDependencyNameIsNul } [Theory] - [MemberData(nameof(TestEnvironmentVariableReader))] + [MemberData(nameof(LockFileParsingEnvironmentVariable.TestEnvironmentVariableReader), MemberType = typeof(LockFileParsingEnvironmentVariable))] public void GetPackageSpec_WhenFrameworksDownloadDependenciesDependencyVersionIsAbsent_Throws(IEnvironmentVariableReader environmentVariableReader) { const string json = "{\"frameworks\":{\"a\":{\"downloadDependencies\":[{\"name\":\"b\"}]}}}"; @@ -2246,7 +2245,7 @@ public void GetPackageSpec_WhenFrameworksDownloadDependenciesDependencyVersionIs Assert.IsType(exception.InnerException); Assert.Null(exception.InnerException.InnerException); - if (string.Equals(bool.TrueString, environmentVariableReader.GetEnvironmentVariable("NUGET_EXPERIMENTAL_USE_NJ_FOR_FILE_PARSING"))) + if (string.Equals(bool.TrueString, environmentVariableReader.GetEnvironmentVariable(JsonUtility.NUGET_EXPERIMENTAL_USE_NJ_FOR_FILE_PARSING))) { Assert.Equal("Error reading '' at line 1 column 20 : The version cannot be null or empty", exception.Message); Assert.Equal(1, exception.Line); @@ -2259,8 +2258,8 @@ public void GetPackageSpec_WhenFrameworksDownloadDependenciesDependencyVersionIs } [Theory] - [MemberData(nameof(TestEnvironmentVariableReader), "null")] - [MemberData(nameof(TestEnvironmentVariableReader), "c")] + [MemberData(nameof(TestEnvironmentVariableReader), "null", MemberType = typeof(LockFileParsingEnvironmentVariable))] + [MemberData(nameof(TestEnvironmentVariableReader), "c", MemberType = typeof(LockFileParsingEnvironmentVariable))] public void GetPackageSpec_WhenFrameworksDownloadDependenciesDependencyVersionIsInvalid_Throws(IEnvironmentVariableReader environmentVariableReader, string version) { var json = $"{{\"frameworks\":{{\"a\":{{\"downloadDependencies\":[{{\"name\":\"b\",\"version\":\"{version}\"}}]}}}}}}"; @@ -2273,7 +2272,7 @@ public void GetPackageSpec_WhenFrameworksDownloadDependenciesDependencyVersionIs Assert.IsType(exception.InnerException.InnerException); Assert.Null(exception.InnerException.InnerException.InnerException); - if (string.Equals(bool.TrueString, environmentVariableReader.GetEnvironmentVariable("NUGET_EXPERIMENTAL_USE_NJ_FOR_FILE_PARSING"))) + if (string.Equals(bool.TrueString, environmentVariableReader.GetEnvironmentVariable(JsonUtility.NUGET_EXPERIMENTAL_USE_NJ_FOR_FILE_PARSING))) { Assert.Equal($"Error reading '' at line 1 column 20 : Error reading '' at line 1 column {expectedColumn} : '{version}' is not a valid version string.", exception.Message); Assert.Equal(1, exception.Line); @@ -2286,7 +2285,7 @@ public void GetPackageSpec_WhenFrameworksDownloadDependenciesDependencyVersionIs } [Theory] - [MemberData(nameof(TestEnvironmentVariableReader))] + [MemberData(nameof(LockFileParsingEnvironmentVariable.TestEnvironmentVariableReader), MemberType = typeof(LockFileParsingEnvironmentVariable))] public void GetPackageSpec_WhenFrameworksDownloadDependenciesValueIsValid_ReturnsDownloadDependencies(IEnvironmentVariableReader environmentVariableReader) { var expectedResult = new DownloadDependency(name: "b", new VersionRange(new NuGetVersion("1.2.3"))); @@ -2298,7 +2297,23 @@ public void GetPackageSpec_WhenFrameworksDownloadDependenciesValueIsValid_Return } [Theory] - [MemberData(nameof(TestEnvironmentVariableReader))] + [MemberData(nameof(LockFileParsingEnvironmentVariable.TestEnvironmentVariableReader), MemberType = typeof(LockFileParsingEnvironmentVariable))] + public void GetPackageSpec_WhenFrameworksDownloadDependenciesValueIsValidWithMultipleVersions_ReturnsDownloadDependencies(IEnvironmentVariableReader environmentVariableReader) + { + var json = $"{{\"frameworks\":{{\"a\":{{\"downloadDependencies\":[{{\"name\":\"b\",\"version\":\"1.2.3;;2.0.0\"}}]}}}}}}"; + + TargetFrameworkInformation framework = GetFramework(json, environmentVariableReader); + + Assert.Equal(2, framework.DownloadDependencies.Count()); + Assert.Equal("b", framework.DownloadDependencies[0].Name); + Assert.Equal(new VersionRange(new NuGetVersion("1.2.3")), framework.DownloadDependencies[0].VersionRange); + Assert.Equal("b", framework.DownloadDependencies[1].Name); + Assert.Equal(new VersionRange(new NuGetVersion("2.0.0")), framework.DownloadDependencies[1].VersionRange); + + } + + [Theory] + [MemberData(nameof(LockFileParsingEnvironmentVariable.TestEnvironmentVariableReader), MemberType = typeof(LockFileParsingEnvironmentVariable))] public void GetPackageSpec_WhenFrameworksDownloadDependenciesValueHasDuplicates_PrefersFirstByName(IEnvironmentVariableReader environmentVariableReader) { var expectedResult = new DownloadDependency(name: "b", new VersionRange(new NuGetVersion("1.2.3"))); @@ -2314,7 +2329,7 @@ public void GetPackageSpec_WhenFrameworksDownloadDependenciesValueHasDuplicates_ } [Theory] - [MemberData(nameof(TestEnvironmentVariableReader))] + [MemberData(nameof(LockFileParsingEnvironmentVariable.TestEnvironmentVariableReader), MemberType = typeof(LockFileParsingEnvironmentVariable))] public void GetPackageSpec_WhenFrameworksFrameworkAssembliesPropertyIsAbsent_ReturnsEmptyDependencies(IEnvironmentVariableReader environmentVariableReader) { const string json = "{\"frameworks\":{\"a\":{}}}"; @@ -2325,7 +2340,7 @@ public void GetPackageSpec_WhenFrameworksFrameworkAssembliesPropertyIsAbsent_Ret } [Theory] - [MemberData(nameof(TestEnvironmentVariableReader))] + [MemberData(nameof(LockFileParsingEnvironmentVariable.TestEnvironmentVariableReader), MemberType = typeof(LockFileParsingEnvironmentVariable))] public void GetPackageSpec_WhenFrameworksFrameworkAssembliesValueIsNull_ReturnsEmptyDependencies(IEnvironmentVariableReader environmentVariableReader) { const string json = "{\"frameworks\":{\"a\":{\"frameworkAssemblies\":null}}}"; @@ -2336,7 +2351,7 @@ public void GetPackageSpec_WhenFrameworksFrameworkAssembliesValueIsNull_ReturnsE } [Theory] - [MemberData(nameof(TestEnvironmentVariableReader))] + [MemberData(nameof(LockFileParsingEnvironmentVariable.TestEnvironmentVariableReader), MemberType = typeof(LockFileParsingEnvironmentVariable))] public void GetPackageSpec_WhenFrameworksFrameworkAssembliesValueIsEmptyObject_ReturnsEmptyDependencies(IEnvironmentVariableReader environmentVariableReader) { const string json = "{\"frameworks\":{\"a\":{\"frameworkAssemblies\":{}}}}"; @@ -2347,7 +2362,7 @@ public void GetPackageSpec_WhenFrameworksFrameworkAssembliesValueIsEmptyObject_R } [Theory] - [MemberData(nameof(TestEnvironmentVariableReader))] + [MemberData(nameof(LockFileParsingEnvironmentVariable.TestEnvironmentVariableReader), MemberType = typeof(LockFileParsingEnvironmentVariable))] public void GetPackageSpec_WhenFrameworksFrameworkAssembliesDependencyTargetPropertyIsAbsent_ReturnsTarget(IEnvironmentVariableReader environmentVariableReader) { const string json = "{\"frameworks\":{\"a\":{\"frameworkAssemblies\":{\"b\":{\"version\":\"1.0.0\"}}}}}"; @@ -2358,7 +2373,7 @@ public void GetPackageSpec_WhenFrameworksFrameworkAssembliesDependencyTargetProp } [Theory] - [MemberData(nameof(TestEnvironmentVariableReader))] + [MemberData(nameof(LockFileParsingEnvironmentVariable.TestEnvironmentVariableReader), MemberType = typeof(LockFileParsingEnvironmentVariable))] public void GetPackageSpec_WhenFrameworksFrameworkAssembliesDependencyTargetValueIsPackageAndVersionPropertyIsAbsent_Throws(IEnvironmentVariableReader environmentVariableReader) { const string json = "{\"frameworks\":{\"a\":{\"frameworkAssemblies\":{\"b\":{\"target\":\"Package\"}}}}}"; @@ -2369,7 +2384,7 @@ public void GetPackageSpec_WhenFrameworksFrameworkAssembliesDependencyTargetValu Assert.IsType(exception.InnerException.InnerException); Assert.Null(exception.InnerException.InnerException.InnerException); - if (string.Equals(bool.TrueString, environmentVariableReader.GetEnvironmentVariable("NUGET_EXPERIMENTAL_USE_NJ_FOR_FILE_PARSING"))) + if (string.Equals(bool.TrueString, environmentVariableReader.GetEnvironmentVariable(JsonUtility.NUGET_EXPERIMENTAL_USE_NJ_FOR_FILE_PARSING))) { Assert.Equal("Error reading '' at line 1 column 20 : Error reading '' at line 1 column 48 : Package dependencies must specify a version range.", exception.Message); Assert.Equal(1, exception.Line); @@ -2382,7 +2397,7 @@ public void GetPackageSpec_WhenFrameworksFrameworkAssembliesDependencyTargetValu } [Theory] - [MemberData(nameof(TestEnvironmentVariableReader))] + [MemberData(nameof(LockFileParsingEnvironmentVariable.TestEnvironmentVariableReader), MemberType = typeof(LockFileParsingEnvironmentVariable))] public void GetPackageSpec_WhenFrameworksFrameworkAssembliesDependencyTargetValueIsProjectAndVersionPropertyIsAbsent_ReturnsAllVersionRange(IEnvironmentVariableReader environmentVariableReader) { const string json = "{\"frameworks\":{\"a\":{\"frameworkAssemblies\":{\"b\":{\"target\":\"Project\"}}}}}"; @@ -2393,7 +2408,7 @@ public void GetPackageSpec_WhenFrameworksFrameworkAssembliesDependencyTargetValu } [Theory] - [MemberData(nameof(TestEnvironmentVariableReader))] + [MemberData(nameof(LockFileParsingEnvironmentVariable.TestEnvironmentVariableReader), MemberType = typeof(LockFileParsingEnvironmentVariable))] public void GetPackageSpec_WhenFrameworksFrameworkReferencesPropertyIsAbsent_ReturnsEmptyFrameworkReferences(IEnvironmentVariableReader environmentVariableReader) { const string json = "{\"frameworks\":{\"a\":{}}}"; @@ -2404,7 +2419,7 @@ public void GetPackageSpec_WhenFrameworksFrameworkReferencesPropertyIsAbsent_Ret } [Theory] - [MemberData(nameof(TestEnvironmentVariableReader))] + [MemberData(nameof(LockFileParsingEnvironmentVariable.TestEnvironmentVariableReader), MemberType = typeof(LockFileParsingEnvironmentVariable))] public void GetPackageSpec_WhenFrameworksFrameworkReferencesValueIsNull_ReturnsEmptyFrameworkReferences(IEnvironmentVariableReader environmentVariableReader) { const string json = "{\"frameworks\":{\"a\":{\"frameworkReferences\":null}}}"; @@ -2415,7 +2430,7 @@ public void GetPackageSpec_WhenFrameworksFrameworkReferencesValueIsNull_ReturnsE } [Theory] - [MemberData(nameof(TestEnvironmentVariableReader))] + [MemberData(nameof(LockFileParsingEnvironmentVariable.TestEnvironmentVariableReader), MemberType = typeof(LockFileParsingEnvironmentVariable))] public void GetPackageSpec_WhenFrameworksFrameworkReferencesValueIsEmptyObject_ReturnsEmptyFrameworkReferences(IEnvironmentVariableReader environmentVariableReader) { const string json = "{\"frameworks\":{\"a\":{\"frameworkReferences\":{}}}}"; @@ -2426,7 +2441,7 @@ public void GetPackageSpec_WhenFrameworksFrameworkReferencesValueIsEmptyObject_R } [Theory] - [MemberData(nameof(TestEnvironmentVariableReader))] + [MemberData(nameof(LockFileParsingEnvironmentVariable.TestEnvironmentVariableReader), MemberType = typeof(LockFileParsingEnvironmentVariable))] public void GetPackageSpec_WhenFrameworksFrameworkReferencesFrameworkNameIsEmptyString_Throws(IEnvironmentVariableReader environmentVariableReader) { const string json = "{\"frameworks\":{\"a\":{\"frameworkReferences\":{\"\":{}}}}}"; @@ -2436,7 +2451,7 @@ public void GetPackageSpec_WhenFrameworksFrameworkReferencesFrameworkNameIsEmpty Assert.IsType(exception.InnerException); Assert.Null(exception.InnerException.InnerException); - if (string.Equals(bool.TrueString, environmentVariableReader.GetEnvironmentVariable("NUGET_EXPERIMENTAL_USE_NJ_FOR_FILE_PARSING"))) + if (string.Equals(bool.TrueString, environmentVariableReader.GetEnvironmentVariable(JsonUtility.NUGET_EXPERIMENTAL_USE_NJ_FOR_FILE_PARSING))) { Assert.Equal("Error reading '' at line 1 column 20 : Unable to resolve frameworkReference.", exception.Message); Assert.Equal(1, exception.Line); @@ -2449,7 +2464,7 @@ public void GetPackageSpec_WhenFrameworksFrameworkReferencesFrameworkNameIsEmpty } [Theory] - [MemberData(nameof(TestEnvironmentVariableReader))] + [MemberData(nameof(LockFileParsingEnvironmentVariable.TestEnvironmentVariableReader), MemberType = typeof(LockFileParsingEnvironmentVariable))] public void GetPackageSpec_WhenFrameworksFrameworkReferencesPrivateAssetsPropertyIsAbsent_ReturnsNonePrivateAssets(IEnvironmentVariableReader environmentVariableReader) { var expectedResult = new FrameworkDependency(name: "b", FrameworkDependencyFlags.None); @@ -2461,9 +2476,9 @@ public void GetPackageSpec_WhenFrameworksFrameworkReferencesPrivateAssetsPropert } [Theory] - [MemberData(nameof(TestEnvironmentVariableReader), "\"null\"")] - [MemberData(nameof(TestEnvironmentVariableReader), "\"\"")] - [MemberData(nameof(TestEnvironmentVariableReader), "\"c\"")] + [MemberData(nameof(TestEnvironmentVariableReader), "\"null\"", MemberType = typeof(LockFileParsingEnvironmentVariable))] + [MemberData(nameof(TestEnvironmentVariableReader), "\"\"", MemberType = typeof(LockFileParsingEnvironmentVariable))] + [MemberData(nameof(TestEnvironmentVariableReader), "\"c\"", MemberType = typeof(LockFileParsingEnvironmentVariable))] public void GetPackageSpec_WhenFrameworksFrameworkReferencesPrivateAssetsValueIsInvalidValue_ReturnsNonePrivateAssets(IEnvironmentVariableReader environmentVariableReader, string privateAssets) { var expectedResult = new FrameworkDependency(name: "b", FrameworkDependencyFlags.None); @@ -2475,7 +2490,7 @@ public void GetPackageSpec_WhenFrameworksFrameworkReferencesPrivateAssetsValueIs } [Theory] - [MemberData(nameof(TestEnvironmentVariableReader))] + [MemberData(nameof(LockFileParsingEnvironmentVariable.TestEnvironmentVariableReader), MemberType = typeof(LockFileParsingEnvironmentVariable))] public void GetPackageSpec_WhenFrameworksFrameworkReferencesPrivateAssetsValueIsValidString_ReturnsPrivateAssets(IEnvironmentVariableReader environmentVariableReader) { var expectedResult = new FrameworkDependency(name: "b", FrameworkDependencyFlags.All); @@ -2487,7 +2502,7 @@ public void GetPackageSpec_WhenFrameworksFrameworkReferencesPrivateAssetsValueIs } [Theory] - [MemberData(nameof(TestEnvironmentVariableReader))] + [MemberData(nameof(LockFileParsingEnvironmentVariable.TestEnvironmentVariableReader), MemberType = typeof(LockFileParsingEnvironmentVariable))] public void GetPackageSpec_WhenFrameworksFrameworkReferencesPrivateAssetsValueIsValidDelimitedString_ReturnsPrivateAssets(IEnvironmentVariableReader environmentVariableReader) { var expectedResult = new FrameworkDependency(name: "b", FrameworkDependencyFlags.All); @@ -2499,7 +2514,7 @@ public void GetPackageSpec_WhenFrameworksFrameworkReferencesPrivateAssetsValueIs } [Theory] - [MemberData(nameof(TestEnvironmentVariableReader))] + [MemberData(nameof(LockFileParsingEnvironmentVariable.TestEnvironmentVariableReader), MemberType = typeof(LockFileParsingEnvironmentVariable))] public void GetPackageSpec_WhenFrameworksImportsPropertyIsAbsent_ReturnsEmptyImports(IEnvironmentVariableReader environmentVariableReader) { const string json = "{\"frameworks\":{\"a\":{}}}"; @@ -2510,8 +2525,8 @@ public void GetPackageSpec_WhenFrameworksImportsPropertyIsAbsent_ReturnsEmptyImp } [Theory] - [MemberData(nameof(TestEnvironmentVariableReader), "null")] - [MemberData(nameof(TestEnvironmentVariableReader), "\"\"")] + [MemberData(nameof(TestEnvironmentVariableReader), "null", MemberType = typeof(LockFileParsingEnvironmentVariable))] + [MemberData(nameof(TestEnvironmentVariableReader), "\"\"", MemberType = typeof(LockFileParsingEnvironmentVariable))] public void GetPackageSpec_WhenFrameworksImportsValueIsArrayOfNullOrEmptyString_ImportIsSkipped(IEnvironmentVariableReader environmentVariableReader, string import) { var json = $"{{\"frameworks\":{{\"a\":{{\"imports\":[{import}]}}}}}}"; @@ -2522,7 +2537,7 @@ public void GetPackageSpec_WhenFrameworksImportsValueIsArrayOfNullOrEmptyString_ } [Theory] - [MemberData(nameof(TestEnvironmentVariableReader))] + [MemberData(nameof(LockFileParsingEnvironmentVariable.TestEnvironmentVariableReader), MemberType = typeof(LockFileParsingEnvironmentVariable))] public void GetPackageSpec_WhenFrameworksImportsValueIsNull_ReturnsEmptyList(IEnvironmentVariableReader environmentVariableReader) { const string json = "{\"frameworks\":{\"a\":{\"imports\":null}}}"; @@ -2533,10 +2548,10 @@ public void GetPackageSpec_WhenFrameworksImportsValueIsNull_ReturnsEmptyList(IEn } [Theory] - [MemberData(nameof(TestEnvironmentVariableReader), "true")] - [MemberData(nameof(TestEnvironmentVariableReader), "-2")] - [MemberData(nameof(TestEnvironmentVariableReader), "3.14")] - [MemberData(nameof(TestEnvironmentVariableReader), "{}")] + [MemberData(nameof(TestEnvironmentVariableReader), "true", MemberType = typeof(LockFileParsingEnvironmentVariable))] + [MemberData(nameof(TestEnvironmentVariableReader), "-2", MemberType = typeof(LockFileParsingEnvironmentVariable))] + [MemberData(nameof(TestEnvironmentVariableReader), "3.14", MemberType = typeof(LockFileParsingEnvironmentVariable))] + [MemberData(nameof(TestEnvironmentVariableReader), "{}", MemberType = typeof(LockFileParsingEnvironmentVariable))] public void GetPackageSpec_WhenFrameworksImportsValueIsInvalidValue_ReturnsEmptyList(IEnvironmentVariableReader environmentVariableReader, string value) { var json = $"{{\"frameworks\":{{\"a\":{{\"imports\":{value}}}}}}}"; @@ -2547,7 +2562,7 @@ public void GetPackageSpec_WhenFrameworksImportsValueIsInvalidValue_ReturnsEmpty } [Theory] - [MemberData(nameof(TestEnvironmentVariableReader))] + [MemberData(nameof(LockFileParsingEnvironmentVariable.TestEnvironmentVariableReader), MemberType = typeof(LockFileParsingEnvironmentVariable))] public void GetPackageSpec_WhenFrameworksImportsValueContainsInvalidValue_Throws(IEnvironmentVariableReader environmentVariableReader) { const string expectedImport = "b"; @@ -2559,7 +2574,7 @@ public void GetPackageSpec_WhenFrameworksImportsValueContainsInvalidValue_Throws Assert.IsType(exception.InnerException); Assert.Null(exception.InnerException.InnerException); - if (string.Equals(bool.TrueString, environmentVariableReader.GetEnvironmentVariable("NUGET_EXPERIMENTAL_USE_NJ_FOR_FILE_PARSING"))) + if (string.Equals(bool.TrueString, environmentVariableReader.GetEnvironmentVariable(JsonUtility.NUGET_EXPERIMENTAL_USE_NJ_FOR_FILE_PARSING))) { Assert.Equal( $"Error reading '' at line 1 column 20 : Imports contains an invalid framework: '{expectedImport}' in 'project.json'.", @@ -2576,7 +2591,7 @@ public void GetPackageSpec_WhenFrameworksImportsValueContainsInvalidValue_Throws } [Theory] - [MemberData(nameof(TestEnvironmentVariableReader))] + [MemberData(nameof(LockFileParsingEnvironmentVariable.TestEnvironmentVariableReader), MemberType = typeof(LockFileParsingEnvironmentVariable))] public void GetPackageSpec_WhenFrameworksImportsValueIsString_ReturnsImport(IEnvironmentVariableReader environmentVariableReader) { NuGetFramework expectedResult = NuGetFramework.Parse("net48"); @@ -2590,7 +2605,7 @@ public void GetPackageSpec_WhenFrameworksImportsValueIsString_ReturnsImport(IEnv } [Theory] - [MemberData(nameof(TestEnvironmentVariableReader))] + [MemberData(nameof(LockFileParsingEnvironmentVariable.TestEnvironmentVariableReader), MemberType = typeof(LockFileParsingEnvironmentVariable))] public void GetPackageSpec_WhenFrameworksImportsValueIsArrayOfStrings_ReturnsImports(IEnvironmentVariableReader environmentVariableReader) { NuGetFramework[] expectedResults = { NuGetFramework.Parse("net472"), NuGetFramework.Parse("net48") }; @@ -2605,7 +2620,7 @@ public void GetPackageSpec_WhenFrameworksImportsValueIsArrayOfStrings_ReturnsImp } [Theory] - [MemberData(nameof(TestEnvironmentVariableReader))] + [MemberData(nameof(LockFileParsingEnvironmentVariable.TestEnvironmentVariableReader), MemberType = typeof(LockFileParsingEnvironmentVariable))] public void GetPackageSpec_WhenFrameworksRuntimeIdentifierGraphPathPropertyIsAbsent_ReturnsRuntimeIdentifierGraphPath(IEnvironmentVariableReader environmentVariableReader) { const string json = "{\"frameworks\":{\"a\":{}}}}"; @@ -2616,9 +2631,9 @@ public void GetPackageSpec_WhenFrameworksRuntimeIdentifierGraphPathPropertyIsAbs } [Theory] - [MemberData(nameof(TestEnvironmentVariableReader), null)] - [MemberData(nameof(TestEnvironmentVariableReader), "")] - [MemberData(nameof(TestEnvironmentVariableReader), "b")] + [MemberData(nameof(TestEnvironmentVariableReader), null, MemberType = typeof(LockFileParsingEnvironmentVariable))] + [MemberData(nameof(TestEnvironmentVariableReader), "", MemberType = typeof(LockFileParsingEnvironmentVariable))] + [MemberData(nameof(TestEnvironmentVariableReader), "b", MemberType = typeof(LockFileParsingEnvironmentVariable))] public void GetPackageSpec_WhenFrameworksRuntimeIdentifierGraphPathValueIsString_ReturnsRuntimeIdentifierGraphPath(IEnvironmentVariableReader environmentVariableReader, string expectedResult) { string runtimeIdentifierGraphPath = expectedResult == null ? "null" : $"\"{expectedResult}\""; @@ -2630,7 +2645,7 @@ public void GetPackageSpec_WhenFrameworksRuntimeIdentifierGraphPathValueIsString } [Theory] - [MemberData(nameof(TestEnvironmentVariableReader))] + [MemberData(nameof(LockFileParsingEnvironmentVariable.TestEnvironmentVariableReader), MemberType = typeof(LockFileParsingEnvironmentVariable))] public void GetPackageSpec_WhenFrameworksWarnPropertyIsAbsent_ReturnsWarn(IEnvironmentVariableReader environmentVariableReader) { const string json = "{\"frameworks\":{\"a\":{}}}}"; @@ -2641,8 +2656,8 @@ public void GetPackageSpec_WhenFrameworksWarnPropertyIsAbsent_ReturnsWarn(IEnvir } [Theory] - [MemberData(nameof(TestEnvironmentVariableReader), true)] - [MemberData(nameof(TestEnvironmentVariableReader), false)] + [MemberData(nameof(TestEnvironmentVariableReader), true, MemberType = typeof(LockFileParsingEnvironmentVariable))] + [MemberData(nameof(TestEnvironmentVariableReader), false, MemberType = typeof(LockFileParsingEnvironmentVariable))] public void GetPackageSpec_WhenFrameworksWarnValueIsValid_ReturnsWarn(IEnvironmentVariableReader environmentVariableReader, bool expectedResult) { var json = $"{{\"frameworks\":{{\"a\":{{\"warn\":{expectedResult.ToString().ToLowerInvariant()}}}}}}}"; @@ -2654,7 +2669,7 @@ public void GetPackageSpec_WhenFrameworksWarnValueIsValid_ReturnsWarn(IEnvironme #pragma warning disable CS0612 // Type or member is obsolete [Theory] - [MemberData(nameof(TestEnvironmentVariableReader))] + [MemberData(nameof(LockFileParsingEnvironmentVariable.TestEnvironmentVariableReader), MemberType = typeof(LockFileParsingEnvironmentVariable))] public void GetPackageSpec_WhenPackIncludePropertyIsAbsent_ReturnsEmptyPackInclude(IEnvironmentVariableReader environmentVariableReader) { PackageSpec packageSpec = GetPackageSpec("{}", environmentVariableReader); @@ -2663,7 +2678,7 @@ public void GetPackageSpec_WhenPackIncludePropertyIsAbsent_ReturnsEmptyPackInclu } [Theory] - [MemberData(nameof(TestEnvironmentVariableReader))] + [MemberData(nameof(LockFileParsingEnvironmentVariable.TestEnvironmentVariableReader), MemberType = typeof(LockFileParsingEnvironmentVariable))] public void GetPackageSpec_WhenPackIncludePropertyIsValid_ReturnsPackInclude(IEnvironmentVariableReader environmentVariableReader) { var expectedResults = new List>() { new KeyValuePair("a", "b"), new KeyValuePair("c", "d") }; @@ -2678,8 +2693,8 @@ public void GetPackageSpec_WhenPackIncludePropertyIsValid_ReturnsPackInclude(IEn } [Theory] - [MemberData(nameof(TestEnvironmentVariableReader), "{}")] - [MemberData(nameof(TestEnvironmentVariableReader), "{\"packOptions\":null}")] + [MemberData(nameof(TestEnvironmentVariableReader), "{}", MemberType = typeof(LockFileParsingEnvironmentVariable))] + [MemberData(nameof(TestEnvironmentVariableReader), "{\"packOptions\":null}", MemberType = typeof(LockFileParsingEnvironmentVariable))] public void GetPackageSpec_WhenPackOptionsPropertyIsAbsentOrValueIsNull_ReturnsPackOptions(IEnvironmentVariableReader environmentVariableReader, string json) { PackageSpec packageSpec = GetPackageSpec(json, environmentVariableReader); @@ -2700,7 +2715,7 @@ public void GetPackageSpec_WhenPackOptionsPropertyIsAbsentOrValueIsNull_ReturnsP } [Theory] - [MemberData(nameof(TestEnvironmentVariableReader))] + [MemberData(nameof(LockFileParsingEnvironmentVariable.TestEnvironmentVariableReader), MemberType = typeof(LockFileParsingEnvironmentVariable))] public void GetPackageSpec_WhenPackOptionsPropertyIsAbsent_OwnersAndTagsAreEmpty(IEnvironmentVariableReader environmentVariableReader) { const string json = "{\"owners\":[\"a\"],\"tags\":[\"b\"]}"; @@ -2712,7 +2727,7 @@ public void GetPackageSpec_WhenPackOptionsPropertyIsAbsent_OwnersAndTagsAreEmpty } [Theory] - [MemberData(nameof(TestEnvironmentVariableReader))] + [MemberData(nameof(LockFileParsingEnvironmentVariable.TestEnvironmentVariableReader), MemberType = typeof(LockFileParsingEnvironmentVariable))] public void GetPackageSpec_WhenPackOptionsPropertyIsEmptyObject_ReturnsPackOptions(IEnvironmentVariableReader environmentVariableReader) { string json = "{\"packOptions\":{}}"; @@ -2735,7 +2750,7 @@ public void GetPackageSpec_WhenPackOptionsPropertyIsEmptyObject_ReturnsPackOptio } [Theory] - [MemberData(nameof(TestEnvironmentVariableReader))] + [MemberData(nameof(LockFileParsingEnvironmentVariable.TestEnvironmentVariableReader), MemberType = typeof(LockFileParsingEnvironmentVariable))] public void GetPackageSpec_WhenPackOptionsValueIsValid_ReturnsPackOptions(IEnvironmentVariableReader environmentVariableReader) { const string iconUrl = "a"; @@ -2768,7 +2783,7 @@ public void GetPackageSpec_WhenPackOptionsValueIsValid_ReturnsPackOptions(IEnvir } [Theory] - [MemberData(nameof(TestEnvironmentVariableReader))] + [MemberData(nameof(LockFileParsingEnvironmentVariable.TestEnvironmentVariableReader), MemberType = typeof(LockFileParsingEnvironmentVariable))] public void GetPackageSpec_WhenPackOptionsPackageTypeValueIsNull_ReturnsEmptyPackageTypes(IEnvironmentVariableReader environmentVariableReader) { const string json = "{\"packOptions\":{\"packageType\":null}}"; @@ -2779,16 +2794,16 @@ public void GetPackageSpec_WhenPackOptionsPackageTypeValueIsNull_ReturnsEmptyPac } [Theory] - [MemberData(nameof(TestEnvironmentVariableReader), "true", 34)] - [MemberData(nameof(TestEnvironmentVariableReader), "-2", 32)] - [MemberData(nameof(TestEnvironmentVariableReader), "3.14", 34)] - [MemberData(nameof(TestEnvironmentVariableReader), "{}", 31)] - [MemberData(nameof(TestEnvironmentVariableReader), "[true]", 31)] - [MemberData(nameof(TestEnvironmentVariableReader), "[-2]", 31)] - [MemberData(nameof(TestEnvironmentVariableReader), "[3.14]", 31)] - [MemberData(nameof(TestEnvironmentVariableReader), "[null]", 31)] - [MemberData(nameof(TestEnvironmentVariableReader), "[{}]", 31)] - [MemberData(nameof(TestEnvironmentVariableReader), "[[]]", 31)] + [MemberData(nameof(TestEnvironmentVariableReader), "true", 34, MemberType = typeof(LockFileParsingEnvironmentVariable))] + [MemberData(nameof(TestEnvironmentVariableReader), "-2", 32, MemberType = typeof(LockFileParsingEnvironmentVariable))] + [MemberData(nameof(TestEnvironmentVariableReader), "3.14", 34, MemberType = typeof(LockFileParsingEnvironmentVariable))] + [MemberData(nameof(TestEnvironmentVariableReader), "{}", 31, MemberType = typeof(LockFileParsingEnvironmentVariable))] + [MemberData(nameof(TestEnvironmentVariableReader), "[true]", 31, MemberType = typeof(LockFileParsingEnvironmentVariable))] + [MemberData(nameof(TestEnvironmentVariableReader), "[-2]", 31, MemberType = typeof(LockFileParsingEnvironmentVariable))] + [MemberData(nameof(TestEnvironmentVariableReader), "[3.14]", 31, MemberType = typeof(LockFileParsingEnvironmentVariable))] + [MemberData(nameof(TestEnvironmentVariableReader), "[null]", 31, MemberType = typeof(LockFileParsingEnvironmentVariable))] + [MemberData(nameof(TestEnvironmentVariableReader), "[{}]", 31, MemberType = typeof(LockFileParsingEnvironmentVariable))] + [MemberData(nameof(TestEnvironmentVariableReader), "[[]]", 31, MemberType = typeof(LockFileParsingEnvironmentVariable))] public void GetPackageSpec_WhenPackOptionsPackageTypeIsInvalid_Throws(IEnvironmentVariableReader environmentVariableReader, string value, int expectedColumn) { var json = $"{{\"packOptions\":{{\"packageType\":{value}}}}}"; @@ -2798,7 +2813,7 @@ public void GetPackageSpec_WhenPackOptionsPackageTypeIsInvalid_Throws(IEnvironme Assert.Null(exception.InnerException); Assert.Equal("The pack options package type must be a string or array of strings in 'project.json'.", exception.Message); - if (string.Equals(bool.TrueString, environmentVariableReader.GetEnvironmentVariable("NUGET_EXPERIMENTAL_USE_NJ_FOR_FILE_PARSING"))) + if (string.Equals(bool.TrueString, environmentVariableReader.GetEnvironmentVariable(JsonUtility.NUGET_EXPERIMENTAL_USE_NJ_FOR_FILE_PARSING))) { Assert.Equal(1, exception.Line); Assert.Equal(expectedColumn, exception.Column); @@ -2806,10 +2821,10 @@ public void GetPackageSpec_WhenPackOptionsPackageTypeIsInvalid_Throws(IEnvironme } [Theory] - [MemberData(nameof(TestEnvironmentVariableReader), "\"a\"", "a")] - [MemberData(nameof(TestEnvironmentVariableReader), "\"a,b\"", "a,b")] - [MemberData(nameof(TestEnvironmentVariableReader), "[\"a\"]", "a")] - [MemberData(nameof(TestEnvironmentVariableReader), "[\"a b\"]", "a b")] + [MemberData(nameof(TestEnvironmentVariableReader), "\"a\"", "a", MemberType = typeof(LockFileParsingEnvironmentVariable))] + [MemberData(nameof(TestEnvironmentVariableReader), "\"a,b\"", "a,b", MemberType = typeof(LockFileParsingEnvironmentVariable))] + [MemberData(nameof(TestEnvironmentVariableReader), "[\"a\"]", "a", MemberType = typeof(LockFileParsingEnvironmentVariable))] + [MemberData(nameof(TestEnvironmentVariableReader), "[\"a b\"]", "a b", MemberType = typeof(LockFileParsingEnvironmentVariable))] public void GetPackageSpec_WhenPackOptionsPackageTypeValueIsValid_ReturnsPackageTypes(IEnvironmentVariableReader environmentVariableReader, string value, string expectedName) { var expectedResult = new PackageType(expectedName, PackageType.EmptyVersion); @@ -2823,7 +2838,7 @@ public void GetPackageSpec_WhenPackOptionsPackageTypeValueIsValid_ReturnsPackage } [Theory] - [MemberData(nameof(TestEnvironmentVariableReader))] + [MemberData(nameof(LockFileParsingEnvironmentVariable.TestEnvironmentVariableReader), MemberType = typeof(LockFileParsingEnvironmentVariable))] public void GetPackageSpec_WhenPackOptionsFilesValueIsNull_ReturnsNullInclude(IEnvironmentVariableReader environmentVariableReader) { const string json = "{\"packOptions\":{\"files\":null}}"; @@ -2834,7 +2849,7 @@ public void GetPackageSpec_WhenPackOptionsFilesValueIsNull_ReturnsNullInclude(IE } [Theory] - [MemberData(nameof(TestEnvironmentVariableReader))] + [MemberData(nameof(LockFileParsingEnvironmentVariable.TestEnvironmentVariableReader), MemberType = typeof(LockFileParsingEnvironmentVariable))] public void GetPackageSpec_WhenPackOptionsFilesValueIsEmptyObject_ReturnsNullInclude(IEnvironmentVariableReader environmentVariableReader) { const string json = "{\"packOptions\":{\"files\":{}}}"; @@ -2845,7 +2860,7 @@ public void GetPackageSpec_WhenPackOptionsFilesValueIsEmptyObject_ReturnsNullInc } [Theory] - [MemberData(nameof(TestEnvironmentVariableReader))] + [MemberData(nameof(LockFileParsingEnvironmentVariable.TestEnvironmentVariableReader), MemberType = typeof(LockFileParsingEnvironmentVariable))] public void GetPackageSpec_WhenPackOptionsFilesIncludeValueIsNull_ReturnsNullIncludeExcludeFiles(IEnvironmentVariableReader environmentVariableReader) { const string json = "{\"packOptions\":{\"files\":{\"include\":null}}}"; @@ -2856,7 +2871,7 @@ public void GetPackageSpec_WhenPackOptionsFilesIncludeValueIsNull_ReturnsNullInc } [Theory] - [MemberData(nameof(TestEnvironmentVariableReader))] + [MemberData(nameof(LockFileParsingEnvironmentVariable.TestEnvironmentVariableReader), MemberType = typeof(LockFileParsingEnvironmentVariable))] public void GetPackageSpec_WhenPackOptionsFilesIncludeValueIsEmptyArray_ReturnsEmptyInclude(IEnvironmentVariableReader environmentVariableReader) { const string json = "{\"packOptions\":{\"files\":{\"include\":[]}}}"; @@ -2867,13 +2882,13 @@ public void GetPackageSpec_WhenPackOptionsFilesIncludeValueIsEmptyArray_ReturnsE } [Theory] - [MemberData(nameof(TestEnvironmentVariableReader), "\"a\"", "a")] - [MemberData(nameof(TestEnvironmentVariableReader), "\"a, b\"", "a, b")] - [MemberData(nameof(TestEnvironmentVariableReader), "[null]", null)] - [MemberData(nameof(TestEnvironmentVariableReader), "[\"\"]", "")] - [MemberData(nameof(TestEnvironmentVariableReader), "[\"a\"]", "a")] - [MemberData(nameof(TestEnvironmentVariableReader), "[\"a, b\"]", "a, b")] - [MemberData(nameof(TestEnvironmentVariableReader), "[\"a\", \"b\"]", "a", "b")] + [MemberData(nameof(TestEnvironmentVariableReader), "\"a\"", "a", MemberType = typeof(LockFileParsingEnvironmentVariable))] + [MemberData(nameof(TestEnvironmentVariableReader), "\"a, b\"", "a, b", MemberType = typeof(LockFileParsingEnvironmentVariable))] + [MemberData(nameof(TestEnvironmentVariableReader), "[null]", null, MemberType = typeof(LockFileParsingEnvironmentVariable))] + [MemberData(nameof(TestEnvironmentVariableReader), "[\"\"]", "", MemberType = typeof(LockFileParsingEnvironmentVariable))] + [MemberData(nameof(TestEnvironmentVariableReader), "[\"a\"]", "a", MemberType = typeof(LockFileParsingEnvironmentVariable))] + [MemberData(nameof(TestEnvironmentVariableReader), "[\"a, b\"]", "a, b", MemberType = typeof(LockFileParsingEnvironmentVariable))] + [MemberData(nameof(TestEnvironmentVariableReader), "[\"a\", \"b\"]", "a", "b", MemberType = typeof(LockFileParsingEnvironmentVariable))] public void GetPackageSpec_WhenPackOptionsFilesIncludeValueIsValid_ReturnsInclude(IEnvironmentVariableReader environmentVariableReader, string value, params string[] expectedResults) { expectedResults = expectedResults ?? new string[] { null }; @@ -2886,7 +2901,7 @@ public void GetPackageSpec_WhenPackOptionsFilesIncludeValueIsValid_ReturnsInclud } [Theory] - [MemberData(nameof(TestEnvironmentVariableReader))] + [MemberData(nameof(LockFileParsingEnvironmentVariable.TestEnvironmentVariableReader), MemberType = typeof(LockFileParsingEnvironmentVariable))] public void GetPackageSpec_WhenPackOptionsFilesIncludeFilesValueIsNull_ReturnsNullIncludeExcludeFiles(IEnvironmentVariableReader environmentVariableReader) { const string json = "{\"packOptions\":{\"files\":{\"includeFiles\":null}}}"; @@ -2897,7 +2912,7 @@ public void GetPackageSpec_WhenPackOptionsFilesIncludeFilesValueIsNull_ReturnsNu } [Theory] - [MemberData(nameof(TestEnvironmentVariableReader))] + [MemberData(nameof(LockFileParsingEnvironmentVariable.TestEnvironmentVariableReader), MemberType = typeof(LockFileParsingEnvironmentVariable))] public void GetPackageSpec_WhenPackOptionsFilesIncludeFilesValueIsEmptyArray_ReturnsEmptyIncludeFiles(IEnvironmentVariableReader environmentVariableReader) { const string json = "{\"packOptions\":{\"files\":{\"includeFiles\":[]}}}"; @@ -2908,13 +2923,13 @@ public void GetPackageSpec_WhenPackOptionsFilesIncludeFilesValueIsEmptyArray_Ret } [Theory] - [MemberData(nameof(TestEnvironmentVariableReader), "\"a\"", "a")] - [MemberData(nameof(TestEnvironmentVariableReader), "\"a, b\"", "a, b")] - [MemberData(nameof(TestEnvironmentVariableReader), "[null]", null)] - [MemberData(nameof(TestEnvironmentVariableReader), "[\"\"]", "")] - [MemberData(nameof(TestEnvironmentVariableReader), "[\"a\"]", "a")] - [MemberData(nameof(TestEnvironmentVariableReader), "[\"a, b\"]", "a, b")] - [MemberData(nameof(TestEnvironmentVariableReader), "[\"a\", \"b\"]", "a", "b")] + [MemberData(nameof(TestEnvironmentVariableReader), "\"a\"", "a", MemberType = typeof(LockFileParsingEnvironmentVariable))] + [MemberData(nameof(TestEnvironmentVariableReader), "\"a, b\"", "a, b", MemberType = typeof(LockFileParsingEnvironmentVariable))] + [MemberData(nameof(TestEnvironmentVariableReader), "[null]", null, MemberType = typeof(LockFileParsingEnvironmentVariable))] + [MemberData(nameof(TestEnvironmentVariableReader), "[\"\"]", "", MemberType = typeof(LockFileParsingEnvironmentVariable))] + [MemberData(nameof(TestEnvironmentVariableReader), "[\"a\"]", "a", MemberType = typeof(LockFileParsingEnvironmentVariable))] + [MemberData(nameof(TestEnvironmentVariableReader), "[\"a, b\"]", "a, b", MemberType = typeof(LockFileParsingEnvironmentVariable))] + [MemberData(nameof(TestEnvironmentVariableReader), "[\"a\", \"b\"]", "a", "b", MemberType = typeof(LockFileParsingEnvironmentVariable))] public void GetPackageSpec_WhenPackOptionsFilesIncludeFilesValueIsValid_ReturnsIncludeFiles(IEnvironmentVariableReader environmentVariableReader, string value, params string[] expectedResults) { expectedResults = expectedResults ?? new string[] { null }; @@ -2927,7 +2942,7 @@ public void GetPackageSpec_WhenPackOptionsFilesIncludeFilesValueIsValid_ReturnsI } [Theory] - [MemberData(nameof(TestEnvironmentVariableReader))] + [MemberData(nameof(LockFileParsingEnvironmentVariable.TestEnvironmentVariableReader), MemberType = typeof(LockFileParsingEnvironmentVariable))] public void GetPackageSpec_WhenPackOptionsFilesExcludeValueIsNull_ReturnsNullIncludeExcludeFiles(IEnvironmentVariableReader environmentVariableReader) { const string json = "{\"packOptions\":{\"files\":{\"exclude\":null}}}"; @@ -2938,7 +2953,7 @@ public void GetPackageSpec_WhenPackOptionsFilesExcludeValueIsNull_ReturnsNullInc } [Theory] - [MemberData(nameof(TestEnvironmentVariableReader))] + [MemberData(nameof(LockFileParsingEnvironmentVariable.TestEnvironmentVariableReader), MemberType = typeof(LockFileParsingEnvironmentVariable))] public void GetPackageSpec_WhenPackOptionsFilesExcludeValueIsEmptyArray_ReturnsEmptyExclude(IEnvironmentVariableReader environmentVariableReader) { const string json = "{\"packOptions\":{\"files\":{\"exclude\":[]}}}"; @@ -2949,13 +2964,13 @@ public void GetPackageSpec_WhenPackOptionsFilesExcludeValueIsEmptyArray_ReturnsE } [Theory] - [MemberData(nameof(TestEnvironmentVariableReader), "\"a\"", "a")] - [MemberData(nameof(TestEnvironmentVariableReader), "\"a, b\"", "a, b")] - [MemberData(nameof(TestEnvironmentVariableReader), "[null]", null)] - [MemberData(nameof(TestEnvironmentVariableReader), "[\"\"]", "")] - [MemberData(nameof(TestEnvironmentVariableReader), "[\"a\"]", "a")] - [MemberData(nameof(TestEnvironmentVariableReader), "[\"a, b\"]", "a, b")] - [MemberData(nameof(TestEnvironmentVariableReader), "[\"a\", \"b\"]", "a", "b")] + [MemberData(nameof(TestEnvironmentVariableReader), "\"a\"", "a", MemberType = typeof(LockFileParsingEnvironmentVariable))] + [MemberData(nameof(TestEnvironmentVariableReader), "\"a, b\"", "a, b", MemberType = typeof(LockFileParsingEnvironmentVariable))] + [MemberData(nameof(TestEnvironmentVariableReader), "[null]", null, MemberType = typeof(LockFileParsingEnvironmentVariable))] + [MemberData(nameof(TestEnvironmentVariableReader), "[\"\"]", "", MemberType = typeof(LockFileParsingEnvironmentVariable))] + [MemberData(nameof(TestEnvironmentVariableReader), "[\"a\"]", "a", MemberType = typeof(LockFileParsingEnvironmentVariable))] + [MemberData(nameof(TestEnvironmentVariableReader), "[\"a, b\"]", "a, b", MemberType = typeof(LockFileParsingEnvironmentVariable))] + [MemberData(nameof(TestEnvironmentVariableReader), "[\"a\", \"b\"]", "a", "b", MemberType = typeof(LockFileParsingEnvironmentVariable))] public void GetPackageSpec_WhenPackOptionsFilesExcludeValueIsValid_ReturnsExclude(IEnvironmentVariableReader environmentVariableReader, string value, params string[] expectedResults) { expectedResults = expectedResults ?? new string[] { null }; @@ -2968,7 +2983,7 @@ public void GetPackageSpec_WhenPackOptionsFilesExcludeValueIsValid_ReturnsExclud } [Theory] - [MemberData(nameof(TestEnvironmentVariableReader))] + [MemberData(nameof(LockFileParsingEnvironmentVariable.TestEnvironmentVariableReader), MemberType = typeof(LockFileParsingEnvironmentVariable))] public void GetPackageSpec_WhenPackOptionsFilesExcludeFilesValueIsNull_ReturnsNullIncludeExcludeFiles(IEnvironmentVariableReader environmentVariableReader) { const string json = "{\"packOptions\":{\"files\":{\"excludeFiles\":null}}}"; @@ -2979,7 +2994,7 @@ public void GetPackageSpec_WhenPackOptionsFilesExcludeFilesValueIsNull_ReturnsNu } [Theory] - [MemberData(nameof(TestEnvironmentVariableReader))] + [MemberData(nameof(LockFileParsingEnvironmentVariable.TestEnvironmentVariableReader), MemberType = typeof(LockFileParsingEnvironmentVariable))] public void GetPackageSpec_WhenPackOptionsFilesExcludeFilesValueIsEmptyArray_ReturnsEmptyExcludeFiles(IEnvironmentVariableReader environmentVariableReader) { const string json = "{\"packOptions\":{\"files\":{\"excludeFiles\":[]}}}"; @@ -2990,13 +3005,13 @@ public void GetPackageSpec_WhenPackOptionsFilesExcludeFilesValueIsEmptyArray_Ret } [Theory] - [MemberData(nameof(TestEnvironmentVariableReader), "\"a\"", "a")] - [MemberData(nameof(TestEnvironmentVariableReader), "\"a, b\"", "a, b")] - [MemberData(nameof(TestEnvironmentVariableReader), "[null]", null)] - [MemberData(nameof(TestEnvironmentVariableReader), "[\"\"]", "")] - [MemberData(nameof(TestEnvironmentVariableReader), "[\"a\"]", "a")] - [MemberData(nameof(TestEnvironmentVariableReader), "[\"a, b\"]", "a, b")] - [MemberData(nameof(TestEnvironmentVariableReader), "[\"a\", \"b\"]", "a", "b")] + [MemberData(nameof(TestEnvironmentVariableReader), "\"a\"", "a", MemberType = typeof(LockFileParsingEnvironmentVariable))] + [MemberData(nameof(TestEnvironmentVariableReader), "\"a, b\"", "a, b", MemberType = typeof(LockFileParsingEnvironmentVariable))] + [MemberData(nameof(TestEnvironmentVariableReader), "[null]", null, MemberType = typeof(LockFileParsingEnvironmentVariable))] + [MemberData(nameof(TestEnvironmentVariableReader), "[\"\"]", "", MemberType = typeof(LockFileParsingEnvironmentVariable))] + [MemberData(nameof(TestEnvironmentVariableReader), "[\"a\"]", "a", MemberType = typeof(LockFileParsingEnvironmentVariable))] + [MemberData(nameof(TestEnvironmentVariableReader), "[\"a, b\"]", "a, b", MemberType = typeof(LockFileParsingEnvironmentVariable))] + [MemberData(nameof(TestEnvironmentVariableReader), "[\"a\", \"b\"]", "a", "b", MemberType = typeof(LockFileParsingEnvironmentVariable))] public void GetPackageSpec_WhenPackOptionsFilesExcludeFilesValueIsValid_ReturnsExcludeFiles(IEnvironmentVariableReader environmentVariableReader, string value, params string[] expectedResults) { expectedResults = expectedResults ?? new string[] { null }; @@ -3009,7 +3024,7 @@ public void GetPackageSpec_WhenPackOptionsFilesExcludeFilesValueIsValid_ReturnsE } [Theory] - [MemberData(nameof(TestEnvironmentVariableReader))] + [MemberData(nameof(LockFileParsingEnvironmentVariable.TestEnvironmentVariableReader), MemberType = typeof(LockFileParsingEnvironmentVariable))] public void GetPackageSpec_WhenPackOptionsFilesMappingsPropertyIsAbsent_ReturnsNullMappings(IEnvironmentVariableReader environmentVariableReader) { const string json = "{\"packOptions\":{\"files\":{}}}"; @@ -3020,7 +3035,7 @@ public void GetPackageSpec_WhenPackOptionsFilesMappingsPropertyIsAbsent_ReturnsN } [Theory] - [MemberData(nameof(TestEnvironmentVariableReader))] + [MemberData(nameof(LockFileParsingEnvironmentVariable.TestEnvironmentVariableReader), MemberType = typeof(LockFileParsingEnvironmentVariable))] public void GetPackageSpec_WhenPackOptionsFilesMappingsValueIsNull_ReturnsNullMappings(IEnvironmentVariableReader environmentVariableReader) { const string json = "{\"packOptions\":{\"files\":{\"mappings\":null}}}"; @@ -3031,9 +3046,9 @@ public void GetPackageSpec_WhenPackOptionsFilesMappingsValueIsNull_ReturnsNullMa } [Theory] - [MemberData(nameof(TestEnvironmentVariableReader), "\"b\"", "b")] - [MemberData(nameof(TestEnvironmentVariableReader), "\"b,c\"", "b,c")] - [MemberData(nameof(TestEnvironmentVariableReader), "[\"b\", \"c\"]", "b", "c")] + [MemberData(nameof(TestEnvironmentVariableReader), "\"b\"", "b", MemberType = typeof(LockFileParsingEnvironmentVariable))] + [MemberData(nameof(TestEnvironmentVariableReader), "\"b,c\"", "b,c", MemberType = typeof(LockFileParsingEnvironmentVariable))] + [MemberData(nameof(TestEnvironmentVariableReader), "[\"b\", \"c\"]", "b", "c", MemberType = typeof(LockFileParsingEnvironmentVariable))] public void GetPackageSpec_WhenPackOptionsFilesMappingsValueIsValid_ReturnsMappings(IEnvironmentVariableReader environmentVariableReader, string value, params string[] expectedIncludes) { var expectedResults = new Dictionary() @@ -3048,7 +3063,7 @@ public void GetPackageSpec_WhenPackOptionsFilesMappingsValueIsValid_ReturnsMappi } [Theory] - [MemberData(nameof(TestEnvironmentVariableReader))] + [MemberData(nameof(LockFileParsingEnvironmentVariable.TestEnvironmentVariableReader), MemberType = typeof(LockFileParsingEnvironmentVariable))] public void GetPackageSpec_WhenPackOptionsFilesMappingsValueHasMultipleMappings_ReturnsMappings(IEnvironmentVariableReader environmentVariableReader) { var expectedResults = new Dictionary() @@ -3064,7 +3079,7 @@ public void GetPackageSpec_WhenPackOptionsFilesMappingsValueHasMultipleMappings_ } [Theory] - [MemberData(nameof(TestEnvironmentVariableReader))] + [MemberData(nameof(LockFileParsingEnvironmentVariable.TestEnvironmentVariableReader), MemberType = typeof(LockFileParsingEnvironmentVariable))] public void GetPackageSpec_WhenPackOptionsFilesMappingsValueHasFiles_ReturnsMappings(IEnvironmentVariableReader environmentVariableReader) { var expectedResults = new Dictionary() @@ -3089,7 +3104,7 @@ public void GetPackageSpec_WhenPackOptionsFilesMappingsValueHasFiles_ReturnsMapp #pragma warning restore CS0612 // Type or member is obsolete [Theory] - [MemberData(nameof(TestEnvironmentVariableReader))] + [MemberData(nameof(LockFileParsingEnvironmentVariable.TestEnvironmentVariableReader), MemberType = typeof(LockFileParsingEnvironmentVariable))] public void GetPackageSpec_WhenRestorePropertyIsAbsent_ReturnsNullRestoreMetadata(IEnvironmentVariableReader environmentVariableReader) { const string json = "{}"; @@ -3099,7 +3114,7 @@ public void GetPackageSpec_WhenRestorePropertyIsAbsent_ReturnsNullRestoreMetadat } [Theory] - [MemberData(nameof(TestEnvironmentVariableReader))] + [MemberData(nameof(LockFileParsingEnvironmentVariable.TestEnvironmentVariableReader), MemberType = typeof(LockFileParsingEnvironmentVariable))] public void GetPackageSpec_WhenRestoreValueIsEmptyObject_ReturnsRestoreMetadata(IEnvironmentVariableReader environmentVariableReader) { const string json = "{\"restore\":{}}"; @@ -3109,9 +3124,9 @@ public void GetPackageSpec_WhenRestoreValueIsEmptyObject_ReturnsRestoreMetadata( } [Theory] - [MemberData(nameof(TestEnvironmentVariableReader), "null")] - [MemberData(nameof(TestEnvironmentVariableReader), "\"\"")] - [MemberData(nameof(TestEnvironmentVariableReader), "\"a\"")] + [MemberData(nameof(TestEnvironmentVariableReader), "null", MemberType = typeof(LockFileParsingEnvironmentVariable))] + [MemberData(nameof(TestEnvironmentVariableReader), "\"\"", MemberType = typeof(LockFileParsingEnvironmentVariable))] + [MemberData(nameof(TestEnvironmentVariableReader), "\"a\"", MemberType = typeof(LockFileParsingEnvironmentVariable))] public void GetPackageSpec_WhenRestoreProjectStyleValueIsInvalid_ReturnsProjectStyle(IEnvironmentVariableReader environmentVariableReader, string value) { var json = $"{{\"restore\":{{\"projectStyle\":{value}}}}}"; @@ -3121,7 +3136,7 @@ public void GetPackageSpec_WhenRestoreProjectStyleValueIsInvalid_ReturnsProjectS } [Theory] - [MemberData(nameof(TestEnvironmentVariableReader))] + [MemberData(nameof(LockFileParsingEnvironmentVariable.TestEnvironmentVariableReader), MemberType = typeof(LockFileParsingEnvironmentVariable))] public void GetPackageSpec_WhenRestoreProjectStyleValueIsValid_ReturnsProjectStyle(IEnvironmentVariableReader environmentVariableReader) { const ProjectStyle expectedResult = ProjectStyle.PackageReference; @@ -3133,9 +3148,9 @@ public void GetPackageSpec_WhenRestoreProjectStyleValueIsValid_ReturnsProjectSty } [Theory] - [MemberData(nameof(TestEnvironmentVariableReader), "null", null)] - [MemberData(nameof(TestEnvironmentVariableReader), "\"\"", "")] - [MemberData(nameof(TestEnvironmentVariableReader), "\"a\"", "a")] + [MemberData(nameof(TestEnvironmentVariableReader), "null", null, MemberType = typeof(LockFileParsingEnvironmentVariable))] + [MemberData(nameof(TestEnvironmentVariableReader), "\"\"", "", MemberType = typeof(LockFileParsingEnvironmentVariable))] + [MemberData(nameof(TestEnvironmentVariableReader), "\"a\"", "a", MemberType = typeof(LockFileParsingEnvironmentVariable))] public void GetPackageSpec_WhenRestoreProjectUniqueNameValueIsValid_ReturnsProjectUniqueName( IEnvironmentVariableReader environmentVariableReader, string value, @@ -3148,9 +3163,9 @@ public void GetPackageSpec_WhenRestoreProjectUniqueNameValueIsValid_ReturnsProje } [Theory] - [MemberData(nameof(TestEnvironmentVariableReader), "null", null)] - [MemberData(nameof(TestEnvironmentVariableReader), "\"\"", "")] - [MemberData(nameof(TestEnvironmentVariableReader), "\"a\"", "a")] + [MemberData(nameof(TestEnvironmentVariableReader), "null", null, MemberType = typeof(LockFileParsingEnvironmentVariable))] + [MemberData(nameof(TestEnvironmentVariableReader), "\"\"", "", MemberType = typeof(LockFileParsingEnvironmentVariable))] + [MemberData(nameof(TestEnvironmentVariableReader), "\"a\"", "a", MemberType = typeof(LockFileParsingEnvironmentVariable))] public void GetPackageSpec_WhenRestoreOutputPathValueIsValid_ReturnsOutputPath( IEnvironmentVariableReader environmentVariableReader, string value, @@ -3163,9 +3178,9 @@ public void GetPackageSpec_WhenRestoreOutputPathValueIsValid_ReturnsOutputPath( } [Theory] - [MemberData(nameof(TestEnvironmentVariableReader), "null", null)] - [MemberData(nameof(TestEnvironmentVariableReader), "\"\"", "")] - [MemberData(nameof(TestEnvironmentVariableReader), "\"a\"", "a")] + [MemberData(nameof(TestEnvironmentVariableReader), "null", null, MemberType = typeof(LockFileParsingEnvironmentVariable))] + [MemberData(nameof(TestEnvironmentVariableReader), "\"\"", "", MemberType = typeof(LockFileParsingEnvironmentVariable))] + [MemberData(nameof(TestEnvironmentVariableReader), "\"a\"", "a", MemberType = typeof(LockFileParsingEnvironmentVariable))] public void GetPackageSpec_WhenRestorePackagesPathValueIsValid_ReturnsPackagesPath( IEnvironmentVariableReader environmentVariableReader, string value, @@ -3178,9 +3193,9 @@ public void GetPackageSpec_WhenRestorePackagesPathValueIsValid_ReturnsPackagesPa } [Theory] - [MemberData(nameof(TestEnvironmentVariableReader), "null", null)] - [MemberData(nameof(TestEnvironmentVariableReader), "\"\"", "")] - [MemberData(nameof(TestEnvironmentVariableReader), "\"a\"", "a")] + [MemberData(nameof(TestEnvironmentVariableReader), "null", null, MemberType = typeof(LockFileParsingEnvironmentVariable))] + [MemberData(nameof(TestEnvironmentVariableReader), "\"\"", "", MemberType = typeof(LockFileParsingEnvironmentVariable))] + [MemberData(nameof(TestEnvironmentVariableReader), "\"a\"", "a", MemberType = typeof(LockFileParsingEnvironmentVariable))] public void GetPackageSpec_WhenRestoreProjectJsonPathValueIsValid_ReturnsProjectJsonPath( IEnvironmentVariableReader environmentVariableReader, string value, @@ -3193,9 +3208,9 @@ public void GetPackageSpec_WhenRestoreProjectJsonPathValueIsValid_ReturnsProject } [Theory] - [MemberData(nameof(TestEnvironmentVariableReader), "null", null)] - [MemberData(nameof(TestEnvironmentVariableReader), "\"\"", "")] - [MemberData(nameof(TestEnvironmentVariableReader), "\"a\"", "a")] + [MemberData(nameof(TestEnvironmentVariableReader), "null", null, MemberType = typeof(LockFileParsingEnvironmentVariable))] + [MemberData(nameof(TestEnvironmentVariableReader), "\"\"", "", MemberType = typeof(LockFileParsingEnvironmentVariable))] + [MemberData(nameof(TestEnvironmentVariableReader), "\"a\"", "a", MemberType = typeof(LockFileParsingEnvironmentVariable))] public void GetPackageSpec_WhenRestoreProjectNameValueIsValid_ReturnsProjectName( IEnvironmentVariableReader environmentVariableReader, string value, @@ -3208,9 +3223,9 @@ public void GetPackageSpec_WhenRestoreProjectNameValueIsValid_ReturnsProjectName } [Theory] - [MemberData(nameof(TestEnvironmentVariableReader), "null", null)] - [MemberData(nameof(TestEnvironmentVariableReader), "\"\"", "")] - [MemberData(nameof(TestEnvironmentVariableReader), "\"a\"", "a")] + [MemberData(nameof(TestEnvironmentVariableReader), "null", null, MemberType = typeof(LockFileParsingEnvironmentVariable))] + [MemberData(nameof(TestEnvironmentVariableReader), "\"\"", "", MemberType = typeof(LockFileParsingEnvironmentVariable))] + [MemberData(nameof(TestEnvironmentVariableReader), "\"a\"", "a", MemberType = typeof(LockFileParsingEnvironmentVariable))] public void GetPackageSpec_WhenRestoreProjectPathValueIsValid_ReturnsProjectPath( IEnvironmentVariableReader environmentVariableReader, string value, @@ -3223,9 +3238,9 @@ public void GetPackageSpec_WhenRestoreProjectPathValueIsValid_ReturnsProjectPath } [Theory] - [MemberData(nameof(TestEnvironmentVariableReader), null, false)] - [MemberData(nameof(TestEnvironmentVariableReader), true, true)] - [MemberData(nameof(TestEnvironmentVariableReader), false, false)] + [MemberData(nameof(TestEnvironmentVariableReader), null, false, MemberType = typeof(LockFileParsingEnvironmentVariable))] + [MemberData(nameof(TestEnvironmentVariableReader), true, true, MemberType = typeof(LockFileParsingEnvironmentVariable))] + [MemberData(nameof(TestEnvironmentVariableReader), false, false, MemberType = typeof(LockFileParsingEnvironmentVariable))] public void GetPackageSpec_WhenCrossTargetingValueIsValid_ReturnsCrossTargeting( IEnvironmentVariableReader environmentVariableReader, bool? value, @@ -3238,9 +3253,9 @@ public void GetPackageSpec_WhenCrossTargetingValueIsValid_ReturnsCrossTargeting( } [Theory] - [MemberData(nameof(TestEnvironmentVariableReader), null, false)] - [MemberData(nameof(TestEnvironmentVariableReader), true, true)] - [MemberData(nameof(TestEnvironmentVariableReader), false, false)] + [MemberData(nameof(TestEnvironmentVariableReader), null, false, MemberType = typeof(LockFileParsingEnvironmentVariable))] + [MemberData(nameof(TestEnvironmentVariableReader), true, true, MemberType = typeof(LockFileParsingEnvironmentVariable))] + [MemberData(nameof(TestEnvironmentVariableReader), false, false, MemberType = typeof(LockFileParsingEnvironmentVariable))] public void GetPackageSpec_WhenLegacyPackagesDirectoryValueIsValid_ReturnsLegacyPackagesDirectory( IEnvironmentVariableReader environmentVariableReader, bool? value, @@ -3253,9 +3268,9 @@ public void GetPackageSpec_WhenLegacyPackagesDirectoryValueIsValid_ReturnsLegacy } [Theory] - [MemberData(nameof(TestEnvironmentVariableReader), null, false)] - [MemberData(nameof(TestEnvironmentVariableReader), true, true)] - [MemberData(nameof(TestEnvironmentVariableReader), false, false)] + [MemberData(nameof(TestEnvironmentVariableReader), null, false, MemberType = typeof(LockFileParsingEnvironmentVariable))] + [MemberData(nameof(TestEnvironmentVariableReader), true, true, MemberType = typeof(LockFileParsingEnvironmentVariable))] + [MemberData(nameof(TestEnvironmentVariableReader), false, false, MemberType = typeof(LockFileParsingEnvironmentVariable))] public void GetPackageSpec_WhenValidateRuntimeAssetsValueIsValid_ReturnsValidateRuntimeAssets( IEnvironmentVariableReader environmentVariableReader, bool? value, @@ -3268,9 +3283,9 @@ public void GetPackageSpec_WhenValidateRuntimeAssetsValueIsValid_ReturnsValidate } [Theory] - [MemberData(nameof(TestEnvironmentVariableReader), null, false)] - [MemberData(nameof(TestEnvironmentVariableReader), true, true)] - [MemberData(nameof(TestEnvironmentVariableReader), false, false)] + [MemberData(nameof(TestEnvironmentVariableReader), null, false, MemberType = typeof(LockFileParsingEnvironmentVariable))] + [MemberData(nameof(TestEnvironmentVariableReader), true, true, MemberType = typeof(LockFileParsingEnvironmentVariable))] + [MemberData(nameof(TestEnvironmentVariableReader), false, false, MemberType = typeof(LockFileParsingEnvironmentVariable))] public void GetPackageSpec_WhenSkipContentFileWriteValueIsValid_ReturnsSkipContentFileWrite( IEnvironmentVariableReader environmentVariableReader, bool? value, @@ -3283,9 +3298,9 @@ public void GetPackageSpec_WhenSkipContentFileWriteValueIsValid_ReturnsSkipConte } [Theory] - [MemberData(nameof(TestEnvironmentVariableReader), null, false)] - [MemberData(nameof(TestEnvironmentVariableReader), true, true)] - [MemberData(nameof(TestEnvironmentVariableReader), false, false)] + [MemberData(nameof(TestEnvironmentVariableReader), null, false, MemberType = typeof(LockFileParsingEnvironmentVariable))] + [MemberData(nameof(TestEnvironmentVariableReader), true, true, MemberType = typeof(LockFileParsingEnvironmentVariable))] + [MemberData(nameof(TestEnvironmentVariableReader), false, false, MemberType = typeof(LockFileParsingEnvironmentVariable))] public void GetPackageSpec_WhenCentralPackageVersionsManagementEnabledValueIsValid_ReturnsCentralPackageVersionsManagementEnabled( IEnvironmentVariableReader environmentVariableReader, bool? value, @@ -3298,7 +3313,7 @@ public void GetPackageSpec_WhenCentralPackageVersionsManagementEnabledValueIsVal } [Theory] - [MemberData(nameof(TestEnvironmentVariableReader))] + [MemberData(nameof(LockFileParsingEnvironmentVariable.TestEnvironmentVariableReader), MemberType = typeof(LockFileParsingEnvironmentVariable))] public void GetPackageSpec_WhenSourcesValueIsEmptyObject_ReturnsEmptySources(IEnvironmentVariableReader environmentVariableReader) { const string json = "{\"restore\":{\"sources\":{}}}"; @@ -3308,7 +3323,7 @@ public void GetPackageSpec_WhenSourcesValueIsEmptyObject_ReturnsEmptySources(IEn } [Theory] - [MemberData(nameof(TestEnvironmentVariableReader))] + [MemberData(nameof(LockFileParsingEnvironmentVariable.TestEnvironmentVariableReader), MemberType = typeof(LockFileParsingEnvironmentVariable))] public void GetPackageSpec_WhenSourcesValueIsValid_ReturnsSources(IEnvironmentVariableReader environmentVariableReader) { PackageSource[] expectedResults = { new PackageSource(source: "a"), new PackageSource(source: "b") }; @@ -3320,7 +3335,7 @@ public void GetPackageSpec_WhenSourcesValueIsValid_ReturnsSources(IEnvironmentVa } [Theory] - [MemberData(nameof(TestEnvironmentVariableReader))] + [MemberData(nameof(LockFileParsingEnvironmentVariable.TestEnvironmentVariableReader), MemberType = typeof(LockFileParsingEnvironmentVariable))] public void GetPackageSpec_WhenFilesValueIsEmptyObject_ReturnsEmptyFiles(IEnvironmentVariableReader environmentVariableReader) { const string json = "{\"restore\":{\"files\":{}}}"; @@ -3330,7 +3345,7 @@ public void GetPackageSpec_WhenFilesValueIsEmptyObject_ReturnsEmptyFiles(IEnviro } [Theory] - [MemberData(nameof(TestEnvironmentVariableReader))] + [MemberData(nameof(LockFileParsingEnvironmentVariable.TestEnvironmentVariableReader), MemberType = typeof(LockFileParsingEnvironmentVariable))] public void GetPackageSpec_WhenFilesValueIsValid_ReturnsFiles(IEnvironmentVariableReader environmentVariableReader) { ProjectRestoreMetadataFile[] expectedResults = @@ -3346,7 +3361,7 @@ public void GetPackageSpec_WhenFilesValueIsValid_ReturnsFiles(IEnvironmentVariab } [Theory] - [MemberData(nameof(TestEnvironmentVariableReader))] + [MemberData(nameof(LockFileParsingEnvironmentVariable.TestEnvironmentVariableReader), MemberType = typeof(LockFileParsingEnvironmentVariable))] public void GetPackageSpec_WhenRestoreFrameworksValueIsEmptyObject_ReturnsEmptyFrameworks(IEnvironmentVariableReader environmentVariableReader) { const string json = "{\"restore\":{\"frameworks\":{}}}"; @@ -3356,7 +3371,7 @@ public void GetPackageSpec_WhenRestoreFrameworksValueIsEmptyObject_ReturnsEmptyF } [Theory] - [MemberData(nameof(TestEnvironmentVariableReader))] + [MemberData(nameof(LockFileParsingEnvironmentVariable.TestEnvironmentVariableReader), MemberType = typeof(LockFileParsingEnvironmentVariable))] public void GetPackageSpec_WhenRestoreFrameworksFrameworkNameValueIsValid_ReturnsFrameworks(IEnvironmentVariableReader environmentVariableReader) { var expectedResult = new ProjectRestoreMetadataFrameworkInfo(NuGetFramework.ParseFolder("net472")); @@ -3369,7 +3384,7 @@ public void GetPackageSpec_WhenRestoreFrameworksFrameworkNameValueIsValid_Return } [Theory] - [MemberData(nameof(TestEnvironmentVariableReader))] + [MemberData(nameof(LockFileParsingEnvironmentVariable.TestEnvironmentVariableReader), MemberType = typeof(LockFileParsingEnvironmentVariable))] public void GetPackageSpec_WhenRestoreFrameworksFrameworkValueHasProjectReferenceWithoutAssets_ReturnsFrameworks(IEnvironmentVariableReader environmentVariableReader) { var projectReference = new ProjectRestoreReference() @@ -3391,7 +3406,7 @@ public void GetPackageSpec_WhenRestoreFrameworksFrameworkValueHasProjectReferenc } [Theory] - [MemberData(nameof(TestEnvironmentVariableReader))] + [MemberData(nameof(LockFileParsingEnvironmentVariable.TestEnvironmentVariableReader), MemberType = typeof(LockFileParsingEnvironmentVariable))] public void GetPackageSpec_WhenRestoreFrameworksFrameworkValueHasProjectReferenceWithAssets_ReturnsFrameworks(IEnvironmentVariableReader environmentVariableReader) { var projectReference = new ProjectRestoreReference() @@ -3418,7 +3433,7 @@ public void GetPackageSpec_WhenRestoreFrameworksFrameworkValueHasProjectReferenc } [Theory] - [MemberData(nameof(TestEnvironmentVariableReader))] + [MemberData(nameof(LockFileParsingEnvironmentVariable.TestEnvironmentVariableReader), MemberType = typeof(LockFileParsingEnvironmentVariable))] public void GetPackageSpec_WhenRestoreConfigFilePathsValueIsEmptyArray_ReturnsEmptyConfigFilePaths(IEnvironmentVariableReader environmentVariableReader) { const string json = "{\"restore\":{\"configFilePaths\":[]}}"; @@ -3428,7 +3443,7 @@ public void GetPackageSpec_WhenRestoreConfigFilePathsValueIsEmptyArray_ReturnsEm } [Theory] - [MemberData(nameof(TestEnvironmentVariableReader))] + [MemberData(nameof(LockFileParsingEnvironmentVariable.TestEnvironmentVariableReader), MemberType = typeof(LockFileParsingEnvironmentVariable))] public void GetPackageSpec_WhenRestoreConfigFilePathsValueIsValid_ReturnsConfigFilePaths(IEnvironmentVariableReader environmentVariableReader) { string[] expectedResults = { "a", "b" }; @@ -3440,7 +3455,7 @@ public void GetPackageSpec_WhenRestoreConfigFilePathsValueIsValid_ReturnsConfigF } [Theory] - [MemberData(nameof(TestEnvironmentVariableReader))] + [MemberData(nameof(LockFileParsingEnvironmentVariable.TestEnvironmentVariableReader), MemberType = typeof(LockFileParsingEnvironmentVariable))] public void GetPackageSpec_WhenRestoreFallbackFoldersValueIsEmptyArray_ReturnsEmptyFallbackFolders(IEnvironmentVariableReader environmentVariableReader) { const string json = "{\"restore\":{\"fallbackFolders\":[]}}"; @@ -3450,7 +3465,7 @@ public void GetPackageSpec_WhenRestoreFallbackFoldersValueIsEmptyArray_ReturnsEm } [Theory] - [MemberData(nameof(TestEnvironmentVariableReader))] + [MemberData(nameof(LockFileParsingEnvironmentVariable.TestEnvironmentVariableReader), MemberType = typeof(LockFileParsingEnvironmentVariable))] public void GetPackageSpec_WhenRestoreFallbackFoldersValueIsValid_ReturnsConfigFilePaths(IEnvironmentVariableReader environmentVariableReader) { string[] expectedResults = { "a", "b" }; @@ -3462,7 +3477,7 @@ public void GetPackageSpec_WhenRestoreFallbackFoldersValueIsValid_ReturnsConfigF } [Theory] - [MemberData(nameof(TestEnvironmentVariableReader))] + [MemberData(nameof(LockFileParsingEnvironmentVariable.TestEnvironmentVariableReader), MemberType = typeof(LockFileParsingEnvironmentVariable))] public void GetPackageSpec_WhenRestoreOriginalTargetFrameworksValueIsEmptyArray_ReturnsEmptyOriginalTargetFrameworks(IEnvironmentVariableReader environmentVariableReader) { const string json = "{\"restore\":{\"originalTargetFrameworks\":[]}}"; @@ -3472,7 +3487,7 @@ public void GetPackageSpec_WhenRestoreOriginalTargetFrameworksValueIsEmptyArray_ } [Theory] - [MemberData(nameof(TestEnvironmentVariableReader))] + [MemberData(nameof(LockFileParsingEnvironmentVariable.TestEnvironmentVariableReader), MemberType = typeof(LockFileParsingEnvironmentVariable))] public void GetPackageSpec_WhenRestoreOriginalTargetFrameworksValueIsValid_ReturnsOriginalTargetFrameworks(IEnvironmentVariableReader environmentVariableReader) { string[] expectedResults = { "a", "b" }; @@ -3484,7 +3499,7 @@ public void GetPackageSpec_WhenRestoreOriginalTargetFrameworksValueIsValid_Retur } [Theory] - [MemberData(nameof(TestEnvironmentVariableReader))] + [MemberData(nameof(LockFileParsingEnvironmentVariable.TestEnvironmentVariableReader), MemberType = typeof(LockFileParsingEnvironmentVariable))] public void GetPackageSpec_WhenRestoreWarningPropertiesValueIsEmptyObject_ReturnsWarningProperties(IEnvironmentVariableReader environmentVariableReader) { var expectedResult = new WarningProperties(); @@ -3495,7 +3510,7 @@ public void GetPackageSpec_WhenRestoreWarningPropertiesValueIsEmptyObject_Return } [Theory] - [MemberData(nameof(TestEnvironmentVariableReader))] + [MemberData(nameof(LockFileParsingEnvironmentVariable.TestEnvironmentVariableReader), MemberType = typeof(LockFileParsingEnvironmentVariable))] public void GetPackageSpec_WhenRestoreWarningPropertiesValueIsValid_ReturnsWarningProperties(IEnvironmentVariableReader environmentVariableReader) { var expectedResult = new WarningProperties( @@ -3511,7 +3526,7 @@ public void GetPackageSpec_WhenRestoreWarningPropertiesValueIsValid_ReturnsWarni } [Theory] - [MemberData(nameof(TestEnvironmentVariableReader))] + [MemberData(nameof(LockFileParsingEnvironmentVariable.TestEnvironmentVariableReader), MemberType = typeof(LockFileParsingEnvironmentVariable))] public void GetPackageSpec_WhenRestoreRestoreLockPropertiesValueIsEmptyObject_ReturnsRestoreLockProperties(IEnvironmentVariableReader environmentVariableReader) { var expectedResult = new RestoreLockProperties(); @@ -3522,7 +3537,7 @@ public void GetPackageSpec_WhenRestoreRestoreLockPropertiesValueIsEmptyObject_Re } [Theory] - [MemberData(nameof(TestEnvironmentVariableReader))] + [MemberData(nameof(LockFileParsingEnvironmentVariable.TestEnvironmentVariableReader), MemberType = typeof(LockFileParsingEnvironmentVariable))] public void GetPackageSpec_WhenRestoreRestoreLockPropertiesValueIsValid_ReturnsRestoreLockProperties(IEnvironmentVariableReader environmentVariableReader) { var expectedResult = new RestoreLockProperties( @@ -3538,9 +3553,9 @@ public void GetPackageSpec_WhenRestoreRestoreLockPropertiesValueIsValid_ReturnsR } [Theory] - [MemberData(nameof(TestEnvironmentVariableReader), "null")] - [MemberData(nameof(TestEnvironmentVariableReader), "\"\"")] - [MemberData(nameof(TestEnvironmentVariableReader), "\"a\"")] + [MemberData(nameof(TestEnvironmentVariableReader), "null", MemberType = typeof(LockFileParsingEnvironmentVariable))] + [MemberData(nameof(TestEnvironmentVariableReader), "\"\"", MemberType = typeof(LockFileParsingEnvironmentVariable))] + [MemberData(nameof(TestEnvironmentVariableReader), "\"a\"", MemberType = typeof(LockFileParsingEnvironmentVariable))] public void GetPackageSpec_WhenRestorePackagesConfigPathValueIsValidAndProjectStyleValueIsNotPackagesConfig_DoesNotReturnPackagesConfigPath(IEnvironmentVariableReader environmentVariableReader, string value) { var json = $"{{\"restore\":{{\"projectStyle\":\"PackageReference\",\"packagesConfigPath\":{value}}}}}"; @@ -3550,9 +3565,9 @@ public void GetPackageSpec_WhenRestorePackagesConfigPathValueIsValidAndProjectSt } [Theory] - [MemberData(nameof(TestEnvironmentVariableReader), "null", null)] - [MemberData(nameof(TestEnvironmentVariableReader), "\"\"", "")] - [MemberData(nameof(TestEnvironmentVariableReader), "\"a\"", "a")] + [MemberData(nameof(TestEnvironmentVariableReader), "null", null, MemberType = typeof(LockFileParsingEnvironmentVariable))] + [MemberData(nameof(TestEnvironmentVariableReader), "\"\"", "", MemberType = typeof(LockFileParsingEnvironmentVariable))] + [MemberData(nameof(TestEnvironmentVariableReader), "\"a\"", "a", MemberType = typeof(LockFileParsingEnvironmentVariable))] public void GetPackageSpec_WhenRestorePackagesConfigPathValueIsValidAndProjectStyleValueIsPackagesConfig_ReturnsPackagesConfigPath( IEnvironmentVariableReader environmentVariableReader, string value, @@ -3566,7 +3581,7 @@ public void GetPackageSpec_WhenRestorePackagesConfigPathValueIsValidAndProjectSt } [Theory] - [MemberData(nameof(TestEnvironmentVariableReader))] + [MemberData(nameof(LockFileParsingEnvironmentVariable.TestEnvironmentVariableReader), MemberType = typeof(LockFileParsingEnvironmentVariable))] public void GetPackageSpec_WhenRestoreSettingsValueIsEmptyObject_ReturnsRestoreSettings(IEnvironmentVariableReader environmentVariableReader) { var expectedResult = new ProjectRestoreSettings(); @@ -3577,7 +3592,7 @@ public void GetPackageSpec_WhenRestoreSettingsValueIsEmptyObject_ReturnsRestoreS } [Theory] - [MemberData(nameof(TestEnvironmentVariableReader))] + [MemberData(nameof(LockFileParsingEnvironmentVariable.TestEnvironmentVariableReader), MemberType = typeof(LockFileParsingEnvironmentVariable))] public void GetPackageSpec_WhenRuntimesValueIsEmptyObject_ReturnsRuntimes(IEnvironmentVariableReader environmentVariableReader) { var expectedResult = RuntimeGraph.Empty; @@ -3588,7 +3603,7 @@ public void GetPackageSpec_WhenRuntimesValueIsEmptyObject_ReturnsRuntimes(IEnvir } [Theory] - [MemberData(nameof(TestEnvironmentVariableReader))] + [MemberData(nameof(LockFileParsingEnvironmentVariable.TestEnvironmentVariableReader), MemberType = typeof(LockFileParsingEnvironmentVariable))] public void GetPackageSpec_WhenRuntimesValueIsValidWithImports_ReturnsRuntimes(IEnvironmentVariableReader environmentVariableReader) { var runtimeDescription = new RuntimeDescription( @@ -3604,7 +3619,7 @@ public void GetPackageSpec_WhenRuntimesValueIsValidWithImports_ReturnsRuntimes(I } [Theory] - [MemberData(nameof(TestEnvironmentVariableReader))] + [MemberData(nameof(LockFileParsingEnvironmentVariable.TestEnvironmentVariableReader), MemberType = typeof(LockFileParsingEnvironmentVariable))] public void GetPackageSpec_WhenRuntimesValueIsValidWithDependencySet_ReturnsRuntimes(IEnvironmentVariableReader environmentVariableReader) { var dependencySet = new RuntimeDependencySet(id: "b"); @@ -3620,7 +3635,7 @@ public void GetPackageSpec_WhenRuntimesValueIsValidWithDependencySet_ReturnsRunt } [Theory] - [MemberData(nameof(TestEnvironmentVariableReader))] + [MemberData(nameof(LockFileParsingEnvironmentVariable.TestEnvironmentVariableReader), MemberType = typeof(LockFileParsingEnvironmentVariable))] public void GetPackageSpec_WhenRuntimesValueIsValidWithDependencySetWithDependency_ReturnsRuntimes(IEnvironmentVariableReader environmentVariableReader) { var dependency = new RuntimePackageDependency("c", VersionRange.Parse("[1.2.3,4.5.6)")); @@ -3638,7 +3653,7 @@ public void GetPackageSpec_WhenRuntimesValueIsValidWithDependencySetWithDependen } [Theory] - [MemberData(nameof(TestEnvironmentVariableReader))] + [MemberData(nameof(LockFileParsingEnvironmentVariable.TestEnvironmentVariableReader), MemberType = typeof(LockFileParsingEnvironmentVariable))] public void GetPackageSpec_WhenSupportsValueIsEmptyObject_ReturnsSupports(IEnvironmentVariableReader environmentVariableReader) { var expectedResult = RuntimeGraph.Empty; @@ -3649,7 +3664,7 @@ public void GetPackageSpec_WhenSupportsValueIsEmptyObject_ReturnsSupports(IEnvir } [Theory] - [MemberData(nameof(TestEnvironmentVariableReader))] + [MemberData(nameof(LockFileParsingEnvironmentVariable.TestEnvironmentVariableReader), MemberType = typeof(LockFileParsingEnvironmentVariable))] public void GetPackageSpec_WhenSupportsValueIsValidWithCompatibilityProfiles_ReturnsSupports(IEnvironmentVariableReader environmentVariableReader) { var profile = new CompatibilityProfile(name: "a"); @@ -3661,7 +3676,7 @@ public void GetPackageSpec_WhenSupportsValueIsValidWithCompatibilityProfiles_Ret } [Theory] - [MemberData(nameof(TestEnvironmentVariableReader))] + [MemberData(nameof(LockFileParsingEnvironmentVariable.TestEnvironmentVariableReader), MemberType = typeof(LockFileParsingEnvironmentVariable))] public void GetPackageSpec_WhenSupportsValueIsValidWithCompatibilityProfilesAndFrameworkRuntimePairs_ReturnsSupports(IEnvironmentVariableReader environmentVariableReader) { FrameworkRuntimePair[] restoreContexts = new[] @@ -3681,7 +3696,7 @@ public void GetPackageSpec_WhenSupportsValueIsValidWithCompatibilityProfilesAndF #pragma warning disable CS0612 // Type or member is obsolete [Theory] - [MemberData(nameof(TestEnvironmentVariableReader))] + [MemberData(nameof(LockFileParsingEnvironmentVariable.TestEnvironmentVariableReader), MemberType = typeof(LockFileParsingEnvironmentVariable))] public void GetPackageSpec_WhenScriptsValueIsEmptyObject_ReturnsScripts(IEnvironmentVariableReader environmentVariableReader) { const string json = "{\"scripts\":{}}"; @@ -3691,7 +3706,7 @@ public void GetPackageSpec_WhenScriptsValueIsEmptyObject_ReturnsScripts(IEnviron } [Theory] - [MemberData(nameof(TestEnvironmentVariableReader))] + [MemberData(nameof(LockFileParsingEnvironmentVariable.TestEnvironmentVariableReader), MemberType = typeof(LockFileParsingEnvironmentVariable))] public void GetPackageSpec_WhenScriptsValueIsInvalid_Throws(IEnvironmentVariableReader environmentVariableReader) { var json = "{\"scripts\":{\"a\":0}}"; @@ -3701,7 +3716,7 @@ public void GetPackageSpec_WhenScriptsValueIsInvalid_Throws(IEnvironmentVariable Assert.Equal("The value of a script in 'project.json' can only be a string or an array of strings", exception.Message); Assert.Null(exception.InnerException); - if (string.Equals(bool.TrueString, environmentVariableReader.GetEnvironmentVariable("NUGET_EXPERIMENTAL_USE_NJ_FOR_FILE_PARSING"))) + if (string.Equals(bool.TrueString, environmentVariableReader.GetEnvironmentVariable(JsonUtility.NUGET_EXPERIMENTAL_USE_NJ_FOR_FILE_PARSING))) { Assert.Equal(1, exception.Line); Assert.Equal(17, exception.Column); @@ -3709,7 +3724,7 @@ public void GetPackageSpec_WhenScriptsValueIsInvalid_Throws(IEnvironmentVariable } [Theory] - [MemberData(nameof(TestEnvironmentVariableReader))] + [MemberData(nameof(LockFileParsingEnvironmentVariable.TestEnvironmentVariableReader), MemberType = typeof(LockFileParsingEnvironmentVariable))] public void GetPackageSpec_WhenScriptsValueIsValid_ReturnsScripts(IEnvironmentVariableReader environmentVariableReader) { const string name0 = "a"; @@ -3742,9 +3757,9 @@ public void GetPackageSpec_WhenScriptsValueIsValid_ReturnsScripts(IEnvironmentVa #pragma warning restore CS0612 // Type or member is obsolete [Theory] - [MemberData(nameof(TestEnvironmentVariableReader), "null", null)] - [MemberData(nameof(TestEnvironmentVariableReader), "\"\"", "")] - [MemberData(nameof(TestEnvironmentVariableReader), "\"a\"", "a")] + [MemberData(nameof(TestEnvironmentVariableReader), "null", null, MemberType = typeof(LockFileParsingEnvironmentVariable))] + [MemberData(nameof(TestEnvironmentVariableReader), "\"\"", "", MemberType = typeof(LockFileParsingEnvironmentVariable))] + [MemberData(nameof(TestEnvironmentVariableReader), "\"a\"", "a", MemberType = typeof(LockFileParsingEnvironmentVariable))] public void GetPackageSpec_WhenTitleValueIsValid_ReturnsTitle(IEnvironmentVariableReader environmentVariableReader, string value, string expectedResult) { var json = $"{{\"title\":{value}}}"; @@ -3755,7 +3770,7 @@ public void GetPackageSpec_WhenTitleValueIsValid_ReturnsTitle(IEnvironmentVariab } [Theory] - [MemberData(nameof(TestEnvironmentVariableReader))] + [MemberData(nameof(LockFileParsingEnvironmentVariable.TestEnvironmentVariableReader), MemberType = typeof(LockFileParsingEnvironmentVariable))] public void GetPackageSpec_WhenNameIsNull_RestoreMetadataProvidesFallbackName(IEnvironmentVariableReader environmentVariableReader) { const string expectedResult = "a"; @@ -3767,9 +3782,9 @@ public void GetPackageSpec_WhenNameIsNull_RestoreMetadataProvidesFallbackName(IE } [Theory] - [MemberData(nameof(TestEnvironmentVariableReader), "{\"restore\":{\"projectJsonPath\":\"a\"}}")] - [MemberData(nameof(TestEnvironmentVariableReader), "{\"restore\":{\"projectPath\":\"a\"}}")] - [MemberData(nameof(TestEnvironmentVariableReader), "{\"restore\":{\"projectJsonPath\":\"a\",\"projectPath\":\"b\"}}")] + [MemberData(nameof(TestEnvironmentVariableReader), "{\"restore\":{\"projectJsonPath\":\"a\"}}", MemberType = typeof(LockFileParsingEnvironmentVariable))] + [MemberData(nameof(TestEnvironmentVariableReader), "{\"restore\":{\"projectPath\":\"a\"}}", MemberType = typeof(LockFileParsingEnvironmentVariable))] + [MemberData(nameof(TestEnvironmentVariableReader), "{\"restore\":{\"projectJsonPath\":\"a\",\"projectPath\":\"b\"}}", MemberType = typeof(LockFileParsingEnvironmentVariable))] public void GetPackageSpec_WhenFilePathIsNull_RestoreMetadataProvidesFallbackFilePath(IEnvironmentVariableReader environmentVariableReader, string json) { const string expectedResult = "a"; @@ -3780,7 +3795,7 @@ public void GetPackageSpec_WhenFilePathIsNull_RestoreMetadataProvidesFallbackFil } [Theory] - [MemberData(nameof(TestEnvironmentVariableReader))] + [MemberData(nameof(LockFileParsingEnvironmentVariable.TestEnvironmentVariableReader), MemberType = typeof(LockFileParsingEnvironmentVariable))] public void GetTargetFrameworkInformation_WithAnAlias(IEnvironmentVariableReader environmentVariableReader) { TargetFrameworkInformation framework = GetFramework("{\"frameworks\":{\"net46\":{ \"targetAlias\" : \"alias\"}}}", environmentVariableReader); @@ -3789,7 +3804,7 @@ public void GetTargetFrameworkInformation_WithAnAlias(IEnvironmentVariableReader } [Theory] - [MemberData(nameof(TestEnvironmentVariableReader))] + [MemberData(nameof(LockFileParsingEnvironmentVariable.TestEnvironmentVariableReader), MemberType = typeof(LockFileParsingEnvironmentVariable))] public void PackageSpecReader_ReadsRestoreMetadataWithAliases(IEnvironmentVariableReader environmentVariableReader) { // Arrange @@ -3825,7 +3840,7 @@ public void PackageSpecReader_ReadsRestoreMetadataWithAliases(IEnvironmentVariab } [Theory] - [MemberData(nameof(TestEnvironmentVariableReader))] + [MemberData(nameof(LockFileParsingEnvironmentVariable.TestEnvironmentVariableReader), MemberType = typeof(LockFileParsingEnvironmentVariable))] public void PackageSpecReader_Read(IEnvironmentVariableReader environmentVariableReader) { // Arrange @@ -3852,7 +3867,7 @@ public void PackageSpecReader_Read(IEnvironmentVariableReader environmentVariabl // Act var results = new List(); - if (environmentVariableReader.GetEnvironmentVariable("NUGET_EXPERIMENTAL_USE_NJ_FOR_FILE_PARSING").Equals(bool.FalseString, StringComparison.OrdinalIgnoreCase)) + if (environmentVariableReader.GetEnvironmentVariable(JsonUtility.NUGET_EXPERIMENTAL_USE_NJ_FOR_FILE_PARSING).Equals(bool.FalseString, StringComparison.OrdinalIgnoreCase)) { using Stream stream = new MemoryStream(Encoding.UTF8.GetBytes(json)); var reader = new Utf8JsonStreamReader(stream); @@ -3867,11 +3882,10 @@ public void PackageSpecReader_Read(IEnvironmentVariableReader environmentVariabl { var frameworkPropertyName = reader.GetString(); NuGetFramework framework = NuGetFramework.Parse(frameworkPropertyName); - var dependencies = new List(); JsonPackageSpecReader.ReadCentralTransitiveDependencyGroup( jsonReader: ref reader, - results: dependencies, + results: out var dependencies, packageSpecPath: "SomePath"); results.Add(new CentralTransitiveDependencyGroup(framework, dependencies)); } @@ -3920,7 +3934,7 @@ public void PackageSpecReader_Read(IEnvironmentVariableReader environmentVariabl [Theory] - [MemberData(nameof(TestEnvironmentVariableReader))] + [MemberData(nameof(LockFileParsingEnvironmentVariable.TestEnvironmentVariableReader), MemberType = typeof(LockFileParsingEnvironmentVariable))] public void PackageSpecReader_Malformed_Exception(IEnvironmentVariableReader environmentVariableReader) { // Arrange @@ -3931,7 +3945,7 @@ public void PackageSpecReader_Malformed_Exception(IEnvironmentVariableReader env // Act var results = new List(); - if (environmentVariableReader.GetEnvironmentVariable("NUGET_EXPERIMENTAL_USE_NJ_FOR_FILE_PARSING").Equals(bool.FalseString, StringComparison.OrdinalIgnoreCase)) + if (environmentVariableReader.GetEnvironmentVariable(JsonUtility.NUGET_EXPERIMENTAL_USE_NJ_FOR_FILE_PARSING).Equals(bool.FalseString, StringComparison.OrdinalIgnoreCase)) { Assert.ThrowsAny(() => { @@ -3942,11 +3956,10 @@ public void PackageSpecReader_Malformed_Exception(IEnvironmentVariableReader env { reader.Read(); NuGetFramework framework = NuGetFramework.Parse(reader.GetString()); - var dependencies = new List(); JsonPackageSpecReader.ReadCentralTransitiveDependencyGroup( jsonReader: ref reader, - results: dependencies, + results: out var dependencies, packageSpecPath: "SomePath"); results.Add(new CentralTransitiveDependencyGroup(framework, dependencies)); } @@ -3974,7 +3987,7 @@ public void PackageSpecReader_Malformed_Exception(IEnvironmentVariableReader env } [Theory] - [MemberData(nameof(TestEnvironmentVariableReader))] + [MemberData(nameof(LockFileParsingEnvironmentVariable.TestEnvironmentVariableReader), MemberType = typeof(LockFileParsingEnvironmentVariable))] public void GetPackageSpec_WithSecondaryFrameworks_ReturnsTargetFrameworkInformationWithDualCompatibilityFramework(IEnvironmentVariableReader environmentVariableReader) { var json = $"{{\"frameworks\":{{\"net5.0\":{{\"secondaryFramework\": \"native\"}}}}}}"; @@ -3987,7 +4000,7 @@ public void GetPackageSpec_WithSecondaryFrameworks_ReturnsTargetFrameworkInforma } [Theory] - [MemberData(nameof(TestEnvironmentVariableReader))] + [MemberData(nameof(LockFileParsingEnvironmentVariable.TestEnvironmentVariableReader), MemberType = typeof(LockFileParsingEnvironmentVariable))] public void GetPackageSpec_WithAssetTargetFallbackAndWithSecondaryFrameworks_ReturnsTargetFrameworkInformationWithDualCompatibilityFramework(IEnvironmentVariableReader environmentVariableReader) { var json = $"{{\"frameworks\":{{\"net5.0\":{{\"assetTargetFallback\": true, \"imports\": [\"net472\", \"net471\"], \"secondaryFramework\": \"native\" }}}}}}"; @@ -4006,7 +4019,7 @@ public void GetPackageSpec_WithAssetTargetFallbackAndWithSecondaryFrameworks_Ret } [Theory] - [MemberData(nameof(TestEnvironmentVariableReader))] + [MemberData(nameof(LockFileParsingEnvironmentVariable.TestEnvironmentVariableReader), MemberType = typeof(LockFileParsingEnvironmentVariable))] public void GetPackageSpec_WithRestoreAuditProperties_ReturnsRestoreAuditProperties(IEnvironmentVariableReader environmentVariableReader) { // Arrange @@ -4029,7 +4042,7 @@ private static PackageSpec GetPackageSpec(string json, IEnvironmentVariableReade private static PackageSpec GetPackageSpec(string json, string name, string packageSpecPath, string snapshotValue, IEnvironmentVariableReader environmentVariableReader) { using var stream = new MemoryStream(Encoding.UTF8.GetBytes(json)); - return JsonPackageSpecReader.GetPackageSpec(stream, name, packageSpecPath, snapshotValue, environmentVariableReader); + return JsonPackageSpecReader.GetPackageSpec(stream, name, packageSpecPath, snapshotValue, environmentVariableReader, true); } private static LibraryDependency GetDependency(string json, IEnvironmentVariableReader environmentVariableReader) @@ -4059,55 +4072,5 @@ private static FrameworkDependency GetFrameworksFrameworkReference(string json, return framework.FrameworkReferences.Single(); } - - public static IEnumerable TestEnvironmentVariableReader() - { - return GetTestEnvironmentVariableReader(); - } - - public static IEnumerable TestEnvironmentVariableReader(object value1) - { - return GetTestEnvironmentVariableReader(value1); - } - - public static IEnumerable TestEnvironmentVariableReader(object value1, object value2) - { - return GetTestEnvironmentVariableReader(value1, value2); - } - - public static IEnumerable TestEnvironmentVariableReader(object value1, object value2, object value3) - { - return GetTestEnvironmentVariableReader(value1, value2, value3); - } - - private static IEnumerable GetTestEnvironmentVariableReader(params object[] objects) - { - var UseNjForFileTrue = new List { - new TestEnvironmentVariableReader( - new Dictionary() - { - ["NUGET_EXPERIMENTAL_USE_NJ_FOR_FILE_PARSING"] = bool.TrueString - }, "NUGET_EXPERIMENTAL_USE_NJ_FOR_FILE_PARSING: true") - }; - var UseNjForFileFalse = new List { - new TestEnvironmentVariableReader( - new Dictionary() - { - ["NUGET_EXPERIMENTAL_USE_NJ_FOR_FILE_PARSING"] = bool.FalseString - }, "NUGET_EXPERIMENTAL_USE_NJ_FOR_FILE_PARSING: false") - }; - - if (objects != null) - { - UseNjForFileFalse.AddRange(objects); - UseNjForFileTrue.AddRange(objects); - } - - return new List - { - UseNjForFileTrue.ToArray(), - UseNjForFileFalse.ToArray() - }; - } } } diff --git a/test/NuGet.Core.Tests/NuGet.ProjectModel.Test/LazyStringSplitTests.cs b/test/NuGet.Core.Tests/NuGet.ProjectModel.Test/LazyStringSplitTests.cs new file mode 100644 index 00000000000..e314c4f7226 --- /dev/null +++ b/test/NuGet.Core.Tests/NuGet.ProjectModel.Test/LazyStringSplitTests.cs @@ -0,0 +1,57 @@ +// Licensed to the .NET Foundation under one or more agreements. The .NET Foundation licenses this file to you under the MIT license. See the LICENSE.md file in the project root for more information. + +using System.Collections.Generic; +using System; +using Xunit; + +namespace NuGet.ProjectModel.Test +{ + public sealed class LazyStringSplitTests + { + [Theory] + [InlineData("a;b;c", ';', new[] { "a", "b", "c" })] + [InlineData("a_b_c", '_', new[] { "a", "b", "c" })] + [InlineData("aa;bb;cc", ';', new[] { "aa", "bb", "cc" })] + [InlineData("aaa;bbb;ccc", ';', new[] { "aaa", "bbb", "ccc" })] + [InlineData(";a;b;c", ';', new[] { "a", "b", "c" })] + [InlineData("a;b;c;", ';', new[] { "a", "b", "c" })] + [InlineData(";a;b;c;", ';', new[] { "a", "b", "c" })] + [InlineData(";;a;;b;;c;;", ';', new[] { "a", "b", "c" })] + [InlineData("", ';', new string[0])] + [InlineData(";", ';', new string[0])] + [InlineData(";;", ';', new string[0])] + [InlineData(";;;", ';', new string[0])] + [InlineData(";;;a", ';', new[] { "a" })] + [InlineData("a;;;", ';', new[] { "a" })] + [InlineData(";a;;", ';', new[] { "a" })] + [InlineData(";;a;", ';', new[] { "a" })] + [InlineData("a", ';', new[] { "a" })] + [InlineData("aa", ';', new[] { "aa" })] + public void ProducesCorrectEnumeration(string input, char delimiter, string[] expected) + { + // This boxes + IEnumerable actual = new LazyStringSplit(input, delimiter); + + Assert.Equal(expected, actual); + + // Non boxing foreach + var list = new List(); + + foreach (var s in new LazyStringSplit(input, delimiter)) + { + list.Add(s); + } + + Assert.Equal(expected, list); + + // Equivalence with string.Split + Assert.Equal(expected, input.Split(new[] { delimiter }, StringSplitOptions.RemoveEmptyEntries)); + } + + [Fact] + public void Constructor_WithNullInput_Throws() + { + Assert.Throws(() => new LazyStringSplit(null!, ' ')); + } + } +} diff --git a/test/NuGet.Core.Tests/NuGet.ProjectModel.Test/LockFileFormatTests.cs b/test/NuGet.Core.Tests/NuGet.ProjectModel.Test/LockFileFormatTests.cs index 310781aa194..67a3b192a42 100644 --- a/test/NuGet.Core.Tests/NuGet.ProjectModel.Test/LockFileFormatTests.cs +++ b/test/NuGet.Core.Tests/NuGet.ProjectModel.Test/LockFileFormatTests.cs @@ -5,6 +5,7 @@ using System.Collections.Generic; using System.IO; using System.Linq; +using System.Text; using Newtonsoft.Json.Linq; using NuGet.Common; using NuGet.Frameworks; @@ -19,8 +20,10 @@ namespace NuGet.ProjectModel.Test public class LockFileFormatTests { // Verify the value of locked has no impact on the parsed lock file - [Fact] - public void LockFileFormat_LockedPropertyIsIgnored() + [Theory] + [MemberData(nameof(LockFileParsingEnvironmentVariable.TestEnvironmentVariableReader), MemberType = typeof(LockFileParsingEnvironmentVariable))] + + public void LockFileFormat_LockedPropertyIsIgnored(IEnvironmentVariableReader environmentVariableReader) { // Arrange var lockFileContentTrue = @"{ @@ -148,9 +151,11 @@ public void LockFileFormat_LockedPropertyIsIgnored() var lockFileFormat = new LockFileFormat(); // Act - var lockFileTrue = lockFileFormat.Parse(lockFileContentTrue, "In Memory"); - var lockFileFalse = lockFileFormat.Parse(lockFileContentFalse, "In Memory"); - var lockFileMissing = lockFileFormat.Parse(lockFileContentMissing, "In Memory"); +#pragma warning disable CS0612 // Type or member is obsolete + var lockFileTrue = Parse(lockFileContentTrue, "In Memory", environmentVariableReader); + var lockFileFalse = Parse(lockFileContentFalse, "In Memory", environmentVariableReader); + var lockFileMissing = Parse(lockFileContentMissing, "In Memory", environmentVariableReader); +#pragma warning restore CS0612 // Type or member is obsolete var lockFileTrueString = lockFileFormat.Render(lockFileTrue); var lockFileFalseString = lockFileFormat.Render(lockFileFalse); @@ -164,8 +169,9 @@ public void LockFileFormat_LockedPropertyIsIgnored() Assert.Equal(lockFileTrueString, lockFileMissingString); } - [Fact] - public void LockFileFormat_ReadsLockFileWithNoTools() + [Theory] + [MemberData(nameof(LockFileParsingEnvironmentVariable.TestEnvironmentVariableReader), MemberType = typeof(LockFileParsingEnvironmentVariable))] + public void LockFileFormat_ReadsLockFileWithNoTools(IEnvironmentVariableReader environmentVariableReader) { var lockFileContent = @"{ ""version"": 1, @@ -206,8 +212,7 @@ public void LockFileFormat_ReadsLockFileWithNoTools() "".NETPlatform,Version=v5.0"": [] } }"; - var lockFileFormat = new LockFileFormat(); - var lockFile = lockFileFormat.Parse(lockFileContent, "In Memory"); + var lockFile = Parse(lockFileContent, "In Memory", environmentVariableReader); Assert.Equal(1, lockFile.Version); @@ -1327,8 +1332,9 @@ public void LockFileFormat_WritesMinimalWarningMessageWithWarningLevel() Assert.Equal(expected, output); } - [Fact] - public void LockFileFormat_ReadsMinimalErrorMessage() + [Theory] + [MemberData(nameof(LockFileParsingEnvironmentVariable.TestEnvironmentVariableReader), MemberType = typeof(LockFileParsingEnvironmentVariable))] + public void LockFileFormat_ReadsMinimalErrorMessage(IEnvironmentVariableReader environmentVariableReader) { // Arrange var lockFileContent = @"{ @@ -1377,8 +1383,7 @@ public void LockFileFormat_ReadsMinimalErrorMessage() File.WriteAllText(lockFile, lockFileContent); // Act - var reader = new LockFileFormat(); - lockFileObj = reader.Read(lockFile); + lockFileObj = Read(lockFile, environmentVariableReader); logMessage = lockFileObj?.LogMessages?.First(); } @@ -1399,8 +1404,92 @@ public void LockFileFormat_ReadsMinimalErrorMessage() Assert.Equal("test log message", logMessage.Message); } - [Fact] - public void LockFileFormat_ReadsFullErrorMessage() + + [Theory] + [MemberData(nameof(LockFileParsingEnvironmentVariable.TestEnvironmentVariableReader), MemberType = typeof(LockFileParsingEnvironmentVariable))] + public void LockFileFormat_SkipsInvalidErrorMessage(IEnvironmentVariableReader environmentVariableReader) + { + // Arrange + var lockFileContent = @"{ + ""version"": 3, + ""targets"": { + "".NETPlatform,Version=v5.0"": { + ""System.Runtime/4.0.20-beta-22927"": { + ""type"": ""package"", + ""dependencies"": { + ""Frob"": ""4.0.20"" + }, + ""compile"": { + ""ref/dotnet/System.Runtime.dll"": {} + } + } + } + }, + ""libraries"": { + ""System.Runtime/4.0.20-beta-22927"": { + ""sha512"": ""sup3rs3cur3"", + ""type"": ""package"", + ""files"": [ + ""System.Runtime.nuspec"" + ] + } + }, + ""projectFileDependencyGroups"": { + """": [ + ""System.Runtime [4.0.10-beta-*, )"" + ], + "".NETPlatform,Version=v5.0"": [] + }, + ""logs"": [ + { + ""code"": ""InvalidCode"", + ""level"": ""Error"", + ""message"": ""test log message"" + }, + { + ""code"": ""NU1000"", + ""level"": ""InvalidCode"", + ""message"": ""test log message"" + }, + { + ""code"": ""NU1000"", + ""level"": ""Error"", + ""message"": ""test log message"" + } + ] +}"; + LockFile lockFileObj = null; + IAssetsLogMessage logMessage = null; + using (var lockFile = new TempFile()) + { + + File.WriteAllText(lockFile, lockFileContent); + + // Act + lockFileObj = Read(lockFile, environmentVariableReader); + logMessage = lockFileObj?.LogMessages?.First(); + } + + + // Assert + Assert.NotNull(lockFileObj); + Assert.NotNull(logMessage); + Assert.Equal(1, lockFileObj.LogMessages.Count()); + Assert.Equal(LogLevel.Error, logMessage.Level); + Assert.Equal(NuGetLogCode.NU1000, logMessage.Code); + Assert.Null(logMessage.FilePath); + Assert.Equal(0, logMessage.StartLineNumber); + Assert.Equal(0, logMessage.EndLineNumber); + Assert.Equal(0, logMessage.StartColumnNumber); + Assert.Equal(0, logMessage.EndColumnNumber); + Assert.NotNull(logMessage.TargetGraphs); + Assert.Equal(0, logMessage.TargetGraphs.Count); + Assert.Equal("test log message", logMessage.Message); + } + + [Theory] + [MemberData(nameof(LockFileParsingEnvironmentVariable.TestEnvironmentVariableReader), MemberType = typeof(LockFileParsingEnvironmentVariable))] + public void LockFileFormat_ReadsFullErrorMessage(IEnvironmentVariableReader environmentVariableReader) { // Arrange var lockFileContent = @"{ @@ -1459,8 +1548,7 @@ public void LockFileFormat_ReadsFullErrorMessage() File.WriteAllText(lockFile, lockFileContent); // Act - var reader = new LockFileFormat(); - lockFileObj = reader.Read(lockFile); + lockFileObj = Read(lockFile, environmentVariableReader); logMessage = lockFileObj?.LogMessages?.First(); } @@ -1481,8 +1569,9 @@ public void LockFileFormat_ReadsFullErrorMessage() Assert.Equal("test log message", logMessage.Message); } - [Fact] - public void LockFileFormat_SafeRead() + [Theory] + [MemberData(nameof(LockFileParsingEnvironmentVariable.TestEnvironmentVariableReader), MemberType = typeof(LockFileParsingEnvironmentVariable))] + public void LockFileFormat_SafeRead(IEnvironmentVariableReader environmentVariableReader) { // Arrange var lockFileContent = @"{ @@ -1543,7 +1632,7 @@ public void LockFileFormat_SafeRead() // Act var reader = new LockFileFormat(); - lockFileObj = FileUtility.SafeRead(lockFile, (stream, path) => reader.Read(stream, NullLogger.Instance, path)); + lockFileObj = FileUtility.SafeRead(lockFile, (stream, path) => reader.Read(stream, NullLogger.Instance, path, environmentVariableReader, true)); logMessage = lockFileObj?.LogMessages?.First(); } @@ -1566,8 +1655,9 @@ public void LockFileFormat_SafeRead() } - [Fact] - public void LockFileFormat_ReadsWarningMessage() + [Theory] + [MemberData(nameof(LockFileParsingEnvironmentVariable.TestEnvironmentVariableReader), MemberType = typeof(LockFileParsingEnvironmentVariable))] + public void LockFileFormat_ReadsWarningMessage(IEnvironmentVariableReader environmentVariableReader) { // Arrange @@ -1628,8 +1718,7 @@ public void LockFileFormat_ReadsWarningMessage() File.WriteAllText(lockFile, lockFileContent); // Act - var reader = new LockFileFormat(); - lockFileObj = reader.Read(lockFile); + lockFileObj = Read(lockFile, environmentVariableReader); logMessage = lockFileObj?.LogMessages?.First(); } @@ -1651,8 +1740,9 @@ public void LockFileFormat_ReadsWarningMessage() Assert.Equal("test log message", logMessage.Message); } - [Fact] - public void LockFileFormat_ReadsWarningMessageWithoutWarningLevel() + [Theory] + [MemberData(nameof(LockFileParsingEnvironmentVariable.TestEnvironmentVariableReader), MemberType = typeof(LockFileParsingEnvironmentVariable))] + public void LockFileFormat_ReadsWarningMessageWithoutWarningLevel(IEnvironmentVariableReader environmentVariableReader) { // Arrange var lockFileContent = @"{ @@ -1711,8 +1801,7 @@ public void LockFileFormat_ReadsWarningMessageWithoutWarningLevel() File.WriteAllText(lockFile, lockFileContent); // Act - var reader = new LockFileFormat(); - lockFileObj = reader.Read(lockFile); + lockFileObj = Read(lockFile, environmentVariableReader); logMessage = lockFileObj?.LogMessages?.First(); } @@ -1735,8 +1824,9 @@ public void LockFileFormat_ReadsWarningMessageWithoutWarningLevel() } - [Fact] - public void LockFileFormat_ReadsMultipleMessages() + [Theory] + [MemberData(nameof(LockFileParsingEnvironmentVariable.TestEnvironmentVariableReader), MemberType = typeof(LockFileParsingEnvironmentVariable))] + public void LockFileFormat_ReadsMultipleMessages(IEnvironmentVariableReader environmentVariableReader) { // Arrange var lockFileContent = @"{ @@ -1806,8 +1896,7 @@ public void LockFileFormat_ReadsMultipleMessages() File.WriteAllText(lockFile, lockFileContent); // Act - var reader = new LockFileFormat(); - lockFileObj = reader.Read(lockFile); + lockFileObj = Read(lockFile, environmentVariableReader); } @@ -1824,8 +1913,9 @@ public void LockFileFormat_ReadsMultipleMessages() Assert.Equal(1, lockFileObj.LogMessages.Where(m => m.Code == NuGetLogCode.NU1001).Count()); } - [Fact] - public void LockFileFormat_ReadsLogMessageWithSameFilePathAndProjectPath() + [Theory] + [MemberData(nameof(LockFileParsingEnvironmentVariable.TestEnvironmentVariableReader), MemberType = typeof(LockFileParsingEnvironmentVariable))] + public void LockFileFormat_ReadsLogMessageWithSameFilePathAndProjectPath(IEnvironmentVariableReader environmentVariableReader) { // Arrange var lockFileContent = @"{ @@ -1880,8 +1970,7 @@ public void LockFileFormat_ReadsLogMessageWithSameFilePathAndProjectPath() File.WriteAllText(lockFile, lockFileContent); // Act - var reader = new LockFileFormat(); - lockFileObj = reader.Read(lockFile); + lockFileObj = Read(lockFile, environmentVariableReader); logMessage = lockFileObj?.LogMessages?.First(); } @@ -1903,8 +1992,9 @@ public void LockFileFormat_ReadsLogMessageWithSameFilePathAndProjectPath() Assert.Equal("test log message", logMessage.Message); } - [Fact] - public void LockFileFormat_ReadsLogMessageWithNoFilePath() + [Theory] + [MemberData(nameof(LockFileParsingEnvironmentVariable.TestEnvironmentVariableReader), MemberType = typeof(LockFileParsingEnvironmentVariable))] + public void LockFileFormat_ReadsLogMessageWithNoFilePath(IEnvironmentVariableReader environmentVariableReader) { // Arrange var lockFileContent = @"{ @@ -1958,8 +2048,7 @@ public void LockFileFormat_ReadsLogMessageWithNoFilePath() File.WriteAllText(lockFile, lockFileContent); // Act - var reader = new LockFileFormat(); - lockFileObj = reader.Read(lockFile); + lockFileObj = Read(lockFile, environmentVariableReader); logMessage = lockFileObj?.LogMessages?.First(); } @@ -1981,8 +2070,9 @@ public void LockFileFormat_ReadsLogMessageWithNoFilePath() Assert.Equal("test log message", logMessage.Message); } - [Fact] - public void LockFileFormat_ReadsLockFileWithTools() + [Theory] + [MemberData(nameof(LockFileParsingEnvironmentVariable.TestEnvironmentVariableReader), MemberType = typeof(LockFileParsingEnvironmentVariable))] + public void LockFileFormat_ReadsLockFileWithTools(IEnvironmentVariableReader environmentVariableReader) { var lockFileContent = @"{ ""version"": 1, @@ -2017,8 +2107,7 @@ public void LockFileFormat_ReadsLockFileWithTools() "".NETPlatform,Version=v5.0"": [] } }"; - var lockFileFormat = new LockFileFormat(); - var lockFile = lockFileFormat.Parse(lockFileContent, "In Memory"); + var lockFile = Parse(lockFileContent, "In Memory", environmentVariableReader); Assert.Equal(1, lockFile.Version); @@ -2051,8 +2140,9 @@ public void LockFileFormat_ReadsLockFileWithTools() Assert.Empty(netPlatDepGroup.Dependencies); } - [Fact] - public void LockFileFormat_ReadsLockFileWithEmbedAssemblies() + [Theory] + [MemberData(nameof(LockFileParsingEnvironmentVariable.TestEnvironmentVariableReader), MemberType = typeof(LockFileParsingEnvironmentVariable))] + public void LockFileFormat_ReadsLockFileWithEmbedAssemblies(IEnvironmentVariableReader environmentVariableReader) { var lockFileContent = @"{ ""version"": 1, @@ -2093,8 +2183,7 @@ public void LockFileFormat_ReadsLockFileWithEmbedAssemblies() } }"; - var lockFileFormat = new LockFileFormat(); - var lockFile = lockFileFormat.Parse(lockFileContent, "In Memory"); + var lockFile = Parse(lockFileContent, "In Memory", environmentVariableReader); Assert.Equal(1, lockFile.Version); @@ -2294,5 +2383,24 @@ public void LockFileFormat_WritesCentralTransitiveDependencyGroups() // Assert Assert.Equal(expected.ToString(), output.ToString()); } + + private LockFile Read(string filePath, IEnvironmentVariableReader environmentVariableReader) + { + var reader = new LockFileFormat(); + using (var stream = File.OpenRead(filePath)) + { + return reader.Read(stream, NullLogger.Instance, filePath, environmentVariableReader, true); + } + } + + private LockFile Parse(string lockFileContent, string path, IEnvironmentVariableReader environmentVariableReader) + { + var reader = new LockFileFormat(); + byte[] byteArray = Encoding.UTF8.GetBytes(lockFileContent); + using (var stream = new MemoryStream(byteArray)) + { + return reader.Read(stream, NullLogger.Instance, path, environmentVariableReader, true); + } + } } } diff --git a/test/NuGet.Core.Tests/NuGet.ProjectModel.Test/LockFileParsingEnvironmentVariable.cs b/test/NuGet.Core.Tests/NuGet.ProjectModel.Test/LockFileParsingEnvironmentVariable.cs new file mode 100644 index 00000000000..6224637214d --- /dev/null +++ b/test/NuGet.Core.Tests/NuGet.ProjectModel.Test/LockFileParsingEnvironmentVariable.cs @@ -0,0 +1,61 @@ +// Copyright (c) .NET Foundation. All rights reserved. +// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. + +using System.Collections.Generic; +using Test.Utility; + +namespace NuGet.ProjectModel +{ + public static class LockFileParsingEnvironmentVariable + { + public static IEnumerable TestEnvironmentVariableReader() + { + return GetTestEnvironmentVariableReader(); + } + + public static IEnumerable TestEnvironmentVariableReader(object value1) + { + return GetTestEnvironmentVariableReader(value1); + } + + public static IEnumerable TestEnvironmentVariableReader(object value1, object value2) + { + return GetTestEnvironmentVariableReader(value1, value2); + } + + public static IEnumerable TestEnvironmentVariableReader(object value1, object value2, object value3) + { + return GetTestEnvironmentVariableReader(value1, value2, value3); + } + + private static IEnumerable GetTestEnvironmentVariableReader(params object[] objects) + { + var UseNjForFileTrue = new List { + new TestEnvironmentVariableReader( + new Dictionary() + { + [JsonUtility.NUGET_EXPERIMENTAL_USE_NJ_FOR_FILE_PARSING] = bool.TrueString + }, "NUGET_EXPERIMENTAL_USE_NJ_FOR_FILE_PARSING: true") + }; + var UseNjForFileFalse = new List { + new TestEnvironmentVariableReader( + new Dictionary() + { + [JsonUtility.NUGET_EXPERIMENTAL_USE_NJ_FOR_FILE_PARSING] = bool.FalseString + }, "NUGET_EXPERIMENTAL_USE_NJ_FOR_FILE_PARSING: false") + }; + + if (objects != null) + { + UseNjForFileFalse.AddRange(objects); + UseNjForFileTrue.AddRange(objects); + } + + return new List + { + UseNjForFileTrue.ToArray(), + UseNjForFileFalse.ToArray() + }; + } + } +} diff --git a/test/NuGet.Core.Tests/NuGet.ProjectModel.Test/LockFileTests.cs b/test/NuGet.Core.Tests/NuGet.ProjectModel.Test/LockFileTests.cs index 8131591068f..8875d8e0ddd 100644 --- a/test/NuGet.Core.Tests/NuGet.ProjectModel.Test/LockFileTests.cs +++ b/test/NuGet.Core.Tests/NuGet.ProjectModel.Test/LockFileTests.cs @@ -4,6 +4,7 @@ using System; using System.Collections.Generic; using System.IO; +using System.Text; using FluentAssertions; using NuGet.Common; using NuGet.Frameworks; @@ -854,12 +855,13 @@ public void LockFile_ConsiderCentralTransitiveDependencyGroupsForEquality() Assert.Equal(lockFile_1_2.GetHashCode(), lockFile_11_22.GetHashCode()); } - [Fact] - public void LockFile_GetTarget_WithNuGetFramework_ReturnsCorrectLockFileTarget() + [Theory] + [MemberData(nameof(LockFileParsingEnvironmentVariable.TestEnvironmentVariableReader), MemberType = typeof(LockFileParsingEnvironmentVariable))] + public void LockFile_GetTarget_WithNuGetFramework_ReturnsCorrectLockFileTarget(IEnvironmentVariableReader environmentVariableReader) { // Arrange var expectedJson = ResourceTestUtility.GetResource("NuGet.ProjectModel.Test.compiler.resources.sample.assets.json", typeof(LockFileTests)); - var lockFile = new LockFileFormat().Parse(expectedJson, Path.GetTempPath()); + var lockFile = Parse(expectedJson, Path.GetTempPath(), environmentVariableReader); NuGetFramework nuGetFramework = NuGetFramework.ParseComponents(".NETCoreApp,Version=v5.0", "Windows,Version=7.0"); // Act @@ -869,12 +871,13 @@ public void LockFile_GetTarget_WithNuGetFramework_ReturnsCorrectLockFileTarget() target.TargetFramework.Should().Be(nuGetFramework); } - [Fact] - public void LockFile_GetTarget_WithAlias_ReturnsCorrectLockFileTarget() + [Theory] + [MemberData(nameof(LockFileParsingEnvironmentVariable.TestEnvironmentVariableReader), MemberType = typeof(LockFileParsingEnvironmentVariable))] + public void LockFile_GetTarget_WithAlias_ReturnsCorrectLockFileTarget(IEnvironmentVariableReader environmentVariableReader) { // Arrange var expectedJson = ResourceTestUtility.GetResource("NuGet.ProjectModel.Test.compiler.resources.sample.assets.json", typeof(LockFileTests)); - var lockFile = new LockFileFormat().Parse(expectedJson, Path.GetTempPath()); + var lockFile = Parse(expectedJson, Path.GetTempPath(), environmentVariableReader); NuGetFramework nuGetFramework = NuGetFramework.ParseComponents(".NETCoreApp,Version=v5.0", "Windows,Version=7.0"); // Act @@ -883,5 +886,15 @@ public void LockFile_GetTarget_WithAlias_ReturnsCorrectLockFileTarget() // Assert target.TargetFramework.Should().Be(nuGetFramework); } + + private LockFile Parse(string lockFileContent, string path, IEnvironmentVariableReader environmentVariableReader) + { + var reader = new LockFileFormat(); + byte[] byteArray = Encoding.UTF8.GetBytes(lockFileContent); + using (var stream = new MemoryStream(byteArray)) + { + return reader.Read(stream, NullLogger.Instance, path, environmentVariableReader, true); + } + } } } diff --git a/test/NuGet.Core.Tests/NuGet.ProjectModel.Test/StringExtensionTests.cs b/test/NuGet.Core.Tests/NuGet.ProjectModel.Test/StringExtensionTests.cs new file mode 100644 index 00000000000..ffcbeb2014f --- /dev/null +++ b/test/NuGet.Core.Tests/NuGet.ProjectModel.Test/StringExtensionTests.cs @@ -0,0 +1,31 @@ +// Copyright (c) .NET Foundation. All rights reserved. +// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. + +using Xunit; + +namespace NuGet.ProjectModel.Test +{ + public class StringExtensionTests + { + [Theory] + [InlineData(null)] + [InlineData("")] + [InlineData(" ")] + public void SplitInTwo_WithNullOrEmptyString_ReturnStringAndNull(string s) + { + var result = s.SplitInTwo('/'); + Assert.Equal(s, result.firstPart); + Assert.Null(result.secondPart); + } + + [Theory] + [InlineData("part1/part2", "part1", "part2")] + [InlineData("part1/part2/NotPart3", "part1", "part2/NotPart3")] + public void SplitInTwo_WithSeperator_ReturnStringInTwoParts(string s, string expectedFirstPart, string expectedSecondPart) + { + var results = s.SplitInTwo('/'); + Assert.Equal(expectedFirstPart, results.firstPart); + Assert.Equal(expectedSecondPart, results.secondPart); + } + } +} diff --git a/test/NuGet.Core.Tests/NuGet.ProjectModel.Test/Utf8JsonStreamReaderTests.cs b/test/NuGet.Core.Tests/NuGet.ProjectModel.Test/Utf8JsonStreamReaderTests.cs index 3d2afa67010..e7c7963431e 100644 --- a/test/NuGet.Core.Tests/NuGet.ProjectModel.Test/Utf8JsonStreamReaderTests.cs +++ b/test/NuGet.Core.Tests/NuGet.ProjectModel.Test/Utf8JsonStreamReaderTests.cs @@ -44,6 +44,33 @@ public void Utf8JsonStreamReaderCtr_WhenBufferToSmall_Throws() }); } + + [Fact] + public void Utf8JsonStreamReaderCtr_WhenEmptyJson_Throws() + { + Assert.ThrowsAny(() => + { + var json = ""; + + using (var stream = new MemoryStream(Encoding.UTF8.GetBytes(json))) + using (var reader = new Utf8JsonStreamReader(stream)) + { + } + }); + } + + [Fact] + public void Utf8JsonStreamReaderCtr_WhenEmptySream_Throws() + { + Assert.ThrowsAny(() => + { + using (var stream = new MemoryStream(Array.Empty())) + using (var reader = new Utf8JsonStreamReader(stream)) + { + } + }); + } + [Fact] public void Utf8JsonStreamReaderCtr_WhenStreamStartsWithUtf8Bom_SkipThem() { @@ -82,7 +109,7 @@ public void Utf8JsonStreamReaderCtr_WhenReadingWithOverflow_FinalBlockFalse() } [Fact] - public void Read_WhenReadingMalfornedJsonString_Throws() + public void Read_WhenReadingMalformedJsonString_Throws() { var json = Encoding.UTF8.GetBytes("{\"a\":\"string}"); @@ -101,7 +128,7 @@ public void Read_WhenReadingMalfornedJsonString_Throws() } [Fact] - public void Read_WhenReadingMalfornedJson_Throws() + public void Read_WhenReadingMalformedJson_Throws() { var json = Encoding.UTF8.GetBytes("{\"a\":\"string\"}ohno"); Assert.ThrowsAny(() => @@ -179,6 +206,7 @@ public void Read_WhenReadingWithoutOverflow_Read() using (var stream = new MemoryStream(json)) using (var reader = new Utf8JsonStreamReader(stream)) { + Assert.True(reader.IsFinalBlock); Assert.Equal(JsonTokenType.StartObject, reader.TokenType); reader.Read(); Assert.Equal(JsonTokenType.PropertyName, reader.TokenType); @@ -233,7 +261,7 @@ public void Read_WhenReadingWithLargeToken_ResizeBuffer() } [Fact] - public void Read_WhenReadingWithLargeTokenReadPastFinal() + public void Read_WithLargeToken_WhenReadPastFinal_ReadReturnsFalse() { var json = Encoding.UTF8.GetBytes("{\"largeToken\":\"abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz\",\"smallToken\":\"abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz\"}"); var mock = SetupMockArrayBuffer(); @@ -769,6 +797,50 @@ public void ReadNextStringOrArrayOfStringsAsReadOnlyList_WhenValueIsArrayOfStrin } } + [Fact] + public void ReadObjectAsList_WithValidJson_ReturnsValue() + { + var json = "{ \"a\": { \"property1\": \"1\" },\"b\": { \"property1\": \"1\" }, \"c\": { \"property1\": \"1\" }}"; + var encodedBytes = Encoding.UTF8.GetBytes(json); + using (var stream = new MemoryStream(encodedBytes)) + using (var reader = new Utf8JsonStreamReader(stream)) + { + var results = reader.ReadObjectAsList(Utf8JsonReaderExtensions.LockFileItemConverter); + Assert.Equal(3, results.Count); + } + } + + [Theory] + [InlineData("{}")] + [InlineData("null")] + public void ReadObjectAsList_WithEmptyValues_ReturnsEmptyArray(string json) + { + var encodedBytes = Encoding.UTF8.GetBytes(json); + using (var stream = new MemoryStream(encodedBytes)) + using (var reader = new Utf8JsonStreamReader(stream)) + { + var results = reader.ReadObjectAsList(Utf8JsonReaderExtensions.LockFileItemConverter); + Assert.Equal(0, results.Count); + Assert.IsType(Array.Empty().GetType(), results); + } + } + + [Fact] + public void ReadObjectAsList_WithInvalidValue_ThrowsException() + { + var json = "\"a\": { \"property1\": \"1\" }"; + + var encodedBytes = Encoding.UTF8.GetBytes(json); + Assert.Throws(() => + { + using (var stream = new MemoryStream(encodedBytes)) + using (var reader = new Utf8JsonStreamReader(stream)) + { + reader.ReadObjectAsList(Utf8JsonReaderExtensions.LockFileItemConverter); + } + }); + } + [Fact] public void ReadStringArrayAsReadOnlyListFromArrayStart_WhenValuesAreConvertibleToString_ReturnsReadOnlyList() { diff --git a/test/NuGet.Tests.Apex/NuGet.Tests.Apex/Utility/CommonUtility.cs b/test/NuGet.Tests.Apex/NuGet.Tests.Apex/Utility/CommonUtility.cs index 9872e9ea643..32e88b4c9e9 100644 --- a/test/NuGet.Tests.Apex/NuGet.Tests.Apex/Utility/CommonUtility.cs +++ b/test/NuGet.Tests.Apex/NuGet.Tests.Apex/Utility/CommonUtility.cs @@ -396,7 +396,6 @@ private static LockFile GetAssetsFileWithRetry(string path) { var timeout = TimeSpan.FromSeconds(20); var timer = Stopwatch.StartNew(); - string content = null; do { @@ -405,9 +404,8 @@ private static LockFile GetAssetsFileWithRetry(string path) { try { - content = File.ReadAllText(path); var format = new LockFileFormat(); - return format.Parse(content, path); + return format.Read(path); } catch {