showdown/test/node/showdown.js
simo 3e22fc658c Reset options before switching to a flavor (#365)
fix(flavors): reset options before switching to a flavor
2017-03-30 23:17:10 +01:00

159 lines
4.4 KiB
JavaScript

require('source-map-support').install();
require('chai').should();
var expect = require('chai').expect,
showdown = require('../bootstrap').showdown;
describe('showdown.options', function () {
'use strict';
describe('setOption() and getOption()', function () {
it('should set option foo=bar', function () {
showdown.setOption('foo', 'bar');
showdown.getOption('foo').should.equal('bar');
showdown.resetOptions();
(typeof showdown.getOption('foo')).should.equal('undefined');
});
});
describe('getDefaultOptions()', function () {
it('should get default options', function () {
var opts = require('../optionswp').getDefaultOpts(true);
expect(showdown.getDefaultOptions()).to.be.eql(opts);
});
});
});
describe('showdown.extension()', function () {
'use strict';
var extObjMock = {
type: 'lang',
filter: function () {}
},
extObjFunc = function () {
return extObjMock;
};
describe('should register', function () {
it('an extension object', function () {
showdown.extension('foo', extObjMock);
showdown.extension('foo').should.eql([extObjMock]);
showdown.resetExtensions();
});
it('an extension function', function () {
showdown.extension('foo', extObjFunc);
showdown.extension('foo').should.eql([extObjMock]);
showdown.resetExtensions();
});
it('a listener extension', function () {
showdown.extension('foo', {
type: 'listener',
listeners: {
foo: function (name, txt) {
return txt;
}
}
});
showdown.resetExtensions();
});
});
describe('should refuse to register', function () {
it('a generic object', function () {
var fn = function () {
showdown.extension('foo', {});
};
expect(fn).to.throw();
});
it('an extension with invalid type', function () {
var fn = function () {
showdown.extension('foo', {
type: 'foo'
});
};
expect(fn).to.throw(/type .+? is not recognized\. Valid values: "lang\/language", "output\/html" or "listener"/);
});
it('an extension without regex or filter', function () {
var fn = function () {
showdown.extension('foo', {
type: 'lang'
});
};
expect(fn).to.throw(/extensions must define either a "regex" property or a "filter" method/);
});
it('a listener extension without a listeners property', function () {
var fn = function () {
showdown.extension('foo', {
type: 'listener'
});
};
expect(fn).to.throw(/Extensions of type "listener" must have a property called "listeners"/);
});
});
});
describe('showdown.getAllExtensions()', function () {
'use strict';
var extObjMock = {
type: 'lang',
filter: function () {}
};
it('should return all extensions', function () {
showdown.extension('bar', extObjMock);
showdown.getAllExtensions().should.eql({bar: [extObjMock]});
});
});
describe('showdown.setFlavor()', function () {
'use strict';
it('should set flavor to github', function () {
showdown.setFlavor('github');
showdown.getFlavor().should.equal('github');
showdown.setFlavor('vanilla');
});
it('should set options correctly', function () {
showdown.setFlavor('github');
var ghOpts = showdown.getFlavorOptions('github'),
shOpts = showdown.getOptions();
for (var opt in ghOpts) {
if (ghOpts.hasOwnProperty(opt)) {
shOpts.should.have.property(opt);
shOpts[opt].should.equal(ghOpts[opt]);
}
}
showdown.setFlavor('vanilla');
});
it('should switch between flavors correctly', function () {
showdown.setFlavor('github');
var ghOpts = showdown.getFlavorOptions('github'),
shOpts = showdown.getOptions(),
dfOpts = showdown.getDefaultOptions();
for (var opt in dfOpts) {
if (ghOpts.hasOwnProperty(opt)) {
shOpts[opt].should.equal(ghOpts[opt]);
} else {
shOpts[opt].should.equal(dfOpts[opt]);
}
}
showdown.setFlavor('original');
var orOpts = showdown.getFlavorOptions('original');
shOpts = showdown.getOptions();
for (opt in dfOpts) {
if (orOpts.hasOwnProperty(opt)) {
shOpts[opt].should.equal(orOpts[opt]);
} else {
shOpts[opt].should.equal(dfOpts[opt]);
}
}
showdown.setFlavor('vanilla');
});
});