diff --git a/src/vs/editor/contrib/find/common/findController.ts b/src/vs/editor/contrib/find/common/findController.ts index 1bf1763208411ccdb8b73a08e7000aed81f1eea2..f89e90885a7cfd0a137b691320488c995c4739ea 100644 --- a/src/vs/editor/contrib/find/common/findController.ts +++ b/src/vs/editor/contrib/find/common/findController.ts @@ -46,7 +46,7 @@ export class CommonFindController extends Disposable implements editorCommon.IEd private _findWidgetVisible: IContextKey; protected _state: FindReplaceState; private _currentHistoryNavigator: HistoryNavigator; - private _updateHistoryDelayer: Delayer; + protected _updateHistoryDelayer: Delayer; private _model: FindModelBoundToEditorModel; public static get(editor: editorCommon.ICommonCodeEditor): CommonFindController { diff --git a/src/vs/editor/contrib/find/test/common/findController.test.ts b/src/vs/editor/contrib/find/test/common/findController.test.ts index 2a30dcdd0824f2281a8056c27be98327f00af0e4..084a296e0e25c3d63eed94f2c7e5c40341714bca 100644 --- a/src/vs/editor/contrib/find/test/common/findController.test.ts +++ b/src/vs/editor/contrib/find/test/common/findController.test.ts @@ -5,11 +5,13 @@ 'use strict'; import * as assert from 'assert'; +import { TPromise } from 'vs/base/common/winjs.base'; +import { Emitter } from 'vs/base/common/event'; import { EditOperation } from 'vs/editor/common/core/editOperation'; import { Position } from 'vs/editor/common/core/position'; import { Selection } from 'vs/editor/common/core/selection'; import { Range } from 'vs/editor/common/core/range'; -import { IRange, EndOfLineSequence } from 'vs/editor/common/editorCommon'; +import { IRange, EndOfLineSequence, ICommonCodeEditor } from 'vs/editor/common/editorCommon'; import { CommonFindController, FindStartFocusAction, IFindStartOptions, NextMatchFindAction, StartFindAction, SelectHighlightsAction, @@ -17,11 +19,21 @@ import { } from 'vs/editor/contrib/find/common/findController'; import { MockCodeEditor, withMockCodeEditor } from 'vs/editor/test/common/mocks/mockCodeEditor'; import { HistoryNavigator } from 'vs/base/common/history'; +import { IContextKeyService } from 'vs/platform/contextkey/common/contextkey'; +import { Delayer } from 'vs/base/common/async'; class TestFindController extends CommonFindController { public hasFocus: boolean; public delayUpdateHistory: boolean = false; + public delayedUpdateHistoryPromise: TPromise; + + private _delayedUpdateHistoryEvent: Emitter = new Emitter(); + + constructor(editor: ICommonCodeEditor, @IContextKeyService contextKeyService: IContextKeyService) { + super(editor, contextKeyService); + this._updateHistoryDelayer = new Delayer(50); + } protected _start(opts: IFindStartOptions): void { super._start(opts); @@ -32,12 +44,26 @@ class TestFindController extends CommonFindController { } protected _delayedUpdateHistory() { + if (!this.delayedUpdateHistoryPromise) { + this.delayedUpdateHistoryPromise = new TPromise((c, e) => { + const disposable = this._delayedUpdateHistoryEvent.event(() => { + disposable.dispose(); + this.delayedUpdateHistoryPromise = null; + c(null); + }); + }); + } if (this.delayUpdateHistory) { super._delayedUpdateHistory(); } else { this._updateHistory(); } } + + protected _updateHistory() { + super._updateHistory(); + this._delayedUpdateHistoryEvent.fire(); + } } suite('FindController', () => { @@ -237,10 +263,10 @@ suite('FindController', () => { findController.getState().change({ searchString: '2' }, false); findController.getState().change({ searchString: '3' }, false); - setTimeout(function () { + findController.delayedUpdateHistoryPromise.then(() => { assert.deepEqual(['3'], toArray(findController.getHistory())); done(); - }, 500); + }); }); });