mirror of
https://github.com/laurent22/joplin.git
synced 2024-12-24 10:27:10 +02:00
Chore: Mobile: CodeMirror: Tests: Ensure full document is parsed, don't rely on timeout (#7405)
This commit is contained in:
parent
da01dc882b
commit
4860253bff
@ -894,9 +894,6 @@ packages/app-mobile/components/NoteBodyViewer/hooks/useSource.js.map
|
|||||||
packages/app-mobile/components/NoteEditor/CodeMirror/CodeMirror.d.ts
|
packages/app-mobile/components/NoteEditor/CodeMirror/CodeMirror.d.ts
|
||||||
packages/app-mobile/components/NoteEditor/CodeMirror/CodeMirror.js
|
packages/app-mobile/components/NoteEditor/CodeMirror/CodeMirror.js
|
||||||
packages/app-mobile/components/NoteEditor/CodeMirror/CodeMirror.js.map
|
packages/app-mobile/components/NoteEditor/CodeMirror/CodeMirror.js.map
|
||||||
packages/app-mobile/components/NoteEditor/CodeMirror/createEditor.d.ts
|
|
||||||
packages/app-mobile/components/NoteEditor/CodeMirror/createEditor.js
|
|
||||||
packages/app-mobile/components/NoteEditor/CodeMirror/createEditor.js.map
|
|
||||||
packages/app-mobile/components/NoteEditor/CodeMirror/decoratorExtension.d.ts
|
packages/app-mobile/components/NoteEditor/CodeMirror/decoratorExtension.d.ts
|
||||||
packages/app-mobile/components/NoteEditor/CodeMirror/decoratorExtension.js
|
packages/app-mobile/components/NoteEditor/CodeMirror/decoratorExtension.js
|
||||||
packages/app-mobile/components/NoteEditor/CodeMirror/decoratorExtension.js.map
|
packages/app-mobile/components/NoteEditor/CodeMirror/decoratorExtension.js.map
|
||||||
@ -927,6 +924,12 @@ packages/app-mobile/components/NoteEditor/CodeMirror/markdownReformatter.test.js
|
|||||||
packages/app-mobile/components/NoteEditor/CodeMirror/syntaxHighlightingLanguages.d.ts
|
packages/app-mobile/components/NoteEditor/CodeMirror/syntaxHighlightingLanguages.d.ts
|
||||||
packages/app-mobile/components/NoteEditor/CodeMirror/syntaxHighlightingLanguages.js
|
packages/app-mobile/components/NoteEditor/CodeMirror/syntaxHighlightingLanguages.js
|
||||||
packages/app-mobile/components/NoteEditor/CodeMirror/syntaxHighlightingLanguages.js.map
|
packages/app-mobile/components/NoteEditor/CodeMirror/syntaxHighlightingLanguages.js.map
|
||||||
|
packages/app-mobile/components/NoteEditor/CodeMirror/testUtil/createEditor.d.ts
|
||||||
|
packages/app-mobile/components/NoteEditor/CodeMirror/testUtil/createEditor.js
|
||||||
|
packages/app-mobile/components/NoteEditor/CodeMirror/testUtil/createEditor.js.map
|
||||||
|
packages/app-mobile/components/NoteEditor/CodeMirror/testUtil/forceFullParse.d.ts
|
||||||
|
packages/app-mobile/components/NoteEditor/CodeMirror/testUtil/forceFullParse.js
|
||||||
|
packages/app-mobile/components/NoteEditor/CodeMirror/testUtil/forceFullParse.js.map
|
||||||
packages/app-mobile/components/NoteEditor/CodeMirror/theme.d.ts
|
packages/app-mobile/components/NoteEditor/CodeMirror/theme.d.ts
|
||||||
packages/app-mobile/components/NoteEditor/CodeMirror/theme.js
|
packages/app-mobile/components/NoteEditor/CodeMirror/theme.js
|
||||||
packages/app-mobile/components/NoteEditor/CodeMirror/theme.js.map
|
packages/app-mobile/components/NoteEditor/CodeMirror/theme.js.map
|
||||||
|
9
.gitignore
vendored
9
.gitignore
vendored
@ -882,9 +882,6 @@ packages/app-mobile/components/NoteBodyViewer/hooks/useSource.js.map
|
|||||||
packages/app-mobile/components/NoteEditor/CodeMirror/CodeMirror.d.ts
|
packages/app-mobile/components/NoteEditor/CodeMirror/CodeMirror.d.ts
|
||||||
packages/app-mobile/components/NoteEditor/CodeMirror/CodeMirror.js
|
packages/app-mobile/components/NoteEditor/CodeMirror/CodeMirror.js
|
||||||
packages/app-mobile/components/NoteEditor/CodeMirror/CodeMirror.js.map
|
packages/app-mobile/components/NoteEditor/CodeMirror/CodeMirror.js.map
|
||||||
packages/app-mobile/components/NoteEditor/CodeMirror/createEditor.d.ts
|
|
||||||
packages/app-mobile/components/NoteEditor/CodeMirror/createEditor.js
|
|
||||||
packages/app-mobile/components/NoteEditor/CodeMirror/createEditor.js.map
|
|
||||||
packages/app-mobile/components/NoteEditor/CodeMirror/decoratorExtension.d.ts
|
packages/app-mobile/components/NoteEditor/CodeMirror/decoratorExtension.d.ts
|
||||||
packages/app-mobile/components/NoteEditor/CodeMirror/decoratorExtension.js
|
packages/app-mobile/components/NoteEditor/CodeMirror/decoratorExtension.js
|
||||||
packages/app-mobile/components/NoteEditor/CodeMirror/decoratorExtension.js.map
|
packages/app-mobile/components/NoteEditor/CodeMirror/decoratorExtension.js.map
|
||||||
@ -915,6 +912,12 @@ packages/app-mobile/components/NoteEditor/CodeMirror/markdownReformatter.test.js
|
|||||||
packages/app-mobile/components/NoteEditor/CodeMirror/syntaxHighlightingLanguages.d.ts
|
packages/app-mobile/components/NoteEditor/CodeMirror/syntaxHighlightingLanguages.d.ts
|
||||||
packages/app-mobile/components/NoteEditor/CodeMirror/syntaxHighlightingLanguages.js
|
packages/app-mobile/components/NoteEditor/CodeMirror/syntaxHighlightingLanguages.js
|
||||||
packages/app-mobile/components/NoteEditor/CodeMirror/syntaxHighlightingLanguages.js.map
|
packages/app-mobile/components/NoteEditor/CodeMirror/syntaxHighlightingLanguages.js.map
|
||||||
|
packages/app-mobile/components/NoteEditor/CodeMirror/testUtil/createEditor.d.ts
|
||||||
|
packages/app-mobile/components/NoteEditor/CodeMirror/testUtil/createEditor.js
|
||||||
|
packages/app-mobile/components/NoteEditor/CodeMirror/testUtil/createEditor.js.map
|
||||||
|
packages/app-mobile/components/NoteEditor/CodeMirror/testUtil/forceFullParse.d.ts
|
||||||
|
packages/app-mobile/components/NoteEditor/CodeMirror/testUtil/forceFullParse.js
|
||||||
|
packages/app-mobile/components/NoteEditor/CodeMirror/testUtil/forceFullParse.js.map
|
||||||
packages/app-mobile/components/NoteEditor/CodeMirror/theme.d.ts
|
packages/app-mobile/components/NoteEditor/CodeMirror/theme.d.ts
|
||||||
packages/app-mobile/components/NoteEditor/CodeMirror/theme.js
|
packages/app-mobile/components/NoteEditor/CodeMirror/theme.js
|
||||||
packages/app-mobile/components/NoteEditor/CodeMirror/theme.js.map
|
packages/app-mobile/components/NoteEditor/CodeMirror/theme.js.map
|
||||||
|
@ -3,7 +3,7 @@
|
|||||||
*/
|
*/
|
||||||
import { EditorSelection } from '@codemirror/state';
|
import { EditorSelection } from '@codemirror/state';
|
||||||
import { ListType } from '../types';
|
import { ListType } from '../types';
|
||||||
import createEditor from './createEditor';
|
import createEditor from './testUtil/createEditor';
|
||||||
import { toggleList } from './markdownCommands';
|
import { toggleList } from './markdownCommands';
|
||||||
|
|
||||||
describe('markdownCommands.bulletedVsChecklist', () => {
|
describe('markdownCommands.bulletedVsChecklist', () => {
|
||||||
|
@ -7,7 +7,7 @@ import {
|
|||||||
increaseIndent, toggleList,
|
increaseIndent, toggleList,
|
||||||
} from './markdownCommands';
|
} from './markdownCommands';
|
||||||
import { ListType } from '../types';
|
import { ListType } from '../types';
|
||||||
import createEditor from './createEditor';
|
import createEditor from './testUtil/createEditor';
|
||||||
|
|
||||||
describe('markdownCommands.toggleList', () => {
|
describe('markdownCommands.toggleList', () => {
|
||||||
it('should remove the same type of list', () => {
|
it('should remove the same type of list', () => {
|
||||||
|
@ -1,15 +1,14 @@
|
|||||||
import { ensureSyntaxTree } from '@codemirror/language';
|
import { markdown } from '@codemirror/lang-markdown';
|
||||||
|
import { syntaxTree } from '@codemirror/language';
|
||||||
import { SyntaxNode } from '@lezer/common';
|
import { SyntaxNode } from '@lezer/common';
|
||||||
import { EditorState } from '@codemirror/state';
|
import { EditorState } from '@codemirror/state';
|
||||||
import { blockMathTagName, inlineMathContentTagName, inlineMathTagName, MarkdownMathExtension } from './markdownMathParser';
|
import { blockMathTagName, inlineMathContentTagName, inlineMathTagName, MarkdownMathExtension } from './markdownMathParser';
|
||||||
import { GFM as GithubFlavoredMarkdownExt } from '@lezer/markdown';
|
import { GFM as GithubFlavoredMarkdownExt } from '@lezer/markdown';
|
||||||
import { markdown } from '@codemirror/lang-markdown';
|
import forceFullParse from './testUtil/forceFullParse';
|
||||||
|
|
||||||
const syntaxTreeCreateTimeout = 100; // ms
|
|
||||||
|
|
||||||
// Creates an EditorState with math and markdown extensions
|
// Creates an EditorState with math and markdown extensions
|
||||||
const createEditorState = (initialText: string): EditorState => {
|
const createEditorState = (initialText: string): EditorState => {
|
||||||
return EditorState.create({
|
const editorState = EditorState.create({
|
||||||
doc: initialText,
|
doc: initialText,
|
||||||
extensions: [
|
extensions: [
|
||||||
markdown({
|
markdown({
|
||||||
@ -17,13 +16,16 @@ const createEditorState = (initialText: string): EditorState => {
|
|||||||
}),
|
}),
|
||||||
],
|
],
|
||||||
});
|
});
|
||||||
|
forceFullParse(editorState);
|
||||||
|
|
||||||
|
return editorState;
|
||||||
};
|
};
|
||||||
|
|
||||||
// Returns a list of all nodes with the given name in the given editor's syntax tree.
|
// Returns a list of all nodes with the given name in the given editor's syntax tree.
|
||||||
// Attempts to create the syntax tree if it doesn't exist.
|
// Attempts to create the syntax tree if it doesn't exist.
|
||||||
const findNodesWithName = (editor: EditorState, nodeName: string) => {
|
const findNodesWithName = (editor: EditorState, nodeName: string) => {
|
||||||
const result: SyntaxNode[] = [];
|
const result: SyntaxNode[] = [];
|
||||||
ensureSyntaxTree(editor, syntaxTreeCreateTimeout)?.iterate({
|
syntaxTree(editor).iterate({
|
||||||
enter: (node) => {
|
enter: (node) => {
|
||||||
if (node.name === nodeName) {
|
if (node.name === nodeName) {
|
||||||
result.push(node.node);
|
result.push(node.node);
|
||||||
|
@ -1,9 +1,10 @@
|
|||||||
import { markdown } from '@codemirror/lang-markdown';
|
import { markdown } from '@codemirror/lang-markdown';
|
||||||
import { GFM as GithubFlavoredMarkdownExt } from '@lezer/markdown';
|
import { GFM as GithubFlavoredMarkdownExt } from '@lezer/markdown';
|
||||||
import { forceParsing, indentUnit } from '@codemirror/language';
|
import { indentUnit } from '@codemirror/language';
|
||||||
import { SelectionRange, EditorSelection, EditorState } from '@codemirror/state';
|
import { SelectionRange, EditorSelection, EditorState } from '@codemirror/state';
|
||||||
import { EditorView } from '@codemirror/view';
|
import { EditorView } from '@codemirror/view';
|
||||||
import { MarkdownMathExtension } from './markdownMathParser';
|
import { MarkdownMathExtension } from '../markdownMathParser';
|
||||||
|
import forceFullParse from './forceFullParse';
|
||||||
|
|
||||||
// Creates and returns a minimal editor with markdown extensions
|
// Creates and returns a minimal editor with markdown extensions
|
||||||
const createEditor = (initialText: string, initialSelection: SelectionRange): EditorView => {
|
const createEditor = (initialText: string, initialSelection: SelectionRange): EditorView => {
|
||||||
@ -19,7 +20,7 @@ const createEditor = (initialText: string, initialSelection: SelectionRange): Ed
|
|||||||
],
|
],
|
||||||
});
|
});
|
||||||
|
|
||||||
forceParsing(editor);
|
forceFullParse(editor.state);
|
||||||
return editor;
|
return editor;
|
||||||
};
|
};
|
||||||
|
|
@ -0,0 +1,18 @@
|
|||||||
|
import { ensureSyntaxTree, syntaxTreeAvailable } from '@codemirror/language';
|
||||||
|
import { EditorState } from '@codemirror/state';
|
||||||
|
|
||||||
|
// Forces a full parse of a CodeMirror editor. This is intended for unit testing.
|
||||||
|
// If not in a unit-test consider using ensureSyntaxTree or forceParsing.
|
||||||
|
// This will throw if no language is configured for the editor.
|
||||||
|
const forceFullParse = (editorState: EditorState) => {
|
||||||
|
const timeout = 3000; // ms
|
||||||
|
ensureSyntaxTree(editorState, editorState.doc.length, timeout);
|
||||||
|
|
||||||
|
if (!syntaxTreeAvailable(editorState)) {
|
||||||
|
throw new Error(
|
||||||
|
`Unable to generate a syntax tree in ${timeout}. Is the editor configured to parse a language?`
|
||||||
|
);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
export default forceFullParse;
|
Loading…
Reference in New Issue
Block a user