yjs/tests/relativePositions.tests.js
2021-01-08 23:03:44 +01:00

30 lines
924 B
JavaScript

import * as Y from '../src/internals'
import * as t from 'lib0/testing.js'
/**
* @param {t.TestCase} tc
*/
export const testRelativePosition = tc => {
const ydoc = new Y.Doc()
const ytext = ydoc.getText()
ytext.insert(0, '1')
ytext.insert(0, 'abc')
ytext.insert(0, 'z')
ytext.insert(0, 'y')
ytext.insert(0, 'x')
// test if all positions are encoded and restored correctly
for (let i = 0; i < ytext.length; i++) {
// for all types of associations..
for (let assoc = -1; assoc < 2; assoc++) {
const rpos = Y.createRelativePositionFromTypeIndex(ytext, i, assoc)
const encodedRpos = Y.encodeRelativePosition(rpos)
const decodedRpos = Y.decodeRelativePosition(encodedRpos)
const absPos = /** @type {Y.AbsolutePosition} */ (Y.createAbsolutePositionFromRelativePosition(decodedRpos, ydoc))
t.assert(absPos.index === i)
t.assert(absPos.assoc === assoc)
}
}
}