showdown.Converter.js 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149
  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('converter.setFlavor()', function () {
  25. /**
  26. * Test setFlavor('github')
  27. */
  28. describe('github', function () {
  29. var converter = new showdown.Converter(),
  30. ghOpts = showdown.getFlavorOptions('github');
  31. converter.setFlavor('github');
  32. for (var opt in ghOpts) {
  33. if (ghOpts.hasOwnProperty(opt)) {
  34. check(opt, ghOpts[opt]);
  35. }
  36. }
  37. function check (key, val) {
  38. it('should set ' + opt + ' to ' + val, function () {
  39. converter.getOption(key).should.equal(val);
  40. });
  41. }
  42. });
  43. });
  44. describe('getFlavor method', function () {
  45. // reset showdown
  46. showdown.setFlavor('vanilla');
  47. describe('flavor', function () {
  48. it('should be vanilla by default', function () {
  49. var converter = new showdown.Converter();
  50. converter.getFlavor().should.equal('vanilla');
  51. });
  52. it('should be changed if global option is changed', function () {
  53. showdown.setFlavor('github');
  54. var converter = new showdown.Converter();
  55. converter.getFlavor().should.equal('github');
  56. showdown.setFlavor('vanilla');
  57. });
  58. it('should not be changed if converter is initialized before global change', function () {
  59. var converter = new showdown.Converter();
  60. showdown.setFlavor('github');
  61. converter.getFlavor().should.equal('vanilla');
  62. showdown.setFlavor('vanilla');
  63. });
  64. });
  65. });
  66. describe('extension methods', function () {
  67. var extObjMock = {
  68. type: 'lang',
  69. filter: function () {}
  70. },
  71. extObjFunc = function () {
  72. return extObjMock;
  73. };
  74. it('addExtension() should add an extension Object', function () {
  75. var converter = new showdown.Converter();
  76. converter.addExtension(extObjMock);
  77. converter.getAllExtensions().language.should.contain(extObjMock);
  78. });
  79. it('addExtension() should unwrap an extension wrapped in a function', function () {
  80. var converter = new showdown.Converter();
  81. converter.addExtension(extObjFunc);
  82. converter.getAllExtensions().language.should.contain(extObjMock);
  83. });
  84. it('useExtension() should use a previous registered extension in showdown', function () {
  85. showdown.extension('foo', extObjMock);
  86. var converter = new showdown.Converter();
  87. converter.useExtension('foo');
  88. converter.getAllExtensions().language.should.contain(extObjMock);
  89. showdown.resetExtensions();
  90. });
  91. });
  92. describe('events', function () {
  93. var events = [
  94. 'anchors',
  95. 'autoLinks',
  96. 'blockGamut',
  97. 'blockQuotes',
  98. 'codeBlocks',
  99. 'codeSpans',
  100. 'githubCodeBlocks',
  101. 'headers',
  102. 'images',
  103. 'italicsAndBold',
  104. 'lists',
  105. 'paragraph',
  106. 'spanGamut'
  107. //'strikeThrough',
  108. //'tables'
  109. ];
  110. for (var i = 0; i < events.length; ++i) {
  111. runListener(events[i] + '.before');
  112. runListener(events[i] + '.after');
  113. }
  114. function runListener (name) {
  115. it('should listen to ' + name, function () {
  116. var converter = new showdown.Converter();
  117. converter.listen(name, function (evtName, text) {
  118. evtName.should.equal(name);
  119. text.should.match(/^[\s\S]*foo[\s\S]*$/);
  120. return text;
  121. })
  122. .makeHtml('foo');
  123. });
  124. }
  125. });
  126. });