Add test that ensures that getBlocksFromSyntaxTree() and getBlocksFromString() functions produces the same results

This commit is contained in:
Jonatan Heyman 2024-07-07 22:01:19 +02:00
parent 016422e7db
commit bc3a9b66a1
2 changed files with 31 additions and 3 deletions

View File

@ -25,7 +25,7 @@ let firstBlockDelimiterSize
* Return a list of blocks in the document from the syntax tree. * Return a list of blocks in the document from the syntax tree.
* syntaxTreeAvailable() should have been called before this function to ensure the syntax tree is available. * syntaxTreeAvailable() should have been called before this function to ensure the syntax tree is available.
*/ */
function getBlocksFromSyntaxTree(state) { export function getBlocksFromSyntaxTree(state) {
//const timer = startTimer() //const timer = startTimer()
const blocks = []; const blocks = [];
const tree = syntaxTree(state, state.doc.length) const tree = syntaxTree(state, state.doc.length)
@ -72,7 +72,7 @@ function getBlocksFromSyntaxTree(state) {
/** /**
* Parse blocks from document's string contents using String.indexOf() * Parse blocks from document's string contents using String.indexOf()
*/ */
function getBlocksFromString(state) { export function getBlocksFromString(state) {
//const timer = startTimer() //const timer = startTimer()
const blocks = [] const blocks = []
const doc = state.doc const doc = state.doc
@ -138,7 +138,7 @@ function getBlocksFromString(state) {
* the blocks are parsed from the string contents of the document, which is much faster * the blocks are parsed from the string contents of the document, which is much faster
* than waiting for the tree parsing to finish. * than waiting for the tree parsing to finish.
*/ */
function getBlocks(state) { export function getBlocks(state) {
if (syntaxTreeAvailable(state, state.doc.length)) { if (syntaxTreeAvailable(state, state.doc.length)) {
return getBlocksFromSyntaxTree(state) return getBlocksFromSyntaxTree(state)
} else { } else {

View File

@ -0,0 +1,28 @@
import { expect, test } from "@playwright/test"
import { EditorState } from "@codemirror/state"
import { heynoteLang } from "../src/editor/lang-heynote/heynote.js"
import { getBlocksFromSyntaxTree, getBlocksFromString } from "../src/editor/block/block.js"
test("parse blocks from both syntax tree and string contents", async ({page}) => {
const contents = `
text
Text Block A
text-a
Text Block B
json-a
{
"key": "value"
}
python
print("Hello, World!")
`
const state = EditorState.create({
doc: contents,
extensions: heynoteLang(),
})
const treeBlocks = getBlocksFromSyntaxTree(state)
const stringBlocks = getBlocksFromString(state)
expect(treeBlocks).toEqual(stringBlocks)
})