Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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