/*
* SPDX-FileCopyrightText: syuilo and misskey-project
* SPDX-License-Identifier: AGPL-3.0-only
*/
import * as assert from 'assert';
import * as mfm from '@transfem-org/sfm-js';
import { Test } from '@nestjs/testing';
import { CoreModule } from '@/core/CoreModule.js';
import { MfmService } from '@/core/MfmService.js';
import { GlobalModule } from '@/GlobalModule.js';
describe('MfmService', () => {
let mfmService: MfmService;
beforeAll(async () => {
const app = await Test.createTestingModule({
imports: [GlobalModule, CoreModule],
}).compile();
mfmService = app.get foo foo foo bar Hello, world!
bar
baz
bar
baz<p>Hello, world!</p>
some
'; assert.equal(mfmService.toHtml(mfm.parse(input)), output); }); test('ruby2', () => { const input = '$[ruby *some text* ignore me]'; const output = 'some text
'; assert.equal(mfmService.toHtml(mfm.parse(input)), output); }); test('ruby 3', () => { const input = '$[ruby $[group *some* text] ignore me]'; const output = 'some text
'; assert.equal(mfmService.toHtml(mfm.parse(input)), output); }); }); describe('toMastoApiHtml', () => { test('br', async () => { const input = 'foo\nbar\nbaz'; const output = 'foo
bar
baz
foo
bar
baz
Hello, world!
\n```'; const output = '<p>Hello, world!</p>
';
assert.equal(await mfmService.toMastoApiHtml(mfm.parse(input)), output);
});
test('ruby', async () => {
const input = '$[ruby $[group *some* text] ignore me]';
const output = '*some* text
'; assert.equal(await mfmService.toMastoApiHtml(mfm.parse(input)), output); }); }); describe('fromHtml', () => { test('p', () => { assert.deepStrictEqual(mfmService.fromHtml('a
b
'), 'a\n\nb'); }); test('block element', () => { assert.deepStrictEqual(mfmService.fromHtml('a\nb
'), '```\na\nb\n```');
});
test('inline code', () => {
assert.deepStrictEqual(mfmService.fromHtml('a
'), '`a`');
});
test('quote', () => {
assert.deepStrictEqual(mfmService.fromHtml('a\nb'), '> a\n> b'); }); test('br', () => { assert.deepStrictEqual(mfmService.fromHtml('
abc
d
a c d
'), 'a [c](https://example.com/b) d'); }); test('link with different text, but not encoded', () => { assert.deepStrictEqual(mfmService.fromHtml('a c d
'), 'a [c](a c d
'), 'a [c](b) d'); }); test('link without href', () => { assert.deepStrictEqual(mfmService.fromHtml('a c d
'), 'a c d'); }); test('link without text', () => { assert.deepStrictEqual(mfmService.fromHtml(''), 'a https://example.com/b d'); }); test('link without both', () => { assert.deepStrictEqual(mfmService.fromHtml(''), 'a d'); }); test('mention', () => { assert.deepStrictEqual(mfmService.fromHtml('a @user d
'), 'a @user@example.com d'); }); test('hashtag', () => { assert.deepStrictEqual(mfmService.fromHtml('a #a d
', ['#a']), 'a #a d'); }); test('ruby', () => { assert.deepStrictEqual( mfmService.fromHtml(' some text and '), '$[ruby $[group some text ] ignore me] $[ruby $[group and ] more]' ); }); }); });