public void Should_Log_Teardown_Exception_If_Both_Setup_And_Teardown_Actions_Throw() { // Given var fixture = new CakeEngineFixture(); var engine = fixture.CreateEngine(); engine.RegisterSetupAction(() => { throw new InvalidOperationException("Setup"); }); engine.RegisterTeardownAction(() => { throw new InvalidOperationException("Teardown"); }); engine.RegisterTask("A").Does(() => { }); // When Record.Exception(() => engine.RunTarget(fixture.Context, fixture.ExecutionStrategy, "A")); // Then Assert.True(fixture.Log.Entries.Any(x => x.Message.StartsWith("Teardown error:"))); }
public void Should_Swallow_Exceptions_Thrown_In_Error_Reporter() { // Given var fixture = new CakeEngineFixture(); var engine = fixture.CreateEngine(); engine.RegisterTask("A") .Does(() => { throw new InvalidOperationException("Task"); }) .ReportError(ex => { throw new InvalidOperationException("Report"); }); // When var result = Record.Exception(() => engine.RunTarget(fixture.Context, fixture.ExecutionStrategy, "A")); // Then Assert.Equal("Task", result.Message); }
public void Should_Run_Setup_Before_First_Task() { // Given var result = new List <string>(); var fixture = new CakeEngineFixture(); var engine = fixture.CreateEngine(); engine.RegisterSetupAction(() => result.Add("Setup")); engine.RegisterTask("A").Does(() => result.Add("A")); // When engine.RunTarget(fixture.Context, fixture.ExecutionStrategy, "A"); // Then Assert.Equal(2, result.Count); Assert.Equal("Setup", result[0]); }
public void Should_Throw_Exception_Occuring_In_Teardown_If_No_Previous_Exception_Was_Thrown() { // Given var fixture = new CakeEngineFixture(); var engine = fixture.CreateEngine(); var expected = new InvalidOperationException("Teardown"); engine.RegisterTeardownAction(() => { throw expected; }); engine.RegisterTask("A").Does(() => { }); // When var result = Record.Exception(() => engine.RunTarget(fixture.Context, fixture.ExecutionStrategy, "A")); // Then Assert.Equal(expected, result); }
public void Should_Throw_If_Target_Cannot_Be_Reached_Due_To_Constraint() { // Given var fixture = new CakeEngineFixture(); var engine = fixture.CreateEngine(); engine.RegisterTask("A"); engine.RegisterTask("B").IsDependentOn("A").WithCriteria(false); // When var result = Record.Exception(() => engine.RunTarget(fixture.Context, fixture.ExecutionStrategy, "B")); // Then Assert.IsType <CakeException>(result); Assert.Equal("Could not reach target 'B' since it was skipped due to a criteria.", result.Message); }
public void Should_Log_Exception_Handled_By_Error_Handler() { // Given var fixture = new CakeEngineFixture(); var engine = fixture.CreateEngine(); engine.RegisterTask("A") .Does(() => { throw new InvalidOperationException("Whoops"); }) .OnError(exception => { throw new InvalidOperationException("Totally my fault"); }); // When Record.Exception(() => engine.RunTarget(fixture.Context, fixture.ExecutionStrategy, "A")); // Then Assert.True(fixture.Log.Entries.Any(x => x.Message == "Error: Whoops")); }
public void Should_Return_Report_That_Marks_Executed_Tasks_As_Executed() { // Given var result = new List <string>(); var fixture = new CakeEngineFixture(); var engine = fixture.CreateEngine(); engine.RegisterTask("A").IsDependentOn("B").Does(() => result.Add("A")); engine.RegisterTask("B").IsDependentOn("C"); engine.RegisterTask("C").WithCriteria(() => false).Does(() => result.Add("C")); // When var report = engine.RunTarget(fixture.Context, fixture.ExecutionStrategy, "A"); // Then Assert.Equal(CakeTaskExecutionStatus.Executed, report.First(e => e.TaskName == "A").ExecutionStatus); }
public void Should_Invoke_Task_Error_Handler_If_Exception_Is_Thrown() { // Given var invoked = false; var fixture = new CakeEngineFixture(); var engine = fixture.CreateEngine(); engine.RegisterTask("A") .Does(() => { throw new InvalidOperationException("Whoopsie"); }) .OnError(exception => { invoked = true; }); // When Record.Exception(() => engine.RunTarget(fixture.Context, fixture.ExecutionStrategy, "A")); // Then Assert.True(invoked); }
public void Should_Run_Teardown_After_Last_Running_Task() { // Given var result = new List <string>(); var fixture = new CakeEngineFixture(); var engine = fixture.CreateEngine(); engine.RegisterSetupAction(context => result.Add("Setup")); engine.RegisterTeardownAction(context => result.Add("Teardown")); engine.RegisterTask("A").Does(() => result.Add("A")); // When engine.RunTarget(fixture.Context, fixture.ExecutionStrategy, "A"); // Then Assert.Equal(3, result.Count); Assert.Equal("Teardown", result[2]); }
public void Should_Not_Run_Tasks_If_Setup_Failed() { // Given var runTask = false; var fixture = new CakeEngineFixture(); var engine = fixture.CreateEngine(); engine.RegisterSetupAction(context => { throw new InvalidOperationException("Fail"); }); engine.RegisterTask("A").Does(() => runTask = true); // When Record.Exception(() => engine.RunTarget(fixture.Context, fixture.ExecutionStrategy, "A")); // Then Assert.False(runTask, "Task A was executed although it shouldn't have been."); Assert.True(fixture.Log.Entries.Any(x => x.Message == "Executing custom setup action...")); }
public void Should_Propagate_Exception_From_Error_Handler() { // Given var fixture = new CakeEngineFixture(); var engine = fixture.CreateEngine(); engine.RegisterTask("A") .Does(() => { throw new InvalidOperationException("Whoopsie"); }) .OnError(exception => { throw new InvalidOperationException("Totally my fault"); }); // When var result = Record.Exception(() => engine.RunTarget(fixture.Context, fixture.ExecutionStrategy, "A")); // Then Assert.IsType <InvalidOperationException>(result); Assert.Equal("Totally my fault", result.Message); }
public void Should_Log_Exception_Thrown_From_Task_If_Both_Task_And_Task_Teardown_Actions_Throw() { // Given var fixture = new CakeEngineFixture(); var engine = fixture.CreateEngine(); engine.RegisterTaskTeardownAction((cc, tc) => { throw new InvalidOperationException("Task Teardown: " + tc.Task.Name); }); engine.RegisterTask("A").Does(() => { throw new InvalidOperationException("Task: A"); }); // When var result = Record.Exception(() => engine.RunTarget(fixture.Context, fixture.ExecutionStrategy, "A")); // Then Assert.NotNull(result); Assert.IsType <InvalidOperationException>(result); Assert.Equal("Task: A", result.Message); }
public void Should_Throw_Exception_Occuring_In_Task_Teardown_If_No_Previous_Exception_Was_Thrown() { // Given var fixture = new CakeEngineFixture(); var engine = fixture.CreateEngine(); engine.RegisterTaskTeardownAction(context => { throw new InvalidOperationException("Task Teardown: " + context.Task.Name); }); engine.RegisterTask("A"); // When var result = Record.Exception(() => engine.RunTarget(fixture.Context, fixture.ExecutionStrategy, "A")); // Then Assert.NotNull(result); Assert.IsType <InvalidOperationException>(result); Assert.Equal("Task Teardown: A", result.Message); }
public void Should_Execute_Finally_Handler_If_Task_Throws() { // Given var invoked = false; var fixture = new CakeEngineFixture(); var engine = fixture.CreateEngine(); engine.RegisterTask("A") .Does(() => { throw new InvalidOperationException("Whoopsie"); }) .ContinueOnError() .Finally(() => invoked = true); // When engine.RunTarget(fixture.Context, fixture.ExecutionStrategy, "A"); // Then Assert.True(invoked); }
public void Should_Throw_Exception_Thrown_From_Setup_Action_If_Both_Setup_And_Teardown_Actions_Throw() { // Given var fixture = new CakeEngineFixture(); var engine = fixture.CreateEngine(); engine.RegisterSetupAction(context => { throw new InvalidOperationException("Setup"); }); engine.RegisterTeardownAction(context => { throw new InvalidOperationException("Teardown"); }); engine.RegisterTask("A").Does(() => { }); // When var result = Record.Exception(() => engine.RunTarget(fixture.Context, fixture.ExecutionStrategy, "A")); // Then Assert.NotNull(result); Assert.IsType <InvalidOperationException>(result); Assert.Equal("Setup", result?.Message); }
public void Should_Skip_Tasks_Where_Boolean_Criterias_Are_Not_Fulfilled() { // Given var result = new List <string>(); var fixture = new CakeEngineFixture(); var engine = fixture.CreateEngine(); engine.RegisterTask("A").Does(() => result.Add("A")); engine.RegisterTask("B").IsDependentOn("A").WithCriteria(() => false).Does(() => result.Add("B")); engine.RegisterTask("C").IsDependentOn("B").Does(() => result.Add("C")); // When engine.RunTarget(fixture.Context, fixture.ExecutionStrategy, "C"); // Then Assert.Equal(2, result.Count); Assert.Equal("A", result[0]); Assert.Equal("C", result[1]); }
public void Should_Return_Report_That_Contains_Executed_Tasks_In_Order() { // Given var fixture = new CakeEngineFixture(); var engine = fixture.CreateEngine(); engine.RegisterTask("A"); engine.RegisterTask("B").IsDependentOn("A"); engine.RegisterTask("C").IsDependentOn("B"); // When var report = engine.RunTarget(fixture.Context, fixture.ExecutionStrategy, "C"); // Then Assert.Equal(3, report.Count()); Assert.Equal("A", report.ElementAt(0).TaskName); Assert.Equal("B", report.ElementAt(1).TaskName); Assert.Equal("C", report.ElementAt(2).TaskName); }
public void Should_Run_Task_Setup_Before_Each_Task() { // Given var result = new List <string>(); var fixture = new CakeEngineFixture(); var engine = fixture.CreateEngine(); engine.RegisterTaskSetupAction((cc, sc) => result.Add("TASK_SETUP:" + sc.Task.Name)); engine.RegisterTask("A").Does(() => result.Add("Executing A")); engine.RegisterTask("B").Does(() => result.Add("Executing B")).IsDependentOn("A"); // When engine.RunTarget(fixture.Context, fixture.ExecutionStrategy, "B"); // Then Assert.Equal(new List <string> { "TASK_SETUP:A", "Executing A", "TASK_SETUP:B", "Executing B" }, result); }
public void Should_Execute_Error_Reporter_Before_Error_Handler_If_Task_Succeeds() { // Given var result = new List <string>(); var fixture = new CakeEngineFixture(); var engine = fixture.CreateEngine(); engine.RegisterTask("A") .Does(() => { throw new InvalidOperationException("Whoopsie"); }) .OnError(ex => result.Add("Error")) .ReportError(ex => result.Add("Report")); // When engine.RunTarget(fixture.Context, fixture.ExecutionStrategy, "A"); // Then Assert.Equal(2, result.Count); Assert.Equal("Report", result[0]); }
public void Should_Execute_Tasks_In_Order() { // Given var result = new List <string>(); var fixture = new CakeEngineFixture(); var engine = fixture.CreateEngine(); engine.RegisterTask("A").Does(() => result.Add("A")); engine.RegisterTask("B").IsDependentOn("A").Does(() => result.Add("B")); engine.RegisterTask("C").IsDependentOn("B").Does(() => result.Add("C")); // When engine.RunTarget(fixture.Context, fixture.ExecutionStrategy, "C"); // Then Assert.Equal(3, result.Count); Assert.Equal("A", result[0]); Assert.Equal("B", result[1]); Assert.Equal("C", result[2]); }
public void Should_Log_Task_Teardown_Exception_If_Both_Task_Setup_And_Task_Teardown_Actions_Throw() { // Given var fixture = new CakeEngineFixture(); var engine = fixture.CreateEngine(); engine.RegisterTaskSetupAction((cc, sc) => { throw new InvalidOperationException("Task Setup: " + sc.Task.Name); }); engine.RegisterTaskTeardownAction((cc, tc) => { throw new InvalidOperationException("Task Teardown: " + tc.Task.Name); }); engine.RegisterTask("A").Does(() => { }); // When var result = Record.Exception(() => engine.RunTarget(fixture.Context, fixture.ExecutionStrategy, "A")); // Then Assert.NotNull(result); Assert.IsType <InvalidOperationException>(result); Assert.Equal("Task Setup: A", result.Message); Assert.True(fixture.Log.Entries.Any(x => x.Message.StartsWith("Task Teardown error (A):"))); }
public void Should_Not_Run_Task_If_Task_Setup_Failed() { // Given var result = new List <string>(); var fixture = new CakeEngineFixture(); var engine = fixture.CreateEngine(); engine.RegisterTaskSetupAction((cc, sc) => { throw new Exception("fake exception"); }); engine.RegisterTask("A").Does(() => result.Add("Executing A")); engine.RegisterTask("B").Does(() => result.Add("Executing B")).IsDependentOn("A"); // When Record.Exception(() => engine.RunTarget(fixture.Context, fixture.ExecutionStrategy, "B")); // Then Assert.Equal(new List <string>(), result); Assert.True(fixture.Log.Entries.Any(x => x.Message == "Executing custom task setup action (A)...")); Assert.False(fixture.Log.Entries.Any(x => x.Message == "Executing custom task setup action (B)...")); }
public void Should_Run_Teardown_If_Setup_Failed() { // Given var fixture = new CakeEngineFixture(); var engine = fixture.CreateEngine(); engine.RegisterSetupAction(context => { throw new InvalidOperationException("Fail"); }); engine.RegisterTeardownAction(context => { }); engine.RegisterTask("A").Does(() => { }); // When var result = Record.Exception(() => engine.RunTarget(fixture.Context, fixture.ExecutionStrategy, "A")); // Then Assert.NotNull(result); Assert.IsType <InvalidOperationException>(result); Assert.Equal("Fail", result.Message); Assert.True(fixture.Log.Entries.Any(x => x.Message == "Executing custom teardown action...")); }
public void Should_Not_Skip_Tasks_Where_CakeContext_Criterias_Are_Fulfilled() { // Given var result = new List <string>(); var fixture = new CakeEngineFixture(); fixture.Context.Environment.IsUnix().Returns(true); var engine = fixture.CreateEngine(); engine.RegisterTask("A").Does(() => result.Add("A")); engine.RegisterTask("B").IsDependentOn("A").WithCriteria(context => context.Environment.IsUnix()).Does(() => result.Add("B")); engine.RegisterTask("C").IsDependentOn("B").Does(() => result.Add("C")); // When engine.RunTarget(fixture.Context, fixture.ExecutionStrategy, "C"); // Then Assert.Equal(3, result.Count); Assert.Equal("A", result[0]); Assert.Equal("B", result[1]); Assert.Equal("C", result[2]); }