提交 b612c867 编写于 作者: J Johannes Rieken

stable quickfix model test

上级 37b31837
......@@ -14,7 +14,16 @@ import { MarkerService } from 'vs/platform/markers/common/markerService';
import { QuickFixOracle } from 'vs/editor/contrib/quickFix/browser/quickFixModel';
import { CodeActionProviderRegistry, LanguageIdentifier } from 'vs/editor/common/modes';
import { IDisposable } from 'vs/base/common/lifecycle';
import Event from 'vs/base/common/event';
function promiseOnce<T>(event: Event<T>): TPromise<T> {
return new TPromise(resolve => {
let reg = event(e => {
reg.dispose();
resolve(e);
});
});
}
suite('QuickFix', () => {
......@@ -41,6 +50,7 @@ suite('QuickFix', () => {
reg.dispose();
editor.dispose();
model.dispose();
markerService.dispose();
});
test('Orcale -> marker added', done => {
......@@ -95,45 +105,54 @@ suite('QuickFix', () => {
});
// test('Oracle -> ask once per marker/word', () => {
// markerService.changeOne('fake', uri, [{
// startLineNumber: 1, startColumn: 1, endLineNumber: 1, endColumn: 6,
// message: 'error',
// severity: 1,
// code: '',
// source: ''
// }]);
// let counter = 0;
// let reg = CodeActionProviderRegistry.register(languageIdentifier.language, {
// provideCodeActions() {
// counter += 1;
// return [];
// }
// });
// let fixes: TPromise<any>[] = [];
// let oracle = new QuickFixOracle(editor, markerService, e => {
// fixes.push(e.fixes);
// }, 10);
// editor.setPosition({ lineNumber: 1, column: 3 }); // marker
// editor.setPosition({ lineNumber: 1, column: 6 }); // (same) marker
// return TPromise.timeout(20).then(() => {
// editor.setPosition({ lineNumber: 1, column: 8 }); // whitespace
// editor.setPosition({ lineNumber: 2, column: 2 }); // word
// editor.setPosition({ lineNumber: 2, column: 6 }); // (same) word
// return TPromise.join([TPromise.timeout(20)].concat(fixes)).then(_ => {
// reg.dispose();
// oracle.dispose();
// assert.equal(counter, 2);
// });
// });
// });
test('Oracle -> ask once per marker/word', () => {
const start = promiseOnce(markerService.onMarkerChanged);
markerService.changeOne('fake', uri, [{
startLineNumber: 1, startColumn: 1, endLineNumber: 1, endColumn: 6,
message: 'error',
severity: 1,
code: '',
source: ''
}]);
return start.then(() => {
let stacks: string[] = [];
let counter = 0;
let reg = CodeActionProviderRegistry.register(languageIdentifier.language, {
provideCodeActions() {
counter += 1;
stacks.push(new Error().stack);
return [];
}
});
let fixes: TPromise<any>[] = [];
let oracle = new QuickFixOracle(editor, markerService, e => {
fixes.push(e.fixes);
}, 10);
editor.setPosition({ lineNumber: 1, column: 3 }); // marker
editor.setPosition({ lineNumber: 1, column: 6 }); // (same) marker
return TPromise.join([TPromise.timeout(20)].concat(fixes)).then(() => {
assert.equal(counter, 1, stacks.join('\n----\n'));
editor.setPosition({ lineNumber: 1, column: 8 }); // whitespace
editor.setPosition({ lineNumber: 2, column: 2 }); // word
editor.setPosition({ lineNumber: 2, column: 6 }); // (same) word
return TPromise.join([TPromise.timeout(20)].concat(fixes)).then(_ => {
reg.dispose();
oracle.dispose();
assert.equal(counter, 2, stacks.join('\n----\n'));
});
});
});
});
test('Oracle -> selection wins over marker', () => {
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册