Skip to content

Commit

Permalink
Merge pull request #4123 from juwens/develop
Browse files Browse the repository at this point in the history
GH-4122: Make multiple arguments available in Frosting
  • Loading branch information
augustoproiete committed Apr 2, 2023
2 parents b764038 + 65a9d71 commit 7ad0f48
Show file tree
Hide file tree
Showing 6 changed files with 69 additions and 6 deletions.
29 changes: 29 additions & 0 deletions src/Cake.Frosting.Tests/CakeHostTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
using Microsoft.Extensions.DependencyInjection;
using NSubstitute;
using Xunit;
using Xunit.Sdk;

namespace Cake.Frosting.Tests
{
Expand Down Expand Up @@ -330,5 +331,33 @@ public void Should_pass_target_within_cakeContext_arguments()
.Received(1)
.ExecuteAsync(Arg.Any<CakeTask>(), Arg.Is<ICakeContext>(cc => cc.Arguments.HasArgument("target") && cc.Arguments.GetArgument("target").Equals(nameof(DummyTask))));
}

[Theory]
[InlineData(nameof(DummyTask), nameof(DummyTask2), nameof(DummyTask3))]
[InlineData(nameof(DummyTask), nameof(DummyTask3), nameof(DummyTask2))]
[InlineData(nameof(DummyTask2), nameof(DummyTask3), nameof(DummyTask))]
[InlineData(nameof(DummyTask2), nameof(DummyTask), nameof(DummyTask3))]
[InlineData(nameof(DummyTask3), nameof(DummyTask2), nameof(DummyTask))]
[InlineData(nameof(DummyTask3), nameof(DummyTask), nameof(DummyTask2))]
public void Should_Execute_Multiple_Targets_In_Correct_Order(string task0, string task1, string task2)
{
// Given
var fixture = new CakeHostFixture();
fixture.RegisterTask<DummyTask>();
fixture.RegisterTask<DummyTask2>();
fixture.RegisterTask<DummyTask3>();
fixture.Strategy = Substitute.For<IExecutionStrategy>();

// When
fixture.Run("--target", task0, "--target", task1, "--target", task2);

// Then
Received.InOrder(() =>
{
fixture.Strategy.ExecuteAsync(Arg.Is<CakeTask>(t => t.Name == task0), Arg.Any<ICakeContext>());
fixture.Strategy.ExecuteAsync(Arg.Is<CakeTask>(t => t.Name == task1), Arg.Any<ICakeContext>());
fixture.Strategy.ExecuteAsync(Arg.Is<CakeTask>(t => t.Name == task2), Arg.Any<ICakeContext>());
});
}
}
}
15 changes: 15 additions & 0 deletions src/Cake.Frosting.Tests/Tasks/DummyTask2.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
// See the LICENSE file in the project root for more information.

using Cake.Core;

namespace Cake.Frosting.Tests
{
public sealed class DummyTask2 : FrostingTask<ICakeContext>
{
public override void Run(ICakeContext context)
{
}
}
}
15 changes: 15 additions & 0 deletions src/Cake.Frosting.Tests/Tasks/DummyTask3.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
// See the LICENSE file in the project root for more information.

using Cake.Core;

namespace Cake.Frosting.Tests
{
public sealed class DummyTask3 : FrostingTask<ICakeContext>
{
public override void Run(ICakeContext context)
{
}
}
}
8 changes: 6 additions & 2 deletions src/Cake.Frosting/Internal/Commands/DefaultCommand.cs
Original file line number Diff line number Diff line change
Expand Up @@ -68,7 +68,7 @@ public override int Execute(CommandContext context, DefaultCommandSettings setti
runner.Settings.UseExclusiveTarget();
}

runner.Run(settings.Target);
runner.Run(settings.Targets);
}
catch (Exception ex)
{
Expand Down Expand Up @@ -98,7 +98,11 @@ private static CakeArguments CreateCakeArguments(IRemainingArguments remainingAr
{
arguments[targetArgumentName] = new List<string>();
}
arguments[targetArgumentName].Add(settings.Target);

foreach (var target in settings.Targets)
{
arguments[targetArgumentName].Add(target);
}

var argumentLookUp = arguments.SelectMany(a => a.Value, Tuple.Create).ToLookup(a => a.Item1.Key, a => a.Item2);
return new CakeArguments(argumentLookUp);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ internal sealed class DefaultCommandSettings : CommandSettings
[CommandOption("--target|-t <TARGET>")]
[DefaultValue("Default")]
[Description("Target task to invoke.")]
public string Target { get; set; }
public string[] Targets { get; set; }

[CommandOption("--working|-w <PATH>")]
[TypeConverter(typeof(Cli.DirectoryPathConverter))]
Expand Down
6 changes: 3 additions & 3 deletions src/Cake.Frosting/Internal/FrostingEngine.cs
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ namespace Cake.Frosting.Internal
internal interface IFrostingEngine
{
ExecutionSettings Settings { get; }
CakeReport Run(string target);
CakeReport Run(IEnumerable<string> targets);
}

internal abstract class FrostingEngine<THost> : IFrostingEngine
Expand Down Expand Up @@ -51,13 +51,13 @@ protected FrostingEngine(
_tasks = new List<IFrostingTask>(tasks ?? Array.Empty<IFrostingTask>());
}

public CakeReport Run(string target)
public CakeReport Run(IEnumerable<string> targets)
{
ConfigureTasks();
ConfigureLifetime();
ConfigureTaskLifetime();

return _host.RunTarget(target);
return _host.RunTargets(targets);
}

private void ConfigureTaskLifetime()
Expand Down

0 comments on commit 7ad0f48

Please sign in to comment.