4
4
*/
5
5
package org .mockito .internal .configuration .plugins ;
6
6
7
- import static org .junit .Assert .assertNotNull ;
8
7
import static org .junit .Assert .assertSame ;
9
8
import static org .mockito .BDDMockito .willReturn ;
9
+ import static org .mockito .Mockito .never ;
10
+ import static org .mockito .Mockito .verify ;
10
11
import static org .mockito .Mockito .when ;
11
12
12
13
import org .assertj .core .api .Assertions ;
@@ -29,13 +30,27 @@ public class PluginLoaderTest {
29
30
30
31
@ Test
31
32
public void loads_plugin () {
32
- when (initializer .loadImpl (FooPlugin .class )).thenReturn (new FooPlugin ());
33
+ FooPlugin expected = new FooPlugin ();
34
+ when (initializer .loadImpl (FooPlugin .class )).thenReturn (expected );
33
35
34
36
// when
35
37
FooPlugin plugin = loader .loadPlugin (FooPlugin .class );
36
38
37
39
// then
38
- assertNotNull (plugin );
40
+ assertSame (expected , plugin );
41
+ }
42
+
43
+ @ Test
44
+ public void loads_preferred_plugin () {
45
+ FooPlugin expected = new FooPlugin ();
46
+ willReturn (expected ).given (initializer ).loadImpl (FooPlugin .class );
47
+
48
+ // when
49
+ Object plugin = loader .loadPlugin (FooPlugin .class , BarPlugin .class );
50
+
51
+ // then
52
+ assertSame (expected , plugin );
53
+ verify (initializer , never ()).loadImpl (BarPlugin .class );
39
54
}
40
55
41
56
@ Test
@@ -48,7 +63,7 @@ public void loads_alternative_plugin() {
48
63
Object plugin = loader .loadPlugin (FooPlugin .class , BarPlugin .class );
49
64
50
65
// then
51
- assertSame (plugin , expected );
66
+ assertSame (expected , plugin );
52
67
}
53
68
54
69
@ Test
@@ -62,7 +77,7 @@ public void loads_default_plugin() {
62
77
Object plugin = loader .loadPlugin (FooPlugin .class , BarPlugin .class );
63
78
64
79
// then
65
- assertSame (plugin , expected );
80
+ assertSame (expected , plugin );
66
81
}
67
82
68
83
@ Test
@@ -87,9 +102,141 @@ public void call() throws Throwable {
87
102
.hasCause (cause );
88
103
}
89
104
105
+ @ Test
106
+ public void loads_preferred_plugin_inheritance () {
107
+ FooChildPlugin expected = new FooChildPlugin ();
108
+ willReturn (expected ).given (initializer ).loadImpl (Foo .class );
109
+
110
+ // when
111
+ Foo plugin = loader .loadPlugin (Foo .class , FooChildPlugin .class );
112
+
113
+ // then
114
+ assertSame (expected , plugin );
115
+ verify (initializer , never ()).loadImpl (FooChildPlugin .class );
116
+ }
117
+
118
+ @ Test
119
+ public void loads_alternative_plugin_inheritance () {
120
+ willReturn (null ).given (initializer ).loadImpl (Bar .class );
121
+ BarChildPlugin expected = new BarChildPlugin ();
122
+ willReturn (expected ).given (initializer ).loadImpl (BarChildPlugin .class );
123
+
124
+ // when
125
+ Bar plugin = loader .loadPlugin (Bar .class , BarChildPlugin .class );
126
+
127
+ // then
128
+ assertSame (expected , plugin );
129
+ }
130
+
131
+ @ Test
132
+ public void loads_default_plugin_inheritance () {
133
+ willReturn (null ).given (initializer ).loadImpl (Foo .class );
134
+ willReturn (null ).given (initializer ).loadImpl (FooChildPlugin .class );
135
+ FooChildPlugin expected = new FooChildPlugin ();
136
+ willReturn (expected ).given (plugins ).getDefaultPlugin (Foo .class );
137
+
138
+ // when
139
+ Foo plugin = loader .loadPlugin (Foo .class , FooChildPlugin .class );
140
+
141
+ // then
142
+ assertSame (expected , plugin );
143
+ }
144
+
145
+ @ Test
146
+ public void loads_preferred_plugin_inheritance_reversed () {
147
+ FooChildPlugin expected = new FooChildPlugin ();
148
+ willReturn (expected ).given (initializer ).loadImpl (FooChildPlugin .class );
149
+
150
+ // when
151
+ Foo plugin = loader .loadPlugin (FooChildPlugin .class , Foo .class );
152
+
153
+ // then
154
+ assertSame (expected , plugin );
155
+ verify (initializer , never ()).loadImpl (Foo .class );
156
+ }
157
+
158
+ @ Test
159
+ public void loads_alternative_plugin_inheritance_reversed () {
160
+ willReturn (null ).given (initializer ).loadImpl (BarChildPlugin .class );
161
+ BarChildPlugin expected = new BarChildPlugin ();
162
+ willReturn (expected ).given (initializer ).loadImpl (Bar .class );
163
+
164
+ // when
165
+ Bar plugin = loader .loadPlugin (BarChildPlugin .class , Bar .class );
166
+
167
+ // then
168
+ assertSame (expected , plugin );
169
+ }
170
+
171
+ @ Test
172
+ public void loads_default_plugin_inheritance_reversed () {
173
+ willReturn (null ).given (initializer ).loadImpl (Foo .class );
174
+ willReturn (null ).given (initializer ).loadImpl (FooChildPlugin .class );
175
+ FooChildPlugin expected = new FooChildPlugin ();
176
+ willReturn (expected ).given (plugins ).getDefaultPlugin (FooChildPlugin .class );
177
+
178
+ // when
179
+ Foo plugin = loader .loadPlugin (FooChildPlugin .class , Foo .class );
180
+
181
+ // then
182
+ assertSame (expected , plugin );
183
+ }
184
+
185
+ @ Test
186
+ public void loads_preferred_plugin_inheritance_lowest_common_denominator () {
187
+ FooBarChildPlugin1 expected = new FooBarChildPlugin1 ();
188
+ willReturn (expected ).given (initializer ).loadImpl (FooBarChildPlugin1 .class );
189
+
190
+ // when
191
+ FooBar plugin = loader .loadPlugin (FooBarChildPlugin1 .class , FooBarChildPlugin2 .class );
192
+
193
+ // then
194
+ assertSame (expected , plugin );
195
+ verify (initializer , never ()).loadImpl (FooBarChildPlugin2 .class );
196
+ }
197
+
198
+ @ Test
199
+ public void loads_alternative_plugin_inheritance_lowest_common_denominator () {
200
+ willReturn (null ).given (initializer ).loadImpl (FooBarChildPlugin1 .class );
201
+ FooBarChildPlugin2 expected = new FooBarChildPlugin2 ();
202
+ willReturn (expected ).given (initializer ).loadImpl (FooBarChildPlugin2 .class );
203
+
204
+ // when
205
+ FooBar plugin = loader .loadPlugin (FooBarChildPlugin1 .class , FooBarChildPlugin2 .class );
206
+
207
+ // then
208
+ assertSame (expected , plugin );
209
+ }
210
+
211
+ @ Test
212
+ public void loads_default_plugin_inheritance_lowest_common_denominator () {
213
+ willReturn (null ).given (initializer ).loadImpl (FooBarChildPlugin1 .class );
214
+ willReturn (null ).given (initializer ).loadImpl (FooBarChildPlugin2 .class );
215
+ FooBarChildPlugin1 expected = new FooBarChildPlugin1 ();
216
+ willReturn (expected ).given (plugins ).getDefaultPlugin (FooBarChildPlugin1 .class );
217
+
218
+ // when
219
+ FooBar plugin = loader .loadPlugin (FooBarChildPlugin1 .class , FooBarChildPlugin2 .class );
220
+
221
+ // then
222
+ assertSame (expected , plugin );
223
+ }
224
+
90
225
static class FooPlugin {}
91
226
92
227
static class BarPlugin {}
93
228
94
- static interface Foo {}
229
+ interface Foo {}
230
+
231
+ interface Bar {}
232
+
233
+ static class BarChildPlugin implements Bar {}
234
+
235
+ static class FooChildPlugin implements Foo {}
236
+
237
+ interface FooBar {}
238
+
239
+ static class FooBarChildPlugin1 implements FooBar {}
240
+
241
+ static class FooBarChildPlugin2 implements FooBar {}
95
242
}
0 commit comments