From a7f5fed9a3086c622958136494bbbf10213d3a92 Mon Sep 17 00:00:00 2001 From: "Timothy J. Warren" Date: Tue, 21 Nov 2023 16:36:13 -0500 Subject: [PATCH] Increase test coverage --- src/common/all_test.ts | 62 ++++++++++++++++++++++++++++++++++++++++-- src/common/ansi.ts | 2 +- 2 files changed, 61 insertions(+), 3 deletions(-) diff --git a/src/common/all_test.ts b/src/common/all_test.ts index 11108d2..88c5897 100644 --- a/src/common/all_test.ts +++ b/src/common/all_test.ts @@ -5,6 +5,7 @@ import Editor from './editor.ts'; import Row from './row.ts'; import { getTestRunner } from './runtime.ts'; import { defaultTerminalSize } from './termios.ts'; +import { Position } from './types.ts'; import * as Util from './utils.ts'; const { @@ -39,6 +40,16 @@ testSuite({ assertEquals(readKey(KeyCommand.Home), KeyCommand.Home); assertEquals(readKey(KeyCommand.Delete), KeyCommand.Delete); }, + 'readKey Esc': () => { + ['\x1b', Util.ctrlKey('l')].forEach((code) => { + assertEquals(readKey(code), KeyCommand.Escape); + }); + }, + 'readKey Backspace': () => { + [Util.ctrlKey('h'), String.fromCodePoint(127)].forEach((code) => { + assertEquals(readKey(code), KeyCommand.Backspace); + }); + }, 'readKey Home': () => { ['\x1b[1~', '\x1b[7~', '\x1b[H', '\x1bOH'].forEach((code) => { assertEquals(readKey(code), KeyCommand.Home); @@ -103,6 +114,29 @@ testSuite({ assertFalse(doc.isEmpty()); assertInstanceOf(doc.row(0), Row); }, + 'Document.insert': () => { + const doc = Document.empty(); + assertFalse(doc.dirty); + doc.insert(Position.at(0, 0), 'foobar'); + assertEquals(doc.numRows, 1); + assertTrue(doc.dirty); + + doc.insert(Position.at(2, 0), 'baz'); + assertEquals(doc.numRows, 1); + assertTrue(doc.dirty); + + doc.insert(Position.at(9, 0), 'buzz'); + assertEquals(doc.numRows, 1); + assertTrue(doc.dirty); + const row0 = doc.row(0); + assertEquals(row0?.toString(), 'foobazbarbuzz'); + assertEquals(row0?.rstring(), 'foobazbarbuzz'); + assertEquals(row0?.rsize, 13); + + doc.insert(Position.at(0, 1), 'Lorem Ipsum'); + assertEquals(doc.numRows, 2); + assertTrue(doc.dirty); + }, }, Editor: { 'new Editor': () => { @@ -110,19 +144,43 @@ testSuite({ assertInstanceOf(e, Editor); }, }, + Position: { + 'default': () => { + const p = Position.default(); + assertEquals(p.x, 0); + assertEquals(p.y, 0); + }, + 'at': () => { + const p = Position.at(5, 7); + assertEquals(p.x, 5); + assertEquals(p.y, 7); + }, + }, Row: { 'new Row': () => { const row = new Row(); assertEquals(row.toString(), ''); }, }, - 'Util::Misc fns': { + 'Util misc fns': { 'noop fn': () => { assertExists(Util.noop); assertEquals(Util.noop(), undefined); }, + 'posSub()': () => { + assertEquals(Util.posSub(14, 15), 0); + assertEquals(Util.posSub(15, 1), 14); + }, + 'minSub()': () => { + assertEquals(Util.minSub(13, 25, -1), -1); + assertEquals(Util.minSub(25, 13, 0), 12); + }, + 'maxAdd()': () => { + assertEquals(Util.maxAdd(99, 99, 75), 75); + assertEquals(Util.maxAdd(25, 74, 101), 99); + }, }, - 'Util::String fns': { + 'Util string fns': { 'ord()': () => { // Invalid output assertEquals(Util.ord(''), 256); diff --git a/src/common/ansi.ts b/src/common/ansi.ts index 6860ca6..6c7fd18 100644 --- a/src/common/ansi.ts +++ b/src/common/ansi.ts @@ -75,7 +75,7 @@ export function readKey(parsed: string): string { case '\x1b': return KeyCommand.Escape; - case ctrlKey('H'): + case ctrlKey('h'): case String.fromCodePoint(127): return KeyCommand.Backspace;