From 60971015648be901dff4300570936db5e0135014 Mon Sep 17 00:00:00 2001 From: Tom Longhurst <30480171+thomhurst@users.noreply.github.com> Date: Mon, 12 Aug 2024 15:32:19 +0100 Subject: [PATCH] dotnet format fix (#561) * dotnet format fix * Fix No_Matching_Placeholder_Positional_Is_Appended --- src/ModularPipelines.Build/ReleaseNotes.md | 2 +- .../Options/DotNetFormatOptions.cs | 4 +-- .../CommandOptionsObjectArgumentParser.cs | 5 ++-- .../CommandParserTests.cs | 20 +++++++++++--- .../Helpers/DotNetTests.cs | 26 +++++++++++++++++++ 5 files changed, 48 insertions(+), 9 deletions(-) diff --git a/src/ModularPipelines.Build/ReleaseNotes.md b/src/ModularPipelines.Build/ReleaseNotes.md index ec747fa47d..d94027036e 100644 --- a/src/ModularPipelines.Build/ReleaseNotes.md +++ b/src/ModularPipelines.Build/ReleaseNotes.md @@ -1 +1 @@ -null \ No newline at end of file +Fix running `dotnet format` via `context.DotNet().Format()` \ No newline at end of file diff --git a/src/ModularPipelines.DotNet/Options/DotNetFormatOptions.cs b/src/ModularPipelines.DotNet/Options/DotNetFormatOptions.cs index 7340d63aad..f0f73f630e 100644 --- a/src/ModularPipelines.DotNet/Options/DotNetFormatOptions.cs +++ b/src/ModularPipelines.DotNet/Options/DotNetFormatOptions.cs @@ -10,14 +10,14 @@ public DotNetFormatOptions( string projectSolution ) { - CommandParts = ["format", "[options]", "[]"]; + CommandParts = ["format", "[]"]; ProjectSolution = projectSolution; } public DotNetFormatOptions() { - CommandParts = ["format", "[options]", "[]"]; + CommandParts = ["format"]; } [PositionalArgument(PlaceholderName = "[]")] diff --git a/src/ModularPipelines/Helpers/CommandOptionsObjectArgumentParser.cs b/src/ModularPipelines/Helpers/CommandOptionsObjectArgumentParser.cs index 47c18c8343..0907b451ec 100644 --- a/src/ModularPipelines/Helpers/CommandOptionsObjectArgumentParser.cs +++ b/src/ModularPipelines/Helpers/CommandOptionsObjectArgumentParser.cs @@ -50,9 +50,10 @@ private static void AddPlaceholderArguments(List precedingArguments, obj var indexOfMatchingPrecedingArgumentPlaceholder = precedingArguments.FindIndex(x => x == placeholderName); - if (indexOfMatchingPrecedingArgumentPlaceholder < 0) + if (indexOfMatchingPrecedingArgumentPlaceholder < 0 && !string.IsNullOrEmpty(value)) { - throw new ArgumentException($"No matching placeholder found for property {positionalPlaceholderArgument.Name}"); + precedingArguments.Add(value); + continue; } if (string.IsNullOrWhiteSpace(value) && precedingArguments[indexOfMatchingPrecedingArgumentPlaceholder].StartsWith('<')) diff --git a/test/ModularPipelines.UnitTests/CommandParserTests.cs b/test/ModularPipelines.UnitTests/CommandParserTests.cs index 4552ac9f8e..b8e10bcabf 100644 --- a/test/ModularPipelines.UnitTests/CommandParserTests.cs +++ b/test/ModularPipelines.UnitTests/CommandParserTests.cs @@ -148,12 +148,14 @@ await Assert.That(() => GetResult(new PlaceholderToolOptions(package!, "MyProjec } [Test] - public async Task No_Matching_Placeholder_Positional_Throws() + public async Task No_Matching_Placeholder_Positional_Is_Appended() { - await Assert.That(() => GetResult(new PlaceholderToolOptions2("ThisPackage", "MyProject.csproj") + var result = await GetResult(new PlaceholderToolOptions3() { - Source = "nuget.org" - })).Throws.Exception().OfType(); + Project = "MyProject.csproj" + }); + + await Assert.That(result.CommandInput).Is.EqualTo("dotnet add MyProject.csproj"); } private async Task GetResult(CommandLineToolOptions options) @@ -218,4 +220,14 @@ private record PlaceholderToolOptions2(string Package, string Project) : Command [CommandSwitch("--source")] public string? Source { get; set; } } + + [CommandPrecedingArguments("add")] + private record PlaceholderToolOptions3() : CommandLineToolOptions("dotnet") + { + [PositionalArgument(PlaceholderName = "[]")] + public string? Project { get; set; } + + [CommandSwitch("--source")] + public string? Source { get; set; } + } } diff --git a/test/ModularPipelines.UnitTests/Helpers/DotNetTests.cs b/test/ModularPipelines.UnitTests/Helpers/DotNetTests.cs index 40aa655203..6e8a733cf2 100644 --- a/test/ModularPipelines.UnitTests/Helpers/DotNetTests.cs +++ b/test/ModularPipelines.UnitTests/Helpers/DotNetTests.cs @@ -21,6 +21,17 @@ private class DotNetVersionModule : Module }, token: cancellationToken); } } + + private class DotNetFormatModule : Module + { + protected override async Task ExecuteAsync(IPipelineContext context, CancellationToken cancellationToken) + { + return await context.DotNet().Format(new DotNetFormatOptions + { + ProjectSolution = context.Git().RootDirectory.FindFile(x => x.Name.Contains("TestsForTests")).AssertExists(), + }, token: cancellationToken); + } + } [Test] public async Task Has_Not_Errored() @@ -36,6 +47,21 @@ public async Task Has_Not_Errored() await Assert.That(moduleResult.Value).Is.Not.Null(); } } + + [Test] + public async Task Format_Has_Not_Errored() + { + var module = await RunModule(); + + var moduleResult = await module; + + await using (Assert.Multiple()) + { + await Assert.That(moduleResult.ModuleResultType).Is.EqualTo(ModuleResultType.Success); + await Assert.That(moduleResult.Exception).Is.Null(); + await Assert.That(moduleResult.Value).Is.Not.Null(); + } + } [Test] public async Task Standard_Output_Starts_With_Git_Version()