コード例 #1
0
            public void Should_Print_Delegated_Tasks_When_Verbosity_Suffices(Verbosity verbosity)
            {
                // Given
                var log = Substitute.For <ICakeLog>();

                log.Verbosity.Returns(verbosity);
                var context = Substitute.For <ICakeContext>();

                context.Log.Returns(log);
                var console  = new FakeConsole();
                var report   = new CakeReport();
                var taskName = "TaskName";
                var tasknameThatWasDelegated = "TaskName-That-Was-Delegated";
                var duration = TimeSpan.FromSeconds(10);
                var durationDelegatedTask = TimeSpan.FromSeconds(5);

                report.Add(taskName, duration);
                report.AddDelegated(tasknameThatWasDelegated, durationDelegatedTask);

                var printer = new CakeReportPrinter(console, context);

                // When
                printer.Write(report);

                // Then
                var expected = $"{tasknameThatWasDelegated, -30}{durationDelegatedTask, -20}";

                Assert.Contains(console.Messages, s => s == expected);
            }
コード例 #2
0
            public void Should_Not_Print_Delegated_Tasks_When_Verbosity_Does_Not_Suffice(Verbosity verbosity)
            {
                // Given
                var log = Substitute.For <ICakeLog>();

                log.Verbosity.Returns(verbosity);
                var context = Substitute.For <ICakeContext>();

                context.Log.Returns(log);
                var      console  = new FakeConsole();
                var      report   = new CakeReport();
                string   taskName = "TaskName";
                string   tasknameThatWasDelegated = "TaskName-That-Was-Delegated";
                TimeSpan duration = TimeSpan.FromSeconds(10);
                TimeSpan durationDelegatedTask = TimeSpan.FromSeconds(5);

                report.Add(taskName, duration);
                report.AddDelegated(tasknameThatWasDelegated, durationDelegatedTask);

                var printer = new CakeReportPrinter(console, context);

                // When
                printer.Write(report);

                // Then
                string expected = String.Format("{0,-30}{1,-20}", tasknameThatWasDelegated, durationDelegatedTask);

                Assert.DoesNotContain(console.Messages, s => s == expected);
            }
コード例 #3
0
        private async Task ExecuteTaskAsync(ICakeContext context, IExecutionStrategy strategy, CancellationTokenSource cts, CakeTask task, CakeReport report)
        {
            _log.Verbose($"Starting task {task.Name}");
            var stopwatch = Stopwatch.StartNew();

            PerformTaskSetup(context, strategy, task, false);

            var execptionWasThrown = false;

            try
            {
                var taskExecutionContext = new TaskExecutionContext(context, task);

                await strategy.ExecuteAsync(task, taskExecutionContext).ConfigureAwait(false);
            }
            catch (TaskCanceledException)
            {
                execptionWasThrown = true;
                throw;
            }
            catch (Exception exception)
            {
                execptionWasThrown = true;
                _log.Error($"An error occurred when executing task '{task.Name}'.");

                if (task.ErrorReporter != null)
                {
                    ReportErrors(strategy, task.ErrorReporter, exception);
                }

                if (task.ErrorHandler != null)
                {
                    HandleErrors(strategy, task.ErrorHandler, exception);
                }
                else
                {
                    cts.Cancel();
                    throw;
                }
            }
            finally
            {
                strategy.InvokeFinally(task.FinallyHandler);

                PerformTaskTeardown(context, strategy, task, stopwatch.Elapsed, false, execptionWasThrown);
            }

            if (isDelegatedTask(task))
            {
                report.AddDelegated(task.Name, stopwatch.Elapsed);
            }
            else
            {
                report.Add(task.Name, stopwatch.Elapsed);
            }
        }
コード例 #4
0
            public void Should_Add_To_End_Of_Sequence()
            {
                // Given
                var report = new CakeReport();

                report.Add("task 1", TimeSpan.FromMilliseconds(100));

                var taskName = "task";
                var duration = TimeSpan.FromMilliseconds(200);

                // When
                report.Add(taskName, duration);

                // Then
                var lastTask = report.Last();

                Assert.Equal(taskName, lastTask.TaskName);
                Assert.Equal(duration, lastTask.Duration);
                Assert.Equal(CakeTaskExecutionStatus.Executed, lastTask.ExecutionStatus);
            }
コード例 #5
0
            public void Should_Increase_Width_For_Long_Task_Names()
            {
                // Given
                var      console   = new FakeConsole();
                var      report    = new CakeReport();
                string   taskName  = "TaskName";
                string   taskName2 = "Task-Name-That-Has-A-Length-Of-44-Characters";
                TimeSpan duration  = TimeSpan.FromSeconds(10);

                report.Add(taskName, duration);
                report.Add(taskName2, duration);
                var printer = new CakeReportPrinter(console);

                // When
                printer.Write(report);

                // Then
                string expected = String.Format("{0,-45}{1,-20}", taskName, duration);

                Assert.Contains(console.Messages, s => s == expected);
            }
