implement snapshot & event.changes

This commit is contained in:
Kevin Jahns
2019-09-03 16:33:29 +02:00
parent 8bcff6138c
commit bb1c0b809f
9 changed files with 319 additions and 29 deletions

View File

@@ -191,6 +191,33 @@ export const testInsertAndDeleteEventsForTypes = tc => {
compare(users)
}
/**
* @param {t.TestCase} tc
*/
export const testChangeEvent = tc => {
const { array0, users } = init(tc, { users: 2 })
/**
* @type {any}
*/
let changes = null
array0.observe(e => {
changes = e.changes
})
const newArr = new Y.Array()
array0.insert(0, [newArr, 4, 'dtrn'])
t.assert(changes !== null && changes.added.size === 2 && changes.deleted.size === 0)
t.compare(changes.delta, [{insert: [newArr, 4, 'dtrn']}])
changes = null
array0.delete(0, 2)
t.assert(changes !== null && changes.added.size === 0 && changes.deleted.size === 2)
t.compare(changes.delta, [{ delete: 2 }])
changes = null
array0.insert(1, [0.1])
t.assert(changes !== null && changes.added.size === 1 && changes.deleted.size === 0)
t.compare(changes.delta, [{ retain: 1 }, { insert: [0.1] }])
compare(users)
}
/**
* @param {t.TestCase} tc
*/

View File

@@ -292,6 +292,54 @@ export const testThrowsAddAndUpdateAndDeleteEvents = tc => {
compare(users)
}
/**
* @param {t.TestCase} tc
*/
export const testChangeEvent = tc => {
const { map0, users } = init(tc, { users: 2 })
/**
* @type {any}
*/
let changes = null
/**
* @type {any}
*/
let keyChange = null
map0.observe(e => {
changes = e.changes
})
map0.set('a', 1)
keyChange = changes.keys.get('a')
t.assert(changes !== null && keyChange.action === 'add' && keyChange.oldValue === undefined)
map0.set('a', 2)
keyChange = changes.keys.get('a')
t.assert(changes !== null && keyChange.action === 'update' && keyChange.oldValue === 1)
users[0].transact(() => {
map0.set('a', 3)
map0.set('a', 4)
})
keyChange = changes.keys.get('a')
t.assert(changes !== null && keyChange.action === 'update' && keyChange.oldValue === 2)
users[0].transact(() => {
map0.set('b', 1)
map0.set('b', 2)
})
keyChange = changes.keys.get('b')
t.assert(changes !== null && keyChange.action === 'add' && keyChange.oldValue === undefined)
users[0].transact(() => {
map0.set('c', 1)
map0.delete('c')
})
t.assert(changes !== null && changes.keys.size === 0)
users[0].transact(() => {
map0.set('d', 1)
map0.set('d', 2)
})
keyChange = changes.keys.get('d')
t.assert(changes !== null && keyChange.action === 'add' && keyChange.oldValue === undefined)
compare(users)
}
/**
* @param {t.TestCase} tc
*/

View File

@@ -98,7 +98,7 @@ export const testSnapshot = tc => {
text0.applyDelta([{
insert: 'abcd'
}])
const snapshot1 = Y.createSnapshotFromDoc(doc0)
const snapshot1 = Y.snapshot(doc0)
text0.applyDelta([{
retain: 1
}, {
@@ -106,7 +106,7 @@ export const testSnapshot = tc => {
}, {
delete: 1
}])
const snapshot2 = Y.createSnapshotFromDoc(doc0)
const snapshot2 = Y.snapshot(doc0)
text0.applyDelta([{
retain: 2
}, {
@@ -140,7 +140,7 @@ export const testSnapshotDeleteAfter = tc => {
text0.applyDelta([{
insert: 'abcd'
}])
const snapshot1 = Y.createSnapshotFromDoc(doc0)
const snapshot1 = Y.snapshot(doc0)
text0.applyDelta([{
retain: 4
}, {