Skip to content
This repository was archived by the owner on Aug 23, 2019. It is now read-only.

Commit 69fc517

Browse files
committed
Summarizing fatal errors after the test run
1 parent 9902c3a commit 69fc517

File tree

3 files changed

+56
-13
lines changed

3 files changed

+56
-13
lines changed

Machine.Specifications.ConsoleRunner/Outputs/FailedSpecificationsSummary.cs

Lines changed: 46 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -10,9 +10,10 @@ class FailedSpecificationsSummary
1010
readonly IConsole _console;
1111

1212
readonly Dictionary<ContextInfo, IList<FailedSpecification>> _failures =
13-
new Dictionary<ContextInfo, IList<FailedSpecification>>();
13+
new Dictionary<ContextInfo, IList<FailedSpecification>>();
1414

1515
readonly VerboseOutput _verbose;
16+
readonly IList<ExceptionResult> _fatalErrors = new List<ExceptionResult>();
1617

1718
public FailedSpecificationsSummary(VerboseOutput verbose, IConsole console)
1819
{
@@ -21,6 +22,17 @@ public FailedSpecificationsSummary(VerboseOutput verbose, IConsole console)
2122
}
2223

2324
public void WriteSummary()
25+
{
26+
if (!_failures.Any() && !_fatalErrors.Any())
27+
{
28+
return;
29+
}
30+
31+
WriteFailures();
32+
WriteFatalErrors();
33+
}
34+
35+
void WriteFailures()
2436
{
2537
if (!_failures.Any())
2638
{
@@ -31,17 +43,33 @@ public void WriteSummary()
3143
_console.WriteLine("Failures:");
3244

3345
_failures
34-
.OrderBy(context => context.Key.FullName)
35-
.ToList()
36-
.ForEach(context =>
37-
{
38-
_verbose.ContextStart(context.Key);
39-
context.Value.ToList().ForEach(spec =>
40-
{
41-
_verbose.SpecificationStart(spec.Specification);
42-
_verbose.Failed(spec.Specification, spec.Result);
43-
});
44-
});
46+
.OrderBy(context => context.Key.FullName)
47+
.ToList()
48+
.ForEach(context =>
49+
{
50+
_verbose.ContextStart(context.Key);
51+
context.Value.ToList().ForEach(spec =>
52+
{
53+
_verbose.SpecificationStart(spec.Specification);
54+
_verbose.Failed(spec.Specification, spec.Result);
55+
});
56+
});
57+
}
58+
59+
void WriteFatalErrors()
60+
{
61+
if (!_fatalErrors.Any())
62+
{
63+
return;
64+
}
65+
66+
_console.WriteLine("");
67+
_console.WriteLine("Fatal Errors:");
68+
69+
_fatalErrors
70+
.ToList()
71+
.ForEach(x => _verbose.FatalError(x));
72+
4573
}
4674

4775
public void RecordFailure(ContextInfo context, SpecificationInfo specification, Result result)
@@ -54,5 +82,10 @@ public void RecordFailure(ContextInfo context, SpecificationInfo specification,
5482
var entry = _failures[context];
5583
entry.Add(new FailedSpecification { Specification = specification, Result = result });
5684
}
85+
86+
public void RecordFatalError(ExceptionResult exception)
87+
{
88+
_fatalErrors.Add(exception);
89+
}
5790
}
58-
}
91+
}

Machine.Specifications.ConsoleRunner/Outputs/VerboseOutput.cs

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
using System;
2+
13
using Machine.Specifications.Runner.Utility;
24

35
namespace Machine.Specifications.ConsoleRunner.Outputs
@@ -72,6 +74,12 @@ public void Failed(SpecificationInfo specification, Result result)
7274
_console.WriteLine(result.Exception.ToString());
7375
}
7476

77+
public void FatalError(ExceptionResult exception)
78+
{
79+
_console.WriteLine(exception.ToString());
80+
EmptyLine();
81+
}
82+
7583
void EmptyLine()
7684
{
7785
_console.WriteLine("");

Machine.Specifications.ConsoleRunner/RunListener.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -132,6 +132,8 @@ public void OnFatalError(ExceptionResult exception)
132132
_console.WriteLine("");
133133
_console.WriteLine("Fatal Error");
134134
_console.WriteLine(exception.ToString());
135+
136+
_summary.RecordFatalError(exception);
135137
}
136138

137139
static DateTime FormattableTimeSpan(long milliseconds)

0 commit comments

Comments
 (0)