export function testCommand( lines: string[], mode: IMode, selection: Selection, commandFactory: (selection:Selection) => editorCommon.ICommand, expectedLines: string[], expectedSelection: Selection ): void { let model = new Model(lines.join('\n'), Model.DEFAULT_CREATION_OPTIONS, mode); let config = new MockConfiguration(null); let cursor = new Cursor(0, config, model, null, false); cursor.setSelections('tests', [selection]); cursor.trigger('tests', editorCommon.Handler.ExecuteCommand, commandFactory(cursor.getSelection())); let actualValue = model.toRawText().lines; assert.deepEqual(actualValue, expectedLines); let actualSelection = cursor.getSelection(); assert.deepEqual(actualSelection.toString(), expectedSelection.toString()); cursor.dispose(); config.dispose(); model.dispose(); }
export function testCommand( lines: string[], languageIdentifier: LanguageIdentifier, selection: Selection, commandFactory: (selection: Selection) => editorCommon.ICommand, expectedLines: string[], expectedSelection: Selection ): void { let model = Model.createFromString(lines.join('\n'), undefined, languageIdentifier); let config = new MockConfiguration(null); let cursor = new Cursor(config, model, viewModelHelper(model), false); cursor.setSelections('tests', [selection]); cursor.trigger('tests', editorCommon.Handler.ExecuteCommand, commandFactory(cursor.getSelection())); let actualValue = model.toRawText().lines; assert.deepEqual(actualValue, expectedLines); let actualSelection = cursor.getSelection(); assert.deepEqual(actualSelection.toString(), expectedSelection.toString()); cursor.dispose(); config.dispose(); model.dispose(); }
test('no move doesn\'t trigger event', () => { thisCursor.addListener(EventType.CursorPositionChanged, (e) => { assert.ok(false, 'was not expecting event'); }); thisCursor.addListener(EventType.CursorSelectionChanged, (e) => { assert.ok(false, 'was not expecting event'); }); moveTo(thisCursor, 1, 1); });
function usingCursor(opts:ICursorOpts, callback:(model:Model, cursor:Cursor)=>void): void { let model = new Model(opts.text.join('\n'), opts.mode); let config = new MockConfiguration(opts.config); let cursor = new Cursor(1, config, model, null, false); callback(model, cursor); cursor.dispose(); config.dispose(); model.dispose(); }
test('saveState & restoreState', () => { moveTo(thisCursor, 2, 1, true); cursorEqual(thisCursor, 2, 1, 1, 1); let savedState = JSON.stringify(thisCursor.saveState()); moveTo(thisCursor, 1, 1, false); cursorEqual(thisCursor, 1, 1); thisCursor.restoreState(JSON.parse(savedState)); cursorEqual(thisCursor, 2, 1, 1, 1); });
test('move in selection mode eventing', () => { let events = 0; thisCursor.addListener(EventType.CursorPositionChanged, (e) => { events++; positionEqual(e.position, 1, 2); }); thisCursor.addListener(EventType.CursorSelectionChanged, (e) => { events++; selectionEqual(e.selection, 1, 2, 1, 1); }); moveTo(thisCursor, 1, 2, true); assert.equal(events, 2, 'receives 2 events'); });
test('move word right', () => { moveTo(thisCursor, 1, 1); let expectedStops = [ [1, 8], [1, 14], [1, 19], [1, 21], [2, 4], [2, 11], [2, 16], [3, 10], [3, 17], [4, 1], [5, 2], [5, 2], ]; let actualStops:number[][] = []; for (let i = 0; i < expectedStops.length; i++) { moveWordRight(thisCursor); let pos = thisCursor.getPosition(); actualStops.push([pos.lineNumber, pos.column]); } assert.deepEqual(actualStops, expectedStops); });
function _runTest(selection: Selection, editRange: Range, editText: string, editForceMoveMarkers: boolean, expected: Selection, msg: string): void { const model = Model.createFromString(LINES.join('\n')); const config = new TestConfiguration(null); const viewModel = new ViewModel(0, config, model, null); const cursor = new Cursor(config, model, viewModel); cursor.setSelections('tests', [selection]); model.applyEdits([{ range: editRange, text: editText, forceMoveMarkers: editForceMoveMarkers, identifier: null }]); const actual = cursor.getSelection(); assert.deepEqual(actual.toString(), expected.toString(), msg); cursor.dispose(); viewModel.dispose(); config.dispose(); model.dispose(); }
test('move word left', () => { moveTo(thisCursor, 5, 2); let expectedStops = [ [5, 1], [4, 1], [3, 11], [3, 5], [3, 1], [2, 12], [2, 5], [2, 2], [2, 1], [1, 15], [1, 9], [1, 6], [1, 1], [1, 1], ]; let actualStops:number[][] = []; for (let i = 0; i < expectedStops.length; i++) { moveWordLeft(thisCursor); let pos = thisCursor.getPosition(); actualStops.push([pos.lineNumber, pos.column]); } assert.deepEqual(actualStops, expectedStops); });
function testCommand(lines: string[], selections: Selection[], edits: IIdentifiedSingleEditOperation[], expectedLines: string[], expectedSelections: Selection[]): void { let model = Model.createFromString(lines.join('\n')); let config = new TestConfiguration(null); let cursor = new Cursor(config, model, viewModelHelper(model), false); cursor.setSelections('tests', selections); model.applyEdits(edits); assert.deepEqual(model.getLinesContent(), expectedLines); let actualSelections = cursor.getSelections(); assert.deepEqual(actualSelections.map(s => s.toString()), expectedSelections.map(s => s.toString())); cursor.dispose(); config.dispose(); model.dispose(); }