Files
fidoca/test/lines.test.js
2026-09-23 06:03:21 +02:00

50 lines
1.6 KiB
JavaScript

'use strict';
/**
* Tests for splitLines in src/lines.js.
*
* Run with: node --test
* (or) node --test test/lines.test.js
*
* The helper must count lines the way editors and `wc -l` do: a trailing
* newline terminates the final line rather than starting an extra empty one.
*/
import test from 'node:test';
import assert from 'node:assert/strict';
import { splitLines } from '../src/lines.js';
test('splitLines: empty file has no lines', () => {
assert.deepEqual(splitLines(''), []);
});
test('splitLines: no trailing newline is unchanged', () => {
assert.deepEqual(splitLines('a\nb\nc'), ['a', 'b', 'c']);
});
test('splitLines: trailing newline does not add a phantom line', () => {
// The reported bug: this used to yield 4 elements (['a','b','c','']).
assert.deepEqual(splitLines('a\nb\nc\n'), ['a', 'b', 'c']);
assert.equal(splitLines('a\nb\nc\n').length, 3);
});
test('splitLines: terminated and non-terminated agree on line count', () => {
assert.equal(splitLines('a\nb\nc\n').length, splitLines('a\nb\nc').length);
});
test('splitLines: a real trailing blank line is preserved', () => {
assert.deepEqual(splitLines('a\n\n'), ['a', '']);
assert.equal(splitLines('a\n\n').length, 2);
});
test('splitLines: a lone newline is one empty line', () => {
assert.deepEqual(splitLines('\n'), ['']);
assert.equal(splitLines('\n').length, 1);
});
test('splitLines: multiple trailing newlines keep the real blank lines', () => {
assert.deepEqual(splitLines('a\n\n\n'), ['a', '', '']);
assert.equal(splitLines('a\n\n\n').length, 3);
});