From 7b115230694ac3a2fb677f1deb7c951ac4d3ec5f Mon Sep 17 00:00:00 2001 From: xconverge Date: Wed, 12 Oct 2016 20:11:41 -0700 Subject: [PATCH 1/4] Add some tests --- test/mode/modeInsert.test.ts | 31 +++++++++++++++++++++++++++---- test/mode/modeNormal.test.ts | 14 ++++++++++++++ 2 files changed, 41 insertions(+), 4 deletions(-) diff --git a/test/mode/modeInsert.test.ts b/test/mode/modeInsert.test.ts index 665125bbffb..905b4df5cd9 100644 --- a/test/mode/modeInsert.test.ts +++ b/test/mode/modeInsert.test.ts @@ -4,14 +4,18 @@ import {setupWorkspace, cleanUpWorkspace, assertEqualLines, assertEqual} from '. import {ModeName} from '../../src/mode/mode'; import {TextEditor} from '../../src/textEditor'; import {ModeHandler} from "../../src/mode/modeHandler"; +import { getTestingFunctions } from '../testSimplifier'; suite("Mode Insert", () => { - let modeHandler: ModeHandler; + let modeHandler = new ModeHandler(); + + let { + newTest, + newTestOnly, + } = getTestingFunctions(modeHandler); setup(async () => { await setupWorkspace(); - - modeHandler = new ModeHandler(); }); teardown(cleanUpWorkspace); @@ -43,7 +47,18 @@ suite("Mode Insert", () => { assertEqual(TextEditor.getSelection().start.character, 4, " moved cursor position."); }); - test("", async () => { + test(" can exit insert", async () => { + await modeHandler.handleMultipleKeyEvents([ + 'i', + 't', 'e', 'x', 't', + '', + 'o' + ]); + + return assertEqualLines(["text", ""]); + }); + + test(" can exit insert", async () => { await modeHandler.handleMultipleKeyEvents([ 'i', 't', 'e', 'x', 't', @@ -54,6 +69,14 @@ suite("Mode Insert", () => { return assertEqualLines(["text", ""]); }); + test("Stay in insert when entering characters", async () => { + await modeHandler.handleKeyEvent('i'); + for (var i = 0; i < 10; i++) { + await modeHandler.handleKeyEvent('1'); + assertEqual(modeHandler.currentMode.name === ModeName.Insert, true); + } + }); + test("Can handle 'O'", async () => { await modeHandler.handleMultipleKeyEvents([ 'i', diff --git a/test/mode/modeNormal.test.ts b/test/mode/modeNormal.test.ts index 57d704cf3e2..35cbc8a080c 100644 --- a/test/mode/modeNormal.test.ts +++ b/test/mode/modeNormal.test.ts @@ -932,6 +932,20 @@ suite("Mode Normal", () => { end: [' |one', 'two', ' three', ' one', ' two'] }); + newTest({ + title: "Can handle 'J' followed by x", + start: ['tes|t', 'test', 'test'], + keysPressed: 'Jx', + end: ['test|test', 'test'], + }); + + newTest({ + title: "Can handle and do nothing", + start: ['te|st'], + keysPressed: '', + end: ['te|st'], + }); + newTest({ title: "Can repeat w", start: ['|one two three four'], From bde1cfadbc86ed93178e6c7826aa37d1d311324a Mon Sep 17 00:00:00 2001 From: xconverge Date: Wed, 12 Oct 2016 22:14:20 -0700 Subject: [PATCH 2/4] fix matching movements throwing exception when they fail --- src/actions/actions.ts | 45 ++++++++++++++++++++++++++---------- test/mode/modeInsert.test.ts | 9 ++------ 2 files changed, 35 insertions(+), 19 deletions(-) diff --git a/src/actions/actions.ts b/src/actions/actions.ts index 30a3cbca0bd..4406a13dbb8 100644 --- a/src/actions/actions.ts +++ b/src/actions/actions.ts @@ -4291,6 +4291,17 @@ abstract class MoveInsideCharacter extends BaseMovement { diff : new PositionDiff(0, startPos === position ? 1 : 0) }; } + + public async execActionForOperator(position: Position, vimState: VimState): Promise { + const result = await this.execAction(position, vimState); + if (isIMovement(result)) { + if (result.failed) { + vimState.recordedState.hasRunOperator = false; + vimState.recordedState.actionsRun = []; + } + } + return result; + } } @RegisterAction @@ -4460,12 +4471,17 @@ abstract class MoveQuoteMatch extends BaseMovement { }; } - public async execActionForOperator(position: Position, vimState: VimState): Promise { - const res = await this.execAction(position, vimState); - - res.stop = res.stop.getRight(); - - return res; + public async execActionForOperator(position: Position, vimState: VimState): Promise { + const result = await this.execAction(position, vimState); + if (isIMovement(result)) { + if (result.failed) { + vimState.recordedState.hasRunOperator = false; + vimState.recordedState.actionsRun = []; + } else { + result.stop = result.stop.getRight(); + } + } + return result; } } @@ -4735,12 +4751,17 @@ abstract class MoveTagMatch extends BaseMovement { }; } - public async execActionForOperator(position: Position, vimState: VimState): Promise { - const res = await this.execAction(position, vimState); - - res.stop = res.stop.getRight(); - - return res; + public async execActionForOperator(position: Position, vimState: VimState): Promise { + const result = await this.execAction(position, vimState); + if (isIMovement(result)) { + if (result.failed) { + vimState.recordedState.hasRunOperator = false; + vimState.recordedState.actionsRun = []; + } else { + result.stop = result.stop.getRight(); + } + } + return result; } } diff --git a/test/mode/modeInsert.test.ts b/test/mode/modeInsert.test.ts index 905b4df5cd9..a9aaa73ef26 100644 --- a/test/mode/modeInsert.test.ts +++ b/test/mode/modeInsert.test.ts @@ -4,17 +4,12 @@ import {setupWorkspace, cleanUpWorkspace, assertEqualLines, assertEqual} from '. import {ModeName} from '../../src/mode/mode'; import {TextEditor} from '../../src/textEditor'; import {ModeHandler} from "../../src/mode/modeHandler"; -import { getTestingFunctions } from '../testSimplifier'; suite("Mode Insert", () => { - let modeHandler = new ModeHandler(); - - let { - newTest, - newTestOnly, - } = getTestingFunctions(modeHandler); + let modeHandler: ModeHandler; setup(async () => { + modeHandler = new ModeHandler(); await setupWorkspace(); }); From 2c973ca15e666b27d8c5d1c04ca57bc46ee272c9 Mon Sep 17 00:00:00 2001 From: xconverge Date: Wed, 12 Oct 2016 22:15:29 -0700 Subject: [PATCH 3/4] Minor cleanup --- test/mode/modeInsert.test.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/test/mode/modeInsert.test.ts b/test/mode/modeInsert.test.ts index a9aaa73ef26..ae4d24e7792 100644 --- a/test/mode/modeInsert.test.ts +++ b/test/mode/modeInsert.test.ts @@ -9,8 +9,9 @@ suite("Mode Insert", () => { let modeHandler: ModeHandler; setup(async () => { - modeHandler = new ModeHandler(); await setupWorkspace(); + + modeHandler = new ModeHandler(); }); teardown(cleanUpWorkspace); From 278662c48b19693dfa085a3424dea67131fedbf0 Mon Sep 17 00:00:00 2001 From: xconverge Date: Tue, 25 Oct 2016 17:03:10 -0700 Subject: [PATCH 4/4] accidental bad merge --- test/mode/modeNormal.test.ts | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/test/mode/modeNormal.test.ts b/test/mode/modeNormal.test.ts index 5a65626e52b..62efa8ee0f7 100644 --- a/test/mode/modeNormal.test.ts +++ b/test/mode/modeNormal.test.ts @@ -964,6 +964,13 @@ suite("Mode Normal", () => { end: [' |one', 'two', ' three', ' one', ' two'] }); + newTest({ + title: "Can handle 'p' after y'a", + start: ['|one', 'two', 'three'], + keysPressed: "majjy'ap", + end: ['one', 'two', 'three', '|one', 'two', 'three'] + }); + newTest({ title: "Can repeat w", start: ['|one two three four'],