30 lines
924 B
JavaScript
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)
|
|
}
|
|
}
|
|
}
|