66 lines
4.4 KiB
JavaScript
66 lines
4.4 KiB
JavaScript
import markdownHighlighter from "../src/giallo-markdown.js";
|
|
|
|
const DEFAULT_OPTIONS = {
|
|
themeLight: "github-light",
|
|
themeDark: "github-dark",
|
|
};
|
|
|
|
const SNIPPET_JS = `
|
|
import { readFile } from "node:fs";
|
|
|
|
/**
|
|
* Print contents of a file.
|
|
*/
|
|
export default async function printFile(path) {
|
|
const text = await readFile(path, "utf-8");
|
|
console.log(text);
|
|
}
|
|
`;
|
|
const RENDERED_JS =
|
|
`<pre class="giallo" style="color-scheme: light dark; color: light-dark(#24292E, #E1E4E8); background-color: light-dark(#FFFFFF, #24292E);"><code data-lang="javascript"><span class="giallo-l"></span>
|
|
<span class="giallo-l"><span style="color: light-dark(#D73A49, #F97583);">import</span><span> {</span><span> readFile</span><span> }</span><span style="color: light-dark(#D73A49, #F97583);"> from</span><span style="color: light-dark(#032F62, #9ECBFF);"> "</span><span style="color: light-dark(#032F62, #9ECBFF);">node:fs</span><span style="color: light-dark(#032F62, #9ECBFF);">"</span><span>;</span></span>
|
|
<span class="giallo-l"></span>
|
|
<span class="giallo-l"><span style="color: light-dark(#6A737D, #6A737D);">/**</span></span>
|
|
<span class="giallo-l"><span style="color: light-dark(#6A737D, #6A737D);"> * Print contents of a file.</span></span>
|
|
<span class="giallo-l"><span style="color: light-dark(#6A737D, #6A737D);"> */</span></span>
|
|
<span class="giallo-l"><span style="color: light-dark(#D73A49, #F97583);">export</span><span style="color: light-dark(#D73A49, #F97583);"> default</span><span style="color: light-dark(#D73A49, #F97583);"> async</span><span style="color: light-dark(#D73A49, #F97583);"> function</span><span style="color: light-dark(#6F42C1, #B392F0);"> printFile</span><span>(</span><span style="color: light-dark(#E36209, #FFAB70);">path</span><span>)</span><span> {</span></span>
|
|
<span class="giallo-l"><span style="color: light-dark(#D73A49, #F97583);"> const</span><span style="color: light-dark(#005CC5, #79B8FF);"> text</span><span style="color: light-dark(#D73A49, #F97583);"> =</span><span style="color: light-dark(#D73A49, #F97583);"> await</span><span style="color: light-dark(#6F42C1, #B392F0);"> readFile</span><span>(</span><span>path</span><span>,</span><span style="color: light-dark(#032F62, #9ECBFF);"> "</span><span style="color: light-dark(#032F62, #9ECBFF);">utf-8</span><span style="color: light-dark(#032F62, #9ECBFF);">"</span><span>)</span><span>;</span></span>
|
|
<span class="giallo-l"><span> console</span><span>.</span><span style="color: light-dark(#6F42C1, #B392F0);">log</span><span>(</span><span>text</span><span>)</span><span>;</span></span>
|
|
<span class="giallo-l"><span>}</span></span></code></pre>`;
|
|
const RENDERED_JS_PLAIN =
|
|
`<pre class="giallo" style="color-scheme: light dark; color: light-dark(#24292E, #E1E4E8); background-color: light-dark(#FFFFFF, #24292E);"><code data-lang="plain"><span class="giallo-l"></span>
|
|
<span class="giallo-l"><span>import { readFile } from "node:fs";</span></span>
|
|
<span class="giallo-l"></span>
|
|
<span class="giallo-l"><span>/**</span></span>
|
|
<span class="giallo-l"><span> * Print contents of a file.</span></span>
|
|
<span class="giallo-l"><span> */</span></span>
|
|
<span class="giallo-l"><span>export default async function printFile(path) {</span></span>
|
|
<span class="giallo-l"><span> const text = await readFile(path, "utf-8");</span></span>
|
|
<span class="giallo-l"><span> console.log(text);</span></span>
|
|
<span class="giallo-l"><span>}</span></span></code></pre>`;
|
|
|
|
const SNIPPET_PY = `print(f"<a>{my_fn('')}</a>")`;
|
|
|
|
test("renders Javascript code as arbitrary HTML", () => {
|
|
const configuredHighlighter = markdownHighlighter(DEFAULT_OPTIONS);
|
|
const rendered = configuredHighlighter(SNIPPET_JS, "javascript");
|
|
expect(rendered).toContain("<");
|
|
});
|
|
|
|
test("renders Javascript code as expected HTML", () => {
|
|
const configuredHighlighter = markdownHighlighter(DEFAULT_OPTIONS);
|
|
const rendered = configuredHighlighter(SNIPPET_JS, "javascript");
|
|
expect(rendered).toEqual(RENDERED_JS);
|
|
});
|
|
|
|
test("treats unknown language as plain", () => {
|
|
const configuredHighlighter = markdownHighlighter(DEFAULT_OPTIONS);
|
|
const rendered = configuredHighlighter(SNIPPET_JS, "piedpiperscript");
|
|
expect(rendered).toEqual(RENDERED_JS_PLAIN);
|
|
});
|
|
|
|
test("escapes embedded HTML", () => {
|
|
const configuredHighlighter = markdownHighlighter(DEFAULT_OPTIONS);
|
|
const rendered = configuredHighlighter(SNIPPET_PY, "python");
|
|
expect(rendered).toContain("<a>");
|
|
});
|