104 lines
3.3 KiB
JavaScript
104 lines
3.3 KiB
JavaScript
'use strict';
|
|
|
|
var t = require('lib0/dist/testing.cjs');
|
|
var log = require('lib0/dist/logging.cjs');
|
|
var Y = require('yjs');
|
|
var awareness$1 = require('./awareness.cjs');
|
|
var environment = require('lib0/dist/environment.cjs');
|
|
require('lib0/dist/encoding.cjs');
|
|
require('lib0/dist/decoding.cjs');
|
|
require('lib0/dist/time.cjs');
|
|
require('lib0/dist/math.cjs');
|
|
require('lib0/dist/observable.cjs');
|
|
require('lib0/dist/function.cjs');
|
|
|
|
function _interopNamespaceDefault(e) {
|
|
var n = Object.create(null);
|
|
if (e) {
|
|
Object.keys(e).forEach(function (k) {
|
|
if (k !== 'default') {
|
|
var d = Object.getOwnPropertyDescriptor(e, k);
|
|
Object.defineProperty(n, k, d.get ? d : {
|
|
enumerable: true,
|
|
get: function () { return e[k]; }
|
|
});
|
|
}
|
|
});
|
|
}
|
|
n.default = e;
|
|
return Object.freeze(n);
|
|
}
|
|
|
|
var t__namespace = /*#__PURE__*/_interopNamespaceDefault(t);
|
|
var log__namespace = /*#__PURE__*/_interopNamespaceDefault(log);
|
|
var Y__namespace = /*#__PURE__*/_interopNamespaceDefault(Y);
|
|
|
|
/**
|
|
* @param {t.TestCase} tc
|
|
*/
|
|
const testAwareness = tc => {
|
|
const doc1 = new Y__namespace.Doc();
|
|
doc1.clientID = 0;
|
|
const doc2 = new Y__namespace.Doc();
|
|
doc2.clientID = 1;
|
|
const aw1 = new awareness$1.Awareness(doc1);
|
|
const aw2 = new awareness$1.Awareness(doc2);
|
|
aw1.on('update', /** @param {any} p */ ({ added, updated, removed }) => {
|
|
const enc = awareness$1.encodeAwarenessUpdate(aw1, added.concat(updated).concat(removed));
|
|
awareness$1.applyAwarenessUpdate(aw2, enc, 'custom');
|
|
});
|
|
let lastChangeLocal = /** @type {any} */ (null);
|
|
aw1.on('change', /** @param {any} change */ change => {
|
|
lastChangeLocal = change;
|
|
});
|
|
let lastChange = /** @type {any} */ (null);
|
|
aw2.on('change', /** @param {any} change */ change => {
|
|
lastChange = change;
|
|
});
|
|
aw1.setLocalState({ x: 3 });
|
|
t__namespace.compare(aw2.getStates().get(0), { x: 3 });
|
|
t__namespace.assert(/** @type {any} */ (aw2.meta.get(0)).clock === 1);
|
|
t__namespace.compare(lastChange.added, [0]);
|
|
// When creating an Awareness instance, the the local client is already marked as available, so it is not updated.
|
|
t__namespace.compare(lastChangeLocal, { added: [], updated: [0], removed: [] });
|
|
|
|
// update state
|
|
lastChange = null;
|
|
lastChangeLocal = null;
|
|
aw1.setLocalState({ x: 4 });
|
|
t__namespace.compare(aw2.getStates().get(0), { x: 4 });
|
|
t__namespace.compare(lastChangeLocal, { added: [], updated: [0], removed: [] });
|
|
t__namespace.compare(lastChangeLocal, lastChange);
|
|
|
|
lastChange = null;
|
|
lastChangeLocal = null;
|
|
aw1.setLocalState({ x: 4 });
|
|
t__namespace.assert(lastChange === null);
|
|
t__namespace.assert(/** @type {any} */ (aw2.meta.get(0)).clock === 3);
|
|
t__namespace.compare(lastChangeLocal, lastChange);
|
|
aw1.setLocalState(null);
|
|
t__namespace.assert(lastChange.removed.length === 1);
|
|
t__namespace.compare(aw1.getStates().get(0), undefined);
|
|
t__namespace.compare(lastChangeLocal, lastChange);
|
|
};
|
|
|
|
var awareness = /*#__PURE__*/Object.freeze({
|
|
__proto__: null,
|
|
testAwareness: testAwareness
|
|
});
|
|
|
|
/* istanbul ignore if */
|
|
if (environment.isBrowser) {
|
|
log__namespace.createVConsole(document.body);
|
|
}
|
|
|
|
t.runTests({
|
|
awareness
|
|
}).then(success => {
|
|
/* istanbul ignore next */
|
|
if (environment.isNode) {
|
|
process.exit(success ? 0 : 1);
|
|
}
|
|
});
|
|
//# sourceMappingURL=test.cjs.map
|