zulip/web/tests/fenced_code.test.cjs
Shubham Padia 5636bf9e4e shared: Move fenced_code.ts to web/src.
This file was meant to be shared with the zulip react native app. Since
we have moved to zulip-flutter app in production as well, we can move
this file to web/src.

https://chat.zulip.org/#narrow/channel/6-frontend/topic/web.2Fshared

We replace `replace` with `replaceAll` since eslint was complaining
about it after the move.
2025-11-11 09:06:18 -08:00

44 lines
1.6 KiB
JavaScript

"use strict";
const assert = require("node:assert/strict");
const {zrequire} = require("./lib/namespace.cjs");
const {run_test} = require("./lib/test.cjs");
const fenced_code = zrequire("fenced_code");
// Check the default behavior of fenced code blocks
// works properly before Markdown is initialized.
run_test("fenced_block_defaults", () => {
const input = "\n```\nfenced code\n```\n\nand then after\n";
const expected =
'\n\n<div class="codehilite"><pre><span></span><code>fenced code\n</code></pre></div>\n\n\nand then after\n\n';
const output = fenced_code.process_fenced_code(input);
assert.equal(output, expected);
});
run_test("get_unused_fence", () => {
assert.equal(fenced_code.get_unused_fence("```js\nsomething\n```"), "`".repeat(4));
assert.equal(fenced_code.get_unused_fence("````\nsomething\n````"), "`".repeat(5));
assert.equal(fenced_code.get_unused_fence("```\n````\n``````"), "`".repeat(7));
assert.equal(fenced_code.get_unused_fence("~~~\nsomething\n~~~"), "`".repeat(3));
assert.equal(
fenced_code.get_unused_fence("```code\nterminating fence is indented and longer\n ````"),
"`".repeat(5),
);
assert.equal(
fenced_code.get_unused_fence("```code\nterminating fence is extra indented\n ````"),
"`".repeat(4),
);
let large_testcase = "";
// ```
// ````
// `````
// ... up to N chars
// We insert a N + 1 character fence.
for (let i = 3; i <= 20; i += 1) {
large_testcase += "`".repeat(i) + "\n";
}
assert.equal(fenced_code.get_unused_fence(large_testcase), "`".repeat(21));
});