import toMarkdown from 'discourse/lib/to-markdown';
QUnit.module("lib:to-markdown");
QUnit.test("converts styles between normal words", assert => {
const html = `Line with stylesbetween words.`;
const markdown = `Line with ~~styles~~ ***between*** words.`;
assert.equal(toMarkdown(html), markdown);
assert.equal(toMarkdown("A bold word"), "A **bold** word");
});
QUnit.test("converts inline nested styles", assert => {
let html = `Italicised line with some randombold words.`;
let markdown = `*Italicised line with **some random** **bold** words.*`;
assert.equal(toMarkdown(html), markdown);
html = `Italicised line
with some
randombold words.`;
markdown = `Italicised line with some\nrandom ~~bold~~ words.`;
assert.equal(toMarkdown(html), markdown);
});
QUnit.test("converts a link", assert => {
let html = `Discourse`;
let markdown = `[Discourse](https://discourse.org)`;
assert.equal(toMarkdown(html), markdown);
html = `Disc\n\n\nour\n\nse`;
markdown = `[Disc our se](https://discourse.org)`;
assert.equal(toMarkdown(html), markdown);
});
QUnit.test("put raw URL instead of converting the link", assert => {
let url = "https://discourse.org";
const html = () => `${url}`;
assert.equal(toMarkdown(html()), url);
url = "discourse.org/t/topic-slug/1";
assert.equal(toMarkdown(html()), url);
});
QUnit.test("skip empty link", assert => {
assert.equal(toMarkdown(``), "");
});
QUnit.test("converts heading tags", assert => {
const html = `
`;
const markdown = `* Item 1\n* Item 2\n * Sub Item 1\n * Sub Item 2\n\n * Sub Item 3\n * Sub *Sub* Item 1\n * Sub **Sub** Item 2\n* Item 3`;
assert.equal(toMarkdown(html), markdown);
});
QUnit.test("stripes unwanted inline tags", assert => {
const html = `
Lorem ipsum dolor sit amet, consecteturelit.
Ut minim veniam, laboris ut aliquip ex ea commodo.
`;
const markdown = `Lorem ipsum dolor sit amet, consectetur ~~elit.~~\n\nUt minim veniam, quis nostrud laboris ut aliquip ex ea commodo.`;
assert.equal(toMarkdown(html), markdown);
});
QUnit.test("converts table tags", assert => {
let html = `Discourse Avenuelaboris
Heading 1
Head 2
Lorem
ipsum
dolor
sit amet
`;
let markdown = `Discourse Avenue\n\n**laboris**\n\n|Heading 1|Head 2|\n| --- | --- |\n|Lorem|ipsum|\n|**dolor**|*sit amet*|`;
assert.equal(toMarkdown(html), markdown);
html = `
Heading 1
Head 2
ipsum
`;
markdown = `|Heading 1|Head 2|\n| --- | --- |\n|[](http://example.com)|ipsum|`;
assert.equal(toMarkdown(html), markdown);
});
QUnit.test("replace pipes with spaces if table format not supported", assert => {
let html = `
Headi
ng 1
Head 2
Lorem
ipsum
sit amet
`;
let markdown = `Headi\n\nng 1 Head 2\nLorem ipsum\n[](http://example.com) *sit amet*`;
assert.equal(toMarkdown(html), markdown);
html = `
`;
markdown = `Lorem **sit amet**`;
assert.equal(toMarkdown(html), markdown);
});
QUnit.test("converts img tag", assert => {
const url = "https://example.com/image.png";
let html = ``;
assert.equal(toMarkdown(html), ``);
html = `
`;
assert.equal(toMarkdown(html), ``);
html = ``;
assert.equal(toMarkdown(html), `[](http://example.com)`);
html = `description `;
assert.equal(toMarkdown(html), `[description ](http://example.com)`);
html = ``;
assert.equal(toMarkdown(html), "");
html = ``;
assert.equal(toMarkdown(html), ``);
});
QUnit.test("supporting html tags by keeping them", assert => {
let html = "Lorem ipsum dolor sit amet, consectetur";
let output = html;
assert.equal(toMarkdown(html), output);
html = `Lorem ipsum dolor sit amet, consectetur`;
assert.equal(toMarkdown(html), output);
html = `Lorem ipsum dolor sit.`;
output = `[Lorem ipsum dolor sit](http://example.com).`;
assert.equal(toMarkdown(html), output);
html = `Lorem ipsum dolor sit.`;
assert.equal(toMarkdown(html), html);
html = `Lorem ipsum \n\n\n dolor sit.`;
output = `Lorem [ipsum dolor sit.](http://example.com)`;
assert.equal(toMarkdown(html), output);
});
QUnit.test("converts code tags", assert => {
let html = `Lorem ipsum dolor sit amet,
var helloWorld = () => {
alert(' hello \t\t world ');
return;
}
helloWorld();
consectetur.`;
let output = `Lorem ipsum dolor sit amet,\n\n\`\`\`\nvar helloWorld = () => {\n alert(' hello \t\t world ');\n return;\n}\nhelloWorld();\n\`\`\`\n\nconsectetur.`;
assert.equal(toMarkdown(html), output);
html = `Lorem ipsum dolor sit amet, var helloWorld = () => {
alert(' hello \t\t world ');
return;
}
helloWorld();consectetur.`;
output = `Lorem ipsum dolor sit amet, \`var helloWorld = () => {\n alert(' hello \t\t world ');\n return;\n}\nhelloWorld();\` consectetur.`;
assert.equal(toMarkdown(html), output);
});
QUnit.test("converts blockquote tag", assert => {
let html = "
Lorem ipsum
";
let output = "> Lorem ipsum";
assert.equal(toMarkdown(html), output);
html = "
Lorem ipsum
dolor sit amet
";
output = "> Lorem ipsum\n\n> dolor sit amet";
assert.equal(toMarkdown(html), output);
html = "
\nLorem ipsum\n
dolor
sit
amet
";
output = "> Lorem ipsum\n> > dolor\n> > > sit\n> > amet";
assert.equal(toMarkdown(html), output);
});
QUnit.test("converts ol list tag", assert => {
const html = `Testing