-
-
Notifications
You must be signed in to change notification settings - Fork 512
/
Copy pathTemplateRenderMarkdownPluginTest.js
76 lines (61 loc) · 2.47 KB
/
TemplateRenderMarkdownPluginTest.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
import test from "ava";
import md from "markdown-it";
import TemplateRender from "../src/TemplateRender.js";
import EleventyExtensionMap from "../src/EleventyExtensionMap.js";
import { getTemplateConfigInstance } from "./_testHelpers.js";
async function getNewTemplateRender(name, inputDir) {
let eleventyConfig = await getTemplateConfigInstance();
let tr = new TemplateRender(name, eleventyConfig);
tr.extensionMap = new EleventyExtensionMap(eleventyConfig);
tr.extensionMap.setFormats([]);
await tr.init();
return tr;
}
const createTestMarkdownPlugin = () => {
const plugin = (md) => {
md.core.ruler.after("inline", "replace-link", function (state) {
plugin.environment = state.env;
const link = state.tokens[1].children[0].attrs[0][1];
state.tokens[1].children[0].attrs[0][1] = `${link}?data=${state.env.some}`;
return false;
});
};
plugin.environment = {};
return plugin;
};
test("Markdown Render: with HTML prerender, sends context data to the markdown library", async (t) => {
let tr = await getNewTemplateRender("md");
const plugin = createTestMarkdownPlugin();
let mdLib = md().use(plugin);
tr.engine.setLibrary(mdLib);
const data = { some: "data" };
let fn = await tr.getCompiledTemplate("[link text](http://link.com)");
let result = await fn(data);
t.deepEqual(plugin.environment, data);
t.is(result, '<p><a href="http://link.com?data=data">link text</a></p>\n');
});
test("Markdown Render: without HTML prerender, sends context data to the markdown library", async (t) => {
let tr = await getNewTemplateRender("md");
const plugin = createTestMarkdownPlugin();
let mdLib = md().use(plugin);
tr.engine.setLibrary(mdLib);
tr.setHtmlEngine(false);
const data = { some: "data" };
let fn = await tr.getCompiledTemplate("[link text](http://link.com)");
let result = await fn(data);
t.deepEqual(plugin.environment, data);
t.is(result, '<p><a href="http://link.com?data=data">link text</a></p>\n');
});
test("Markdown Render: renderer that only implements the render function", async (t) => {
let tr = await getNewTemplateRender("md");
tr.engine.setLibrary({
render: (content) => {
const [_, text, href] = content.match(/\[(.*)\]\((.*)\)/);
return `<p><a href="${href}">${text}</a></p>\n`;
},
});
tr.setHtmlEngine(false);
let fn = await tr.getCompiledTemplate("[link text](http://link.com)");
let result = await fn();
t.is(result, '<p><a href="http://link.com">link text</a></p>\n');
});