@@ -8,6 +8,7 @@ import { CancellationToken } from 'vs/base/common/cancellation';
8
8
import { DisposableStore } from 'vs/base/common/lifecycle' ;
9
9
import { URI } from 'vs/base/common/uri' ;
10
10
import { runWithFakedTimers } from 'vs/base/test/common/timeTravelScheduler' ;
11
+ import { ensureNoDisposablesAreLeakedInTestSuite } from 'vs/base/test/common/utils' ;
11
12
import { Position } from 'vs/editor/common/core/position' ;
12
13
import { Handler } from 'vs/editor/common/editorCommon' ;
13
14
import { LanguageFeatureRegistry } from 'vs/editor/common/languageFeatureRegistry' ;
@@ -41,8 +42,7 @@ const emptySigHelpResult: languages.SignatureHelpResult = {
41
42
42
43
suite ( 'ParameterHintsModel' , ( ) => {
43
44
const disposables = new DisposableStore ( ) ;
44
-
45
- let registry = new LanguageFeatureRegistry < languages . SignatureHelpProvider > ( ) ;
45
+ let registry : LanguageFeatureRegistry < languages . SignatureHelpProvider > ;
46
46
47
47
setup ( ( ) => {
48
48
disposables . clear ( ) ;
@@ -53,19 +53,28 @@ suite('ParameterHintsModel', () => {
53
53
disposables . clear ( ) ;
54
54
} ) ;
55
55
56
+ ensureNoDisposablesAreLeakedInTestSuite ( ) ;
57
+
56
58
function createMockEditor ( fileContents : string ) {
57
- const textModel = createTextModel ( fileContents , undefined , undefined , mockFile ) ;
58
- const editor = createTestCodeEditor ( textModel , {
59
+ const textModel = disposables . add ( createTextModel ( fileContents , undefined , undefined , mockFile ) ) ;
60
+ const editor = disposables . add ( createTestCodeEditor ( textModel , {
59
61
serviceCollection : new ServiceCollection (
60
62
[ ITelemetryService , NullTelemetryService ] ,
61
- [ IStorageService , new InMemoryStorageService ( ) ]
63
+ [ IStorageService , disposables . add ( new InMemoryStorageService ( ) ) ]
62
64
)
63
- } ) ;
64
- disposables . add ( textModel ) ;
65
- disposables . add ( editor ) ;
65
+ } ) ) ;
66
66
return editor ;
67
67
}
68
68
69
+ function getNextHint ( model : ParameterHintsModel ) {
70
+ return new Promise < languages . SignatureHelpResult | undefined > ( resolve => {
71
+ const sub = disposables . add ( model . onChangedHints ( e => {
72
+ sub . dispose ( ) ;
73
+ return resolve ( e ? { value : e , dispose : ( ) => { } } : undefined ) ;
74
+ } ) ) ;
75
+ } ) ;
76
+ }
77
+
69
78
test ( 'Provider should get trigger character on type' , async ( ) => {
70
79
let done : ( ) => void ;
71
80
const donePromise = new Promise < void > ( resolve => { done = resolve ; } ) ;
@@ -148,8 +157,7 @@ suite('ParameterHintsModel', () => {
148
157
const triggerChar = '(' ;
149
158
150
159
const editor = createMockEditor ( '' ) ;
151
- const hintModel = new ParameterHintsModel ( editor , registry ) ;
152
- disposables . add ( hintModel ) ;
160
+ const hintModel = disposables . add ( new ParameterHintsModel ( editor , registry ) ) ;
153
161
154
162
let invokeCount = 0 ;
155
163
disposables . add ( registry . register ( mockFileSelector , new class implements languages . SignatureHelpProvider {
@@ -281,7 +289,7 @@ suite('ParameterHintsModel', () => {
281
289
test ( 'Should cancel existing request when new request comes in' , async ( ) => {
282
290
283
291
const editor = createMockEditor ( 'abc def' ) ;
284
- const hintsModel = new ParameterHintsModel ( editor , registry ) ;
292
+ const hintsModel = disposables . add ( new ParameterHintsModel ( editor , registry ) ) ;
285
293
286
294
let didRequestCancellationOf = - 1 ;
287
295
let invokeCount = 0 ;
@@ -293,7 +301,7 @@ suite('ParameterHintsModel', () => {
293
301
provideSignatureHelp ( _model : ITextModel , _position : Position , token : CancellationToken ) : languages . SignatureHelpResult | Promise < languages . SignatureHelpResult > {
294
302
try {
295
303
const count = invokeCount ++ ;
296
- token . onCancellationRequested ( ( ) => { didRequestCancellationOf = count ; } ) ;
304
+ disposables . add ( token . onCancellationRequested ( ( ) => { didRequestCancellationOf = count ; } ) ) ;
297
305
298
306
// retrigger on first request
299
307
if ( count === 0 ) {
@@ -330,15 +338,15 @@ suite('ParameterHintsModel', () => {
330
338
assert . strictEqual ( - 1 , didRequestCancellationOf ) ;
331
339
332
340
return new Promise < void > ( ( resolve , reject ) =>
333
- hintsModel . onChangedHints ( newParamterHints => {
341
+ disposables . add ( hintsModel . onChangedHints ( newParamterHints => {
334
342
try {
335
343
assert . strictEqual ( 0 , didRequestCancellationOf ) ;
336
344
assert . strictEqual ( '1' , newParamterHints ! . signatures [ 0 ] . label ) ;
337
345
resolve ( ) ;
338
346
} catch ( e ) {
339
347
reject ( e ) ;
340
348
}
341
- } ) ) ;
349
+ } ) ) ) ;
342
350
} ) ;
343
351
} ) ;
344
352
@@ -401,8 +409,7 @@ suite('ParameterHintsModel', () => {
401
409
const paramterLabel = 'parameter' ;
402
410
403
411
const editor = createMockEditor ( '' ) ;
404
- const model = new ParameterHintsModel ( editor , registry , 5 ) ;
405
- disposables . add ( model ) ;
412
+ const model = disposables . add ( new ParameterHintsModel ( editor , registry , 5 ) ) ;
406
413
407
414
disposables . add ( registry . register ( mockFileSelector , new class implements languages . SignatureHelpProvider {
408
415
signatureHelpTriggerCharacters = [ triggerChar ] ;
@@ -477,8 +484,7 @@ suite('ParameterHintsModel', () => {
477
484
478
485
test ( 'Quick typing should use the first trigger character' , async ( ) => {
479
486
const editor = createMockEditor ( '' ) ;
480
- const model = new ParameterHintsModel ( editor , registry , 50 ) ;
481
- disposables . add ( model ) ;
487
+ const model = disposables . add ( new ParameterHintsModel ( editor , registry , 50 ) ) ;
482
488
483
489
const triggerCharacter = 'a' ;
484
490
@@ -519,8 +525,7 @@ suite('ParameterHintsModel', () => {
519
525
const donePromise = new Promise < void > ( resolve => { done = resolve ; } ) ;
520
526
521
527
const editor = createMockEditor ( '' ) ;
522
- const model = new ParameterHintsModel ( editor , registry , 50 ) ;
523
- disposables . add ( model ) ;
528
+ const model = disposables . add ( new ParameterHintsModel ( editor , registry , 50 ) ) ;
524
529
525
530
const triggerCharacter = 'a' ;
526
531
const retriggerCharacter = 'b' ;
@@ -570,12 +575,3 @@ suite('ParameterHintsModel', () => {
570
575
} ) ;
571
576
} ) ;
572
577
} ) ;
573
-
574
- function getNextHint ( model : ParameterHintsModel ) {
575
- return new Promise < languages . SignatureHelpResult | undefined > ( resolve => {
576
- const sub = model . onChangedHints ( e => {
577
- sub . dispose ( ) ;
578
- return resolve ( e ? { value : e , dispose : ( ) => { } } : undefined ) ;
579
- } ) ;
580
- } ) ;
581
- }
0 commit comments