/* jshint -W117 */ const fs = require('fs'); const path = require('path'); const utils = require('./test_utils'); const dataDir = 'test_data'; const file = path.join(dataDir, 'test.md'); const config = { 'test': true, 'modules': { 'prism': true, 'mathjax': true }, 'showdown': { 'simplifiedAutoLink': true, 'smartIndentationFix': true }, 'mathjax': { 'output_format': 'html', 'speak_text': false } }; const renderer = require('../src/renderer')(config); beforeEach(() => { config['modules']['prism'] = true; config['modules']['mathjax'] = true; utils.deleteFolderSync(dataDir); fs.mkdirSync(dataDir); }); afterAll(() => { if (fs.existsSync(dataDir)) { utils.deleteFolderSync(dataDir); } }); describe('Test Showdown', () => { test('normal', (done) => { renderer.renderShowDown('# Hello', (html) => { expect(html).toBe('
print("hello")\n\nprint("hello")\n');
done();
});
});
});
describe('Test Prism', () => {
test('no prism', (done) => {
config['modules']['prism'] = false;
renderer.renderPrism('```python\nprint("hello")\n```\n\n```python\nprint("hello")\n```', (data) => {
expect(data).toBe('```python\nprint("hello")\n```\n\n```python\nprint("hello")\n```');
done();
});
});
test('prism correct', (done) => {
renderer.renderPrism('```python\nprint("hello")\n```', (data) => {
expect(data).not.toBe('print("hello")\n');
expect(data.indexOf('')).toBe(0);
done();
});
});
test('prism invalid lang', (done) => {
renderer.renderPrism('```pythdon\nprint("hello")\n```', (data) => {
expect(data).not.toBe('print("hello")\n
');
expect(data.indexOf('')).toBe(0);
done();
});
});
test('prism mutliple code blocks', (done) => {
renderer.renderPrism('```python\n\n```\n```python\n\n```', (data) => {
expect(data).toBe('
\n
');
done();
});
});
});
describe('Test MathJax', () => {
test('no mathjax', (done) => {
config['modules']['mathjax'] = false;
renderer.renderMathJax('$$\nhello\n$$\ntest$test$', (data) => {
expect(data).toBe('$$\nhello\n$$\ntest$test$');
done();
});
});
test('full eq', (done) => {
renderer.renderMathJax('$$\n\nA\n\n$$', (data) => {
expect(data).toBe('' +
'' +
'' +
'A' +
'');
done();
});
});
test('inline eq', (done) => {
renderer.renderMathJax('start $a$ end', (data) => {
expect(data).toBe('start ' +
'' +
'' +
'' +
'a' +
'' +
' end');
done();
});
});
test('fake inline eq', (done) => {
renderer.renderMathJax('i have $6\nyou have $5', (data) => {
expect(data).toBe('i have $6\nyou have $5');
done();
});
});
test('multiple eq', (done) => {
renderer.renderMathJax('$$\n\nA\n\n$$\nstart $a$ end\n$$\n\nA\n\n$$', (data) => {
expect(data).toBe('' +
'' +
'' +
'' +
'A' +
'\n' +
'start ' +
'' +
'' +
'' +
'a' +
'' +
' end\n' +
'' +
'' +
'' +
'A' +
'');
done();
});
});
});
describe('Test render', () => {
test('invalid file', (done) => {
renderer.render('invalid file', (err, html) => {
expect(err).not.toBeNull();
expect(html).not.toBeDefined();
done();
});
});
test('normal file', (done) => {
fs.writeFileSync(file, `# Hello`);
renderer.render(file, (err, html) => {
expect(err).toBeNull();
expect(html).toBe('Hello
');
done();
});
});
});