Skip to content

Commit

Permalink
Merge pull request #667 from adamralph/fix-nulls-2.5
Browse files Browse the repository at this point in the history
fix null usage
  • Loading branch information
adamralph authored Feb 1, 2022
2 parents 9cc5f9e + 0a1041c commit e05f554
Show file tree
Hide file tree
Showing 11 changed files with 242 additions and 92 deletions.
5 changes: 3 additions & 2 deletions MinVer.Lib/MajorMinor.cs
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
using System;
using System.Diagnostics.CodeAnalysis;

namespace MinVer.Lib
{
Expand Down Expand Up @@ -30,9 +31,9 @@ public MajorMinor(int major, int minor)

public static string ValidValues => "1.0, 1.1, 2.0, etc.";

public static bool TryParse(string value, out MajorMinor majorMinor)
public static bool TryParse(string value, [NotNullWhen(returnValue: true)] out MajorMinor? majorMinor)
{
majorMinor = Zero;
majorMinor = null;

if (string.IsNullOrWhiteSpace(value))
{
Expand Down
6 changes: 3 additions & 3 deletions MinVer.Lib/Version.cs
Original file line number Diff line number Diff line change
Expand Up @@ -101,7 +101,7 @@ public int CompareTo(Version? other)

public Version Satisfying(MajorMinor minMajorMinor, string defaultPreReleasePhase)
{
minMajorMinor ??= MajorMinor.Zero;
minMajorMinor = minMajorMinor ?? throw new ArgumentNullException(nameof(minMajorMinor));

return minMajorMinor.Major < this.major || (minMajorMinor.Major == this.major && minMajorMinor.Minor <= this.minor)
? this
Expand All @@ -127,8 +127,8 @@ public Version AddBuildMetadata(string buildMetadata)

public static bool TryParse(string text, [NotNullWhen(returnValue: true)] out Version? version, string prefix = "")
{
text ??= "";
prefix ??= "";
text = text ?? throw new ArgumentNullException(nameof(text));
prefix = prefix ?? throw new ArgumentNullException(nameof(prefix));

version = null;

Expand Down
2 changes: 1 addition & 1 deletion MinVer.Lib/Versioner.cs
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,7 @@ private static Version GetVersion(string workDir, string tagPrefix, VersionPart
.OrderBy(candidate => candidate.Version)
.ThenByDescending(candidate => candidate.Index).ToList();

var tagWidth = log.IsDebugEnabled ? orderedCandidates.Max(candidate => candidate.Tag?.Length ?? 2) : 0;
var tagWidth = log.IsDebugEnabled ? orderedCandidates.Max(candidate => candidate.Tag.Length) : 0;
var versionWidth = log.IsDebugEnabled ? orderedCandidates.Max(candidate => candidate.Version.ToString().Length) : 0;
var heightWidth = log.IsDebugEnabled ? orderedCandidates.Max(candidate => candidate.Height).ToString(CultureInfo.CurrentCulture).Length : 0;

Expand Down
5 changes: 3 additions & 2 deletions MinVer/VerbosityMap.cs
Original file line number Diff line number Diff line change
@@ -1,11 +1,12 @@
using System;
using System.Collections.Generic;
using System.Diagnostics.CodeAnalysis;

namespace MinVer
{
internal static class VerbosityMap
{
private static readonly Dictionary<string, Verbosity> map = new Dictionary<string, Verbosity>(StringComparer.OrdinalIgnoreCase);
private static readonly Dictionary<string, Verbosity?> map = new Dictionary<string, Verbosity?>(StringComparer.OrdinalIgnoreCase);

static VerbosityMap()
{
Expand All @@ -26,6 +27,6 @@ static void Add(Verbosity verbosity, int shortLength)
public static string ValidValues => "q[uiet], m[inimal] (default), n[ormal], d[etailed], or diag[nostic] (case insensitive)";

// spell-checker:enable
public static bool TryMap(string value, out Verbosity verbosity) => map.TryGetValue(value, out verbosity);
public static bool TryMap(string value, [NotNullWhen(returnValue: true)] out Verbosity? verbosity) => map.TryGetValue(value, out verbosity);
}
}
4 changes: 2 additions & 2 deletions MinVerTests.Infra/MinVerCli.cs
Original file line number Diff line number Diff line change
Expand Up @@ -7,12 +7,12 @@ namespace MinVerTests.Infra
{
public static class MinVerCli
{
public static async Task<Result> ReadAsync(string workingDirectory, string configuration = Configuration.Current, params (string, string)[] envVars)
public static async Task<Result> ReadAsync(string workingDirectory, string configuration = Configuration.Current, string args = "", params (string, string)[] envVars)
{
var environmentVariables = envVars.ToDictionary(envVar => envVar.Item1, envVar => envVar.Item2, StringComparer.OrdinalIgnoreCase);
_ = environmentVariables.TryAdd("MinVerVerbosity".ToAltCase(), "trace");

return await CommandEx.ReadLoggedAsync("dotnet", $"exec {GetPath(configuration)}", workingDirectory, environmentVariables).ConfigureAwait(false);
return await CommandEx.ReadLoggedAsync("dotnet", $"exec {GetPath(configuration)} {args}", workingDirectory, environmentVariables).ConfigureAwait(false);
}

public static string GetPath(string configuration) =>
Expand Down
2 changes: 1 addition & 1 deletion MinVerTests.Infra/Sdk.cs
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ public static class Sdk

public static async Task CreateSolution(string path, string[] projectNames, string configuration = Configuration.Current)
{
projectNames ??= Array.Empty<string>();
projectNames = projectNames ?? throw new ArgumentNullException(nameof(projectNames));

FileSystem.EnsureEmptyDirectory(path);

Expand Down
148 changes: 148 additions & 0 deletions MinVerTests.Packages/OptionMasking.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,148 @@
using System;
using System.Reflection;
using System.Threading.Tasks;
using MinVerTests.Infra;
using Xunit;

namespace MinVerTests.Packages
{
public static class OptionMasking
{
[Theory]
[InlineData("patch")]
public static async Task AutoIncrementBackToDefault(string value)
{
// arrange
var path = MethodBase.GetCurrentMethod().GetTestDirectory();
FileSystem.EnsureEmptyDirectory(path);

await Git.Init(path);
await Git.Commit(path);
await Git.Tag(path, "2.3.4");
await Git.Commit(path);

var envVars = ("MinVerAutoIncrement".ToAltCase(), "minor");
var args = $"--auto-increment {value}";

var expected = Package.WithVersion(2, 3, 5, new[] { "alpha", "0" }, 1);

// act
var cli = await MinVerCli.ReadAsync(path, args: args, envVars: envVars);

// assert
Assert.Equal(expected.Version, cli.StandardOutput.Trim());
}

[Theory]
[InlineData("\"\"")]

public static async Task BuildMetadataBackToDefault(string value)
{
// arrange
var path = MethodBase.GetCurrentMethod().GetTestDirectory();
FileSystem.EnsureEmptyDirectory(path);

var envVars = ("MinVerBuildMetadata", "build.123");
var args = $"--build-metadata {value}";

var expected = Package.WithVersion(0, 0, 0, new[] { "alpha", "0" }, 0);

// act
var cli = await MinVerCli.ReadAsync(path, args: args, envVars: envVars);

// assert
Assert.Equal(expected.Version, cli.StandardOutput.Trim());
}

[Theory]
[InlineData("alpha")]
public static async Task DefaultPreReleasePhaseBackToDefault(string value)
{
// arrange
var path = MethodBase.GetCurrentMethod().GetTestDirectory();
FileSystem.EnsureEmptyDirectory(path);

await Git.Init(path);
await Git.Commit(path);
await Git.Tag(path, "2.3.4");
await Git.Commit(path);

var envVars = ("MinVerDefaultPreReleasePhase".ToAltCase(), "preview");
var args = $"--default-pre-release-phase {value}";

var expected = Package.WithVersion(2, 3, 5, new[] { "alpha", "0" }, 1);

// act
var cli = await MinVerCli.ReadAsync(path, args: args, envVars: envVars);

// assert
Assert.Equal(expected.Version, cli.StandardOutput.Trim());
}

[Theory]
[InlineData("0.0")]
public static async Task MinimumMajorMinorBackToDefault(string value)
{
// arrange
var path = MethodBase.GetCurrentMethod().GetTestDirectory();
FileSystem.EnsureEmptyDirectory(path);

await Git.Init(path);
await Git.Commit(path);
await Git.Tag(path, "2.3.4");

var envVars = ("MinVerMinimumMajorMinor".ToAltCase(), "3.0");
var args = $"--minimum-major-minor {value}";

var expected = Package.WithVersion(2, 3, 4);

// act
var cli = await MinVerCli.ReadAsync(path, args: args, envVars: envVars);

// assert
Assert.Equal(expected.Version, cli.StandardOutput.Trim());
}

[Theory]
[InlineData("\"\"")]
public static async Task TagPrefixBackToDefault(string value)
{
// arrange
var path = MethodBase.GetCurrentMethod().GetTestDirectory();
FileSystem.EnsureEmptyDirectory(path);

await Git.Init(path);
await Git.Commit(path);
await Git.Tag(path, "2.3.4-alpha.5");

var envVars = ("MinVerTagPrefix", "v.");
var args = $"--tag-prefix {value}";

var expected = Package.WithVersion(2, 3, 4, new[] { "alpha", "5" });

// act
var cli = await MinVerCli.ReadAsync(path, args: args, envVars: envVars);

// assert
Assert.Equal(expected.Version, cli.StandardOutput.Trim());
}

[Theory]
[InlineData("info")]
public static async Task VerbosityBackToDefault(string value)
{
// arrange
var path = MethodBase.GetCurrentMethod().GetTestDirectory();
FileSystem.EnsureEmptyDirectory(path);

var envVars = ("MinVerVerbosity", "error");
var args = $"--verbosity {value}";

// act
var cli = await MinVerCli.ReadAsync(path, args: args, envVars: envVars);

// assert
Assert.Contains("MinVer:", cli.StandardError, StringComparison.Ordinal);
}
}
}
2 changes: 1 addition & 1 deletion minver-cli/Logger.cs
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ internal class Logger : ILogger

public static void ErrorInvalidEnvVar(string name, string value, string validValueString)
{
if (validValueString == null)
if (validValueString.Length == 0)
{
Error($"Invalid environment variable '{name}' '{value}'.");
}
Expand Down
Loading

0 comments on commit e05f554

Please sign in to comment.