Skip to content

Commit

Permalink
Fix the bug "IsDependeeOf is not working"
Browse files Browse the repository at this point in the history
- Fix the `FrostingEngine.ConfigureTasks()`
- Add a `.GetTaskName()` helper for `IReverseTaskDependency`
- Add unit test for `IsDependeeOf`
- Add `DependeeTask` to `Example` project
  • Loading branch information
VSerykh authored and dev-experience committed Feb 2, 2021
1 parent ba21d16 commit b4b1499
Show file tree
Hide file tree
Showing 5 changed files with 50 additions and 1 deletion.
10 changes: 10 additions & 0 deletions src/Cake.Frosting.Example/Program.cs
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,16 @@ public override void Run(BuildContext context)
}
}

[TaskName("Dependee")]
[IsDependeeOf(typeof(WorldTask))]
public sealed class DependeeTask : FrostingTask<BuildContext>
{
public override void Run(BuildContext context)
{
context.Log.Information("Dependee of World");
}
}

[TaskName("World")]
[IsDependentOn(typeof(HelloTask))]
public sealed class WorldTask : AsyncFrostingTask<BuildContext>
Expand Down
20 changes: 20 additions & 0 deletions src/Cake.Frosting.Tests/CakeHostTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -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<CleanTask>();
fixture.RegisterTask<DependeeTask>();
fixture.Strategy = Substitute.For<IExecutionStrategy>();

// When
fixture.Run("--target", nameof(CleanTask));

// Then
Received.InOrder(() =>
{
fixture.Strategy.ExecuteAsync(Arg.Is<CakeTask>(t => t.Name == nameof(DependeeTask)), Arg.Any<ICakeContext>());
fixture.Strategy.ExecuteAsync(Arg.Is<CakeTask>(t => t.Name == nameof(CleanTask)), Arg.Any<ICakeContext>());
});
}

[Fact]
public void Should_Execute_Tasks_In_Correct_Order()
{
Expand Down
9 changes: 9 additions & 0 deletions src/Cake.Frosting.Tests/Tasks/DependeeTask.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
using Cake.Core;

namespace Cake.Frosting.Tests
{
[IsDependeeOf(typeof(CleanTask))]
public sealed class DependeeTask : FrostingTask<ICakeContext>
{
}
}
10 changes: 10 additions & 0 deletions src/Cake.Frosting/Internal/Extensions/TaskNameHelper.cs
Original file line number Diff line number Diff line change
Expand Up @@ -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();
}
}
}
2 changes: 1 addition & 1 deletion src/Cake.Frosting/Internal/FrostingEngine.cs
Original file line number Diff line number Diff line change
Expand Up @@ -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.");
Expand Down

0 comments on commit b4b1499

Please sign in to comment.