UNPKG

@felisdiligens/md-table-tools

Version:

MultiMarkdown table tools

257 lines (239 loc) 10.5 kB
import { expect } from "chai"; import dedent from 'dedent-js'; // https://stackoverflow.com/questions/25924057/multiline-strings-that-dont-break-indentation import "mocha"; import { HTMLTableRenderer, MinifiedMultiMarkdownTableRenderer, MultiMarkdownTableParser, PrettyMultiMarkdownTableRenderer } from "../../index.js"; describe("Mixed MultiMarkdown test", () => { let htmlPrettyRenderer: HTMLTableRenderer; let mmdParser: MultiMarkdownTableParser; let mmdPrettyRenderer: PrettyMultiMarkdownTableRenderer; let mmdMinifiedRenderer: MinifiedMultiMarkdownTableRenderer; before(() => { htmlPrettyRenderer = new HTMLTableRenderer(true, " ".repeat(4)); mmdParser = new MultiMarkdownTableParser(); mmdPrettyRenderer = new PrettyMultiMarkdownTableRenderer(); mmdMinifiedRenderer = new MinifiedMultiMarkdownTableRenderer(); }); describe("converting between Markdown and HTML", () => { it("should convert the grades table", () => { let table = mmdParser.parse(dedent` | Punkte | Note ||| |:------:|:---|----|--------------| | 15 | 1+ | 1 | sehr gut | | 14 | 1 | ^^ | ^^ | | 13 | 1- | ^^ | ^^ | | 12 | 2+ | 2 | gut | | 11 | 2 | ^^ | ^^ | | 10 | 2- | ^^ | ^^ | | 9 | 3+ | 3 | befriedigend | | 8 | 3 | ^^ | ^^ | | 7 | 3- | ^^ | ^^ | | 6 | 4+ | 4 | ausreichend | | 5 | 4 | ^^ | ^^ | | 4 | 4- | ^^ | ^^ | | 3 | 5+ | 5 | mangelhaft | | 2 | 5 | ^^ | ^^ | | 1 | 5- | ^^ | ^^ | | 0 | 6 | 6 | ungenügend |`); let htmlTable = htmlPrettyRenderer.render(table); expect(htmlTable).to.equal(dedent` <table> <thead> <tr> <th style="text-align: center">Punkte</th> <th colspan="3" style="text-align: left">Note</th> </tr> </thead> <tbody> <tr> <td style="text-align: center">15</td> <td style="text-align: left">1+</td> <td rowspan="3">1</td> <td rowspan="3">sehr gut</td> </tr> <tr> <td style="text-align: center">14</td> <td style="text-align: left">1</td> </tr> <tr> <td style="text-align: center">13</td> <td style="text-align: left">1-</td> </tr> <tr> <td style="text-align: center">12</td> <td style="text-align: left">2+</td> <td rowspan="3">2</td> <td rowspan="3">gut</td> </tr> <tr> <td style="text-align: center">11</td> <td style="text-align: left">2</td> </tr> <tr> <td style="text-align: center">10</td> <td style="text-align: left">2-</td> </tr> <tr> <td style="text-align: center">9</td> <td style="text-align: left">3+</td> <td rowspan="3">3</td> <td rowspan="3">befriedigend</td> </tr> <tr> <td style="text-align: center">8</td> <td style="text-align: left">3</td> </tr> <tr> <td style="text-align: center">7</td> <td style="text-align: left">3-</td> </tr> <tr> <td style="text-align: center">6</td> <td style="text-align: left">4+</td> <td rowspan="3">4</td> <td rowspan="3">ausreichend</td> </tr> <tr> <td style="text-align: center">5</td> <td style="text-align: left">4</td> </tr> <tr> <td style="text-align: center">4</td> <td style="text-align: left">4-</td> </tr> <tr> <td style="text-align: center">3</td> <td style="text-align: left">5+</td> <td rowspan="3">5</td> <td rowspan="3">mangelhaft</td> </tr> <tr> <td style="text-align: center">2</td> <td style="text-align: left">5</td> </tr> <tr> <td style="text-align: center">1</td> <td style="text-align: left">5-</td> </tr> <tr> <td style="text-align: center">0</td> <td style="text-align: left">6</td> <td>6</td> <td>ungenügend</td> </tr> </tbody> </table>`); }); it("should format multiline tables", () => { let table = mmdParser.parse(dedent` | Markdown | Rendered HTML | |--------------|---------------| | *Italic* | *Italic* | \\ | | | | - Item 1 | - Item 1 | \\ | - Item 2 | - Item 2 | | \`\`\`python | \`\`\`python \\ | .1 + .2 | .1 + .2 \\ | \`\`\` | \`\`\` | `); let prettyTable = mmdPrettyRenderer.render(table); expect(prettyTable).to.equal(dedent` | Markdown | Rendered HTML | |-----------|---------------| | *Italic* | *Italic* | \\ | | | | - Item 1 | - Item 1 | \\ | - Item 2 | - Item 2 | | \`\`\`python | \`\`\`python | \\ | .1 + .2 | .1 + .2 | \\ | \`\`\` | \`\`\` |`); }); it("should minify multiline tables", () => { let table = mmdParser.parse(dedent` | Markdown | Rendered HTML | |--------------|---------------| | *Italic* | *Italic* | \\ | | | | - Item 1 | - Item 1 | \\ | - Item 2 | - Item 2 | | \`\`\`python | \`\`\`python \\ | .1 + .2 | .1 + .2 \\ | \`\`\` | \`\`\` | `); let minifiedTable = mmdMinifiedRenderer.render(table); expect(minifiedTable).to.equal(dedent` Markdown|Rendered HTML -|- *Italic*|*Italic* \\ | | | - Item 1|- Item 1 \\ - Item 2|- Item 2 \`\`\`python|\`\`\`python \\ .1 + .2|.1 + .2 \\ \`\`\`|\`\`\``); }); it("should convert multiline tables into HTML", () => { let table = mmdParser.parse(dedent` | Markdown | Rendered HTML | |--------------|---------------| | *Italic* | *Italic* | \\ | | | | - Item 1 | - Item 1 | \\ | - Item 2 | - Item 2 | | \`\`\`python | \`\`\`python \\ | .1 + .2 | .1 + .2 \\ | \`\`\` | \`\`\` | `); table.mergeMultilineRows(); // Without merging them beforehand, the HTML table won't be rendered correctly. let htmlTable = htmlPrettyRenderer.render(table); expect(htmlTable).to.equal(dedent` <table> <thead> <tr> <th>Markdown</th> <th>Rendered HTML</th> </tr> </thead> <tbody> <tr> <td><em>Italic</em></td> <td><em>Italic</em></td> </tr> <tr> <td>- Item 1<br>- Item 2</td> <td>- Item 1<br>- Item 2</td> </tr> <tr> <td><code>.1 + .2</code></td> <td><code>.1 + .2</code></td> </tr> </tbody> </table>`); }); it("should support full-width characters multiline tables", () => { let table = mmdParser.parse(dedent` | Markdown | Rendered HTML | |--------------|---------------| | *Italic* | *Italic* | \\ | | | | - Item 1 | - Item 1 | \\ | - Item 2 | - Item 2 | | \`\`\`python | \`\`\`python \\ | .1 + .2 | .1 + .2 \\ | \`\`\` | \`\`\` | | 中文字 | 長度不一樣 | `); let prettyTable = mmdPrettyRenderer.render(table); expect(prettyTable).to.equal(dedent` | Markdown | Rendered HTML | |-----------|---------------| | *Italic* | *Italic* | \\ | | | | - Item 1 | - Item 1 | \\ | - Item 2 | - Item 2 | | \`\`\`python | \`\`\`python | \\ | .1 + .2 | .1 + .2 | \\ | \`\`\` | \`\`\` | | 中文字 | 長度不一樣 |`); }); }); });