11using System . Collections . Generic ;
2- using System . Reflection ;
32using NHibernate . Transform ;
43using NUnit . Framework ;
54
@@ -8,53 +7,20 @@ namespace NHibernate.Test.NHSpecificTest.NH3957
87 [ TestFixture ]
98 public class ResultTransformerEqualityFixture
109 {
11- /// <summary>
12- /// Allows to simulate a hashcode collision. Issue would be unpractical to test otherwise.
13- /// Hashcode collision must be supported for avoiding unexpected and hard to reproduce failures.
14- /// </summary>
15- private void TweakHashcode ( System . Type transformerToTweak , object hasher )
16- {
17- var hasherTargetField = transformerToTweak . GetField ( "Hasher" , BindingFlags . Static | BindingFlags . NonPublic ) ;
18- if ( ! _hasherBackup . ContainsKey ( transformerToTweak ) )
19- _hasherBackup . Add ( transformerToTweak , hasherTargetField . GetValue ( null ) ) ;
20-
21- // Though hasher is a readonly field, this works at the time of this writing. If it starts breaking and cannot be fixed,
22- // ignore those tests or throw them away.
23- hasherTargetField . SetValue ( null , hasher ) ;
24- }
25-
26- private Dictionary < System . Type , object > _hasherBackup = new Dictionary < System . Type , object > ( ) ;
27-
28- [ SetUp ]
29- public void Setup ( )
30- {
31- var hasherForAll = typeof ( AliasToEntityMapResultTransformer )
32- . GetField ( "Hasher" , BindingFlags . Static | BindingFlags . NonPublic )
33- . GetValue ( null ) ;
34- TweakHashcode ( typeof ( DistinctRootEntityResultTransformer ) , hasherForAll ) ;
35- TweakHashcode ( typeof ( PassThroughResultTransformer ) , hasherForAll ) ;
36- TweakHashcode ( typeof ( RootEntityResultTransformer ) , hasherForAll ) ;
37- TweakHashcode ( typeof ( ToListResultTransformer ) , hasherForAll ) ;
38- }
39-
40- [ TearDown ]
41- public void TearDown ( )
42- {
43- // Restore those types hashcode. (Avoid impacting perf of other tests, avoid second level query cache
44- // issues if it was holding cached entries (but would mean some tests have not cleaned up properly).)
45- foreach ( var backup in _hasherBackup )
46- {
47- TweakHashcode ( backup . Key , backup . Value ) ;
48- }
49- }
50-
10+ public class CustomAliasToEntityMapResultTransformer : AliasToEntityMapResultTransformer { }
11+ public class CustomDistinctRootEntityResultTransformer : DistinctRootEntityResultTransformer { }
12+ public class CustomPassThroughResultTransformer : PassThroughResultTransformer { }
13+ public class CustomRootEntityResultTransformer : RootEntityResultTransformer { }
14+
5115 // Non reg test case
5216 [ Test ]
5317 public void AliasToEntityMapEquality ( )
5418 {
5519 var transf1 = new AliasToEntityMapResultTransformer ( ) ;
5620 var transf2 = new AliasToEntityMapResultTransformer ( ) ;
21+ HashSet < IResultTransformer > set = new HashSet < IResultTransformer > ( ) { transf1 , transf2 , } ;
5722
23+ Assert . That ( set . Count , Is . EqualTo ( 1 ) ) ;
5824 Assert . IsTrue ( transf1 . Equals ( transf2 ) ) ;
5925 Assert . IsTrue ( transf2 . Equals ( transf1 ) ) ;
6026 }
@@ -63,8 +29,11 @@ public void AliasToEntityMapEquality()
6329 public void AliasToEntityMapAndDistinctRootEntityInequality ( )
6430 {
6531 var transf1 = new AliasToEntityMapResultTransformer ( ) ;
66- var transf2 = new DistinctRootEntityResultTransformer ( ) ;
32+ var transf2 = new CustomAliasToEntityMapResultTransformer ( ) ;
33+ HashSet < IResultTransformer > set = new HashSet < IResultTransformer > ( ) { transf1 , transf2 , } ;
6734
35+ Assert . That ( transf1 . GetHashCode ( ) , Is . EqualTo ( transf2 . GetHashCode ( ) ) , "prerequisite" ) ;
36+ Assert . That ( set . Count , Is . EqualTo ( 2 ) ) ;
6837 Assert . IsFalse ( transf1 . Equals ( transf2 ) ) ;
6938 Assert . IsFalse ( transf2 . Equals ( transf1 ) ) ;
7039 }
@@ -75,18 +44,35 @@ public void DistinctRootEntityEquality()
7544 {
7645 var transf1 = new DistinctRootEntityResultTransformer ( ) ;
7746 var transf2 = new DistinctRootEntityResultTransformer ( ) ;
47+ HashSet < IResultTransformer > set = new HashSet < IResultTransformer > ( ) { transf1 , transf2 , } ;
7848
49+ Assert . That ( set . Count , Is . EqualTo ( 1 ) ) ;
7950 Assert . IsTrue ( transf1 . Equals ( transf2 ) ) ;
8051 Assert . IsTrue ( transf2 . Equals ( transf1 ) ) ;
8152 }
8253
54+ [ Test ]
55+ public void DistinctRootEntityEqualityInequality ( )
56+ {
57+ var transf1 = new DistinctRootEntityResultTransformer ( ) ;
58+ var transf2 = new CustomDistinctRootEntityResultTransformer ( ) ;
59+ HashSet < IResultTransformer > set = new HashSet < IResultTransformer > ( ) { transf1 , transf2 , } ;
60+
61+ Assert . That ( transf1 . GetHashCode ( ) , Is . EqualTo ( transf2 . GetHashCode ( ) ) , "prerequisite" ) ;
62+ Assert . That ( set . Count , Is . EqualTo ( 2 ) ) ;
63+ Assert . IsFalse ( transf1 . Equals ( transf2 ) ) ;
64+ Assert . IsFalse ( transf2 . Equals ( transf1 ) ) ;
65+ }
66+
8367 // Non reg test case
8468 [ Test ]
8569 public void PassThroughEquality ( )
8670 {
8771 var transf1 = new PassThroughResultTransformer ( ) ;
8872 var transf2 = new PassThroughResultTransformer ( ) ;
73+ HashSet < IResultTransformer > set = new HashSet < IResultTransformer > ( ) { transf1 , transf2 , } ;
8974
75+ Assert . That ( set . Count , Is . EqualTo ( 1 ) ) ;
9076 Assert . IsTrue ( transf1 . Equals ( transf2 ) ) ;
9177 Assert . IsTrue ( transf2 . Equals ( transf1 ) ) ;
9278 }
@@ -95,8 +81,11 @@ public void PassThroughEquality()
9581 public void PassThroughAndRootEntityInequality ( )
9682 {
9783 var transf1 = new PassThroughResultTransformer ( ) ;
98- var transf2 = new RootEntityResultTransformer ( ) ;
99-
84+ var transf2 = new CustomPassThroughResultTransformer ( ) ;
85+ HashSet < IResultTransformer > set = new HashSet < IResultTransformer > ( ) { transf1 , transf2 , } ;
86+
87+ Assert . That ( transf1 . GetHashCode ( ) , Is . EqualTo ( transf2 . GetHashCode ( ) ) , "prerequisite" ) ;
88+ Assert . That ( set . Count , Is . EqualTo ( 2 ) ) ;
10089 Assert . IsFalse ( transf1 . Equals ( transf2 ) ) ;
10190 Assert . IsFalse ( transf2 . Equals ( transf1 ) ) ;
10291 }
@@ -107,7 +96,9 @@ public void RootEntityEquality()
10796 {
10897 var transf1 = new RootEntityResultTransformer ( ) ;
10998 var transf2 = new RootEntityResultTransformer ( ) ;
99+ HashSet < IResultTransformer > set = new HashSet < IResultTransformer > ( ) { transf1 , transf2 , } ;
110100
101+ Assert . That ( set . Count , Is . EqualTo ( 1 ) ) ;
111102 Assert . IsTrue ( transf1 . Equals ( transf2 ) ) ;
112103 Assert . IsTrue ( transf2 . Equals ( transf1 ) ) ;
113104 }
@@ -116,8 +107,11 @@ public void RootEntityEquality()
116107 public void RootEntityAndToListInequality ( )
117108 {
118109 var transf1 = new RootEntityResultTransformer ( ) ;
119- var transf2 = new ToListResultTransformer ( ) ;
120-
110+ var transf2 = new CustomRootEntityResultTransformer ( ) ;
111+ HashSet < IResultTransformer > set = new HashSet < IResultTransformer > ( ) { transf1 , transf2 , } ;
112+
113+ Assert . That ( transf1 . GetHashCode ( ) , Is . EqualTo ( transf2 . GetHashCode ( ) ) , "prerequisite" ) ;
114+ Assert . That ( set . Count , Is . EqualTo ( 2 ) ) ;
121115 Assert . IsFalse ( transf1 . Equals ( transf2 ) ) ;
122116 Assert . IsFalse ( transf2 . Equals ( transf1 ) ) ;
123117 }
@@ -128,9 +122,11 @@ public void ToListEquality()
128122 {
129123 var transf1 = new ToListResultTransformer ( ) ;
130124 var transf2 = new ToListResultTransformer ( ) ;
125+ HashSet < IResultTransformer > set = new HashSet < IResultTransformer > ( ) { transf1 , transf2 } ;
131126
127+ Assert . That ( set . Count , Is . EqualTo ( 1 ) ) ;
132128 Assert . IsTrue ( transf1 . Equals ( transf2 ) ) ;
133129 Assert . IsTrue ( transf2 . Equals ( transf1 ) ) ;
134130 }
135131 }
136- }
132+ }
0 commit comments