文件
mynode/packages/app-desktop/gui/NoteEditor/editorCommandDeclarations.test.ts
chen 301194963b
一些检查失败了
automerge / automerge (push) Has been cancelled
react-native-android-build-apk / AssembleRelease (push) Has been cancelled
Build macOS M1 / Main (push) Has been cancelled
Joplin Continuous Integration / Main (macos-15-intel) (push) Has been cancelled
Joplin Continuous Integration / Main (ubuntu-22.04) (push) Has been cancelled
Joplin Continuous Integration / Main (ubuntu-22.04-arm) (push) Has been cancelled
Joplin Continuous Integration / Main (windows-11-vs2026-arm) (push) Has been cancelled
Joplin Continuous Integration / Main (windows-2025) (push) Has been cancelled
Joplin Continuous Integration / ServerDockerImage (ubuntu-22.04) (push) Has been cancelled
Joplin Continuous Integration / ServerDockerImage (ubuntu-22.04-arm) (push) Has been cancelled
Joplin UI tests / Main (ubuntu-22.04) (push) Has been cancelled
Joplin UI tests / Main (windows-2025) (push) Has been cancelled
Joplin UI tests / Mobile (push) Has been cancelled
Close stale issues / ProcessStaleIssues (push) Has been cancelled
feat: Initial clean release of CHM
2026-11-04 11:29:39 +08:00

150 行
3.2 KiB
TypeScript

import WhenClause from '@joplin/lib/services/WhenClause';
import { enabledCondition } from './editorCommandDeclarations';
const baseContext: Record<string, boolean> = {
modalDialogVisible: false,
gotoAnythingVisible: false,
markdownEditorPaneVisible: true,
markdownViewerPaneVisible: false,
oneNoteSelected: true,
noteIsMarkdown: true,
noteIsReadOnly: false,
richTextEditorVisible: false,
hasActivePluginEditor: false,
};
describe('editorCommandDeclarations', () => {
test.each([
[
{},
{ textBold: true },
],
[
{
markdownEditorPaneVisible: false,
},
{ textBold: false },
],
[
{
noteIsReadOnly: true,
},
{ textBold: false },
],
[
// In the Markdown editor, but only the viewer is visible
{
markdownEditorPaneVisible: false,
richTextEditorVisible: false,
},
{ textBold: false },
],
[
// In the Markdown editor, and the viewer is visible
{
markdownEditorPaneVisible: true,
richTextEditorVisible: false,
},
{ textBold: true },
],
[
// In the RT editor
{
markdownEditorPaneVisible: false,
richTextEditorVisible: true,
},
{ textBold: true },
],
[
// In the Markdown editor, and the command palette is visible
{
markdownEditorPaneVisible: true,
richTextEditorVisible: false,
gotoAnythingVisible: true,
modalDialogVisible: true,
},
{ textBold: true },
],
[
// In the Markdown editor, and the command palette is visible
{
markdownEditorPaneVisible: true,
richTextEditorVisible: false,
gotoAnythingVisible: true,
modalDialogVisible: true,
},
{ textBold: true },
],
[
// Rich Text Editor, HTML note
{
markdownEditorPaneVisible: false,
richTextEditorVisible: true,
noteIsMarkdown: false,
},
{
textCopy: true,
textPaste: true,
textSelectAll: true,
},
],
[
// Rich Text Editor, read-only note
{
markdownEditorPaneVisible: false,
richTextEditorVisible: true,
noteIsReadOnly: true,
},
{
textBold: false,
textPaste: false,
textCopy: true,
textSelectAll: true,
},
],
[
// Viewer-only mode (no editor pane visible, only the rendered viewer)
{
markdownEditorPaneVisible: false,
richTextEditorVisible: false,
markdownViewerPaneVisible: true,
},
{
textCopy: true,
textSelectAll: true,
textCut: false,
textPaste: false,
textBold: false,
},
],
[
// Viewer-only mode with a read-only note
{
markdownEditorPaneVisible: false,
richTextEditorVisible: false,
markdownViewerPaneVisible: true,
noteIsReadOnly: true,
},
{
textCopy: true,
textSelectAll: true,
textCut: false,
textPaste: false,
},
],
])('should correctly determine whether command is enabled (case %#)', (context, expectedStates) => {
const actualStates = [];
for (const commandName of Object.keys(expectedStates)) {
const condition = enabledCondition(commandName);
const wc = new WhenClause(condition);
const actual = wc.evaluate({ ...baseContext, ...context });
actualStates.push([commandName, actual]);
}
const expectedStatesArray = Object.entries(expectedStates);
expect(actualStates).toEqual(expectedStatesArray);
});
});