Files
fluxer/fluxer_app/src/features/lexical/composer/ComposerCodeIndent.test.ts
T

45 lines
1.8 KiB
TypeScript

// SPDX-License-Identifier: AGPL-3.0-or-later
import {registerComposerCodeIndent} from '@app/features/lexical/composer/ComposerCodeIndent';
import {
$getComposerDisplayText,
$replaceComposerRange,
$selectComposerRange,
} from '@app/features/lexical/composer/composerOffsets';
import {ComposerMentionNode} from '@app/features/lexical/composer/nodes/ComposerMentionNode';
import {createEditor, KEY_TAB_COMMAND} from 'lexical';
import {describe, expect, it, vi} from 'vitest';
vi.mock('@app/features/lexical/composer/nodes/ComposerMentionPill', () => ({ComposerMentionPill: () => null}));
vi.mock('@app/features/lexical/composer/nodes/ComposerCustomEmoji', () => ({ComposerCustomEmoji: () => null}));
vi.mock('@app/features/lexical/composer/nodes/ComposerStandardEmoji', () => ({ComposerStandardEmoji: () => null}));
describe('registerComposerCodeIndent', () => {
it('indents a block opened after a mention whose name holds a backtick', () => {
const editor = createEditor({
namespace: 'composer-code-indent-test',
nodes: [ComposerMentionNode],
onError: (error) => {
throw error;
},
});
registerComposerCodeIndent(editor, {current: false});
editor.update(
() => {
$replaceComposerRange(
0,
0,
{kind: 'mention', mentionType: 'user', id: '1', display: '@`bob', wire: '<@1>'},
{trailing: false},
);
$replaceComposerRange(5, 5, {kind: 'text', text: ' hi ```js\ncode'}, {leading: false, trailing: false});
$selectComposerRange(19, 19);
},
{discrete: true},
);
const event = Object.assign(new Event('keydown', {cancelable: true}), {shiftKey: false}) as KeyboardEvent;
expect(editor.dispatchCommand(KEY_TAB_COMMAND, event)).toBe(true);
expect(editor.read(() => $getComposerDisplayText())).toBe('@`bob hi ```js\ncode\t');
});
});