/* 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('

Hello

'); done(); }); }); test('custom rules', (done) => { renderer.renderShowDown('www.google.com', (html) => { expect(html).toBe('

www.google.com

'); done(); }); }); test('code format', (done) => { renderer.renderShowDown('```python\nprint("hello")\n```\n\n```python\nprint("hello")\n```', (html) => { expect(html).toBe('
print("hello")\n
\n
print("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(); }); }); });