Esempio n. 1
0
            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:")));
            }
Esempio n. 2
0
            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);
            }
Esempio n. 3
0
            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]);
            }
Esempio n. 4
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);
            }
Esempio n. 5
0
            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);
            }
Esempio n. 6
0
            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"));
            }
Esempio n. 7
0
            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);
            }
Esempio n. 8
0
            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);
            }
Esempio n. 9
0
            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]);
            }
Esempio n. 10
0
            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..."));
            }
Esempio n. 11
0
            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);
            }
Esempio n. 12
0
            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);
            }
Esempio n. 13
0
            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);
            }
Esempio n. 14
0
            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);
            }
Esempio n. 15
0
            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);
            }
Esempio n. 16
0
            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]);
            }
Esempio n. 17
0
            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);
            }
Esempio n. 18
0
            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);
            }
Esempio n. 19
0
            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]);
            }
Esempio n. 20
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]);
            }
Esempio n. 21
0
            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):")));
            }
Esempio n. 22
0
            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)..."));
            }
Esempio n. 23
0
            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..."));
            }
Esempio n. 24
0
            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]);
            }