44 lines
1.5 KiB
TypeScript
44 lines
1.5 KiB
TypeScript
import { describe, it } from "node:test";
|
|
import assert from "node:assert";
|
|
import { lineAndColumnToPosition } from "./line-and-column-to-position";
|
|
|
|
describe("lineAndColumnToPosition", () => {
|
|
it("should return the correct position for the first line", () => {
|
|
const text = "Hello\nWorld";
|
|
const position = lineAndColumnToPosition(text, 0, 3);
|
|
assert.strictEqual(position, 3);
|
|
});
|
|
|
|
it("should return the correct position for the second line", () => {
|
|
const text = "Hello\nWorld";
|
|
const position = lineAndColumnToPosition(text, 1, 2);
|
|
assert.strictEqual(position, 8);
|
|
});
|
|
|
|
it("should return the correct position for an empty string", () => {
|
|
const text = "";
|
|
const position = lineAndColumnToPosition(text, 0, 0);
|
|
assert.strictEqual(position, 0);
|
|
});
|
|
|
|
it("with carrige return", () => {
|
|
assert.strictEqual(lineAndColumnToPosition("a\nb", 1, 1), 3);
|
|
assert.strictEqual(lineAndColumnToPosition("a\r\nb", 1, 1), 3);
|
|
});
|
|
|
|
it("should handle multi-line strings with varying lengths", () => {
|
|
const text = "Line1\nLongerLine2\nShort3";
|
|
const position = lineAndColumnToPosition(text, 2, 4);
|
|
assert.strictEqual(position, 22);
|
|
});
|
|
|
|
it("should throw an error if the line number is out of range", () => {
|
|
const text = "Line1\nLine2";
|
|
assert.throws(() => lineAndColumnToPosition(text, 3, 0));
|
|
});
|
|
|
|
it("should throw an error if the column number is out of range", () => {
|
|
const text = "Line1\nLine2";
|
|
assert.throws(() => lineAndColumnToPosition(text, 1, 10));
|
|
});
|
|
});
|