From b4b14991ceb4c31d9dda7b45ecb56c13456197d1 Mon Sep 17 00:00:00 2001 From: Vladimir Serykh Date: Tue, 2 Feb 2021 03:21:06 +0100 Subject: [PATCH] Fix the bug "IsDependeeOf is not working" - Fix the `FrostingEngine.ConfigureTasks()` - Add a `.GetTaskName()` helper for `IReverseTaskDependency` - Add unit test for `IsDependeeOf` - Add `DependeeTask` to `Example` project --- src/Cake.Frosting.Example/Program.cs | 10 ++++++++++ src/Cake.Frosting.Tests/CakeHostTests.cs | 20 +++++++++++++++++++ src/Cake.Frosting.Tests/Tasks/DependeeTask.cs | 9 +++++++++ .../Internal/Extensions/TaskNameHelper.cs | 10 ++++++++++ src/Cake.Frosting/Internal/FrostingEngine.cs | 2 +- 5 files changed, 50 insertions(+), 1 deletion(-) create mode 100644 src/Cake.Frosting.Tests/Tasks/DependeeTask.cs diff --git a/src/Cake.Frosting.Example/Program.cs b/src/Cake.Frosting.Example/Program.cs index 0331c75490..2c3b2b5a4d 100644 --- a/src/Cake.Frosting.Example/Program.cs +++ b/src/Cake.Frosting.Example/Program.cs @@ -37,6 +37,16 @@ public override void Run(BuildContext context) } } +[TaskName("Dependee")] +[IsDependeeOf(typeof(WorldTask))] +public sealed class DependeeTask : FrostingTask +{ + public override void Run(BuildContext context) + { + context.Log.Information("Dependee of World"); + } +} + [TaskName("World")] [IsDependentOn(typeof(HelloTask))] public sealed class WorldTask : AsyncFrostingTask diff --git a/src/Cake.Frosting.Tests/CakeHostTests.cs b/src/Cake.Frosting.Tests/CakeHostTests.cs index 8fb0d43772..9eae470eaf 100644 --- a/src/Cake.Frosting.Tests/CakeHostTests.cs +++ b/src/Cake.Frosting.Tests/CakeHostTests.cs @@ -165,6 +165,26 @@ public void Should_Abort_Build_If_Task_That_Is_Not_ContinueOnError_Throws() Assert.NotEqual(0, result); } + [Fact] + public void Should_Execute_Dependee_Task() + { + // Given + var fixture = new CakeHostFixture(); + fixture.RegisterTask(); + fixture.RegisterTask(); + fixture.Strategy = Substitute.For(); + + // When + fixture.Run("--target", nameof(CleanTask)); + + // Then + Received.InOrder(() => + { + fixture.Strategy.ExecuteAsync(Arg.Is(t => t.Name == nameof(DependeeTask)), Arg.Any()); + fixture.Strategy.ExecuteAsync(Arg.Is(t => t.Name == nameof(CleanTask)), Arg.Any()); + }); + } + [Fact] public void Should_Execute_Tasks_In_Correct_Order() { diff --git a/src/Cake.Frosting.Tests/Tasks/DependeeTask.cs b/src/Cake.Frosting.Tests/Tasks/DependeeTask.cs new file mode 100644 index 0000000000..50fe816acf --- /dev/null +++ b/src/Cake.Frosting.Tests/Tasks/DependeeTask.cs @@ -0,0 +1,9 @@ +using Cake.Core; + +namespace Cake.Frosting.Tests +{ + [IsDependeeOf(typeof(CleanTask))] + public sealed class DependeeTask : FrostingTask + { + } +} \ No newline at end of file diff --git a/src/Cake.Frosting/Internal/Extensions/TaskNameHelper.cs b/src/Cake.Frosting/Internal/Extensions/TaskNameHelper.cs index f6bd6c9fb0..41dcfcc6be 100644 --- a/src/Cake.Frosting/Internal/Extensions/TaskNameHelper.cs +++ b/src/Cake.Frosting/Internal/Extensions/TaskNameHelper.cs @@ -17,5 +17,15 @@ public static string GetTaskName(this ITaskDependency dependency) return dependency.Task.GetTaskName(); } + + public static string GetTaskName(this IReverseTaskDependency dependency) + { + if (dependency is null) + { + throw new ArgumentNullException(nameof(dependency)); + } + + return dependency.Task.GetTaskName(); + } } } diff --git a/src/Cake.Frosting/Internal/FrostingEngine.cs b/src/Cake.Frosting/Internal/FrostingEngine.cs index a03336dcc5..df3fe760ab 100644 --- a/src/Cake.Frosting/Internal/FrostingEngine.cs +++ b/src/Cake.Frosting/Internal/FrostingEngine.cs @@ -164,7 +164,7 @@ private void ConfigureTasks() // Add reverse dependencies foreach (var dependee in task.GetReverseDependencies()) { - var dependeeName = dependee.GetType().GetTaskName(); + var dependeeName = dependee.GetTaskName(); if (!typeof(IFrostingTask).IsAssignableFrom(dependee.Task)) { throw new FrostingException($"The reverse dependency '{dependeeName}' is not a valid task.");