'use strict'; var assert = require('assert'); var markdownit = require('../'); var utils = require('../').utils; describe('Utils', function () { it('fromCodePoint', function () { var fromCodePoint = require('../lib/common/utils').fromCodePoint; assert.strictEqual(fromCodePoint(0x20), ' '); assert.strictEqual(fromCodePoint(0x1F601), '😁'); }); it('isValidEntityCode', function () { var isValidEntityCode = require('../lib/common/utils').isValidEntityCode; assert.strictEqual(isValidEntityCode(0x20), true); assert.strictEqual(isValidEntityCode(0xD800), false); assert.strictEqual(isValidEntityCode(0xFDD0), false); assert.strictEqual(isValidEntityCode(0x1FFFF), false); assert.strictEqual(isValidEntityCode(0x1FFFE), false); assert.strictEqual(isValidEntityCode(0x00), false); assert.strictEqual(isValidEntityCode(0x0B), false); assert.strictEqual(isValidEntityCode(0x0E), false); assert.strictEqual(isValidEntityCode(0x7F), false); }); it('replaceEntities', function () { var replaceEntities = require('../lib/common/utils').replaceEntities; assert.strictEqual(replaceEntities('&'), '&'); assert.strictEqual(replaceEntities(' '), ' '); assert.strictEqual(replaceEntities(' '), ' '); assert.strictEqual(replaceEntities('&&'), '&&'); assert.strictEqual(replaceEntities('&am;'), '&am;'); assert.strictEqual(replaceEntities(''), ''); }); it('assign', function () { var assign = require('../lib/common/utils').assign; assert.deepEqual(assign({ a: 1 }, null, { b: 2 }), { a: 1, b: 2 }); assert.throws(function () { assign({}, 123); }); }); }); describe('API', function () { it('constructor', function () { assert.throws(function () { var md = markdownit('bad preset'); md.render('123'); }); }); it('configure coverage', function () { var md = markdownit('full'); // conditions coverage md.configure({}); assert.strictEqual(md.render('123'), '
123
\n'); }); it('plugin', function () { var succeeded = false; function plugin(self, opts) { if (opts === 'bar') { succeeded = true; } } var md = markdownit(); md.use(plugin, 'foo'); assert.strictEqual(succeeded, false); md.use(plugin, 'bar'); assert.strictEqual(succeeded, true); }); it('highlight', function () { var md = markdownit({ highlight: function (str) { return '==' + str + '=='; } }); assert.strictEqual(md.render('```\nhl\n```'), '==hl\n==
\n');
});
it('highlight escape by default', function () {
var md = markdownit({
highlight: function () {
return '';
}
});
assert.strictEqual(md.render('```\n&\n```'), '&\n
\n');
});
it('force hardbreaks', function () {
var md = markdownit({ breaks: true });
assert.strictEqual(md.render('a\nb'), 'a
\nb
a
\nb
a
\nb
a
\nb
123
\n'); assert.strictEqual(md.render('123\n'), '123
\n'); }); it('Should quickly exit on empty string', function () { var md = markdownit(); assert.strictEqual(md.render(''), ''); }); it('Should parse inlines only', function () { var md = markdownit('full'); assert.strictEqual(md.renderInline('a *b* c'), 'a b c'); }); it('Renderer should have pluggable inline and block rules', function () { var md = markdownit(); md.renderer.rules.em_open = function () { return 'foo@example.com
\n'); assert.strictEqual(md.render('http://example.com'), 'http://example.com
\n'); assert.strictEqual(md.render('<foo@example.com>
\n'); assert.strictEqual(md.render('<http://example.com>
\n'); assert.strictEqual(md.render('[test](http://example.com)'), '[test](http://example.com)
\n'); }); }); describe('Custom fences', function () { it('should render differently overriden rule', function () { var md = markdownit(); md.renderer.rules.fence_custom.foo = function (tokens, idx, options, env, self) { return '