Skip to content

Commit a58abfd

Browse files
committed
Add nullability checks and update properties' mutability in tests
Nullability checks are added in several test cases for output-based assertions to prevent potential NullReferenceExceptions. Concurrently, the 'ExecutionResults' class is modified to handle null outputs, and the mutability of its 'ExitCode', 'Output', and 'Log' properties is updated using 'init'.
1 parent b52a90d commit a58abfd

File tree

7 files changed

+22
-38
lines changed

7 files changed

+22
-38
lines changed

src/GitVersion.App.Tests/ExecCmdLineArgumentTest.cs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ public void InvalidArgumentsExitCodeShouldNotBeZero()
1414
var result = GitVersionHelper.ExecuteIn(fixture.RepositoryPath, arguments: " /invalid-argument");
1515

1616
result.ExitCode.ShouldNotBe(0);
17+
result.Output.ShouldNotBeNull();
1718
result.Output.ShouldContain("Could not parse command line parameter '/invalid-argument'");
1819
}
1920

@@ -27,6 +28,7 @@ public void LogPathContainsForwardSlash()
2728
var result = GitVersionHelper.ExecuteIn(fixture.RepositoryPath, @" /l ""/tmp/path""", false);
2829

2930
result.ExitCode.ShouldBe(0);
31+
result.Output.ShouldNotBeNull();
3032
result.Output.ShouldContain(@"""MajorMinorPatch"": ""1.2.4""");
3133
}
3234

@@ -43,6 +45,7 @@ public void CheckBuildServerVerbosityConsole(string verbosityArg, string expecte
4345
var result = GitVersionHelper.ExecuteIn(fixture.RepositoryPath, $@" {verbosityArg} -output buildserver /l ""/tmp/path""", false);
4446

4547
result.ExitCode.ShouldBe(0);
48+
result.Output.ShouldNotBeNull();
4649
result.Output.ShouldContain(expectedOutput);
4750
}
4851

@@ -52,6 +55,7 @@ public void WorkingDirectoryWithoutGitFolderFailsWithInformativeMessage()
5255
var result = GitVersionHelper.ExecuteIn(SysEnv.SystemDirectory, null, false);
5356

5457
result.ExitCode.ShouldNotBe(0);
58+
result.Output.ShouldNotBeNull();
5559
result.Output.ShouldContain("Cannot find the .git directory");
5660
}
5761

@@ -63,6 +67,7 @@ public void WorkingDirectoryWithoutCommitsFailsWithInformativeMessage()
6367
var result = GitVersionHelper.ExecuteIn(fixture.RepositoryPath, null, false);
6468

6569
result.ExitCode.ShouldNotBe(0);
70+
result.Output.ShouldNotBeNull();
6671
result.Output.ShouldContain("No commits found on the current branch.");
6772
}
6873

src/GitVersion.App.Tests/Helpers/ExecutionResults.cs

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,28 @@
11
using GitVersion.Core.Tests;
2+
using GitVersion.Extensions;
23
using GitVersion.OutputVariables;
34

45
namespace GitVersion.App.Tests;
56

