提交 0e4f7731 编写于 作者: J Joao Moreno

DeleteAllRightAction delete new line when at end

fixes #8575
上级 f983ebad
......@@ -424,8 +424,13 @@ export class DeleteAllRightAction extends EditorAction {
let rangesToDelete: Range[] = editor.getSelections().map((sel) => {
if (sel.isEmpty()) {
let maxColumn = model.getLineMaxColumn(sel.startLineNumber);
return new Range(sel.startLineNumber, sel.startColumn, sel.startLineNumber, maxColumn);
const maxColumn = model.getLineMaxColumn(sel.startLineNumber);
if (sel.startColumn === maxColumn) {
return new Range(sel.startLineNumber, sel.startColumn, sel.startLineNumber + 1, 1);
} else {
return new Range(sel.startLineNumber, sel.startColumn, sel.startLineNumber, maxColumn);
}
}
return sel;
});
......@@ -453,6 +458,7 @@ export class DeleteAllRightAction extends EditorAction {
});
editor.executeEdits(this.id, edits);
editor.pushUndoStop();
}
}
......
......@@ -7,7 +7,7 @@
import * as assert from 'assert';
import { Selection } from 'vs/editor/common/core/selection';
import { withMockCodeEditor } from 'vs/editor/test/common/mocks/mockCodeEditor';
import { DeleteAllLeftAction, JoinLinesAction, TransposeAction, UpperCaseAction, LowerCaseAction } from 'vs/editor/contrib/linesOperations/common/linesOperations';
import { DeleteAllLeftAction, JoinLinesAction, TransposeAction, UpperCaseAction, LowerCaseAction, DeleteAllRightAction } from 'vs/editor/contrib/linesOperations/common/linesOperations';
suite('Editor Contrib - Line Operations', () => {
test('delete all left', function () {
......@@ -306,4 +306,146 @@ suite('Editor Contrib - Line Operations', () => {
}
);
});
suite('DeleteAllRightAction', () => {
test('should be noop on empty', () => {
withMockCodeEditor([''], {}, (editor, cursor) => {
const model = editor.getModel();
const action = new DeleteAllRightAction();
action.run(null, editor);
assert.deepEqual(model.getLinesContent(), ['']);
assert.deepEqual(editor.getSelections(), [new Selection(1, 1, 1, 1)]);
editor.setSelection(new Selection(1, 1, 1, 1));
action.run(null, editor);
assert.deepEqual(model.getLinesContent(), ['']);
assert.deepEqual(editor.getSelections(), [new Selection(1, 1, 1, 1)]);
editor.setSelections([new Selection(1, 1, 1, 1), new Selection(1, 1, 1, 1), new Selection(1, 1, 1, 1)]);
action.run(null, editor);
assert.deepEqual(model.getLinesContent(), ['']);
assert.deepEqual(editor.getSelections(), [new Selection(1, 1, 1, 1)]);
});
});
test('should delete selected range', () => {
withMockCodeEditor([
'hello',
'world'
], {}, (editor, cursor) => {
const model = editor.getModel();
const action = new DeleteAllRightAction();
editor.setSelection(new Selection(1, 2, 1, 5));
action.run(null, editor);
assert.deepEqual(model.getLinesContent(), ['ho', 'world']);
assert.deepEqual(editor.getSelections(), [new Selection(1, 2, 1, 2)]);
editor.setSelection(new Selection(1, 1, 2, 4));
action.run(null, editor);
assert.deepEqual(model.getLinesContent(), ['ld']);
assert.deepEqual(editor.getSelections(), [new Selection(1, 1, 1, 1)]);
editor.setSelection(new Selection(1, 1, 1, 3));
action.run(null, editor);
assert.deepEqual(model.getLinesContent(), ['']);
assert.deepEqual(editor.getSelections(), [new Selection(1, 1, 1, 1)]);
});
});
test('should delete to the right of the cursor', () => {
withMockCodeEditor([
'hello',
'world'
], {}, (editor, cursor) => {
const model = editor.getModel();
const action = new DeleteAllRightAction();
editor.setSelection(new Selection(1, 3, 1, 3));
action.run(null, editor);
assert.deepEqual(model.getLinesContent(), ['he', 'world']);
assert.deepEqual(editor.getSelections(), [new Selection(1, 3, 1, 3)]);
editor.setSelection(new Selection(2, 1, 2, 1));
action.run(null, editor);
assert.deepEqual(model.getLinesContent(), ['he', '']);
assert.deepEqual(editor.getSelections(), [new Selection(2, 1, 2, 1)]);
});
});
test('should join two lines, if at the end of the line', () => {
withMockCodeEditor([
'hello',
'world'
], {}, (editor, cursor) => {
const model = editor.getModel();
const action = new DeleteAllRightAction();
editor.setSelection(new Selection(1, 6, 1, 6));
action.run(null, editor);
assert.deepEqual(model.getLinesContent(), ['helloworld']);
assert.deepEqual(editor.getSelections(), [new Selection(1, 6, 1, 6)]);
editor.setSelection(new Selection(1, 6, 1, 6));
action.run(null, editor);
assert.deepEqual(model.getLinesContent(), ['hello']);
assert.deepEqual(editor.getSelections(), [new Selection(1, 6, 1, 6)]);
editor.setSelection(new Selection(1, 6, 1, 6));
action.run(null, editor);
assert.deepEqual(model.getLinesContent(), ['hello']);
assert.deepEqual(editor.getSelections(), [new Selection(1, 6, 1, 6)]);
});
});
test('should work with multiple cursors', () => {
withMockCodeEditor([
'hello',
'there',
'world'
], {}, (editor, cursor) => {
const model = editor.getModel();
const action = new DeleteAllRightAction();
editor.setSelections([
new Selection(1, 3, 1, 3),
new Selection(1, 6, 1, 6),
new Selection(3, 4, 3, 4),
]);
action.run(null, editor);
assert.deepEqual(model.getLinesContent(), ['hethere', 'wor']);
assert.deepEqual(editor.getSelections(), [
new Selection(1, 3, 1, 3),
new Selection(2, 4, 2, 4)
]);
action.run(null, editor);
assert.deepEqual(model.getLinesContent(), ['he', 'wor']);
assert.deepEqual(editor.getSelections(), [
new Selection(1, 3, 1, 3),
new Selection(2, 4, 2, 4)
]);
action.run(null, editor);
assert.deepEqual(model.getLinesContent(), ['hewor']);
assert.deepEqual(editor.getSelections(), [
new Selection(1, 3, 1, 3),
new Selection(1, 6, 1, 6)
]);
action.run(null, editor);
assert.deepEqual(model.getLinesContent(), ['he']);
assert.deepEqual(editor.getSelections(), [
new Selection(1, 3, 1, 3)
]);
action.run(null, editor);
assert.deepEqual(model.getLinesContent(), ['he']);
assert.deepEqual(editor.getSelections(), [
new Selection(1, 3, 1, 3)
]);
});
});
});
});
\ No newline at end of file
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册