@@ -3,13 +3,18 @@ import 'package:test/test.dart';
3
3
import 'package:get_it/get_it.dart' ;
4
4
5
5
int constructorCounter;
6
+ int disposeCounter;
6
7
7
8
abstract class TestBaseClass {}
8
9
9
10
class TestClass extends TestBaseClass {
10
11
TestClass () {
11
12
constructorCounter++ ;
12
13
}
14
+
15
+ dispose () {
16
+ disposeCounter++ ;
17
+ }
13
18
}
14
19
15
20
void main () {
@@ -51,7 +56,6 @@ void main() {
51
56
GetIt .I .reset ();
52
57
});
53
58
54
-
55
59
test ('register constant' , () {
56
60
var getIt = GetIt .instance;
57
61
constructorCounter = 0 ;
@@ -92,9 +96,8 @@ void main() {
92
96
GetIt .I .reset ();
93
97
});
94
98
95
-
96
- test ('register lazy singleton two instances of GetIt' , () {
97
- GetIt .allowMultipleInstances= true ;
99
+ test ('register lazy singleton two instances of GetIt' , () {
100
+ GetIt .allowMultipleInstances = true ;
98
101
var secondGetIt = GetIt .asNewInstance ();
99
102
100
103
constructorCounter = 0 ;
@@ -115,11 +118,9 @@ void main() {
115
118
expect (instance1, isNot (instanceSecondGetIt));
116
119
expect (constructorCounter, 2 );
117
120
118
-
119
121
GetIt .I .reset ();
120
122
});
121
123
122
-
123
124
test ('trying to access not registered type' , () {
124
125
var getIt = GetIt .instance;
125
126
@@ -192,4 +193,52 @@ void main() {
192
193
expect (() => getIt ('not there' ), throwsA (TypeMatcher <Exception >()));
193
194
GetIt .I .reset ();
194
195
});
196
+
197
+ test ('unregister by type' , () {
198
+ var getIt = GetIt .instance;
199
+ disposeCounter = 0 ;
200
+ constructorCounter = 0 ;
201
+
202
+ getIt.registerSingleton <TestClass >(TestClass ());
203
+
204
+ var instance1 = getIt.get <TestClass >();
205
+
206
+ expect (instance1 is TestClass , true );
207
+
208
+ var instance2 = getIt.get <TestClass >();
209
+
210
+ expect (instance1, instance2);
211
+
212
+ expect (constructorCounter, 1 );
213
+
214
+ getIt.unregister <TestClass >(disposal: (testClass) {
215
+ testClass.dispose ();
216
+ });
217
+
218
+ expect (disposeCounter, 1 );
219
+
220
+ expect (() => getIt.get <TestClass >(), throwsA (TypeMatcher <Exception >()));
221
+ });
222
+
223
+ test ('unregister by name' , () {
224
+ var getIt = GetIt .instance;
225
+ disposeCounter = 0 ;
226
+ constructorCounter = 0 ;
227
+
228
+ getIt.registerSingleton <TestClass >(TestClass (), 'instanceName' );
229
+
230
+ var instance1 = getIt.get ('instanceName' );
231
+
232
+ expect (instance1 is TestClass , true );
233
+
234
+ getIt.unregister <TestClass >(
235
+ instanceName: 'instanceName' ,
236
+ disposal: (testClass) {
237
+ testClass.dispose ();
238
+ });
239
+
240
+ expect (disposeCounter, 1 );
241
+
242
+ expect (() => getIt ('instanceName' ), throwsA (TypeMatcher <Exception >()));
243
+ });
195
244
}
0 commit comments