コード例 #6
0
            public void Should_Increase_Width_For_Long_Task_Names()
            {
                // Given
                var context   = Substitute.For <ICakeContext>();
                var console   = new FakeConsole();
                var report    = new CakeReport();
                var taskName  = "TaskName";
                var taskName2 = "Task-Name-That-Has-A-Length-Of-44-Characters";
                var duration  = TimeSpan.FromSeconds(10);

                report.Add(taskName, duration);
                report.Add(taskName2, duration);
                var printer = new CakeReportPrinter(console, context);

                // When
                printer.Write(report);

                // Then
                string expected = $"{taskName, -45}{duration, -20}";

                Assert.Contains(console.Messages, s => s == expected);
            }
コード例 #7
0
            public void Should_Add_A_New_Task()
            {
                // Given
                var report   = new CakeReport();
                var taskName = "task";
                var duration = TimeSpan.FromMilliseconds(100);

                // When
                report.Add("task", duration);

                // Then
                var firstTask = report.First();

                Assert.Equal(taskName, firstTask.TaskName);
                Assert.Equal(duration, firstTask.Duration);
                Assert.Equal(CakeTaskExecutionStatus.Executed, firstTask.ExecutionStatus);
            }
コード例 #8
0
            public void Should_Print_Report()
            {
                // Given
                var report = new CakeReport();

                report.Add("Target", TimeSpan.FromSeconds(1));
                var engine = Substitute.For <ICakeEngine>();

                engine.RunTarget("Target").Returns(report);
                var printer = Substitute.For <ICakeReportPrinter>();
                var host    = new BuildScriptHost(engine, printer);

                // When
                host.RunTarget("Target");

                // Then
                printer.Received(1).Write(report);
            }
コード例 #9
0
            public void Should_Default_To_30_Width()
            {
                // Given
                var      console  = new FakeConsole();
                var      report   = new CakeReport();
                string   taskName = "TaskName";
                TimeSpan duration = TimeSpan.FromSeconds(10);

                report.Add(taskName, duration);
                var printer = new CakeReportPrinter(console);

                // When
                printer.Write(report);

                // Then
                string expected = String.Format("{0,-30}{1,-20}", taskName, duration);

                Assert.Contains(console.Messages, s => s == expected);
            }
コード例 #10
0
ファイル: BuildScriptHostTests.cs プロジェクト: qhris/cake
            public void Should_Print_Report()
            {
                // Given
                var report = new CakeReport();

                report.Add("Target", TimeSpan.FromSeconds(1));
                var engine  = Substitute.For <ICakeEngine>();
                var context = Substitute.For <ICakeContext>();

                engine.RunTarget(context, Arg.Any <DefaultExecutionStrategy>(), "Target").Returns(report);
                var printer = Substitute.For <ICakeReportPrinter>();
                var log     = Substitute.For <ICakeLog>();
                var host    = new BuildScriptHost(engine, context, printer, log);

                // When
                host.RunTarget("Target");

                // Then
                printer.Received(1).Write(report);
            }
コード例 #11
0
            public void Should_Default_To_30_Width()
            {
                // Given
                var context  = Substitute.For <ICakeContext>();
                var console  = new FakeConsole();
                var report   = new CakeReport();
                var taskName = "TaskName";
                var duration = TimeSpan.FromSeconds(10);

                report.Add(taskName, duration);
                var printer = new CakeReportPrinter(console, context);

                // When
                printer.Write(report);

                // Then
                string expected = $"{taskName, -30}{duration, -20}";

                Assert.Contains(console.Messages, s => s == expected);
            }
コード例 #12
0
            public void Should_Print_No_Duration_For_Skipped_Tasks()
            {
                // Given
                var      context  = Substitute.For <ICakeContext>();
                var      console  = new FakeConsole();
                var      report   = new CakeReport();
                string   taskName = "TaskName";
                string   taskNameThatWasSkipped = "TaskName-That-Was-Skipped";
                TimeSpan duration = TimeSpan.FromSeconds(10);

                report.Add(taskName, duration);
                report.AddSkipped(taskNameThatWasSkipped);

                var printer = new CakeReportPrinter(console, context);

                // When
                printer.Write(report);

                // Then
                string expected = String.Format("{0,-30}{1,-20}", taskNameThatWasSkipped, "Skipped");

                Assert.Contains(console.Messages, s => s == expected);
            }