showdown.Converter.js 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132
  1. /**
  2. * Created by Estevao on 31-05-2015.
  3. */
  4. require('source-map-support').install();
  5. require('chai').should();
  6. require('sinon');
  7. var showdown = require('../bootstrap').showdown;
  8. describe('showdown.Converter', function () {
  9. 'use strict';
  10. describe('option methods', function () {
  11. var converter = new showdown.Converter();
  12. it('setOption() should set option foo=baz', function () {
  13. converter.setOption('foo', 'baz');
  14. });
  15. it('getOption() should get option foo to equal baz', function () {
  16. converter.getOption('foo').should.equal('baz');
  17. });
  18. it('getOptions() should contain foo=baz', function () {
  19. var options = converter.getOptions();
  20. options.should.have.ownProperty('foo');
  21. options.foo.should.equal('baz');
  22. });
  23. });
  24. describe('setFlavor method', function () {
  25. /**
  26. * Test setFlavor('github')
  27. */
  28. describe('github', function () {
  29. var converter = new showdown.Converter(),
  30. ghOpts = {
  31. omitExtraWLInCodeBlocks: true,
  32. prefixHeaderId: 'user-content-',
  33. simplifiedAutoLink: true,
  34. literalMidWordUnderscores: true,
  35. strikethrough: true,
  36. tables: true,
  37. tablesHeaderId: true,
  38. ghCodeBlocks: true,
  39. tasklists: true
  40. };
  41. converter.setFlavor('github');
  42. for (var opt in ghOpts) {
  43. if (ghOpts.hasOwnProperty(opt)) {
  44. check(opt, ghOpts[opt]);
  45. }
  46. }
  47. function check(key, val) {
  48. it('should set ' + opt + ' to ' + val, function () {
  49. converter.getOption(key).should.equal(val);
  50. });
  51. }
  52. });
  53. });
  54. describe('extension methods', function () {
  55. var extObjMock = {
  56. type: 'lang',
  57. filter: function () {}
  58. },
  59. extObjFunc = function () {
  60. return extObjMock;
  61. };
  62. it('addExtension() should add an extension Object', function () {
  63. var converter = new showdown.Converter();
  64. converter.addExtension(extObjMock);
  65. converter.getAllExtensions().language.should.contain(extObjMock);
  66. });
  67. it('addExtension() should unwrap an extension wrapped in a function', function () {
  68. var converter = new showdown.Converter();
  69. converter.addExtension(extObjFunc);
  70. converter.getAllExtensions().language.should.contain(extObjMock);
  71. });
  72. it('useExtension() should use a previous registered extension in showdown', function () {
  73. showdown.extension('foo', extObjMock);
  74. var converter = new showdown.Converter();
  75. converter.useExtension('foo');
  76. converter.getAllExtensions().language.should.contain(extObjMock);
  77. showdown.resetExtensions();
  78. });
  79. });
  80. describe('events', function () {
  81. var events = [
  82. 'anchors',
  83. 'autoLinks',
  84. 'blockGamut',
  85. 'blockQuotes',
  86. 'codeBlocks',
  87. 'codeSpans',
  88. 'githubCodeBlocks',
  89. 'headers',
  90. 'images',
  91. 'italicsAndBold',
  92. 'lists',
  93. 'paragraph',
  94. 'spanGamut'
  95. //'strikeThrough',
  96. //'tables'
  97. ];
  98. for (var i = 0; i < events.length; ++i) {
  99. runListener(events[i] + '.before');
  100. runListener(events[i] + '.after');
  101. }
  102. function runListener (name) {
  103. it('should listen to ' + name, function () {
  104. var converter = new showdown.Converter();
  105. converter.listen(name, function (evtName, text) {
  106. evtName.should.equal(name);
  107. text.should.match(/^[\s\S]*foo[\s\S]*$/);
  108. return text;
  109. })
  110. .makeHtml('foo');
  111. });
  112. }
  113. });
  114. });