Skip to content

Commit 69f9e71

Browse files
committed
testable
1 parent 0af060f commit 69f9e71

3 files changed

Lines changed: 23 additions & 20 deletions

File tree

src/NuGet.Core/NuGet.Common/NuGetFeatureFlags.cs

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -11,18 +11,20 @@ public static class NuGetFeatureFlags
1111
internal const string UsesNSJDeserializationSwitchName = "NuGet.UsesNSJDeserialization";
1212
internal const string UsesNSJDeserializationEnvVar = "NUGET_USES_NSJ_DESERIALIZATION";
1313

14-
/// <summary>
15-
/// <see langword="true"/> to use Newtonsoft.Json (default); <see langword="false"/> to use System.Text.Json.
16-
/// Override via AppContext switch <c>NuGet.UsesNSJDeserialization</c> or env var <c>NUGET_USES_NSJ_DESERIALIZATION</c>.
17-
/// </summary>
14+
private static readonly Lazy<bool> _isNSJDeserializationEnabledByEnvironment =
15+
new Lazy<bool>(() => IsNSJDeserializationEnabledByEnvironment(EnvironmentVariableWrapper.Instance));
16+
17+
/// <summary>Feature switch for NSJ deserialization. Defaults to <see langword="true"/>.</summary>
1818
[FeatureSwitchDefinition(UsesNSJDeserializationSwitchName)]
19-
public static bool UsesNSJDeserialization { get; } = GetSwitch(EnvironmentVariableWrapper.Instance);
19+
public static bool NSJDeserializationFeatureSwitch { get; } =
20+
!AppContext.TryGetSwitch(UsesNSJDeserializationSwitchName, out bool value) || value;
2021

21-
internal static bool GetSwitch(IEnvironmentVariableReader env)
22+
/// <summary>Returns <see langword="false"/> when env var <c>NUGET_USES_NSJ_DESERIALIZATION</c> is <c>false</c>.</summary>
23+
public static bool IsNSJDeserializationEnabledByEnvironment(IEnvironmentVariableReader? env = null)
2224
{
23-
if (AppContext.TryGetSwitch(UsesNSJDeserializationSwitchName, out bool switchValue))
25+
if (env is null)
2426
{
25-
return switchValue;
27+
return _isNSJDeserializationEnabledByEnvironment.Value;
2628
}
2729

2830
string? envValue = env.GetEnvironmentVariable(UsesNSJDeserializationEnvVar);
Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
11
#nullable enable
22
NuGet.Common.NuGetFeatureFlags
3-
static NuGet.Common.NuGetFeatureFlags.UsesNSJDeserialization.get -> bool
3+
static NuGet.Common.NuGetFeatureFlags.IsNSJDeserializationEnabledByEnvironment(NuGet.Common.IEnvironmentVariableReader? env = null) -> bool
4+
static NuGet.Common.NuGetFeatureFlags.NSJDeserializationFeatureSwitch.get -> bool

test/NuGet.Core.Tests/NuGet.Common.Test/NuGetFeatureFlagsTests.cs

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -10,25 +10,27 @@ namespace NuGet.Common.Test
1010
public class NuGetFeatureFlagsTests
1111
{
1212
[Fact]
13-
public void GetSwitch_WhenEnvVarNotSet_ReturnsTrue()
13+
public void NSJDeserializationFeatureSwitch_Default_ReturnsTrue()
1414
{
15-
bool result = NuGetFeatureFlags.GetSwitch(TestEnvironmentVariableReader.EmptyInstance);
15+
Assert.True(NuGetFeatureFlags.NSJDeserializationFeatureSwitch);
16+
}
1617

17-
Assert.True(result);
18+
[Fact]
19+
public void IsNSJDeserializationEnabledByEnvironment_WhenEnvVarNotSet_ReturnsTrue()
20+
{
21+
Assert.True(NuGetFeatureFlags.IsNSJDeserializationEnabledByEnvironment(TestEnvironmentVariableReader.EmptyInstance));
1822
}
1923

2024
[Theory]
2125
[InlineData("false")]
2226
[InlineData("False")]
2327
[InlineData("FALSE")]
24-
public void GetSwitch_WhenEnvVarSetToFalse_ReturnsFalse(string value)
28+
public void IsNSJDeserializationEnabledByEnvironment_WhenEnvVarSetToFalse_ReturnsFalse(string value)
2529
{
2630
var env = new TestEnvironmentVariableReader(
2731
new Dictionary<string, string> { [NuGetFeatureFlags.UsesNSJDeserializationEnvVar] = value });
2832

29-
bool result = NuGetFeatureFlags.GetSwitch(env);
30-
31-
Assert.False(result);
33+
Assert.False(NuGetFeatureFlags.IsNSJDeserializationEnabledByEnvironment(env));
3234
}
3335

3436
[Theory]
@@ -37,14 +39,12 @@ public void GetSwitch_WhenEnvVarSetToFalse_ReturnsFalse(string value)
3739
[InlineData("0")]
3840
[InlineData("1")]
3941
[InlineData("anything")]
40-
public void GetSwitch_WhenEnvVarSetToTrueOrUnrecognized_ReturnsTrue(string value)
42+
public void IsNSJDeserializationEnabledByEnvironment_WhenEnvVarSetToTrueOrUnrecognized_ReturnsTrue(string value)
4143
{
4244
var env = new TestEnvironmentVariableReader(
4345
new Dictionary<string, string> { [NuGetFeatureFlags.UsesNSJDeserializationEnvVar] = value });
4446

45-
bool result = NuGetFeatureFlags.GetSwitch(env);
46-
47-
Assert.True(result);
47+
Assert.True(NuGetFeatureFlags.IsNSJDeserializationEnabledByEnvironment(env));
4848
}
4949
}
5050
}

0 commit comments

Comments
 (0)