33using System . Diagnostics ;
44using System . Linq ;
55using System . Text ;
6+ using LinqToDB . Reflection ;
7+ using LinqToDB . Tools ;
8+ using LinqToDB . Tools . Comparers ;
69using NUnit . Framework ;
710
811namespace LinqToDB . EntityFrameworkCore . BaseTests
912{
1013 public class TestsBase
1114 {
12- protected void AreEqual < T > ( IEnumerable < T > expected , IEnumerable < T > result )
15+ protected void AreEqual < T > ( IEnumerable < T > expected , IEnumerable < T > result , bool allowEmpty = false )
1316 {
14- AreEqual ( t => t , expected , result , EqualityComparer < T > . Default ) ;
17+ AreEqual ( t => t , expected , result , EqualityComparer < T > . Default , allowEmpty ) ;
18+ }
19+
20+ protected void AreEqual < T > ( IEnumerable < T > expected , IEnumerable < T > result , Func < IEnumerable < T > , IEnumerable < T > > sort )
21+ {
22+ AreEqual ( t => t , expected , result , EqualityComparer < T > . Default , sort ) ;
23+ }
24+
25+ protected void AreEqualWithComparer < T > ( IEnumerable < T > expected , IEnumerable < T > result )
26+ {
27+ AreEqual ( t => t , expected , result , ComparerBuilder . GetEqualityComparer < T > ( ) ) ;
28+ }
29+
30+ protected void AreEqualWithComparer < T > ( IEnumerable < T > expected , IEnumerable < T > result , Func < MemberAccessor , bool > memberPredicate )
31+ {
32+ AreEqual ( t => t , expected , result , ComparerBuilder . GetEqualityComparer < T > ( memberPredicate ) ) ;
1533 }
1634
1735 protected void AreEqual < T > ( IEnumerable < T > expected , IEnumerable < T > result , IEqualityComparer < T > comparer )
1836 {
1937 AreEqual ( t => t , expected , result , comparer ) ;
2038 }
2139
22- protected void AreEqual < T > ( Func < T , T > fixSelector , IEnumerable < T > expected , IEnumerable < T > result )
40+ protected void AreEqual < T > ( IEnumerable < T > expected , IEnumerable < T > result , IEqualityComparer < T > comparer , Func < IEnumerable < T > , IEnumerable < T > > sort )
41+ {
42+ AreEqual ( t => t , expected , result , comparer , sort ) ;
43+ }
44+
45+ protected void AreEqual < T > ( Func < T , T > fixSelector , IEnumerable < T > expected , IEnumerable < T > result )
2346 {
2447 AreEqual ( fixSelector , expected , result , EqualityComparer < T > . Default ) ;
2548 }
2649
27- protected void AreEqual < T > ( Func < T , T > fixSelector , IEnumerable < T > expected , IEnumerable < T > result , IEqualityComparer < T > comparer )
50+ protected void AreEqual < T > ( Func < T , T > fixSelector , IEnumerable < T > expected , IEnumerable < T > result , IEqualityComparer < T > comparer , bool allowEmpty = false )
2851 {
29- var resultList = result . Select ( fixSelector ) . ToList ( ) ;
52+ AreEqual < T > ( fixSelector , expected , result , comparer , null , allowEmpty ) ;
53+ }
54+
55+ protected void AreEqual < T > (
56+ Func < T , T > fixSelector ,
57+ IEnumerable < T > expected ,
58+ IEnumerable < T > result ,
59+ IEqualityComparer < T > comparer ,
60+ Func < IEnumerable < T > , IEnumerable < T > > ? sort ,
61+ bool allowEmpty = false )
62+ {
63+ var resultList = result . Select ( fixSelector ) . ToList ( ) ;
3064 var expectedList = expected . Select ( fixSelector ) . ToList ( ) ;
3165
32- Assert . AreNotEqual ( 0 , expectedList . Count , "Expected list cannot be empty." ) ;
66+ if ( sort != null )
67+ {
68+ resultList = sort ( resultList ) . ToList ( ) ;
69+ expectedList = sort ( expectedList ) . ToList ( ) ;
70+ }
71+
72+ if ( ! allowEmpty )
73+ Assert . AreNotEqual ( 0 , expectedList . Count , "Expected list cannot be empty." ) ;
3374 Assert . AreEqual ( expectedList . Count , resultList . Count , "Expected and result lists are different. Length: " ) ;
3475
35- var exceptExpectedList = resultList . Except ( expectedList , comparer ) . ToList ( ) ;
36- var exceptResultList = expectedList . Except ( resultList , comparer ) . ToList ( ) ;
76+ var exceptExpectedList = resultList . Except ( expectedList , comparer ) . ToList ( ) ;
77+ var exceptResultList = expectedList . Except ( resultList , comparer ) . ToList ( ) ;
3778
3879 var exceptExpected = exceptExpectedList . Count ;
39- var exceptResult = exceptResultList . Count ;
40- var message = new StringBuilder ( ) ;
80+ var exceptResult = exceptResultList . Count ;
81+ var message = new StringBuilder ( ) ;
4182
4283 if ( exceptResult != 0 || exceptExpected != 0 )
84+ {
85+ Debug . WriteLine ( resultList . ToDiagnosticString ( ) ) ;
86+ Debug . WriteLine ( expectedList . ToDiagnosticString ( ) ) ;
87+
4388 for ( var i = 0 ; i < resultList . Count ; i ++ )
4489 {
45- Debug . WriteLine ( "{0} {1} --- {2}" , comparer . Equals ( expectedList [ i ] , resultList [ i ] ) ? " " : "-" , expectedList [ i ] , resultList [ i ] ) ;
90+ Debug . WriteLine ( "{0} {1} --- {2}" , comparer . Equals ( expectedList [ i ] , resultList [ i ] ) ? " " : "-" , expectedList [ i ] , resultList [ i ] ) ;
4691 message . AppendFormat ( "{0} {1} --- {2}" , comparer . Equals ( expectedList [ i ] , resultList [ i ] ) ? " " : "-" , expectedList [ i ] , resultList [ i ] ) ;
47- message . AppendLine ( ) ;
92+ message . AppendLine ( ) ;
4893 }
94+ }
4995
5096 Assert . AreEqual ( 0 , exceptExpected , $ "Expected Was{ Environment . NewLine } { message } ") ;
51- Assert . AreEqual ( 0 , exceptResult , $ "Expect Result{ Environment . NewLine } { message } ") ;
97+ Assert . AreEqual ( 0 , exceptResult , $ "Expect Result{ Environment . NewLine } { message } ") ;
5298 }
5399
54100 protected void AreEqual < T > ( IEnumerable < IEnumerable < T > > expected , IEnumerable < IEnumerable < T > > result )
55101 {
56- var resultList = result . ToList ( ) ;
102+ var resultList = result . ToList ( ) ;
57103 var expectedList = expected . ToList ( ) ;
58104
59105 Assert . AreNotEqual ( 0 , expectedList . Count ) ;
@@ -62,12 +108,29 @@ protected void AreEqual<T>(IEnumerable<IEnumerable<T>> expected, IEnumerable<IEn
62108 for ( var i = 0 ; i < resultList . Count ; i ++ )
63109 {
64110 var elist = expectedList [ i ] . ToList ( ) ;
65- var rlist = resultList [ i ] . ToList ( ) ;
111+ var rlist = resultList [ i ] . ToList ( ) ;
66112
67113 if ( elist . Count > 0 || rlist . Count > 0 )
68114 AreEqual ( elist , rlist ) ;
69115 }
70116 }
71-
117+
118+ protected void AreSame < T > ( IEnumerable < T > expected , IEnumerable < T > result )
119+ {
120+ var resultList = result . ToList ( ) ;
121+ var expectedList = expected . ToList ( ) ;
122+
123+ Assert . AreNotEqual ( 0 , expectedList . Count ) ;
124+ Assert . AreEqual ( expectedList . Count , resultList . Count ) ;
125+
126+ var b = expectedList . SequenceEqual ( resultList ) ;
127+
128+ if ( ! b )
129+ for ( var i = 0 ; i < resultList . Count ; i ++ )
130+ Debug . WriteLine ( "{0} {1} --- {2}" , Equals ( expectedList [ i ] , resultList [ i ] ) ? " " : "-" , expectedList [ i ] , resultList [ i ] ) ;
131+
132+ Assert . IsTrue ( b ) ;
133+ }
134+
72135 }
73136}
0 commit comments