/** * Tests the highlight extension for showdown * * Note, that the showdown highlight extension is a post-HTML filter, so most of the tests are in * showdown_client_integration_spec, to make it easier to test the behaviour on top of the already converted HTML * */ /*globals describe, it */ /*jshint expr:true*/ var should = require('should'), // Stuff we are testing ghosthighlight = require('../../shared/lib/showdown/extensions/ghosthighlight'); // To stop jshint complaining should.equal(true, true); function _ExecuteExtension(ext, text) { if (ext.regex) { var re = new RegExp(ext.regex, 'g'); return text.replace(re, ext.replace); } else if (ext.filter) { return ext.filter(text); } } function _ConvertPhrase(testPhrase) { return ghosthighlight().reduce(function (text, ext) { return _ExecuteExtension(ext, text); }, testPhrase); } describe('Ghost highlight showdown extension', function () { /*jslint regexp: true */ it('should export an array of methods for processing', function () { ghosthighlight.should.be.a.function; ghosthighlight().should.be.an.Array; ghosthighlight().forEach(function (processor) { processor.should.be.an.Object; processor.should.have.property('type'); processor.type.should.be.a.String; }); }); it('should replace showdown highlight with html', function () { var testPhrases = [ { input: '==foo_bar==', output: /^foo_bar<\/mark>$/ }, { input: 'My stuff that has a ==highlight== in the middle.', output: /^My stuff that has a highlight<\/mark> in the middle.$/ }, { input: 'My stuff that has a ==multiple word highlight== in the middle.', output: /^My stuff that has a multiple word highlight<\/mark> in the middle.$/ }, { input: 'My stuff that has a ==multiple word and\n line broken highlight== in the middle.', output: /^My stuff that has a multiple word and\n line broken highlight<\/mark> in the middle.$/ } ]; testPhrases.forEach(function (testPhrase) { var processedMarkup = _ConvertPhrase(testPhrase.input); processedMarkup.should.match(testPhrase.output); }); }); it('should ignore multiple equals', function () { var testPhrase = {input: '=====', output: /^=====$/}, processedMarkup = _ConvertPhrase(testPhrase.input); processedMarkup.should.match(testPhrase.output); }); });