add tests for complex Y.Text deltas
This commit is contained in:
parent
92bad63145
commit
da8bacfc78
@ -1747,9 +1747,9 @@ export const testBasicFormat = tc => {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param {t.TestCase} tc
|
* @param {t.TestCase} _tc
|
||||||
*/
|
*/
|
||||||
export const testMultilineFormat = tc => {
|
export const testMultilineFormat = _tc => {
|
||||||
const ydoc = new Y.Doc()
|
const ydoc = new Y.Doc()
|
||||||
const testText = ydoc.getText('test')
|
const testText = ydoc.getText('test')
|
||||||
testText.insert(0, 'Test\nMulti-line\nFormatting')
|
testText.insert(0, 'Test\nMulti-line\nFormatting')
|
||||||
@ -1770,9 +1770,9 @@ export const testMultilineFormat = tc => {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param {t.TestCase} tc
|
* @param {t.TestCase} _tc
|
||||||
*/
|
*/
|
||||||
export const testNotMergeEmptyLinesFormat = tc => {
|
export const testNotMergeEmptyLinesFormat = _tc => {
|
||||||
const ydoc = new Y.Doc()
|
const ydoc = new Y.Doc()
|
||||||
const testText = ydoc.getText('test')
|
const testText = ydoc.getText('test')
|
||||||
testText.applyDelta([
|
testText.applyDelta([
|
||||||
@ -1790,9 +1790,9 @@ export const testNotMergeEmptyLinesFormat = tc => {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param {t.TestCase} tc
|
* @param {t.TestCase} _tc
|
||||||
*/
|
*/
|
||||||
export const testPreserveAttributesThroughDelete = tc => {
|
export const testPreserveAttributesThroughDelete = _tc => {
|
||||||
const ydoc = new Y.Doc()
|
const ydoc = new Y.Doc()
|
||||||
const testText = ydoc.getText('test')
|
const testText = ydoc.getText('test')
|
||||||
testText.applyDelta([
|
testText.applyDelta([
|
||||||
@ -2046,9 +2046,9 @@ const id = Y.createID(0, 0)
|
|||||||
const c = new Y.ContentString('a')
|
const c = new Y.ContentString('a')
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param {t.TestCase} tc
|
* @param {t.TestCase} _tc
|
||||||
*/
|
*/
|
||||||
export const testBestCase = tc => {
|
export const testBestCase = _tc => {
|
||||||
const N = largeDocumentSize
|
const N = largeDocumentSize
|
||||||
const items = new Array(N)
|
const items = new Array(N)
|
||||||
t.measureTime('time to create two million items in the best case', () => {
|
t.measureTime('time to create two million items in the best case', () => {
|
||||||
@ -2085,9 +2085,9 @@ const tryGc = () => {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param {t.TestCase} tc
|
* @param {t.TestCase} _tc
|
||||||
*/
|
*/
|
||||||
export const testLargeFragmentedDocument = tc => {
|
export const testLargeFragmentedDocument = _tc => {
|
||||||
const itemsToInsert = largeDocumentSize
|
const itemsToInsert = largeDocumentSize
|
||||||
let update = /** @type {any} */ (null)
|
let update = /** @type {any} */ (null)
|
||||||
;(() => {
|
;(() => {
|
||||||
@ -2117,9 +2117,9 @@ export const testLargeFragmentedDocument = tc => {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param {t.TestCase} tc
|
* @param {t.TestCase} _tc
|
||||||
*/
|
*/
|
||||||
export const testIncrementalUpdatesPerformanceOnLargeFragmentedDocument = tc => {
|
export const testIncrementalUpdatesPerformanceOnLargeFragmentedDocument = _tc => {
|
||||||
const itemsToInsert = largeDocumentSize
|
const itemsToInsert = largeDocumentSize
|
||||||
const updates = /** @type {Array<Uint8Array>} */ ([])
|
const updates = /** @type {Array<Uint8Array>} */ ([])
|
||||||
;(() => {
|
;(() => {
|
||||||
@ -2227,9 +2227,9 @@ export const testSearchMarkerBug1 = tc => {
|
|||||||
/**
|
/**
|
||||||
* Reported in https://github.com/yjs/yjs/pull/32
|
* Reported in https://github.com/yjs/yjs/pull/32
|
||||||
*
|
*
|
||||||
* @param {t.TestCase} tc
|
* @param {t.TestCase} _tc
|
||||||
*/
|
*/
|
||||||
export const testFormattingBug = async tc => {
|
export const testFormattingBug = async _tc => {
|
||||||
const ydoc1 = new Y.Doc()
|
const ydoc1 = new Y.Doc()
|
||||||
const ydoc2 = new Y.Doc()
|
const ydoc2 = new Y.Doc()
|
||||||
const text1 = ydoc1.getText()
|
const text1 = ydoc1.getText()
|
||||||
@ -2252,9 +2252,9 @@ export const testFormattingBug = async tc => {
|
|||||||
/**
|
/**
|
||||||
* Delete formatting should not leave redundant formatting items.
|
* Delete formatting should not leave redundant formatting items.
|
||||||
*
|
*
|
||||||
* @param {t.TestCase} tc
|
* @param {t.TestCase} _tc
|
||||||
*/
|
*/
|
||||||
export const testDeleteFormatting = tc => {
|
export const testDeleteFormatting = _tc => {
|
||||||
const doc = new Y.Doc()
|
const doc = new Y.Doc()
|
||||||
const text = doc.getText()
|
const text = doc.getText()
|
||||||
text.insert(0, 'Attack ships on fire off the shoulder of Orion.')
|
text.insert(0, 'Attack ships on fire off the shoulder of Orion.')
|
||||||
@ -2456,6 +2456,41 @@ const qChanges = [
|
|||||||
}
|
}
|
||||||
ops.push({ insert: text }, { insert: '\n', format: { 'code-block': true } })
|
ops.push({ insert: text }, { insert: '\n', format: { 'code-block': true } })
|
||||||
ytext.applyDelta(ops)
|
ytext.applyDelta(ops)
|
||||||
|
},
|
||||||
|
/**
|
||||||
|
* @param {Y.Doc} y
|
||||||
|
* @param {prng.PRNG} gen
|
||||||
|
*/
|
||||||
|
(y, gen) => { // complex delta op
|
||||||
|
const ytext = y.getText('text')
|
||||||
|
const contentLen = ytext.toString().length
|
||||||
|
let currentPos = math.max(0, prng.int32(gen, 0, contentLen - 1))
|
||||||
|
/**
|
||||||
|
* @type {Array<any>}
|
||||||
|
*/
|
||||||
|
const ops = currentPos > 0 ? [{ retain: currentPos }] : []
|
||||||
|
// create max 3 ops
|
||||||
|
for (let i = 0; i < 7 && currentPos < contentLen; i++) {
|
||||||
|
prng.oneOf(gen, [
|
||||||
|
() => { // format
|
||||||
|
const retain = math.min(prng.int32(gen, 0, contentLen - currentPos), 5)
|
||||||
|
const format = prng.oneOf(gen, marks)
|
||||||
|
ops.push({ retain, attributes: format })
|
||||||
|
currentPos += retain
|
||||||
|
},
|
||||||
|
() => { // insert
|
||||||
|
const attrs = prng.oneOf(gen, marksChoices)
|
||||||
|
const text = prng.word(gen, 1, 3)
|
||||||
|
ops.push({ insert: text, attributes: attrs })
|
||||||
|
},
|
||||||
|
() => { // delete
|
||||||
|
const delLen = math.min(prng.int32(gen, 0, contentLen - currentPos), 10)
|
||||||
|
ops.push({ delete: delLen })
|
||||||
|
currentPos += delLen
|
||||||
|
}
|
||||||
|
])()
|
||||||
|
}
|
||||||
|
ytext.applyDelta(ops)
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user