test.js 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127
  1. "use strict";
  2. var assert = require("assert");
  3. var fs = require("fs");
  4. var MarkdownIt = require("markdown-it");
  5. var markdownItAnchor = require("markdown-it-anchor");
  6. var markdownItTOC = require("../../index");
  7. // Defaults
  8. var defaultContainerClass = "table-of-contents";
  9. var defaultMarker = "[[toc]]";
  10. var defaultListType = "ul";
  11. var defaultHeading1 = "Sub heading 1";
  12. // Fixtures
  13. var simpleMarkdown = fs.readFileSync("test/fixtures/simple.md", "utf-8");
  14. var simpleDefaultHTML = fs.readFileSync("test/fixtures/simple-default.html", "utf-8");
  15. var simple1LevelHTML = fs.readFileSync("test/fixtures/simple-1-level.html", "utf-8");
  16. var simpleWithAnchorsHTML = fs.readFileSync("test/fixtures/simple-with-anchors.html", "utf-8");
  17. var simpleWithHeaderFooterHTML = fs.readFileSync("test/fixtures/simple-with-header-footer.html", "utf-8");
  18. var simpleWithTransformLink = fs.readFileSync("test/fixtures/simple-with-transform-link.html", "utf-8");
  19. var emptyMarkdown = defaultMarker;
  20. var emptyMarkdownHtml = fs.readFileSync("test/fixtures/empty.html", "utf-8");
  21. var fullTocSampleMarkdown = fs.readFileSync("test/fixtures/full-toc-sample.md", "utf-8");
  22. var fullTocSampleHtml = fs.readFileSync("test/fixtures/full-toc-sample-result.html", "utf-8");
  23. const slugify = (s) => encodeURIComponent(String(s).trim().toLowerCase().replace(/\s+/g, '-'));
  24. describe("Testing Markdown rendering", function() {
  25. var md = new MarkdownIt();
  26. it("Parses correctly with default settings", function(done) {
  27. md.use(markdownItTOC);
  28. assert.equal(md.render(simpleMarkdown), simpleDefaultHTML);
  29. done();
  30. });
  31. it("Parses correctly with includeLevel set", function(done) {
  32. md.use(markdownItTOC, {
  33. "includeLevel": [2]
  34. });
  35. assert.equal(md.render(simpleMarkdown), simple1LevelHTML);
  36. done();
  37. });
  38. it("Parses correctly with containerClass set", function(done) {
  39. var customContainerClass = "custom-container-class";
  40. md.use(markdownItTOC, {
  41. "containerClass": customContainerClass
  42. });
  43. assert.equal(md.render(simpleMarkdown), simpleDefaultHTML.replace(defaultContainerClass, customContainerClass));
  44. done();
  45. });
  46. it("Parses correctly with markerPattern set", function(done) {
  47. var customMarker = "[[custom-marker]]";
  48. md.use(markdownItTOC, {
  49. "markerPattern": /^\[\[custom-marker\]\]/im
  50. });
  51. assert.equal(md.render(simpleMarkdown.replace(defaultMarker, customMarker)), simpleDefaultHTML);
  52. done();
  53. });
  54. it("Parses correctly with listType set", function(done) {
  55. var customListType = "ol";
  56. md.use(markdownItTOC, {
  57. "listType": customListType
  58. });
  59. assert.equal(md.render(simpleMarkdown), simpleDefaultHTML.replace(new RegExp(defaultListType, "g"), customListType));
  60. done();
  61. });
  62. it("Parses correctly with custom formatting", function(done) {
  63. var customHeading = "Test";
  64. md.use(markdownItTOC, {
  65. "format": function(str) {
  66. if (str === defaultHeading1) {
  67. return customHeading;
  68. }
  69. return str;
  70. }
  71. });
  72. assert.equal(md.render(simpleMarkdown), simpleDefaultHTML.replace(defaultHeading1, customHeading));
  73. done();
  74. });
  75. it("Slugs matches markdown-it-anchor", function(done) {
  76. md.use(markdownItAnchor);
  77. md.use(markdownItTOC);
  78. assert.equal(md.render(simpleMarkdown), simpleWithAnchorsHTML);
  79. done();
  80. });
  81. it("Generates empty TOC", function(done) {
  82. md.use(markdownItTOC);
  83. assert.equal(md.render(emptyMarkdown), emptyMarkdownHtml);
  84. done();
  85. });
  86. it("Generates full TOC, even when there is a greater header than the first header", function (done) {
  87. md.use(markdownItTOC, { forceFullToc: true });
  88. assert.equal(md.render(fullTocSampleMarkdown), fullTocSampleHtml);
  89. done();
  90. });
  91. it("Parses correctly with container header and footer html set", function (done) {
  92. md.use(markdownItTOC,
  93. {
  94. slugify,
  95. containerHeaderHtml: `<div class="header">Contents</div>`,
  96. containerFooterHtml: `<div class="footer">Footer</div>`,
  97. });
  98. assert.equal(md.render(simpleMarkdown), simpleWithHeaderFooterHTML);
  99. done();
  100. });
  101. it("Generates TOC, with custom transformed link", function (done) {
  102. md.use(markdownItTOC,
  103. {
  104. slugify,
  105. transformLink: (href) => {
  106. return href+"&type=test";
  107. },
  108. });
  109. assert.equal(md.render(simpleMarkdown), simpleWithTransformLink);
  110. done();
  111. });
  112. });