Vim/test/actions/baseAction.test.ts
2021-03-10 22:39:25 -05:00

98 lines
2.7 KiB
TypeScript

import * as assert from 'assert';
import * as vscode from 'vscode';
import { BaseAction } from '../../src/actions/base';
import { VimState } from '../../src/state/vimState';
import { setupWorkspace, cleanUpWorkspace } from './../testUtils';
import { Mode } from '../../src/mode/mode';
import { EasyMotion } from '../../src/actions/plugins/easymotion/easymotion';
class TestAction1D extends BaseAction {
keys = ['a', 'b'];
modes = [Mode.Normal];
}
class TestAction2D extends BaseAction {
keys = [
['a', 'b'],
['c', 'd'],
];
modes = [Mode.Normal];
}
suite('base action', () => {
const action1D = new TestAction1D();
const action2D = new TestAction2D();
let vimState: VimState;
suiteSetup(async () => {
await setupWorkspace();
vimState = new VimState(vscode.window.activeTextEditor!, new EasyMotion());
await vimState.load();
});
suiteTeardown(cleanUpWorkspace);
test('compare key presses', () => {
const testCases: Array<[string[] | string[][], string[], boolean]> = [
[['a'], ['a'], true],
[[['a']], ['a'], true],
[[['a'], ['b']], ['b'], true],
[[['a'], ['b']], ['c'], false],
[['a', 'b'], ['a', 'b'], true],
[['a', 'b'], ['a', 'c'], false],
[
[
['a', 'b'],
['c', 'd'],
],
['c', 'd'],
true,
],
[[''], ['a'], false],
[['<Esc>'], ['<Esc>'], true],
];
for (const test in testCases) {
if (testCases.hasOwnProperty(test)) {
const [left, right, expected] = testCases[test];
const actual = BaseAction.CompareKeypressSequence(left, right);
assert.strictEqual(actual, expected, `${left}. ${right}.`);
}
}
});
test('couldActionApply 1D keys positive', () => {
assert.strictEqual(action1D.couldActionApply(vimState, ['a']), true);
});
test('couldActionApply 1D keys negative', () => {
assert.strictEqual(action1D.couldActionApply(vimState, ['b']), false);
});
test('couldActionApply 2D keys positive', () => {
assert.strictEqual(action2D.couldActionApply(vimState, ['c']), true);
});
test('couldActionApply 2D keys negative', () => {
assert.strictEqual(action2D.couldActionApply(vimState, ['b']), false);
});
test('doesActionApply 1D keys positive', () => {
assert.strictEqual(action1D.doesActionApply(vimState, ['a', 'b']), true);
});
test('doesActionApply 1D keys negative', () => {
assert.strictEqual(action1D.doesActionApply(vimState, ['a', 'a']), false);
});
test('doesActionApply 2D keys positive', () => {
assert.strictEqual(action2D.doesActionApply(vimState, ['c', 'd']), true);
});
test('doesActionApply 2D keys negative', () => {
assert.strictEqual(action2D.doesActionApply(vimState, ['a', 'a']), false);
});
});