test('word at/until pos', () => { var pos = { lineNumber: 1, column: 3 }; assert.equal(mirrorModel.getWordAtPosition(pos).word, 'line1'); var model = createMirrorModelFromString(null, 0, 'foo bar 1234 :";\'', editorCommon.DefaultEndOfLine.LF, createMockMode('mock.mode.id')); assert.equal(model.getWordAtPosition({lineNumber: 1, column: 1}).word, 'foo'); assert.equal(model.getWordAtPosition({lineNumber: 1, column: 2}).word, 'foo'); assert.equal(model.getWordAtPosition({lineNumber: 1, column: 3}).word, 'foo'); assert.equal(model.getWordAtPosition({lineNumber: 1, column: 4}).word, 'foo'); assert.equal(model.getWordAtPosition({lineNumber: 1, column: 5}).word, 'bar'); assert.equal(model.getWordAtPosition({lineNumber: 1, column: 6}).word, 'bar'); assert.equal(model.getWordAtPosition({lineNumber: 1, column: 7}).word, 'bar'); assert.equal(model.getWordAtPosition({lineNumber: 1, column: 8}).word, 'bar'); assert.equal(model.getWordAtPosition({lineNumber: 1, column: 9}).word, '1234'); assert.equal(model.getWordAtPosition({lineNumber: 1, column: 10}).word, '1234'); assert.equal(model.getWordAtPosition({lineNumber: 1, column: 11}).word, '1234'); assert.equal(model.getWordAtPosition({lineNumber: 1, column: 12}).word, '1234'); assert.equal(model.getWordAtPosition({lineNumber: 1, column: 13}).word, '1234'); assert.equal(model.getWordAtPosition({lineNumber: 1, column: 14}), null); assert.equal(model.getWordAtPosition({lineNumber: 1, column: 15}), null); assert.equal(model.getWordAtPosition({lineNumber: 1, column: 16}), null); assert.equal(mirrorModel.getWordUntilPosition(pos).word, 'li'); });
test('get position from offset', () => { assert.deepEqual(mirrorModel.getPositionFromOffset(0), {lineNumber: 1, column: 1}); assert.deepEqual(mirrorModel.getPositionFromOffset(2), {lineNumber: 1, column: 3}); assert.deepEqual(mirrorModel.getPositionFromOffset(6), {lineNumber: 2, column: 1}); assert.deepEqual(mirrorModel.getPositionFromOffset(23), {lineNumber: 4, column: 6}); assert.deepEqual(mirrorModel.getPositionFromOffset(24), {lineNumber: 4, column: 6}); });
test('get line start ', () => { assert.equal(mirrorModel.getLineStart(1), 0); assert.equal(mirrorModel.getLineStart(2), 6); assert.equal(mirrorModel.getLineStart(3), 12); assert.equal(mirrorModel.getLineStart(4), 18); assert.equal(mirrorModel.getLineStart(1000), mirrorModel.getLineStart(mirrorModel.getLineCount())); });
test('issue #1580: Changes in line endings are not correctly reflected in the extension host, leading to invalid offsets sent to external refactoring tools', () => { let model = EditableTextModel.createFromString('Hello\nWorld!'); assert.equal(model.getEOL(), '\n'); let mirrorModel2 = new MirrorModel(null, model.getLinesContent(), model.getEOL(), model.getVersionId()); let mirrorModel2PrevVersionId = model.getVersionId(); model.onDidChangeContent((e: IModelContentChangedEvent) => { let versionId = e.versionId; if (versionId < mirrorModel2PrevVersionId) { console.warn('Model version id did not advance between edits (2)'); } mirrorModel2PrevVersionId = versionId; mirrorModel2.onEvents(e); }); let assertMirrorModels = () => { assert.equal(mirrorModel2.getText(), model.getValue(), 'mirror model 2 text OK'); assert.equal(mirrorModel2.version, model.getVersionId(), 'mirror model 2 version OK'); }; model.setEOL(EndOfLineSequence.CRLF); assertMirrorModels(); model.dispose(); mirrorModel2.dispose(); });
export function assertSyncedModels(text: string, callback: (model: EditableTextModel, assertMirrorModels: () => void) => void, setup: (model: EditableTextModel) => void = null): void { var model = new EditableTextModel(RawTextSource.fromString(text), TextModel.DEFAULT_CREATION_OPTIONS, null); model.setEOL(editorCommon.EndOfLineSequence.LF); assertLineMapping(model, 'model'); if (setup) { setup(model); assertLineMapping(model, 'model'); } var mirrorModel2 = new MirrorModel(null, model.getLinesContent(), model.getEOL(), model.getVersionId()); var mirrorModel2PrevVersionId = model.getVersionId(); model.onDidChangeContent((e: IModelContentChangedEvent) => { let versionId = e.versionId; if (versionId < mirrorModel2PrevVersionId) { console.warn('Model version id did not advance between edits (2)'); } mirrorModel2PrevVersionId = versionId; mirrorModel2.onEvents(e); }); var assertMirrorModels = () => { assertLineMapping(model, 'model'); model._assertLineNumbersOK(); assert.equal(mirrorModel2.getText(), model.getValue(), 'mirror model 2 text OK'); assert.equal(mirrorModel2.version, model.getVersionId(), 'mirror model 2 version OK'); }; callback(model, assertMirrorModels); model.dispose(); mirrorModel2.dispose(); }
test('word at/until pos', () => { var pos = { lineNumber: 1, column: 3 }; assert.equal(mirrorModel.getWordAtPosition(pos).word, 'line1'); var model = createTestMirrorModelFromString('foo bar 1234 :";\''); assert.equal(model.getWordAtPosition({lineNumber: 1, column: 1}).word, 'foo'); assert.equal(model.getWordAtPosition({lineNumber: 1, column: 2}).word, 'foo'); assert.equal(model.getWordAtPosition({lineNumber: 1, column: 3}).word, 'foo'); assert.equal(model.getWordAtPosition({lineNumber: 1, column: 4}).word, 'foo'); assert.equal(model.getWordAtPosition({lineNumber: 1, column: 5}).word, 'bar'); assert.equal(model.getWordAtPosition({lineNumber: 1, column: 6}).word, 'bar'); assert.equal(model.getWordAtPosition({lineNumber: 1, column: 7}).word, 'bar'); assert.equal(model.getWordAtPosition({lineNumber: 1, column: 8}).word, 'bar'); assert.equal(model.getWordAtPosition({lineNumber: 1, column: 9}).word, '1234'); assert.equal(model.getWordAtPosition({lineNumber: 1, column: 10}).word, '1234'); assert.equal(model.getWordAtPosition({lineNumber: 1, column: 11}).word, '1234'); assert.equal(model.getWordAtPosition({lineNumber: 1, column: 12}).word, '1234'); assert.equal(model.getWordAtPosition({lineNumber: 1, column: 13}).word, '1234'); assert.equal(model.getWordAtPosition({lineNumber: 1, column: 14}), null); assert.equal(model.getWordAtPosition({lineNumber: 1, column: 15}), null); assert.equal(model.getWordAtPosition({lineNumber: 1, column: 16}), null); assert.equal(mirrorModel.getWordUntilPosition(pos).word, 'li'); });
test('get offset', () => { assert.equal(mirrorModel.getOffsetFromPosition({lineNumber: 1, column: 1}), 0); assert.equal(mirrorModel.getOffsetFromPosition({lineNumber: 1, column: 3}), 2); assert.equal(mirrorModel.getOffsetFromPosition({lineNumber: 2, column: 1}), 6); assert.equal(mirrorModel.getOffsetFromPosition({lineNumber: 4, column: 6}), 23); assert.equal(mirrorModel.getOffsetFromPosition({lineNumber: 4, column: 7}), 23); });
test('delete all lines', () => { mirrorModel.onEvents(mirrorModelEvents([contentChangedLinesDeletedEvent(1, 4)])); var words = mirrorModel.getAllWords(); assert.equal(words.length, 0); var wordsWithRanges = mirrorModel.getAllWordsWithRange(); assert.equal(wordsWithRanges.length, 0); });
test('change line', () => { assert.equal(mirrorModel.getLineContent(1), 'line one'); var wordsWithRanges = mirrorModel.getAllWordsWithRange(); assert.equal(wordsWithRanges.length, 8); mirrorModel.onEvents(mirrorModelEvents([contentChangedLineChanged(1, 'foobar')])); assert.equal(mirrorModel.getLineContent(1), 'foobar'); wordsWithRanges = mirrorModel.getAllWordsWithRange(); assert.equal(wordsWithRanges.length, 7); assert.equal(wordsWithRanges[0].text, 'foobar'); equalRange(wordsWithRanges[0].range, { startLineNumber: 1, startColumn: 1, endLineNumber: 1, endColumn: 7 }); });
export function assertSyncedModels(text:string, callback:(model:EditableTextModel, assertMirrorModels:()=>void)=>void, setup:(model:EditableTextModel)=>void = null): void { var model = new EditableTextModel([], TextModel.toRawText(text), null); model.setEOL(EditorCommon.EndOfLineSequence.LF); if (setup) { setup(model); } var mirrorModel1 = new MirrorModel(null, model.getVersionId(), model.toRawText(), null); var mirrorModel1PrevVersionId = model.getVersionId(); var mirrorModel2 = new MirrorModel2(null, model.toRawText().lines, model.toRawText().EOL, model.getVersionId()); var mirrorModel2PrevVersionId = model.getVersionId(); model.addListener(EditorCommon.EventType.ModelContentChanged, (e:EditorCommon.IModelContentChangedEvent) => { let versionId = e.versionId; if (versionId < mirrorModel1PrevVersionId) { console.warn('Model version id did not advance between edits (1)'); } mirrorModel1PrevVersionId = versionId; let mirrorModelEvents:IMirrorModelEvents = { propertiesChanged: null, contentChanged: [e] }; mirrorModel1.onEvents(mirrorModelEvents); }); model.addListener(EditorCommon.EventType.ModelContentChanged2, (e:EditorCommon.IModelContentChangedEvent2) => { let versionId = e.versionId; if (versionId < mirrorModel2PrevVersionId) { console.warn('Model version id did not advance between edits (2)'); } mirrorModel2PrevVersionId = versionId; mirrorModel2.onEvents([e]); }); var assertMirrorModels = () => { model._assertLineNumbersOK(); assert.equal(mirrorModel2.getText(), model.getValue(), 'mirror model 2 text OK'); assert.equal(mirrorModel2.version, model.getVersionId(), 'mirror model 2 version OK'); assert.equal(mirrorModel1.getValue(), model.getValue(), 'mirror model 1 text OK'); assert.equal(mirrorModel1.getVersionId(), model.getVersionId(), 'mirror model 1 version OK'); }; callback(model, assertMirrorModels); model.dispose(); mirrorModel1.dispose(); mirrorModel2.dispose(); }