Path: blob/main/tests/unit/core/lib/text.test.ts
12926 views
/*1* core/lib/text.test.ts2*3* Copyright (C) 2025 Posit Software, PBC4*/56import { unitTest } from "../../../test.ts";7import { assertEquals } from "testing/asserts";8import { getEndingNewlineCount, lines } from "../../../../src/core/lib/text.ts";910unitTest("core/lib/text.ts - getEndingNewlineCount", async () => {11// Test case 1: No trailing newlines12assertEquals(getEndingNewlineCount(["content without newlines"]), 0);13assertEquals(getEndingNewlineCount(["line1", "line2", "line3"]), 0);1415// Test case 2: Single line with trailing newlines16assertEquals(getEndingNewlineCount(["content\n"]), 1);17assertEquals(getEndingNewlineCount(["content\n\n\n"]), 3);1819// Test case 3: Multiple lines with the last line having trailing newlines20assertEquals(getEndingNewlineCount(["line1", "line2", "line3\n\n"]), 2);21assertEquals(getEndingNewlineCount(["line1\n", "line2\n", "line3\n\n\n"]), 3);2223// Test case 4: Empty lines at the end24assertEquals(getEndingNewlineCount(["content", "", ""]), 0);2526// Test case 5: Lines with only newlines at the end27assertEquals(getEndingNewlineCount(["content", "\n", "\n\n"]), 3);28assertEquals(getEndingNewlineCount(["content", "\n\n\n"]), 3);2930// Test case 6: Mixed scenario with empty lines and lines with only newlines31assertEquals(getEndingNewlineCount(["content\n", "", "\n\n", ""]), 3);32assertEquals(getEndingNewlineCount(["content", "", "\n", "\n\n", ""]), 3);3334// Test case 7: Edge case with only empty strings35assertEquals(getEndingNewlineCount(["", "", ""]), 0);3637// Test case 8: Edge case with an empty array38assertEquals(getEndingNewlineCount([]), 0);3940// Test case 9: Content after newlines breaks the counting41assertEquals(getEndingNewlineCount(["line1\n\n", "line2"]), 0);42assertEquals(getEndingNewlineCount(["line1", "line2\n\n", "line3"]), 0);4344// Test case 10: Complex scenario with mixed content45assertEquals(46getEndingNewlineCount([47"some content",48"more content\n",49"\n",50"",51"final line\n\n",52]),532,54);55assertEquals(56getEndingNewlineCount([57"line1",58"line2",59"line3\nwith content",60"\n",61"\n\n",62]),633,64);65});6667// Test for lines() function with different line endings68// See: https://github.com/quarto-dev/quarto-cli/issues/1399869unitTest("core/lib/text.ts - lines() with different line endings", async () => {70// LF (Unix/Linux)71assertEquals(lines("a\nb\nc"), ["a", "b", "c"]);7273// CRLF (Windows)74assertEquals(lines("a\r\nb\r\nc"), ["a", "b", "c"]);7576// CR-only (old Mac) - the fix for #1399877assertEquals(lines("a\rb\rc"), ["a", "b", "c"]);7879// Mixed endings80assertEquals(lines("a\rb\nc\r\nd"), ["a", "b", "c", "d"]);8182// YAML front matter with CR-only83const yaml = "---\rtitle: \"Test\"\r---";84assertEquals(lines(yaml), ["---", "title: \"Test\"", "---"]);8586// Empty string87assertEquals(lines(""), [""]);8889// Single line without newline90assertEquals(lines("single"), ["single"]);9192// Trailing newlines93assertEquals(lines("a\n"), ["a", ""]);94assertEquals(lines("a\r"), ["a", ""]);95assertEquals(lines("a\r\n"), ["a", ""]);96});979899