UNPKG

4.87 kBJavaScriptView Raw
1/* eslint no-console: 0 */
2var {describe, it} = require("mocha"),
3 chai = require("chai"),
4 {assert} = chai,
5 proxyquire = require("proxyquire"),
6 sinon = require("sinon"),
7 conf = require("../.inline.js");
8
9chai.use(require("chai-subset"));
10
11var content = "";
12
13var fs = {
14 readFileSync: sinon.spy(() => content)
15};
16
17var fsExtra = {
18 outputFileSync: sinon.spy()
19};
20
21var {
22 inlines, inline, parseInline, createShortcuts
23} = proxyquire("../index", {fs, "fs-extra": fsExtra});
24
25describe("parseInline", () => {
26
27 it(".shortcut", () => {
28 var parsed = parseInline("$inline.shortcut('a', 'b')");
29 assert.containSubset(parsed, {
30 type: "$inline.shortcut",
31 params: ["a", "b"]
32 });
33 });
34});
35
36describe("createShortcuts", () => {
37
38 var prepare = (name, expand) => {
39 var shortcuts = createShortcuts();
40 shortcuts.addGlobal({name, expand});
41 return shortcuts;
42 };
43
44 it("basic", () => {
45 var shortcuts = prepare("test", "a.txt|tr:$1");
46 assert.equal(shortcuts.expand("", "test:abc"), "a.txt|tr:abc");
47 });
48
49 it("multiple arguments", () => {
50 var shortcuts = prepare("test", "a.txt|tr:$1|tr2:$2");
51 assert.equal(shortcuts.expand("", "test:abc,123"), "a.txt|tr:abc|tr2:123");
52 });
53
54 it("$&", () => {
55 var shortcuts = prepare("test", "a.txt|tr:$&");
56 assert.equal(shortcuts.expand("", "test:abc,123"), "a.txt|tr:abc,123");
57 });
58
59 it("additional pipes", () => {
60 var shortcuts = prepare("test", "a.txt|tr");
61 assert.equal(shortcuts.expand("", "test|tr2|tr3"), "a.txt|tr|tr2|tr3");
62 });
63
64});
65
66describe("inlines", () => {
67
68 it("$inline", () => {
69 var [parsed] = [...inlines("$inline('path/to/file')")];
70 assert.containSubset(parsed, {
71 type: "$inline",
72 start: 0,
73 end: 23
74 });
75 });
76
77 it(".start .end", () => {
78 var [parsed] = [...inlines("$inline.start('./a.txt')\ntest\n$inline.end")];
79 assert.containSubset(parsed, {
80 type: "$inline.start",
81 start: 25,
82 end: 29
83 });
84 });
85
86 it(".line", () => {
87 var [parsed] = [...inlines("test\ntest$inline.line('path/to/file')test\ntest")];
88 assert.containSubset(parsed, {
89 type: "$inline.line",
90 start: 5,
91 end: 41
92 });
93 });
94
95 it(".shortcut", () => {
96 var [parsed] = [...inlines("$inline.shortcut('test', 'file|t1:$2,$1')")];
97 assert.containSubset(parsed, {
98 type: "$inline.shortcut",
99 params: ["test", "file|t1:$2,$1"]
100 });
101 });
102
103});
104
105describe("inline", () => {
106 it("maxDepth", () => {
107 var resourceCenter = {
108 read: sinon.spy(() => {
109 assert.isBelow(resourceCenter.read.callCount, 20);
110 return "$inline('./self')";
111 })
112 };
113 assert.throws(() => {
114 inline({
115 resourceCenter,
116 resource: {name: "file", args: "./self"},
117 maxDepth: 10, depth: 0
118 });
119 }, "Max recursion depth 10");
120 });
121
122 it("shortcut", () => {
123 var resourceCenter = {
124 read() {
125 this.read = this.read2;
126 return "$inline.shortcut('pkg', '../package.json|parse:$1')\n$inline('pkg:test')";
127 },
128 read2() {
129 return JSON.stringify({test: "OK"});
130 }
131 };
132 var transformer = {
133 transform({resource, transforms = [], content}) {
134 assert.equal(resource.args, "../package.json");
135 assert.deepEqual(transforms, [{
136 name: "parse",
137 args: "test"
138 }]);
139 this.transform = this.transform2;
140 return JSON.parse(content).test;
141 },
142 transform2({resource, content}) {
143 assert.equal(resource.args, "entry");
144 return content;
145 }
146 };
147 assert.equal(inline({
148 resourceCenter,
149 resource: {name: "file", args: "entry"},
150 transformer
151 }).split("\n")[1], "OK");
152 });
153});
154
155describe("transforms", () => {
156 var tr = {};
157 conf.transforms.forEach(tf => tr[tf.name] = tf.transform);
158
159 it("eval", () => {
160 assert.equal(
161 tr.eval(null, '{"hello": 123}', "JSON.parse($0).hello"),
162 123
163 );
164 });
165
166 it("parse", () => {
167 var content = '{"version": "1.2.3","nested": {"prop": 123}}';
168 assert.equal(tr.parse(null, content, "version"), "1.2.3");
169 assert.equal(tr.parse(null, content, "nested", "prop"), 123);
170 });
171
172 it("markdown", () => {
173 var content = "some text";
174 assert.equal(tr.markdown(null, content, "codeblock"), "```\nsome text\n```");
175 assert.equal(tr.markdown(null, content, "code"), "`some text`");
176 assert.equal(tr.markdown(null, content, "quote"), "> some text");
177 });
178
179 it("base64", () => {
180 const fs = require("fs");
181 let content, result;
182 content = fs.readFileSync(`${__dirname}/base64/test.css`);
183 result = fs.readFileSync(`${__dirname}/base64/test.css-base64.txt`, "utf8");
184 assert.equal(tr.dataurl("test.css", content), result);
185
186 content = fs.readFileSync(`${__dirname}/base64/test.png`);
187 result = fs.readFileSync(`${__dirname}/base64/test.png-base64.txt`, "utf8");
188 assert.equal(tr.dataurl("test.png", content), result);
189 });
190});