showdown.Converter.js 4.5 KB

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