discourse/test/javascripts/components/highlighted-code-test.js
David Taylor d09f283e91
PERF: Move highlightjs to a background worker, and add result cache (#10191)
Syntax highlighting is a CPU-intensive process which we run a lot while rendering posts and while using the composer preview. Moving it to a background worker releases the main thread to the browser, which makes the UX much smoother.
2020-07-15 12:48:07 +01:00

54 lines
1.2 KiB
JavaScript

import componentTest from "helpers/component-test";
import {
waitForHighlighting,
setupHighlightJs
} from "discourse/lib/highlight-syntax";
const LONG_CODE_BLOCK = "puts a\n".repeat(15000);
moduleForComponent("highlighted-code", { integration: true });
componentTest("highlighting code", {
template: "{{highlighted-code lang='ruby' code=code}}",
beforeEach() {
setupHighlightJs({
highlightJsUrl: "/assets/highlightjs/highlight-test-bundle.min.js",
highlightJsWorkerUrl: "/assets/highlightjs-worker.js"
});
},
async test(assert) {
this.set("code", "def test; end");
await waitForHighlighting();
assert.equal(
find("code.ruby.hljs .hljs-function .hljs-keyword")
.text()
.trim(),
"def"
);
}
});
componentTest("highlighting code limit", {
template: "{{highlighted-code lang='ruby' code=code}}",
beforeEach() {
setupHighlightJs({
highlightJsUrl: "/assets/highlightjs/highlight-test-bundle.min.js",
highlightJsWorkerUrl: "/assets/highlightjs-worker.js"
});
},
async test(assert) {
this.set("code", LONG_CODE_BLOCK);
await waitForHighlighting();
assert.equal(
find("code")
.text()
.trim(),
LONG_CODE_BLOCK.trim()
);
}
});