未验证 提交 186354f5 编写于 作者: A Alex Dima

Fixes #51275: push stack element before move word commands

上级 7169e432
......@@ -11,6 +11,8 @@ import { Selection } from 'vs/editor/common/core/selection';
import { deserializePipePositions, serializePipePositions, testRepeatedActionAndExtractPositions } from 'vs/editor/contrib/wordOperations/test/wordTestUtils';
import { CursorWordEndLeft, CursorWordEndLeftSelect, CursorWordEndRight, CursorWordEndRightSelect, CursorWordLeft, CursorWordLeftSelect, CursorWordRight, CursorWordRightSelect, CursorWordStartLeft, CursorWordStartLeftSelect, CursorWordStartRight, CursorWordStartRightSelect, DeleteWordEndLeft, DeleteWordEndRight, DeleteWordLeft, DeleteWordRight, DeleteWordStartLeft, DeleteWordStartRight, CursorWordAccessibilityLeft, CursorWordAccessibilityLeftSelect, CursorWordAccessibilityRight, CursorWordAccessibilityRightSelect } from 'vs/editor/contrib/wordOperations/wordOperations';
import { withTestCodeEditor } from 'vs/editor/test/browser/testCodeEditor';
import { Handler } from 'vs/editor/common/editorCommon';
import { Cursor } from 'vs/editor/common/controller/cursor';
suite('WordOperations', () => {
......@@ -193,6 +195,32 @@ suite('WordOperations', () => {
assert.deepEqual(actual, EXPECTED);
});
test('issue #51275 - cursorWordStartLeft does not push undo/redo stack element', () => {
function cursorCommand(cursor: Cursor, command: string, extraData?: any, overwriteSource?: string) {
cursor.trigger(overwriteSource || 'tests', command, extraData);
}
function type(cursor: Cursor, text: string) {
for (let i = 0; i < text.length; i++) {
cursorCommand(cursor, Handler.Type, { text: text.charAt(i) }, 'keyboard');
}
}
withTestCodeEditor('', {}, (editor, cursor) => {
type(cursor, 'foo bar baz');
assert.equal(editor.getValue(), 'foo bar baz');
cursorWordStartLeft(editor);
cursorWordStartLeft(editor);
type(cursor, 'q');
assert.equal(editor.getValue(), 'foo qbar baz');
cursorCommand(cursor, Handler.Undo, {});
assert.equal(editor.getValue(), 'foo bar baz');
});
});
test('cursorWordEndLeft', () => {
const EXPECTED = ['| /*| Just| some| more| text| a|+=| 3| +|5|-|3| +| 7| */| '].join('\n');
const [text,] = deserializePipePositions(EXPECTED);
......
......@@ -52,6 +52,7 @@ export abstract class MoveWordCommand extends EditorCommand {
return this._moveTo(sel, outPosition, this._inSelectionMode);
});
model.pushStackElement();
editor._getCursors().setStates('moveWordCommand', CursorChangeReason.NotSet, result.map(r => CursorState.fromModelSelection(r)));
if (result.length === 1) {
const pos = new Position(result[0].positionLineNumber, result[0].positionColumn);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册