Skip to content

Commit 7ad0f48

Browse files
Merge pull request #4123 from juwens/develop
GH-4122: Make multiple arguments available in Frosting
2 parents b764038 + 65a9d71 commit 7ad0f48

File tree

6 files changed

+69
-6
lines changed

6 files changed

+69
-6
lines changed

src/Cake.Frosting.Tests/CakeHostTests.cs

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
using Microsoft.Extensions.DependencyInjection;
1111
using NSubstitute;
1212
using Xunit;
13+
using Xunit.Sdk;
1314

1415
namespace Cake.Frosting.Tests
1516
{
@@ -330,5 +331,33 @@ public void Should_pass_target_within_cakeContext_arguments()
330331
.Received(1)
331332
.ExecuteAsync(Arg.Any<CakeTask>(), Arg.Is<ICakeContext>(cc => cc.Arguments.HasArgument("target") && cc.Arguments.GetArgument("target").Equals(nameof(DummyTask))));
332333
}
334+
335+
[Theory]
336+
[InlineData(nameof(DummyTask), nameof(DummyTask2), nameof(DummyTask3))]
337+
[InlineData(nameof(DummyTask), nameof(DummyTask3), nameof(DummyTask2))]
338+
[InlineData(nameof(DummyTask2), nameof(DummyTask3), nameof(DummyTask))]
339+
[InlineData(nameof(DummyTask2), nameof(DummyTask), nameof(DummyTask3))]
340+
[InlineData(nameof(DummyTask3), nameof(DummyTask2), nameof(DummyTask))]
341+
[InlineData(nameof(DummyTask3), nameof(DummyTask), nameof(DummyTask2))]
342+
public void Should_Execute_Multiple_Targets_In_Correct_Order(string task0, string task1, string task2)
343+
{
344+
// Given
345+
var fixture = new CakeHostFixture();
346+
fixture.RegisterTask<DummyTask>();
347+
fixture.RegisterTask<DummyTask2>();
348+
fixture.RegisterTask<DummyTask3>();
349+
fixture.Strategy = Substitute.For<IExecutionStrategy>();
350+
351+
// When
352+
fixture.Run("--target", task0, "--target", task1, "--target", task2);
353+
354+
// Then
355+
Received.InOrder(() =>
356+
{
357+
fixture.Strategy.ExecuteAsync(Arg.Is<CakeTask>(t => t.Name == task0), Arg.Any<ICakeContext>());
358+
fixture.Strategy.ExecuteAsync(Arg.Is<CakeTask>(t => t.Name == task1), Arg.Any<ICakeContext>());
359+
fixture.Strategy.ExecuteAsync(Arg.Is<CakeTask>(t => t.Name == task2), Arg.Any<ICakeContext>());
360+
});
361+
}
333362
}
334363
}
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
// Licensed to the .NET Foundation under one or more agreements.
2+
// The .NET Foundation licenses this file to you under the MIT license.
3+
// See the LICENSE file in the project root for more information.
4+
5+
using Cake.Core;
6+
7+
namespace Cake.Frosting.Tests
8+
{
9+
public sealed class DummyTask2 : FrostingTask<ICakeContext>
10+
{
11+
public override void Run(ICakeContext context)
12+
{
13+
}
14+
}
15+
}
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
// Licensed to the .NET Foundation under one or more agreements.
2+
// The .NET Foundation licenses this file to you under the MIT license.
3+
// See the LICENSE file in the project root for more information.
4+
5+
using Cake.Core;
6+
7+
namespace Cake.Frosting.Tests
8+
{
9+
public sealed class DummyTask3 : FrostingTask<ICakeContext>
10+
{
11+
public override void Run(ICakeContext context)
12+
{
13+
}
14+
}
15+
}

src/Cake.Frosting/Internal/Commands/DefaultCommand.cs

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,7 @@ public override int Execute(CommandContext context, DefaultCommandSettings setti
6868
runner.Settings.UseExclusiveTarget();
6969
}
7070

71-
runner.Run(settings.Target);
71+
runner.Run(settings.Targets);
7272
}
7373
catch (Exception ex)
7474
{
@@ -98,7 +98,11 @@ private static CakeArguments CreateCakeArguments(IRemainingArguments remainingAr
9898
{
9999
arguments[targetArgumentName] = new List<string>();
100100
}
101-
arguments[targetArgumentName].Add(settings.Target);
101+
102+
foreach (var target in settings.Targets)
103+
{
104+
arguments[targetArgumentName].Add(target);
105+
}
102106

103107
var argumentLookUp = arguments.SelectMany(a => a.Value, Tuple.Create).ToLookup(a => a.Item1.Key, a => a.Item2);
104108
return new CakeArguments(argumentLookUp);

src/Cake.Frosting/Internal/Commands/DefaultCommandSettings.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ internal sealed class DefaultCommandSettings : CommandSettings
1515
[CommandOption("--target|-t <TARGET>")]
1616
[DefaultValue("Default")]
1717
[Description("Target task to invoke.")]
18-
public string Target { get; set; }
18+
public string[] Targets { get; set; }
1919

2020
[CommandOption("--working|-w <PATH>")]
2121
[TypeConverter(typeof(Cli.DirectoryPathConverter))]

src/Cake.Frosting/Internal/FrostingEngine.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ namespace Cake.Frosting.Internal
1313
internal interface IFrostingEngine
1414
{
1515
ExecutionSettings Settings { get; }
16-
CakeReport Run(string target);
16+
CakeReport Run(IEnumerable<string> targets);
1717
}
1818

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

54-
public CakeReport Run(string target)
54+
public CakeReport Run(IEnumerable<string> targets)
5555
{
5656
ConfigureTasks();
5757
ConfigureLifetime();
5858
ConfigureTaskLifetime();
5959

60-
return _host.RunTarget(target);
60+
return _host.RunTargets(targets);
6161
}
6262

6363
private void ConfigureTaskLifetime()

0 commit comments

Comments
 (0)