1
1
namespace TestStack . ConventionTests . Internal
2
2
{
3
+ using System ;
3
4
using System . Collections . Generic ;
4
5
using System . Linq ;
5
6
using TestStack . ConventionTests . Reporting ;
6
7
7
8
public class ConventionResult : IConventionResult
8
9
{
9
- readonly string dataDescription ;
10
10
readonly List < ResultInfo > conventionResults ;
11
+ readonly string dataDescription ;
11
12
12
13
public ConventionResult ( string dataDescription )
13
14
{
@@ -30,28 +31,44 @@ public void Is<T>(string resultTitle, IEnumerable<T> failingData)
30
31
failingData . Select ( FormatData ) . ToArray ( ) ) ) ;
31
32
}
32
33
33
- public void IsSymmetric < T > (
34
- string firstResultTitle , IEnumerable < T > firstFailingData ,
35
- string secondResultTitle , IEnumerable < T > secondFailingData )
34
+ public void IsSymmetric < TResult > (
35
+ string conventionResultTitle , IEnumerable < TResult > conventionFailingData ,
36
+ string inverseResultTitle , IEnumerable < TResult > inverseFailingData )
36
37
{
37
38
conventionResults . Add ( new ResultInfo (
38
- firstFailingData . None ( ) ? TestResult . Passed : TestResult . Failed ,
39
- firstResultTitle ,
39
+ conventionFailingData . None ( ) ? TestResult . Passed : TestResult . Failed ,
40
+ conventionResultTitle ,
40
41
dataDescription ,
41
- firstFailingData . Select ( FormatData ) . ToArray ( ) ) ) ;
42
+ conventionFailingData . Select ( FormatData ) . ToArray ( ) ) ) ;
42
43
conventionResults . Add ( new ResultInfo (
43
- secondFailingData . None ( ) ? TestResult . Passed : TestResult . Failed ,
44
- secondResultTitle ,
44
+ inverseFailingData . None ( ) ? TestResult . Passed : TestResult . Failed ,
45
+ inverseResultTitle ,
45
46
dataDescription ,
46
- secondFailingData . Select ( FormatData ) . ToArray ( ) ) ) ;
47
+ inverseFailingData . Select ( FormatData ) . ToArray ( ) ) ) ;
48
+ }
49
+
50
+ public void IsSymmetric < TResult > ( string conventionResultTitle , string inverseResultTitle ,
51
+ Func < TResult , bool > isInclusiveData , Func < TResult , bool > dataConformsToConvention ,
52
+ IEnumerable < TResult > allData )
53
+ {
54
+ var conventionFailingData = allData . Where ( isInclusiveData ) . Where ( d => ! dataConformsToConvention ( d ) ) ;
55
+ var inverseFailingData = allData . Where ( d => ! isInclusiveData ( d ) ) . Where ( dataConformsToConvention ) ;
56
+
57
+ IsSymmetric (
58
+ conventionResultTitle , conventionFailingData ,
59
+ inverseResultTitle , inverseFailingData ) ;
47
60
}
48
61
49
62
static ConventionReportFailure FormatData < T > ( T failingData )
50
63
{
51
64
var formatter = Convention . Formatters . FirstOrDefault ( f => f . CanFormat ( failingData ) ) ;
52
65
53
66
if ( formatter == null )
54
- throw new NoDataFormatterFoundException ( typeof ( T ) . Name + " has no formatter, add one with `Convention.Formatters.Add(new MyDataFormatter());`" ) ;
67
+ {
68
+ throw new NoDataFormatterFoundException (
69
+ typeof ( T ) . Name +
70
+ " has no formatter, add one with `Convention.Formatters.Add(new MyDataFormatter());`" ) ;
71
+ }
55
72
56
73
return formatter . Format ( failingData ) ;
57
74
}
0 commit comments