9
9
using ApprovalTests . Core . Exceptions ;
10
10
using TestStack . ConventionTests . Conventions ;
11
11
using TestStack . ConventionTests . Internal ;
12
+ using TestStack . ConventionTests . Reporting ;
12
13
13
14
public static class Convention
14
15
{
15
16
static readonly HtmlReportRenderer HtmlRenderer = new HtmlReportRenderer ( AssemblyDirectory ) ;
16
- static readonly List < ConventionReport > Reports = new List < ConventionReport > ( ) ;
17
+ static readonly List < ResultInfo > Reports = new List < ResultInfo > ( ) ;
17
18
18
- public static IEnumerable < ConventionReport > ConventionReports { get { return Reports ; } }
19
+ static Convention ( )
20
+ {
21
+ Formatters = new List < IReportDataFormatter >
22
+ {
23
+ new TypeDataFormatter ( ) ,
24
+ new ProjectReferenceFormatter ( ) ,
25
+ new ProjectFileFormatter ( ) ,
26
+ new MethodInfoDataFormatter ( ) ,
27
+ new StringDataFormatter ( )
28
+ } ;
29
+ }
30
+
31
+ public static IEnumerable < ResultInfo > ConventionReports { get { return Reports ; } }
32
+ public static IList < IReportDataFormatter > Formatters { get ; private set ; }
19
33
20
34
public static void Is < TDataSource , TDataType > ( IConvention < TDataSource , TDataType > convention , TDataSource data )
21
- where TDataSource : IConventionData , ICreateReportLineFor < TDataType >
35
+ where TDataSource : IConventionData
22
36
{
23
37
Is ( convention , data , new ConventionResultExceptionReporter ( ) ) ;
24
38
}
25
39
26
40
public static void Is < TDataSource , TDataType > ( IConvention < TDataSource , TDataType > convention , TDataSource data , IConventionReportRenderer reporter )
27
- where TDataSource : IConventionData , ICreateReportLineFor < TDataType >
41
+ where TDataSource : IConventionData
28
42
{
29
43
try
30
44
{
@@ -42,7 +56,7 @@ public static void Is<TDataSource, TDataType>(IConvention<TDataSource, TDataType
42
56
}
43
57
44
58
public static void IsWithApprovedExeptions < TDataSource , TDataType > ( IConvention < TDataSource , TDataType > convention , TDataSource data )
45
- where TDataSource : IConventionData , ICreateReportLineFor < TDataType >
59
+ where TDataSource : IConventionData
46
60
{
47
61
var conventionResult = GetConventionReport ( convention . ConventionTitle , convention . GetFailingData ( data ) . ToArray ( ) , data ) ;
48
62
Reports . Add ( conventionResult ) ;
@@ -69,13 +83,13 @@ public static void IsWithApprovedExeptions<TDataSource, TDataType>(IConvention<T
69
83
}
70
84
71
85
public static void Is < TDataSource , TDataType > ( ISymmetricConvention < TDataSource , TDataType > convention , TDataSource data )
72
- where TDataSource : IConventionData , ICreateReportLineFor < TDataType >
86
+ where TDataSource : IConventionData
73
87
{
74
88
Is ( convention , data , new ConventionResultExceptionReporter ( ) ) ;
75
89
}
76
90
77
91
public static void Is < TDataSource , TDataType > ( ISymmetricConvention < TDataSource , TDataType > convention , TDataSource data , IConventionReportRenderer reporter )
78
- where TDataSource : IConventionData , ICreateReportLineFor < TDataType >
92
+ where TDataSource : IConventionData
79
93
{
80
94
try
81
95
{
@@ -95,7 +109,7 @@ public static void Is<TDataSource, TDataType>(ISymmetricConvention<TDataSource,
95
109
}
96
110
97
111
public static void IsWithApprovedExeptions < TDataSource , TDataType > ( ISymmetricConvention < TDataSource , TDataType > convention , TDataSource data )
98
- where TDataSource : IConventionData , ICreateReportLineFor < TDataType >
112
+ where TDataSource : IConventionData
99
113
{
100
114
var conventionResult = GetConventionReport ( convention . ConventionTitle , convention . GetFailingData ( data ) . ToArray ( ) , data ) ;
101
115
var inverseConventionResult = GetConventionReport ( convention . InverseTitle , convention . GetFailingInverseData ( data ) . ToArray ( ) , data ) ;
@@ -130,20 +144,30 @@ public static void IsWithApprovedExeptions<TDataSource, TDataType>(ISymmetricCon
130
144
}
131
145
}
132
146
133
- static ConventionReport GetConventionReport < TDataSource , TDataType > ( string conventionTitle , TDataType [ ] failingData , TDataSource data )
134
- where TDataSource : IConventionData , ICreateReportLineFor < TDataType >
147
+ static ResultInfo GetConventionReport < TDataSource , TDataType > ( string conventionTitle , TDataType [ ] failingData , TDataSource data )
148
+ where TDataSource : IConventionData
135
149
{
136
150
data . EnsureHasNonEmptySource ( ) ;
137
151
var passed = failingData . None ( ) ;
138
152
139
- var conventionResult = new ConventionReport (
140
- passed ? Result . Passed : Result . Failed ,
153
+ var conventionResult = new ResultInfo (
154
+ passed ? TestResult . Passed : TestResult . Failed ,
141
155
conventionTitle ,
142
156
data . Description ,
143
- failingData . Select ( data . CreateReportLine ) ) ;
157
+ failingData . Select ( FormatData ) . ToArray ( ) ) ;
144
158
return conventionResult ;
145
159
}
146
160
161
+ static ConventionReportFailure FormatData < T > ( T failingData )
162
+ {
163
+ var formatter = Formatters . FirstOrDefault ( f => f . CanFormat ( failingData ) ) ;
164
+
165
+ if ( formatter == null )
166
+ throw new NoDataFormatterFoundException ( typeof ( T ) . Name + " has no formatter, add one with `Convention.Formatters.Add(new MyDataFormatter());`" ) ;
167
+
168
+ return formatter . Format ( failingData ) ;
169
+ }
170
+
147
171
// http://stackoverflow.com/questions/52797/c-how-do-i-get-the-path-of-the-assembly-the-code-is-in#answer-283917
148
172
static string AssemblyDirectory
149
173
{
0 commit comments