From 4bfe484fc23bb56a4c16605e217116707b9da3f6 Mon Sep 17 00:00:00 2001 From: Kevin Jahns Date: Thu, 10 Sep 2015 19:41:07 +0200 Subject: [PATCH] node-inspector --- gulpfile.js | 4 +- q.js | 4 + spec/support/jasmine.json | 16 ++ src/Connector.js | 3 +- src/Connectors/Test.js | 5 +- src/Helper.spec.js | 65 ++++--- src/OperationStore.js | 12 +- src/OperationStores/Memory.js | 16 +- src/OperationStores/Memory.spec.js | 4 +- src/OperationStores/RedBlackTree.js | 16 +- src/OperationStores/RedBlackTree.spec.js | 5 +- src/Struct.js | 6 +- src/Types/Array.spec.js | 210 +++++++++++------------ src/Types/Map.spec.js | 120 ++++++------- src/Types/TextBind.js | 4 +- src/Utils.js | 5 +- src/y.js | 14 +- test.js | 17 ++ 18 files changed, 309 insertions(+), 217 deletions(-) create mode 100644 q.js create mode 100644 spec/support/jasmine.json create mode 100644 test.js diff --git a/gulpfile.js b/gulpfile.js index e8dd0d39..84e79f1e 100644 --- a/gulpfile.js +++ b/gulpfile.js @@ -128,8 +128,8 @@ gulp.task('build_jasmine_browser', function () { loose: 'all', modules: 'ignore', // optional: ['es7.asyncFunctions'], - blacklist: "regenerator", - //experimental: true + blacklist: 'regenerator' + // experimental: true })) .pipe(sourcemaps.write()) .pipe(gulp.dest('build')) diff --git a/q.js b/q.js new file mode 100644 index 00000000..84f1d6dc --- /dev/null +++ b/q.js @@ -0,0 +1,4 @@ +'use strict'; + +class YY { +} diff --git a/spec/support/jasmine.json b/spec/support/jasmine.json new file mode 100644 index 00000000..1ca814d6 --- /dev/null +++ b/spec/support/jasmine.json @@ -0,0 +1,16 @@ +{ + "spec_dir": "src", + "spec_files": [ + "**/**.spec.js" + ], + "helpers": [ + "Helper.spec.js", + "y.js", + "Connector.js", + "OperationStore.js", + "Struct.js", + "Utils.js", + "OperationStores/RedBlackTree.js", + "OperationStores/Memory.js" + ] +} diff --git a/src/Connector.js b/src/Connector.js index e02c0ff5..15770099 100644 --- a/src/Connector.js +++ b/src/Connector.js @@ -1,3 +1,5 @@ +'use strict' + class AbstractConnector { // eslint-disable-line no-unused-vars /* opts @@ -125,7 +127,6 @@ class AbstractConnector { // eslint-disable-line no-unused-vars if (this.debug) { console.log(`me -> ${uid}: ${message.type}`, m);// eslint-disable-line } - super(uid, message) } // You received a raw message, and you know that it is intended for to Yjs. Then call this function. receiveMessage (sender, m) { diff --git a/src/Connectors/Test.js b/src/Connectors/Test.js index 1fd665fc..87cae0da 100644 --- a/src/Connectors/Test.js +++ b/src/Connectors/Test.js @@ -1,4 +1,5 @@ /* global getRandom, AbstractConnector, Y, wait */ +'use strict' var globalRoom = { users: {}, @@ -66,11 +67,11 @@ class Test extends AbstractConnector { } reconnect () { globalRoom.addUser(this) - super() + super.reconnect() } disconnect () { globalRoom.removeUser(this.userId) - super() + super.disconnect() } flush () { var buff = globalRoom.buffers[this.userId] diff --git a/src/Helper.spec.js b/src/Helper.spec.js index 79420395..21c066aa 100644 --- a/src/Helper.spec.js +++ b/src/Helper.spec.js @@ -5,13 +5,23 @@ This is just a compilation of functions that help to test this library! ***/ -function wait(t = 10) {//eslint-disable-line +var g = global || window +g.g = g + +var co = require('co') +g.co = co + +function wait (t) { + if (t == null) { + t = 10 + } var def = Promise.defer() setTimeout(function () { def.resolve() }, t) return def.promise } +g.wait = wait // returns a random element of o // works on Object, and Array @@ -26,14 +36,17 @@ function getRandom (o) { return o[getRandom(ks)] } } +g.getRandom = getRandom + function getRandomNumber(n) {//eslint-disable-line if (n == null) { n = 9999 } return Math.floor(Math.random() * n) } +g.getRandomNumber = getRandomNumber -async function applyRandomTransactions (users, objects, transactions, numberOfTransactions) {//eslint-disable-line +g.applyRandomTransactions = co.wrap(function * applyRandomTransactions (users, objects, transactions, numberOfTransactions) { //eslint-disable-line function randomTransaction (root) { var f = getRandom(transactions) f(root) @@ -51,24 +64,24 @@ async function applyRandomTransactions (users, objects, transactions, numberOfTr } } applyTransactions() - await users[0].connector.flushAll() + yield users[0].connector.flushAll() users[0].disconnect() - await wait() + yield wait() applyTransactions() - await users[0].connector.flushAll() + yield users[0].connector.flushAll() users[0].reconnect() - await wait() - await users[0].connector.flushAll() -} + yield wait() + yield users[0].connector.flushAll() +}) -async function garbageCollectAllUsers (users) { +g.garbageCollectAllUsers = co.wrap(function * garbageCollectAllUsers (users) { for (var i in users) { - await users[i].db.garbageCollect() - await users[i].db.garbageCollect() + yield users[i].db.garbageCollect() + yield users[i].db.garbageCollect() } -} +}) -async function compareAllUsers(users){//eslint-disable-line +g.compareAllUsers = co.wrap(function * compareAllUsers (users) { //eslint-disable-line var s1, s2, ds1, ds2, allDels1, allDels2 var db1 = [] function * t1 () { @@ -87,11 +100,11 @@ async function compareAllUsers(users){//eslint-disable-line allDels2.push(d) }) } - await users[0].connector.flushAll() - await garbageCollectAllUsers(users) - await wait(200) - await garbageCollectAllUsers(users) - await wait(200) + yield users[0].connector.flushAll() + yield g.garbageCollectAllUsers(users) + yield wait(200) + yield g.garbageCollectAllUsers(users) + yield wait(200) for (var uid = 0; uid < users.length; uid++) { var u = users[uid] // compare deleted ops against deleteStore @@ -116,16 +129,16 @@ async function compareAllUsers(users){//eslint-disable-line } }) // compare allDels tree - await wait() + yield wait() if (s1 == null) { u.db.requestTransaction(t1) - await wait() + yield wait() u.db.os.iterate(null, null, function(o){//eslint-disable-line db1.push(o) }) } else { u.db.requestTransaction(t2) - await wait() + yield wait() expect(s1).toEqual(s2) expect(allDels1).toEqual(allDels2) // inner structure expect(ds1).toEqual(ds2) // exported structure @@ -135,11 +148,11 @@ async function compareAllUsers(users){//eslint-disable-line }) } } -} +}) -async function createUsers(self, numberOfUsers) {//eslint-disable-line +g.createUsers = co.wrap(function * createUsers (self, numberOfUsers) { //eslint-disable-line if (globalRoom.users[0] != null) {//eslint-disable-line - await globalRoom.users[0].flushAll()//eslint-disable-line + yield globalRoom.users[0].flushAll()//eslint-disable-line } // destroy old users for (var u in globalRoom.users) {//eslint-disable-line @@ -160,5 +173,5 @@ async function createUsers(self, numberOfUsers) {//eslint-disable-line } })) } - self.users = await Promise.all(promises) -} + self.users = yield Promise.all(promises) +}) diff --git a/src/OperationStore.js b/src/OperationStore.js index 5e20e828..fbaeac32 100644 --- a/src/OperationStore.js +++ b/src/OperationStore.js @@ -1,4 +1,10 @@ -/* global Y, copyObject, Struct, RBTree */ +/* global Y */ + +'use strict' + +var RBTree = Y.RBTree +var Struct = Y.Struct +var copyObject = Y.copyObject class AbstractTransaction { // eslint-disable-line no-unused-vars constructor (store) { @@ -37,6 +43,7 @@ class AbstractTransaction { // eslint-disable-line no-unused-vars } } } +Y.AbstractTransaction = AbstractTransaction class AbstractOperationStore { // eslint-disable-line no-unused-vars constructor (y, opts) { @@ -216,7 +223,7 @@ class AbstractOperationStore { // eslint-disable-line no-unused-vars yield* this.store.operationAdded(this, op) if (isDeleted) { - yield* Struct["Delete"].execute.call(this, {target: op.id}) + yield* Struct['Delete'].execute.call(this, {target: op.id}) } // find next operation to execute @@ -272,3 +279,4 @@ class AbstractOperationStore { // eslint-disable-line no-unused-vars ls.push(f) } } +Y.AbstractOperationStore = AbstractOperationStore diff --git a/src/OperationStores/Memory.js b/src/OperationStores/Memory.js index 7caf4b6a..28686120 100644 --- a/src/OperationStores/Memory.js +++ b/src/OperationStores/Memory.js @@ -1,4 +1,5 @@ /* global Struct, RBTree, Y, compareIds */ +'use strict' function copyObject (o) { var c = {} @@ -8,7 +9,7 @@ function copyObject (o) { return c } -class DeleteStore extends RBTree { // eslint-disable-line +class DeleteStore extends Y.RBTree { constructor () { super() } @@ -116,8 +117,10 @@ class DeleteStore extends RBTree { // eslint-disable-line } } +Y.DeleteStore = DeleteStore + Y.Memory = (function () { // eslint-disable-line no-unused-vars - class Transaction extends AbstractTransaction { // eslint-disable-line + class Transaction extends Y.AbstractTransaction { // eslint-disable-line constructor (store) { super(store) @@ -130,7 +133,7 @@ Y.Memory = (function () { // eslint-disable-line no-unused-vars if (n !== null && n.val.id[0] === state.user) { state.clock = Math.max(state.clock, n.val.id[1] + n.val.len) } - } + } * getDeleteSet (id) { return this.ds.toDeleteSet(id) } @@ -245,7 +248,7 @@ Y.Memory = (function () { // eslint-disable-line no-unused-vars return op } } - class OperationStore extends AbstractOperationStore { // eslint-disable-line no-undef + class OperationStore extends Y.AbstractOperationStore { // eslint-disable-line no-undef constructor (y, opts) { super(y, opts) this.os = new RBTree() @@ -257,10 +260,11 @@ Y.Memory = (function () { // eslint-disable-line no-unused-vars logTable () { this.os.logTable() } - requestTransaction (_makeGen, requestNow = false) { + requestTransaction (_makeGen, requestNow) { + if (requestNow == null) { requestNow = false } if (!this.transactionInProgress) { this.transactionInProgress = true - var transact = () => { + var transact = (xxxx) => { var makeGen = _makeGen while (makeGen != null) { var t = new Transaction(this) diff --git a/src/OperationStores/Memory.spec.js b/src/OperationStores/Memory.spec.js index 7d0f1705..78eaa39b 100644 --- a/src/OperationStores/Memory.spec.js +++ b/src/OperationStores/Memory.spec.js @@ -1,6 +1,8 @@ -/* global DeleteStore */ +/* global Y */ /* eslint-env browser,jasmine,console */ +var DeleteStore = Y.DeleteStore + describe('Memory', function () { describe('DeleteStore', function () { var ds diff --git a/src/OperationStores/RedBlackTree.js b/src/OperationStores/RedBlackTree.js index 443eea2b..1c82b353 100644 --- a/src/OperationStores/RedBlackTree.js +++ b/src/OperationStores/RedBlackTree.js @@ -1,4 +1,8 @@ -/* global compareIds, copyObject */ +/* global Y, copyObject */ +'use strict' + +var compareIds = Y.compareIds + function smaller (a, b) { return a[0] < b[0] || (a[0] === b[0] && a[1] < b[1]) } @@ -26,8 +30,8 @@ class N { return this._parent } get sibling () { - return (this === this.parent.left) ? - this.parent.right : this.parent.left + return (this === this.parent.left) + ? this.parent.right : this.parent.left } get left () { return this._left @@ -192,7 +196,9 @@ class RBTree { // eslint-disable-line no-unused-vars } return true } - logTable (from = null, to = null) { + logTable (from, to) { + if (from == null) { from = null } + if (to == null) { to = null } var os = [] this.iterate(from, to, function (o) { var o_ = copyObject(o) @@ -453,3 +459,5 @@ class RBTree { // eslint-disable-line no-unused-vars } } } + +Y.RBTree = RBTree diff --git a/src/OperationStores/RedBlackTree.spec.js b/src/OperationStores/RedBlackTree.spec.js index 1eff8e76..9558866c 100644 --- a/src/OperationStores/RedBlackTree.spec.js +++ b/src/OperationStores/RedBlackTree.spec.js @@ -1,6 +1,9 @@ -/* global RBTree, smaller, compareIds */ +/* global Y */ /* eslint-env browser,jasmine,console */ +var RBTree = Y.RBTree +var compareIds = Y.compareIds +var smaller = Y.smaller var numberOfRBTreeTests = 1000 function itRedNodesDoNotHaveBlackChildren (tree) { diff --git a/src/Struct.js b/src/Struct.js index d509a65a..0bd5bc78 100644 --- a/src/Struct.js +++ b/src/Struct.js @@ -1,4 +1,7 @@ -/* global copyObject, Y*/ +/* global Y */ +'use strict' + +var copyObject = Y.copyObject function compareIds (id1, id2) { if (id1 == null || id2 == null) { @@ -13,6 +16,7 @@ function compareIds (id1, id2) { return false } } +Y.compareIds = compareIds var Struct = { /* This Operations does _not_ have an id! diff --git a/src/Types/Array.spec.js b/src/Types/Array.spec.js index 5d85024c..d43739df 100644 --- a/src/Types/Array.spec.js +++ b/src/Types/Array.spec.js @@ -1,4 +1,4 @@ -/* global createUsers, wait, Y, compareAllUsers, getRandomNumber, applyRandomTransactions */ +/* global createUsers, wait, Y, compareAllUsers, getRandomNumber, applyRandomTransactions, co, garbageCollectAllUsers */ /* eslint-env browser,jasmine */ var numberOfYArrayTests = 5 @@ -7,160 +7,160 @@ describe('Array Type', function () { var y1, y2, y3, yconfig1, yconfig2, yconfig3, flushAll jasmine.DEFAULT_TIMEOUT_INTERVAL = 5000 - beforeEach(async function (done) { - await createUsers(this, 3) + beforeEach(co.wrap(function * (done) { + yield createUsers(this, 3) y1 = (yconfig1 = this.users[0]).root y2 = (yconfig2 = this.users[1]).root y3 = (yconfig3 = this.users[2]).root flushAll = this.users[0].connector.flushAll done() - }) - afterEach(async function(done) { - await compareAllUsers(this.users) + })) + afterEach(co.wrap(function * (done) { + yield compareAllUsers(this.users) done() - }) + })) describe('Basic tests', function () { - it('insert three elements, try re-get property', async function (done) { - var array = await y1.set('Array', Y.Array) + it('insert three elements, try re-get property', co.wrap(function * (done) { + var array = yield y1.set('Array', Y.Array) array.insert(0, [1, 2, 3]) - array = await y1.get('Array') // re-get property + array = yield y1.get('Array') // re-get property expect(array.toArray()).toEqual([1, 2, 3]) done() - }) - it('Basic insert in array (handle three conflicts)', async function (done) { - await y1.set('Array', Y.Array) - await flushAll() - var l1 = await y1.get('Array') + })) + it('Basic insert in array (handle three conflicts)', co.wrap(function * (done) { + yield y1.set('Array', Y.Array) + yield flushAll() + var l1 = yield y1.get('Array') l1.insert(0, [0]) - var l2 = await y2.get('Array') + var l2 = yield y2.get('Array') l2.insert(0, [1]) - var l3 = await y3.get('Array') + var l3 = yield y3.get('Array') l3.insert(0, [2]) - await flushAll() + yield flushAll() expect(l1.toArray()).toEqual(l2.toArray()) expect(l2.toArray()).toEqual(l3.toArray()) done() - }) - it('Basic insert&delete in array (handle three conflicts)', async function (done) { + })) + it('Basic insert&delete in array (handle three conflicts)', co.wrap(function * (done) { var l1, l2, l3 - l1 = await y1.set('Array', Y.Array) + l1 = yield y1.set('Array', Y.Array) l1.insert(0, ['x', 'y', 'z']) - await flushAll() + yield flushAll() l1.insert(1, [0]) - l2 = await y2.get('Array') + l2 = yield y2.get('Array') l2.delete(0) l2.delete(1) - l3 = await y3.get('Array') + l3 = yield y3.get('Array') l3.insert(1, [2]) - await flushAll() + yield flushAll() expect(l1.toArray()).toEqual(l2.toArray()) expect(l2.toArray()).toEqual(l3.toArray()) expect(l2.toArray()).toEqual([0, 2, 'y']) done() - }) - it('Handles getOperations ascending ids bug in late sync', async function (done) { + })) + it('Handles getOperations ascending ids bug in late sync', co.wrap(function * (done) { var l1, l2 - l1 = await y1.set('Array', Y.Array) + l1 = yield y1.set('Array', Y.Array) l1.insert(0, ['x', 'y']) - await flushAll() + yield flushAll() yconfig3.disconnect() yconfig2.disconnect() - await wait() - l2 = await y2.get('Array') + yield wait() + l2 = yield y2.get('Array') l2.insert(1, [2]) l2.insert(1, [3]) - await flushAll() + yield flushAll() yconfig2.reconnect() yconfig3.reconnect() - await wait() - await flushAll() + yield wait() + yield flushAll() expect(l1.toArray()).toEqual(l2.toArray()) done() - }) - it('Handles deletions in late sync', async function (done) { + })) + it('Handles deletions in late sync', co.wrap(function * (done) { var l1, l2 - l1 = await y1.set('Array', Y.Array) + l1 = yield y1.set('Array', Y.Array) l1.insert(0, ['x', 'y']) - await flushAll() + yield flushAll() yconfig2.disconnect() - await wait() - l2 = await y2.get('Array') + yield wait() + l2 = yield y2.get('Array') l2.delete(1, 1) l1.delete(0, 2) - await flushAll() + yield flushAll() yconfig2.reconnect() - await wait() - await flushAll() + yield wait() + yield flushAll() expect(l1.toArray()).toEqual(l2.toArray()) done() - }) - it('Handles deletions in late sync (2)', async function (done) { + })) + it('Handles deletions in late sync (2)', co.wrap(function * (done) { var l1, l2 - l1 = await y1.set('Array', Y.Array) - await flushAll() - l2 = await y2.get('Array') + l1 = yield y1.set('Array', Y.Array) + yield flushAll() + l2 = yield y2.get('Array') l1.insert(0, ['x', 'y']) l1.delete(0, 2) - await wait(500) - await flushAll() - await wait(500) + yield wait(500) + yield flushAll() + yield wait(500) expect(l1.toArray()).toEqual(l2.toArray()) - await compareAllUsers(this.users) + yield compareAllUsers(this.users) done() - }) - it('Basic insert. Then delete the whole array', async function (done) { + })) + it('Basic insert. Then delete the whole array', co.wrap(function * (done) { var l1, l2, l3 - l1 = await y1.set('Array', Y.Array) + l1 = yield y1.set('Array', Y.Array) l1.insert(0, ['x', 'y', 'z']) - await flushAll() + yield flushAll() l1.delete(0, 3) - l2 = await y2.get('Array') - l3 = await y3.get('Array') - await flushAll() + l2 = yield y2.get('Array') + l3 = yield y3.get('Array') + yield flushAll() expect(l1.toArray()).toEqual(l2.toArray()) expect(l2.toArray()).toEqual(l3.toArray()) expect(l2.toArray()).toEqual([]) done() - }) - it('Basic insert. Then delete the whole array (merge listeners on late sync)', async function (done) { + })) + it('Basic insert. Then delete the whole array (merge listeners on late sync)', co.wrap(function * (done) { var l1, l2, l3 - l1 = await y1.set('Array', Y.Array) + l1 = yield y1.set('Array', Y.Array) l1.insert(0, ['x', 'y', 'z']) - await flushAll() + yield flushAll() yconfig2.disconnect() l1.delete(0, 3) - l2 = await y2.get('Array') - await wait() + l2 = yield y2.get('Array') + yield wait() yconfig2.reconnect() - await wait() - l3 = await y3.get('Array') - await flushAll() + yield wait() + l3 = yield y3.get('Array') + yield flushAll() expect(l1.toArray()).toEqual(l2.toArray()) expect(l2.toArray()).toEqual(l3.toArray()) expect(l2.toArray()).toEqual([]) done() - }) - it('Basic insert. Then delete the whole array (merge deleter on late sync)', async function (done) { + })) + it('Basic insert. Then delete the whole array (merge deleter on late sync)', co.wrap(function * (done) { var l1, l2, l3 - l1 = await y1.set('Array', Y.Array) + l1 = yield y1.set('Array', Y.Array) l1.insert(0, ['x', 'y', 'z']) - await flushAll() + yield flushAll() yconfig1.disconnect() l1.delete(0, 3) - l2 = await y2.get('Array') - await wait() + l2 = yield y2.get('Array') + yield wait() yconfig1.reconnect() - await wait() - l3 = await y3.get('Array') - await flushAll() + yield wait() + l3 = yield y3.get('Array') + yield flushAll() expect(l1.toArray()).toEqual(l2.toArray()) expect(l2.toArray()).toEqual(l3.toArray()) expect(l2.toArray()).toEqual([]) done() - }) - it('throw insert & delete events', async function (done) { - var array = await this.users[0].root.set('array', Y.Array) + })) + it('throw insert & delete events', co.wrap(function * (done) { + var array = yield this.users[0].root.set('array', Y.Array) var event array.observe(function (e) { event = e @@ -179,30 +179,30 @@ describe('Array Type', function () { index: 0, length: 1 }]) - await wait(50) + yield wait(50) done() - }) - it('garbage collects', async function (done) { + })) + it('garbage collects', co.wrap(function * (done) { var l1, l2, l3 - l1 = await y1.set('Array', Y.Array) + l1 = yield y1.set('Array', Y.Array) l1.insert(0, ['x', 'y', 'z']) - await flushAll() + yield flushAll() yconfig1.disconnect() l1.delete(0, 3) - l2 = await y2.get('Array') - await wait() + l2 = yield y2.get('Array') + yield wait() yconfig1.reconnect() - await wait() - l3 = await y3.get('Array') - await flushAll() - await garbageCollectAllUsers(this.users) + yield wait() + l3 = yield y3.get('Array') + yield flushAll() + yield garbageCollectAllUsers(this.users) yconfig1.db.logTable() expect(l1.toArray()).toEqual(l2.toArray()) expect(l2.toArray()).toEqual(l3.toArray()) expect(l2.toArray()).toEqual([]) - await compareAllUsers(this.users) + yield compareAllUsers(this.users) done() - }) + })) }) describe(`Random tests`, function () { var randomArrayTransactions = [ @@ -227,29 +227,29 @@ describe('Array Type', function () { } } } - beforeEach(async function (done) { - await this.users[0].root.set('Array', Y.Array) - await flushAll() + beforeEach(co.wrap(function * (done) { + yield this.users[0].root.set('Array', Y.Array) + yield flushAll() var promises = [] for (var u = 0; u < this.users.length; u++) { promises.push(this.users[u].root.get('Array')) } - this.arrays = await Promise.all(promises) + this.arrays = yield Promise.all(promises) done() - }) - it('arrays.length equals users.length', async function (done) { // eslint-disable-line + })) + it('arrays.length equals users.length', co.wrap(function * (done) { // eslint-disable-line expect(this.arrays.length).toEqual(this.users.length) done() - }) - it(`succeed after ${numberOfYArrayTests} actions`, async function (done) { + })) + it(`succeed after ${numberOfYArrayTests} actions`, co.wrap(function * (done) { for (var u of this.users) { u.connector.debug = true } - await applyRandomTransactions(this.users, this.arrays, randomArrayTransactions, numberOfYArrayTests) - await flushAll() - await compareArrayValues(this.arrays) + yield applyRandomTransactions(this.users, this.arrays, randomArrayTransactions, numberOfYArrayTests) + yield flushAll() + yield compareArrayValues(this.arrays) done() - }) + })) }) }) diff --git a/src/Types/Map.spec.js b/src/Types/Map.spec.js index 4f448814..235780c0 100644 --- a/src/Types/Map.spec.js +++ b/src/Types/Map.spec.js @@ -1,4 +1,4 @@ -/* global createUsers, Y, compareAllUsers, getRandomNumber, applyRandomTransactions */ +/* global createUsers, Y, compareAllUsers, getRandomNumber, applyRandomTransactions, co */ /* eslint-env browser,jasmine */ var numberOfYMapTests = 100 @@ -7,127 +7,127 @@ describe('Map Type', function () { var y1, y2, y3, y4, flushAll jasmine.DEFAULT_TIMEOUT_INTERVAL = 50000 - beforeEach(async function (done) { - await createUsers(this, 5) + beforeEach(co.wrap(function * (done) { + yield createUsers(this, 5) y1 = this.users[0].root y2 = this.users[1].root y3 = this.users[2].root y4 = this.users[3].root flushAll = this.users[0].connector.flushAll done() - }) - afterEach(async function(done) { - await compareAllUsers(this.users) + })) + afterEach(co.wrap(function * (done) { + yield compareAllUsers(this.users) done() - }, 5000) + }), 5000) describe('Basic tests', function () { - it('Basic get&set of Map property (converge via sync)', async function (done) { + it('Basic get&set of Map property (converge via sync)', co.wrap(function * (done) { y1.set('stuff', 'stuffy') expect(y1.get('stuff')).toEqual('stuffy') - await flushAll() + yield flushAll() for (var key in this.users) { var u = this.users[key].root expect(u.get('stuff')).toEqual('stuffy') } - await compareAllUsers(this.users) + yield compareAllUsers(this.users) done() - }) - it('Map can set custom types (Map)', async function (done) { - var map = await y1.set('Map', Y.Map) + })) + it('Map can set custom types (Map)', co.wrap(function * (done) { + var map = yield y1.set('Map', Y.Map) map.set('one', 1) - map = await y1.get('Map') + map = yield y1.get('Map') expect(map.get('one')).toEqual(1) - await compareAllUsers(this.users) + yield compareAllUsers(this.users) done() - }) - it('Map can set custom types (Array)', async function (done) { - var array = await y1.set('Array', Y.Array) + })) + it('Map can set custom types (Array)', co.wrap(function * (done) { + var array = yield y1.set('Array', Y.Array) array.insert(0, [1, 2, 3]) - array = await y1.get('Array') + array = yield y1.get('Array') expect(array.toArray()).toEqual([1, 2, 3]) - await compareAllUsers(this.users) + yield compareAllUsers(this.users) done() - }) - it('Basic get&set of Map property (converge via update)', async function (done) { - await flushAll() + })) + it('Basic get&set of Map property (converge via update)', co.wrap(function * (done) { + yield flushAll() y1.set('stuff', 'stuffy') expect(y1.get('stuff')).toEqual('stuffy') - await flushAll() + yield flushAll() for (var key in this.users) { var r = this.users[key].root expect(r.get('stuff')).toEqual('stuffy') } done() - }) - it('Basic get&set of Map property (handle conflict)', async function (done) { - await flushAll() + })) + it('Basic get&set of Map property (handle conflict)', co.wrap(function * (done) { + yield flushAll() y1.set('stuff', 'c0') y2.set('stuff', 'c1') - await flushAll() + yield flushAll() for (var key in this.users) { var u = this.users[key] expect(u.root.get('stuff')).toEqual('c0') } - await compareAllUsers(this.users) + yield compareAllUsers(this.users) done() - }) - it('Basic get&set&delete of Map property (handle conflict)', async function (done) { - await flushAll() + })) + it('Basic get&set&delete of Map property (handle conflict)', co.wrap(function * (done) { + yield flushAll() y1.set('stuff', 'c0') y1.delete('stuff') y2.set('stuff', 'c1') - await flushAll() + yield flushAll() for (var key in this.users) { var u = this.users[key] expect(u.root.get('stuff')).toBeUndefined() } - await compareAllUsers(this.users) + yield compareAllUsers(this.users) done() - }) - it('Basic get&set of Map property (handle three conflicts)', async function (done) { - await flushAll() + })) + it('Basic get&set of Map property (handle three conflicts)', co.wrap(function * (done) { + yield flushAll() y1.set('stuff', 'c0') y2.set('stuff', 'c1') y2.set('stuff', 'c2') y3.set('stuff', 'c3') - await flushAll() + yield flushAll() for (var key in this.users) { var u = this.users[key] expect(u.root.get('stuff')).toEqual('c0') } - await compareAllUsers(this.users) + yield compareAllUsers(this.users) done() - }) - it('Basic get&set&delete of Map property (handle three conflicts)', async function (done) { - await flushAll() + })) + it('Basic get&set&delete of Map property (handle three conflicts)', co.wrap(function * (done) { + yield flushAll() y1.set('stuff', 'c0') y2.set('stuff', 'c1') y2.set('stuff', 'c2') y3.set('stuff', 'c3') - await flushAll() + yield flushAll() y1.set('stuff', 'deleteme') y1.delete('stuff') y2.set('stuff', 'c1') y3.set('stuff', 'c2') y4.set('stuff', 'c3') - await flushAll() + yield flushAll() for (var key in this.users) { var u = this.users[key] expect(u.root.get('stuff')).toBeUndefined() } - await compareAllUsers(this.users) + yield compareAllUsers(this.users) done() - }) - it('throws add & update & delete events (with type and primitive content)', async function (done) { + })) + it('throws add & update & delete events (with type and primitive content)', co.wrap(function * (done) { var event - await flushAll() + yield flushAll() y1.observe(function (e) { event = e // just put it on event, should be thrown synchronously anyway }) @@ -138,7 +138,7 @@ describe('Map Type', function () { name: 'stuff' }]) // update, oldValue is in contents - await y1.set('stuff', Y.Array) + yield y1.set('stuff', Y.Array) expect(event).toEqual([{ type: 'update', object: y1, @@ -164,7 +164,7 @@ describe('Map Type', function () { done() }) }) - }) + })) }) describe(`${numberOfYMapTests} Random tests`, function () { var randomMapTransactions = [ @@ -186,22 +186,22 @@ describe('Map Type', function () { } } } - beforeEach(async function (done) { - await y1.set('Map', Y.Map) - await flushAll() + beforeEach(co.wrap(function * (done) { + yield y1.set('Map', Y.Map) + yield flushAll() var promises = [] for (var u = 0; u < this.users.length; u++) { promises.push(this.users[u].root.get('Map')) } - this.maps = await Promise.all(promises) + this.maps = yield Promise.all(promises) done() - }) - it(`succeed after ${numberOfYMapTests} actions`, async function (done) { - await applyRandomTransactions(this.users, this.maps, randomMapTransactions, numberOfYMapTests) - await flushAll() - await compareMapValues(this.maps) + })) + it(`succeed after ${numberOfYMapTests} actions`, co.wrap(function * (done) { + yield applyRandomTransactions(this.users, this.maps, randomMapTransactions, numberOfYMapTests) + yield flushAll() + yield compareMapValues(this.maps) done() - }) + })) }) }) diff --git a/src/Types/TextBind.js b/src/Types/TextBind.js index 9498399c..ab13c67a 100644 --- a/src/Types/TextBind.js +++ b/src/Types/TextBind.js @@ -1,4 +1,6 @@ -/* global Y, CustomType */ +/* global Y */ + +var CustomType = Y.CustomType ;(function () { class YTextBind extends Y . Array . class { diff --git a/src/Utils.js b/src/Utils.js index 645597f7..1a0a0ced 100644 --- a/src/Utils.js +++ b/src/Utils.js @@ -1,5 +1,8 @@ -/* global copyObject, compareIds */ +/* global Y */ +'use strict' +var compareIds = Y.compareIds +var copyObject = Y.copyObject var GeneratorFunction = (function *() {}).constructor;// eslint-disable-line class EventHandler { // eslint-disable-line diff --git a/src/y.js b/src/y.js index 7e13f236..b5cefe7b 100644 --- a/src/y.js +++ b/src/y.js @@ -1,4 +1,5 @@ /* @flow */ +'use strict' function Y (opts) { var def = Promise.defer() @@ -35,10 +36,13 @@ class YConfig { // eslint-disable-line no-unused-vars disconnect () { this.connector.disconnect() } - async reconnect () { - await this.db.garbageCollect() - await this.db.garbageCollect() - this.connector.reconnect() + reconnect () { + Promise.all([ + this.db.garbageCollect(), + this.db.garbageCollect() + ]).then(function () { + this.connector.reconnect() + }) } destroy () { this.connector.disconnect() @@ -50,3 +54,5 @@ class YConfig { // eslint-disable-line no-unused-vars } } } + +if (g) g.Y = Y //eslint-disable-line diff --git a/test.js b/test.js new file mode 100644 index 00000000..b7529600 --- /dev/null +++ b/test.js @@ -0,0 +1,17 @@ +'use strict'; + +function * aaa (){} + +class X { + stuff () { + console.log("yay") + var r = function * () { + yield "dtrn" + } + var test = r() + console.dir(r()) + } +} + +(new X).stuff() +