1
1
using System . Collections . Generic ;
2
- using System . Reflection ;
3
2
using NHibernate . Transform ;
4
3
using NUnit . Framework ;
5
4
@@ -8,53 +7,20 @@ namespace NHibernate.Test.NHSpecificTest.NH3957
8
7
[ TestFixture ]
9
8
public class ResultTransformerEqualityFixture
10
9
{
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
+
51
15
// Non reg test case
52
16
[ Test ]
53
17
public void AliasToEntityMapEquality ( )
54
18
{
55
19
var transf1 = new AliasToEntityMapResultTransformer ( ) ;
56
20
var transf2 = new AliasToEntityMapResultTransformer ( ) ;
21
+ HashSet < IResultTransformer > set = new HashSet < IResultTransformer > ( ) { transf1 , transf2 , } ;
57
22
23
+ Assert . That ( set . Count , Is . EqualTo ( 1 ) ) ;
58
24
Assert . IsTrue ( transf1 . Equals ( transf2 ) ) ;
59
25
Assert . IsTrue ( transf2 . Equals ( transf1 ) ) ;
60
26
}
@@ -63,8 +29,11 @@ public void AliasToEntityMapEquality()
63
29
public void AliasToEntityMapAndDistinctRootEntityInequality ( )
64
30
{
65
31
var transf1 = new AliasToEntityMapResultTransformer ( ) ;
66
- var transf2 = new DistinctRootEntityResultTransformer ( ) ;
32
+ var transf2 = new CustomAliasToEntityMapResultTransformer ( ) ;
33
+ HashSet < IResultTransformer > set = new HashSet < IResultTransformer > ( ) { transf1 , transf2 , } ;
67
34
35
+ Assert . That ( transf1 . GetHashCode ( ) , Is . EqualTo ( transf2 . GetHashCode ( ) ) , "prerequisite" ) ;
36
+ Assert . That ( set . Count , Is . EqualTo ( 2 ) ) ;
68
37
Assert . IsFalse ( transf1 . Equals ( transf2 ) ) ;
69
38
Assert . IsFalse ( transf2 . Equals ( transf1 ) ) ;
70
39
}
@@ -75,18 +44,35 @@ public void DistinctRootEntityEquality()
75
44
{
76
45
var transf1 = new DistinctRootEntityResultTransformer ( ) ;
77
46
var transf2 = new DistinctRootEntityResultTransformer ( ) ;
47
+ HashSet < IResultTransformer > set = new HashSet < IResultTransformer > ( ) { transf1 , transf2 , } ;
78
48
49
+ Assert . That ( set . Count , Is . EqualTo ( 1 ) ) ;
79
50
Assert . IsTrue ( transf1 . Equals ( transf2 ) ) ;
80
51
Assert . IsTrue ( transf2 . Equals ( transf1 ) ) ;
81
52
}
82
53
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
+
83
67
// Non reg test case
84
68
[ Test ]
85
69
public void PassThroughEquality ( )
86
70
{
87
71
var transf1 = new PassThroughResultTransformer ( ) ;
88
72
var transf2 = new PassThroughResultTransformer ( ) ;
73
+ HashSet < IResultTransformer > set = new HashSet < IResultTransformer > ( ) { transf1 , transf2 , } ;
89
74
75
+ Assert . That ( set . Count , Is . EqualTo ( 1 ) ) ;
90
76
Assert . IsTrue ( transf1 . Equals ( transf2 ) ) ;
91
77
Assert . IsTrue ( transf2 . Equals ( transf1 ) ) ;
92
78
}
@@ -95,8 +81,11 @@ public void PassThroughEquality()
95
81
public void PassThroughAndRootEntityInequality ( )
96
82
{
97
83
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 ) ) ;
100
89
Assert . IsFalse ( transf1 . Equals ( transf2 ) ) ;
101
90
Assert . IsFalse ( transf2 . Equals ( transf1 ) ) ;
102
91
}
@@ -107,7 +96,9 @@ public void RootEntityEquality()
107
96
{
108
97
var transf1 = new RootEntityResultTransformer ( ) ;
109
98
var transf2 = new RootEntityResultTransformer ( ) ;
99
+ HashSet < IResultTransformer > set = new HashSet < IResultTransformer > ( ) { transf1 , transf2 , } ;
110
100
101
+ Assert . That ( set . Count , Is . EqualTo ( 1 ) ) ;
111
102
Assert . IsTrue ( transf1 . Equals ( transf2 ) ) ;
112
103
Assert . IsTrue ( transf2 . Equals ( transf1 ) ) ;
113
104
}
@@ -116,8 +107,11 @@ public void RootEntityEquality()
116
107
public void RootEntityAndToListInequality ( )
117
108
{
118
109
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 ) ) ;
121
115
Assert . IsFalse ( transf1 . Equals ( transf2 ) ) ;
122
116
Assert . IsFalse ( transf2 . Equals ( transf1 ) ) ;
123
117
}
@@ -128,9 +122,11 @@ public void ToListEquality()
128
122
{
129
123
var transf1 = new ToListResultTransformer ( ) ;
130
124
var transf2 = new ToListResultTransformer ( ) ;
125
+ HashSet < IResultTransformer > set = new HashSet < IResultTransformer > ( ) { transf1 , transf2 } ;
131
126
127
+ Assert . That ( set . Count , Is . EqualTo ( 1 ) ) ;
132
128
Assert . IsTrue ( transf1 . Equals ( transf2 ) ) ;
133
129
Assert . IsTrue ( transf2 . Equals ( transf1 ) ) ;
134
130
}
135
131
}
136
- }
132
+ }
0 commit comments