UNPKG

yamp

Version:
298 lines (282 loc) 12.6 kB
"use strict"; const assert = require('chai').assert; const fs = require('fs-extra'); const Renderer = require('../../app/renderer'); const HtmlRenderer = require('../../app/renderers/html_renderer'); const config = require('../config/config'); const regex = config.regex; const testDir = config.testDir; const testFrontMatterFile = config.testFiles.frontMatter; const testMdFiles = config.testFiles.md; describe("Html Renderer", () => { it("Create Renderer with default data", () => { const renderer = new HtmlRenderer({}); assert.ok(renderer); assert.instanceOf(renderer, HtmlRenderer); assert.instanceOf(renderer, Renderer); assert.strictEqual(renderer.output, "html"); const keys = Object.keys(config.rendererDefaultOptions); for (let i = 0; i < keys.length; i += 1) { const k = keys[i]; assert.strictEqual(renderer.options[k], config.rendererDefaultOptions[k]); } }); it("Create Html file", (done) => { const renderer = new HtmlRenderer({ outputFilename: testDir + "/test" }); const originalOptions = JSON.stringify(renderer.options); renderer.renderFile(testDir + "/" + testMdFiles[0], (renderFileError) => { assert.notOk(renderFileError); fs.stat(testDir + "/test.html", (err, res) => { assert.notOk(err); assert.ok(res); assert.ok(res.isFile()); fs.readFile(testDir + "/test.html", "utf8", (err, res) => { assert.notOk(err); assert.ok(res); assert.match(res, regex.html); assert.match(res, regex.htmlBody); const body = regex.htmlBody.exec(res)[0]; assert.ok(body); const regKeys = Object.keys(regex.htmlTestFile); for (let i = 0; i < regKeys.length; i++) { assert.match(body, regex.htmlTestFile[regKeys[i]]); } assert.strictEqual(JSON.stringify(renderer.options), originalOptions); done(); }); }); }); }); it("Create Html file using a Promise", (done) => { const renderer = new HtmlRenderer({ outputFilename: testDir + "/test" }); const originalOptions = JSON.stringify(renderer.options); renderer.renderFile(testDir + "/" + testMdFiles[0]) .then(() => { fs.stat(testDir + "/test.html", (err, res) => { assert.notOk(err); assert.ok(res); assert.ok(res.isFile()); fs.readFile(testDir + "/test.html", "utf8", (err, res) => { assert.notOk(err); assert.ok(res); assert.match(res, regex.html); assert.match(res, regex.htmlBody); const body = regex.htmlBody.exec(res)[0]; assert.ok(body); const regKeys = Object.keys(regex.htmlTestFile); for (let i = 0; i < regKeys.length; i++) { assert.match(body, regex.htmlTestFile[regKeys[i]]); } assert.strictEqual(JSON.stringify(renderer.options), originalOptions); done(); }); }); }); }); it("Create Html file with supplied extension", (done) => { const renderer = new HtmlRenderer({ outputFilename: testDir + "/test.html" }); renderer.renderFile(testDir + "/" + testMdFiles[0], (renderFileError) => { assert.notOk(renderFileError); fs.stat(testDir + "/test.html", (err, res) => { assert.notOk(err); assert.ok(res); assert.ok(res.isFile()); done(); }); }); }); it("Wrong input file", (done) => { const renderer = new HtmlRenderer(); assert.ok(renderer); renderer.renderFile("", (err) => { assert.ok(err); fs.readFile("/default.html", (err) => { assert.ok(err); renderer.renderFile("not_a_file.md", (err) => { assert.ok(err); fs.readFile("/not_a_file.html", (err) => { assert.ok(err); renderer.renderFile("wrongFolder/not_a_file.md", (err) => { assert.ok(err); fs.readFile("wrongFolder/not_a_file.html", (err) => { assert.ok(err); done(); }); }); }); }); }); }); }); it("Wrong input file using a Promise", (done) => { const renderer = new HtmlRenderer(); assert.ok(renderer); renderer.renderFile("") .catch((err) => { assert.ok(err); fs.readFile("/default.html", (err) => { assert.ok(err); renderer.renderFile("not_a_file.md") .catch((err) => { assert.ok(err); fs.readFile("/not_a_file.html", (err) => { assert.ok(err); renderer.renderFile("wrongFolder/not_a_file.md") .catch((err) => { assert.ok(err); fs.readFile("wrongFolder/not_a_file.html", (err) => { assert.ok(err); done(); }); }); }); }); }); }); }); it("Rendering multiple files", (done) => { const renderer = new HtmlRenderer({ outputFilename: testDir + "/test" }); renderer.renderFile([testDir + "/" + testMdFiles[1], testDir + "/" + testMdFiles[0]], (err) => { assert.notOk(err); fs.readFile(testDir + "/test.html", "utf8", (err, res) => { assert.notOk(err); assert.ok(res); assert.match(res, regex.html); assert.match(res, regex.htmlBody); const body = regex.htmlBody.exec(res)[0]; assert.ok(body); assert.match(body, /<p>This should be included<\/p>[\s]*<h1[\s\S]*Markdown Test<\/h1>/); done(); }); }); }); describe("Renderer options", () => { it("Highlight", (done) => { const renderer = new HtmlRenderer({ outputFilename: testDir + "/test", highlight: true }); const originalOptions = JSON.stringify(renderer.options); renderer.renderFile(testDir + "/" + testMdFiles[0], (err) => { assert.notOk(err); fs.readFile(testDir + "/test.html", "utf8", (err, res) => { assert.notOk(err); assert.ok(res); assert.match(res, regex.html); assert.match(res, regex.options.highlightjs); assert.match(res, regex.options.highlightcss); renderer.renderFile(testDir + "/" + testMdFiles[1], (err) => { assert.notOk(err); fs.readFile(testDir + "/test.html", "utf8", (err, res) => { assert.notOk(err); assert.ok(res); assert.match(res, regex.html); assert.notMatch(res, regex.options.highlightjs); assert.notMatch(res, regex.options.highlightcss); assert.strictEqual(JSON.stringify(renderer.options), originalOptions); const renderer2 = new HtmlRenderer({ outputFilename: testDir + "/test", highlight: false }); const originalOptions2 = JSON.stringify(renderer2.options); renderer2.renderFile(testDir + "/" + testMdFiles[0], (err) => { assert.notOk(err); fs.readFile(testDir + "/test.html", "utf8", (err, res) => { assert.notOk(err); assert.ok(res); assert.match(res, regex.html); assert.notMatch(res, regex.options.highlightjs); assert.notMatch(res, regex.options.highlightcss); assert.strictEqual(JSON.stringify(renderer2.options), originalOptions2); done(); }); }); }); }); }); }); }); it("Title", (done) => { const titleTest = "Testing Title"; let titleRegex = new RegExp("<title>" + titleTest + "</title>"); let renderer = new HtmlRenderer({ outputFilename: testDir + "/test", title: titleTest }); renderer.renderFile(testDir + "/" + testMdFiles[0], (err) => { assert.notOk(err); fs.readFile(testDir + "/test.html", "utf8", (err, res) => { assert.notOk(err); assert.ok(res); assert.match(res, regex.html); assert.match(res, titleRegex); renderer = new HtmlRenderer({ outputFilename: testDir + "/test", }); renderer.renderFile(testDir + "/" + testMdFiles[1], (err) => { assert.notOk(err); fs.readFile(testDir + "/test.html", "utf8", (err, res) => { titleRegex = /<title>test<\/title>/; assert.notOk(err); assert.ok(res); assert.match(res, regex.html); assert.match(res, titleRegex); done(); }); }); }); }); }); it.skip("Style", () => { }); it.skip("Minify", () => { }); it.skip("Koala", () => { }); it("Front Matter", (done) => { const renderer = new HtmlRenderer({ outputFilename: testDir + "/test", }); renderer.renderFile(testDir + "/" + testFrontMatterFile, (err) => { assert.notOk(err); fs.readFile(testDir + "/test.html", "utf8", (err, res) => { const titleRegex = /<title>Custom title<\/title>/; assert.notOk(err); assert.ok(res); assert.match(res, regex.html); assert.match(res, titleRegex); assert.match(res, /This is an example of a front matter file/); assert.notMatch(res, /title: Custom title/); assert.notMatch(res, /koala: true/); const renderer = new HtmlRenderer({ outputFilename: testDir + "/test", frontMatter: false }); renderer.renderFile(testDir + "/" + testFrontMatterFile, (err) => { assert.notOk(err); fs.readFile(testDir + "/test.html", "utf8", (err, res) => { assert.notOk(err); assert.ok(res); assert.match(res, regex.html); assert.notMatch(res, titleRegex); assert.match(res, /This is an example of a front matter file/); assert.match(res, /title: Custom title/); assert.match(res, /koala: true/); done(); }); }); }); }); }); }); it.skip("Extending class", () => { }); });