yjs/tests/prosemirror.test.mjs
2018-11-25 22:39:50 +01:00

38 lines
1.2 KiB
JavaScript

import { test } from 'cutest'
import * as random from '../lib/prng/prng.mjs'
import * as Y from '../index.mjs'
import { prosemirrorPlugin } from '../bindings/prosemirror.mjs'
import {EditorState} from 'prosemirror-state'
import {EditorView} from 'prosemirror-view'
import {schema} from 'prosemirror-schema-basic'
import {exampleSetup} from 'prosemirror-example-setup'
const createNewProsemirrorView = y => {
const view = new EditorView(document.createElement('div'), {
state: EditorState.create({
schema,
plugins: exampleSetup({schema}).concat([prosemirrorPlugin(y.define('prosemirror', Y.XmlFragment))])
})
})
return view
}
test('random prosemirror insertions', async t => {
const gen = random.createPRNG(t.getSeed())
const y = new Y.Y()
const p1 = createNewProsemirrorView(y)
const p2 = createNewProsemirrorView(y)
for (let i = 0; i < 10; i++) {
const p = random.oneOf(gen, [p1, p2])
const insertPos = random.int32(gen, 0, p.state.doc.content.size)
const overwrite = random.int32(gen, 0, p.state.doc.content.size - insertPos)
p.dispatch(p.state.tr.insertText('' + i, insertPos, insertPos + overwrite))
}
t.compare(
p1.state.doc.toJSON(),
p2.state.doc.toJSON(),
'compare prosemirror models'
)
})