import { unitTest } from "../../../test.ts";
import { assertEquals } from "testing/asserts";
import { getEndingNewlineCount, lines } from "../../../../src/core/lib/text.ts";
unitTest("core/lib/text.ts - getEndingNewlineCount", async () => {
assertEquals(getEndingNewlineCount(["content without newlines"]), 0);
assertEquals(getEndingNewlineCount(["line1", "line2", "line3"]), 0);
assertEquals(getEndingNewlineCount(["content\n"]), 1);
assertEquals(getEndingNewlineCount(["content\n\n\n"]), 3);
assertEquals(getEndingNewlineCount(["line1", "line2", "line3\n\n"]), 2);
assertEquals(getEndingNewlineCount(["line1\n", "line2\n", "line3\n\n\n"]), 3);
assertEquals(getEndingNewlineCount(["content", "", ""]), 0);
assertEquals(getEndingNewlineCount(["content", "\n", "\n\n"]), 3);
assertEquals(getEndingNewlineCount(["content", "\n\n\n"]), 3);
assertEquals(getEndingNewlineCount(["content\n", "", "\n\n", ""]), 3);
assertEquals(getEndingNewlineCount(["content", "", "\n", "\n\n", ""]), 3);
assertEquals(getEndingNewlineCount(["", "", ""]), 0);
assertEquals(getEndingNewlineCount([]), 0);
assertEquals(getEndingNewlineCount(["line1\n\n", "line2"]), 0);
assertEquals(getEndingNewlineCount(["line1", "line2\n\n", "line3"]), 0);
assertEquals(
getEndingNewlineCount([
"some content",
"more content\n",
"\n",
"",
"final line\n\n",
]),
2,
);
assertEquals(
getEndingNewlineCount([
"line1",
"line2",
"line3\nwith content",
"\n",
"\n\n",
]),
3,
);
});
unitTest("core/lib/text.ts - lines() with different line endings", async () => {
assertEquals(lines("a\nb\nc"), ["a", "b", "c"]);
assertEquals(lines("a\r\nb\r\nc"), ["a", "b", "c"]);
assertEquals(lines("a\rb\rc"), ["a", "b", "c"]);
assertEquals(lines("a\rb\nc\r\nd"), ["a", "b", "c", "d"]);
const yaml = "---\rtitle: \"Test\"\r---";
assertEquals(lines(yaml), ["---", "title: \"Test\"", "---"]);
assertEquals(lines(""), [""]);
assertEquals(lines("single"), ["single"]);
assertEquals(lines("a\n"), ["a", ""]);
assertEquals(lines("a\r"), ["a", ""]);
assertEquals(lines("a\r\n"), ["a", ""]);
});