67
public class ExecutionResults
78
{
8-
public ExecutionResults(int exitCode, string output, string? logContents)
9+
public ExecutionResults(int exitCode, string? output, string? logContents = null)
910
{
1011
ExitCode = exitCode;
1112
Output = output;
1213
Log = logContents;
1314
}
1415

15-
public int ExitCode { get; }
16-
public string Output { get; }
17-
public string? Log { get; }
16+
public int ExitCode { get; init; }
17+
public string? Output { get; init; }
18+
public string? Log { get; init; }
1819

19-
public virtual GitVersionVariables OutputVariables
20+
public GitVersionVariables? OutputVariables
2021
{
2122
get
2223
{
24+
if (Output.IsNullOrWhiteSpace()) return null;
25+
2326
var jsonStartIndex = Output.IndexOf('{');
2427
var jsonEndIndex = Output.IndexOf('}');
2528
var json = Output.Substring(jsonStartIndex, jsonEndIndex - jsonStartIndex + 1);

src/GitVersion.App.Tests/Helpers/GitVersionHelper.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -91,7 +91,7 @@ private static ExecutionResults ExecuteIn(ArgumentBuilder arguments,
9191

9292
if (arguments.LogFile.IsNullOrWhiteSpace() || !File.Exists(arguments.LogFile))
9393
{
94-
return new ExecutionResults(exitCode, output.ToString(), null);
94+
return new(exitCode, output.ToString());
9595
}
9696

9797
var logContents = File.ReadAllText(arguments.LogFile);
@@ -102,6 +102,6 @@ private static ExecutionResults ExecuteIn(ArgumentBuilder arguments,
102102
Console.WriteLine();
103103
Console.WriteLine("-------------------------------------------------------");
104104

105-
return new ExecutionResults(exitCode, output.ToString(), logContents);
105+
return new(exitCode, output.ToString(), logContents);
106106
}
107107
}

src/GitVersion.App.Tests/Helpers/ProgramFixture.cs

Lines changed: 3 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,6 @@
1-
using GitVersion.Core.Tests;
21
using GitVersion.Core.Tests.Helpers;
32
using GitVersion.Extensions;
43
using GitVersion.Logging;
5-
using GitVersion.OutputVariables;
64
using Microsoft.Extensions.DependencyInjection;
75

86
namespace GitVersion.App.Tests;
@@ -49,13 +47,13 @@ public void WithEnv(params KeyValuePair<string, string>[] envs)
4947

5048
public void WithOverrides(Action<IServiceCollection> action) => Overrides.Add(action);
5149

52-
public Task<ProgramFixtureResult> Run(string arg)
50+
public Task<ExecutionResults> Run(string arg)
5351
{
5452
var args = arg.Split(new[] { ' ' }, StringSplitOptions.RemoveEmptyEntries).ToArray();
5553
return Run(args);
5654
}
5755

58-
public async Task<ProgramFixtureResult> Run(params string[] args)
56+
public async Task<ExecutionResults> Run(params string[] args)
5957
{
6058
// Create the application and override registrations.
6159
var program = new Program(builder => Overrides.ForEach(action => action(builder)));
@@ -66,32 +64,6 @@ public async Task<ProgramFixtureResult> Run(params string[] args)
6664
}
6765
await program.RunAsync(args);
6866

69-
return new ProgramFixtureResult
70-
{
71-
ExitCode = SysEnv.ExitCode,
72-
Output = this.output.Value,
73-
Log = this.logger.Value
74-
};
75-
}
76-
}
77-
78-
public class ProgramFixtureResult
79-
{
80-
public int ExitCode { get; set; }
81-
public string? Output { get; set; }
82-
public string Log { get; set; }
83-
84-
public GitVersionVariables? OutputVariables
85-
{
86-
get
87-
{
88-
if (Output.IsNullOrWhiteSpace()) return null;
89-
90-
var jsonStartIndex = Output.IndexOf('{');
91-
var jsonEndIndex = Output.IndexOf('}');
92-
var json = Output.Substring(jsonStartIndex, jsonEndIndex - jsonStartIndex + 1);
93-
94-
return json.ToGitVersionVariables();
95-
}
67+
return new(SysEnv.ExitCode, this.output.Value, this.logger.Value);
9668
}
9769
}

src/GitVersion.App.Tests/JsonOutputOnBuildServerTest.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ public void BeingOnBuildServerWithOutputJsonDoesNotFail()
3535

3636
result.ExitCode.ShouldBe(0);
3737
const string expectedVersion = "0.0.1-5";
38+
result.Output.ShouldNotBeNull();
3839
result.Output.ShouldContain($"##teamcity[buildNumber '{expectedVersion}']");
3940
result.OutputVariables.ShouldNotBeNull();
4041
result.OutputVariables.FullSemVer.ShouldBeEquivalentTo(expectedVersion);
@@ -54,6 +55,7 @@ public void BeingOnBuildServerWithOutputJsonAndOutputFileDoesNotFail(string outp
5455

5556
result.ExitCode.ShouldBe(0);
5657
const string expectedVersion = "0.0.1-5";
58+
result.Output.ShouldNotBeNull();
5759
result.Output.ShouldContain($"##teamcity[buildNumber '{expectedVersion}']");
5860
result.OutputVariables.ShouldNotBeNull();
5961
result.OutputVariables.FullSemVer.ShouldBeEquivalentTo(expectedVersion);

src/GitVersion.App.Tests/PullRequestInBuildAgentTest.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -178,6 +178,7 @@ private static async Task VerifyPullRequestVersionIsCalculatedProperly(string pu
178178
var result = await programFixture.Run();
179179

180180
result.ExitCode.ShouldBe(0);
181+
result.Output.ShouldNotBeNull();
181182
result.OutputVariables.ShouldNotBeNull();
182183
result.OutputVariables.FullSemVer.ShouldBe("1.0.4-PullRequest5.3");
183184

src/GitVersion.App.Tests/UpdateWixVersionFileTests.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,7 @@ public void WixVersionFileContentTest()
5151

5252
var gitVersionExecutionResults = GitVersionHelper.ExecuteIn(fixture.RepositoryPath, arguments: null);
5353
var vars = gitVersionExecutionResults.OutputVariables;
54+
vars.ShouldNotBeNull();
5455

5556
GitVersionHelper.ExecuteIn(fixture.RepositoryPath, arguments: " /updatewixversionfile");
5657

0 commit comments

Comments
 (0)