2024-03-16 16:49:12 +01:00
|
|
|
import * as assert from "node:assert";
|
2023-04-07 03:56:46 +02:00
|
|
|
import * as mfm from "mfm-js";
|
2017-02-11 17:03:57 +01:00
|
|
|
|
2023-10-22 10:33:40 +02:00
|
|
|
import { fromHtml } from "../src/mfm/from-html.js";
|
2023-11-16 21:18:19 +01:00
|
|
|
import { toHtml } from "../src/mfm/to-html.js";
|
2018-11-20 21:11:00 +01:00
|
|
|
|
2023-04-07 03:56:46 +02:00
|
|
|
describe("toHtml", () => {
|
|
|
|
it("br", () => {
|
|
|
|
const input = "foo\nbar\nbaz";
|
|
|
|
const output = "<p><span>foo<br>bar<br>baz</span></p>";
|
2021-04-02 03:36:11 +02:00
|
|
|
assert.equal(toHtml(mfm.parse(input)), output);
|
2018-11-20 21:11:00 +01:00
|
|
|
});
|
2020-05-16 01:40:17 +02:00
|
|
|
|
2023-04-07 03:56:46 +02:00
|
|
|
it("br alt", () => {
|
|
|
|
const input = "foo\r\nbar\rbaz";
|
|
|
|
const output = "<p><span>foo<br>bar<br>baz</span></p>";
|
2021-04-02 03:36:11 +02:00
|
|
|
assert.equal(toHtml(mfm.parse(input)), output);
|
2020-05-16 01:40:17 +02:00
|
|
|
});
|
2016-12-30 05:28:56 +01:00
|
|
|
});
|
2020-11-07 16:38:50 +01:00
|
|
|
|
2023-04-07 03:56:46 +02:00
|
|
|
describe("fromHtml", () => {
|
|
|
|
it("p", () => {
|
|
|
|
assert.deepStrictEqual(fromHtml("<p>a</p><p>b</p>"), "a\n\nb");
|
2021-09-25 18:57:38 +02:00
|
|
|
});
|
|
|
|
|
2023-04-07 03:56:46 +02:00
|
|
|
it("block element", () => {
|
|
|
|
assert.deepStrictEqual(fromHtml("<div>a</div><div>b</div>"), "a\nb");
|
2021-09-25 18:57:38 +02:00
|
|
|
});
|
|
|
|
|
2023-04-07 03:56:46 +02:00
|
|
|
it("inline element", () => {
|
|
|
|
assert.deepStrictEqual(fromHtml("<ul><li>a</li><li>b</li></ul>"), "a\nb");
|
2021-09-25 18:57:38 +02:00
|
|
|
});
|
|
|
|
|
2023-04-07 03:56:46 +02:00
|
|
|
it("block code", () => {
|
|
|
|
assert.deepStrictEqual(
|
|
|
|
fromHtml("<pre><code>a\nb</code></pre>"),
|
|
|
|
"```\na\nb\n```",
|
|
|
|
);
|
2021-09-25 18:57:38 +02:00
|
|
|
});
|
|
|
|
|
2023-04-07 03:56:46 +02:00
|
|
|
it("inline code", () => {
|
|
|
|
assert.deepStrictEqual(fromHtml("<code>a</code>"), "`a`");
|
2021-09-25 18:57:38 +02:00
|
|
|
});
|
|
|
|
|
2023-04-07 03:56:46 +02:00
|
|
|
it("quote", () => {
|
|
|
|
assert.deepStrictEqual(
|
|
|
|
fromHtml("<blockquote>a\nb</blockquote>"),
|
|
|
|
"> a\n> b",
|
|
|
|
);
|
2021-09-25 18:57:38 +02:00
|
|
|
});
|
|
|
|
|
2023-04-07 03:56:46 +02:00
|
|
|
it("br", () => {
|
|
|
|
assert.deepStrictEqual(fromHtml("<p>abc<br><br/>d</p>"), "abc\n\nd");
|
2020-11-07 16:38:50 +01:00
|
|
|
});
|
|
|
|
|
2023-04-07 03:56:46 +02:00
|
|
|
it("link with different text", () => {
|
|
|
|
assert.deepStrictEqual(
|
2024-03-06 01:02:09 +01:00
|
|
|
fromHtml('<p>a <a href="https://firefish.dev/firefish">c</a> d</p>'),
|
|
|
|
"a [c](https://firefish.dev/firefish) d",
|
2023-04-07 03:56:46 +02:00
|
|
|
);
|
2020-11-07 16:38:50 +01:00
|
|
|
});
|
|
|
|
|
2023-04-07 03:56:46 +02:00
|
|
|
it("link with different text, but not encoded", () => {
|
|
|
|
assert.deepStrictEqual(
|
2024-03-06 01:02:09 +01:00
|
|
|
fromHtml('<p>a <a href="https://firefish.dev/ä">c</a> d</p>'),
|
|
|
|
"a [c](<https://firefish.dev/ä>) d",
|
2023-04-07 03:56:46 +02:00
|
|
|
);
|
2021-02-06 13:44:46 +01:00
|
|
|
});
|
|
|
|
|
2023-04-07 03:56:46 +02:00
|
|
|
it("link with same text", () => {
|
|
|
|
assert.deepStrictEqual(
|
|
|
|
fromHtml(
|
2024-03-06 01:02:09 +01:00
|
|
|
'<p>a <a href="https://firefish.dev/firefish/firefish">https://firefish.dev/firefish/firefish</a> d</p>',
|
2023-04-07 03:56:46 +02:00
|
|
|
),
|
2024-03-06 01:02:09 +01:00
|
|
|
"a https://firefish.dev/firefish/firefish d",
|
2023-04-07 03:56:46 +02:00
|
|
|
);
|
2020-11-07 16:38:50 +01:00
|
|
|
});
|
|
|
|
|
2023-04-07 03:56:46 +02:00
|
|
|
it("link with same text, but not encoded", () => {
|
|
|
|
assert.deepStrictEqual(
|
|
|
|
fromHtml(
|
2024-03-06 01:02:09 +01:00
|
|
|
'<p>a <a href="https://firefish.dev/ä">https://firefish.dev/ä</a> d</p>',
|
2023-04-07 03:56:46 +02:00
|
|
|
),
|
2024-03-06 01:02:09 +01:00
|
|
|
"a <https://firefish.dev/ä> d",
|
2023-04-07 03:56:46 +02:00
|
|
|
);
|
2020-11-07 16:38:50 +01:00
|
|
|
});
|
|
|
|
|
2023-04-07 03:56:46 +02:00
|
|
|
it("link with no url", () => {
|
|
|
|
assert.deepStrictEqual(
|
|
|
|
fromHtml('<p>a <a href="b">c</a> d</p>'),
|
|
|
|
"a [c](b) d",
|
|
|
|
);
|
2020-11-07 16:38:50 +01:00
|
|
|
});
|
|
|
|
|
2023-04-07 03:56:46 +02:00
|
|
|
it("link without href", () => {
|
|
|
|
assert.deepStrictEqual(fromHtml("<p>a <a>c</a> d</p>"), "a c d");
|
2020-11-07 16:38:50 +01:00
|
|
|
});
|
|
|
|
|
2023-04-07 03:56:46 +02:00
|
|
|
it("link without text", () => {
|
|
|
|
assert.deepStrictEqual(
|
2024-03-06 01:02:09 +01:00
|
|
|
fromHtml('<p>a <a href="https://firefish.dev/b"></a> d</p>'),
|
|
|
|
"a https://firefish.dev/b d",
|
2023-04-07 03:56:46 +02:00
|
|
|
);
|
2021-02-06 13:44:46 +01:00
|
|
|
});
|
|
|
|
|
2023-04-07 03:56:46 +02:00
|
|
|
it("link without both", () => {
|
|
|
|
assert.deepStrictEqual(fromHtml("<p>a <a></a> d</p>"), "a d");
|
2021-02-06 13:44:46 +01:00
|
|
|
});
|
|
|
|
|
2023-04-07 03:56:46 +02:00
|
|
|
it("mention", () => {
|
|
|
|
assert.deepStrictEqual(
|
|
|
|
fromHtml(
|
2024-03-06 01:02:09 +01:00
|
|
|
'<p>a <a href="https://info.firefish.dev/@firefish" class="u-url mention">@firefish</a> d</p>',
|
2023-04-07 03:56:46 +02:00
|
|
|
),
|
2024-03-06 01:02:09 +01:00
|
|
|
"a @firefish@info.firefish.dev d",
|
2023-04-07 03:56:46 +02:00
|
|
|
);
|
2020-11-07 16:38:50 +01:00
|
|
|
});
|
|
|
|
|
2023-04-07 03:56:46 +02:00
|
|
|
it("hashtag", () => {
|
|
|
|
assert.deepStrictEqual(
|
2024-03-06 01:02:09 +01:00
|
|
|
fromHtml('<p>a <a href="https://info.firefish.dev/tags/a">#a</a> d</p>', [
|
2023-04-07 03:56:46 +02:00
|
|
|
"#a",
|
|
|
|
]),
|
|
|
|
"a #a d",
|
|
|
|
);
|
2020-11-07 16:38:50 +01:00
|
|
|
});
|
|
|
|
});
|