Skip to content

Commit

Permalink
feat: add environment option #104
Browse files Browse the repository at this point in the history
  • Loading branch information
ricardofslp committed Dec 2, 2023
1 parent 4a191d8 commit 147bbed
Show file tree
Hide file tree
Showing 4 changed files with 62 additions and 7 deletions.
23 changes: 17 additions & 6 deletions src/RerunCommand/RerunCommandConfiguration.cs
Original file line number Diff line number Diff line change
Expand Up @@ -28,8 +28,9 @@ public class RerunCommandConfiguration
public string Configuration { get; internal set; }

Check warning on line 28 in src/RerunCommand/RerunCommandConfiguration.cs

View workflow job for this annotation

GitHub Actions / 🛠️ Build and 🧪 Test

Non-nullable property 'Configuration' must contain a non-null value when exiting constructor. Consider declaring the property as nullable.
public LoggerVerbosity? Verbosity { get; internal set; }
public string Framework { get; internal set; }
public string pArguments { get; internal set; }
public string inlineRunSettings { get; internal set; }
public string PArguments { get; internal set; }
public string InlineRunSettings { get; internal set; }
public IEnumerable<string> EnvironmentVariables { get; internal set; }

#endregion Properties

Expand Down Expand Up @@ -169,6 +170,13 @@ public class RerunCommandConfiguration
IsRequired = false,
AllowMultipleArgumentsPerToken = true
};

private readonly Option<IEnumerable<string>> EnvironmentVariablesOption = new(new[] { "-e", "--environment"})
{
Description = "Sets the value of an environment variable.",
IsRequired = false,
AllowMultipleArgumentsPerToken = true
};

#endregion Options

Expand All @@ -194,6 +202,7 @@ public void Set(Command cmd)
cmd.Add(CollectorOption);
cmd.Add(MergeCoverageFormatOption);
cmd.Add(InlineRunSettingsOption);
cmd.Add(EnvironmentVariablesOption);
}

public void GetValues(InvocationContext context)
Expand All @@ -215,8 +224,9 @@ public void GetValues(InvocationContext context)
DeleteReportFiles = context.ParseResult.FindResultFor(DeleteReportFilesOption) is not null;
Collector = context.ParseResult.GetValueForOption(CollectorOption)!;
MergeCoverageFormat = context.ParseResult.GetValueForOption(MergeCoverageFormatOption);
pArguments = FetchPArgumentsFromParse(context.ParseResult);
inlineRunSettings = FetchInlineRunSettingsFromParse(context.ParseResult);
PArguments = FetchPArgumentsFromParse(context.ParseResult);
InlineRunSettings = FetchInlineRunSettingsFromParse(context.ParseResult);
EnvironmentVariables = context.ParseResult.GetValueForOption(EnvironmentVariablesOption)!;

//Store Original Values
OriginalFilter = Filter;
Expand All @@ -235,9 +245,10 @@ public string GetTestArgumentList(string resultsDirectory)
AddArguments(Framework, FrameworkOption),
AddArguments(Verbosity, VerbosityOption),
AddArguments(Collector, CollectorOption),
AddArguments(EnvironmentVariables, EnvironmentVariablesOption),
string.IsNullOrWhiteSpace(resultsDirectory) ? resultsDirectory : AddArguments(resultsDirectory, ResultsDirectoryOption),
GetPArguments(),
inlineRunSettings);
InlineRunSettings);

public string GetMergeCoverageArgumentList(string fileNames, string resultsDirectory)
=> string.Concat("merge ",
Expand Down Expand Up @@ -287,7 +298,7 @@ private string GetMergeExtension()
};

private string GetPArguments()
=> string.IsNullOrWhiteSpace(pArguments) ? pArguments : $" {pArguments}";
=> string.IsNullOrWhiteSpace(PArguments) ? PArguments : $" {PArguments}";

private string FetchPArgumentsFromParse(ParseResult parseResult)
=> string.Join(' ', parseResult.UnmatchedTokens.Where(p => p.StartsWith("/p:")));
Expand Down
2 changes: 1 addition & 1 deletion src/dotnet-test-rerun.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@
<RepositoryType>git</RepositoryType>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.Extensions.DependencyInjection" Version="8.0.0" />
<PackageReference Include="Microsoft.Extensions.DependencyInjection" Version="7.0.0" />
<PackageReference Include="Spectre.Console" Version="0.48.0" />
<PackageReference Include="System.CommandLine" Version="2.0.0-beta4.22272.1" />
<PackageReference Include="System.IO.Abstractions" Version="19.2.87" />
Expand Down
7 changes: 7 additions & 0 deletions src/global.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
{
"sdk": {
"version": "6.0.0",
"rollForward": "latestMajor",
"allowPrerelease": true
}
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
using System.CommandLine;
using System.CommandLine.Invocation;
using System.CommandLine.Parsing;
using System.Text;
using dotnet.test.rerun.Enums;
using dotnet.test.rerun.Logging;
using dotnet.test.rerun.RerunCommand;
Expand Down Expand Up @@ -254,5 +255,41 @@ public void RerunCommandConfiguration_GetArguments_GivenInlineRunSettings()
//Assert
args.Should().Be("test path --filter \"filter\" --settings \"settings\" --logger \"logger\" -c \"release\" -v \"Minimal\" --results-directory \"results-directory\" -- MSTest.DeploymentEnabled=false MSTest.MapInconclusiveToFailed=True");
}

[Fact]
public void RerunCommandConfiguration_GetArguments_WithOneEnvironmentValue()
{
//Arrange
_configuration.Set(Command);
var result = new Parser(Command).Parse("path --filter filter --settings settings --logger logger " +
"--results-directory results-directory --rerunMaxAttempts 4 --loglevel Debug " +
"--configuration release --verbosity minimal --environment var=test");
var context = new InvocationContext(result);
_configuration.GetValues(context);

//Act
var args = _configuration.GetTestArgumentList("results-directory");

//Assert
args.Should().Be("test path --filter \"filter\" --settings \"settings\" --logger \"logger\" -c \"release\" -v \"Minimal\" -e \"var=test\" --results-directory \"results-directory\"");
}

[Fact]
public void RerunCommandConfiguration_GetArguments_WithSeveralEnvironmentValues()
{
//Arrange
_configuration.Set(Command);
var result = new Parser(Command).Parse("path --filter filter --settings settings --logger logger " +
"--results-directory results-directory --rerunMaxAttempts 4 -e var2=test2 --loglevel Debug " +
"--configuration release --verbosity minimal -e var=test");
var context = new InvocationContext(result);
_configuration.GetValues(context);

//Act
var args = _configuration.GetTestArgumentList("results-directory");

//Assert
args.Should().Be("test path --filter \"filter\" --settings \"settings\" --logger \"logger\" -c \"release\" -v \"Minimal\" -e \"var2=test2\" -e \"var=test\" --results-directory \"results-directory\"");
}

}

0 comments on commit 147bbed

Please # to comment.