Skip to content
This repository has been archived by the owner on Feb 26, 2022. It is now read-only.

Commit

Permalink
Merge pull request #1121 from jsantell/892408-fix-intermittent-bookma…
Browse files Browse the repository at this point in the history
…rks-resolution

fix bug 892408 fix intermittent bookmarks resolution errors, r=@Gozala
  • Loading branch information
jsantell committed Jul 24, 2013
2 parents 3bf8e3f + 5246c13 commit d9ceb04
Showing 1 changed file with 55 additions and 42 deletions.
97 changes: 55 additions & 42 deletions test/test-places-bookmarks.js
Original file line number Diff line number Diff line change
Expand Up @@ -523,27 +523,30 @@ exports.testResolution = function (assert, done) {
firstSave = item;
assert.ok(item.updated, 'bookmark has updated time');
item.title = 'my title';
save(item).on('data', (item) => {
secondSave = item;
assert.ok(firstSave.updated < secondSave.updated, 'snapshots have different update times');
firstSave.title = 'updated title';
save(firstSave, { resolve: (mine, theirs) => {
assert.equal(mine.title, 'updated title', 'correct data for my object');
assert.equal(theirs.title, 'my title', 'correct data for their object');
assert.equal(mine.url, theirs.url, 'other data is equal');
assert.equal(mine.group, theirs.group, 'other data is equal');
assert.ok(mine !== firstSave, 'instance is not passed in');
assert.ok(theirs !== secondSave, 'instance is not passed in');
assert.equal(mine.toString(), '[object Object]', 'serialized objects');
assert.equal(theirs.toString(), '[object Object]', 'serialized objects');
mine.title = 'a new title';
return mine;
}}).on('end', (results) => {
let result = results[0];
assert.equal(result.title, 'a new title', 'resolve handles results');
done();
});
});
// Ensure delay so a different save time is set
return delayed(item);
}).then(saveP)
.then(items => {
let item = items[0];
secondSave = item;
assert.ok(firstSave.updated < secondSave.updated, 'snapshots have different update times');
firstSave.title = 'updated title';
return saveP(firstSave, { resolve: (mine, theirs) => {
assert.equal(mine.title, 'updated title', 'correct data for my object');
assert.equal(theirs.title, 'my title', 'correct data for their object');
assert.equal(mine.url, theirs.url, 'other data is equal');
assert.equal(mine.group, theirs.group, 'other data is equal');
assert.ok(mine !== firstSave, 'instance is not passed in');
assert.ok(theirs !== secondSave, 'instance is not passed in');
assert.equal(mine.toString(), '[object Object]', 'serialized objects');
assert.equal(theirs.toString(), '[object Object]', 'serialized objects');
mine.title = 'a new title';
return mine;
}});
}).then((results) => {
let result = results[0];
assert.equal(result.title, 'a new title', 'resolve handles results');
done();
});
};

Expand All @@ -552,28 +555,31 @@ exports.testResolution = function (assert, done) {
*/
exports.testResolutionMapping = function (assert, done) {
let bookmark = Bookmark({ title: 'moz', url: 'http://bookmarks4life.com/' });
save(bookmark).on('end', (saved) => {
saved = saved[0];
let saved;
saveP(bookmark).then(data => {
saved = data[0];
saved.title = 'updated title';
save(saved).on('end', () => {
bookmark.title = 'conflicting title';
save(bookmark, { resolve: (mine, theirs) => {
assert.equal(mine.title, 'conflicting title', 'correct data for my object');
assert.equal(theirs.title, 'updated title', 'correct data for their object');
assert.equal(mine.url, theirs.url, 'other data is equal');
assert.equal(mine.group, theirs.group, 'other data is equal');
assert.ok(mine !== bookmark, 'instance is not passed in');
assert.ok(theirs !== saved, 'instance is not passed in');
assert.equal(mine.toString(), '[object Object]', 'serialized objects');
assert.equal(theirs.toString(), '[object Object]', 'serialized objects');
mine.title = 'a new title';
return mine;
}}).on('end', (results) => {
let result = results[0];
assert.equal(result.title, 'a new title', 'resolve handles results');
done();
});
});
// Ensure a delay for different updated times
return delayed(saved);
}).then(saveP)
.then(() => {
bookmark.title = 'conflicting title';
return saveP(bookmark, { resolve: (mine, theirs) => {
assert.equal(mine.title, 'conflicting title', 'correct data for my object');
assert.equal(theirs.title, 'updated title', 'correct data for their object');
assert.equal(mine.url, theirs.url, 'other data is equal');
assert.equal(mine.group, theirs.group, 'other data is equal');
assert.ok(mine !== bookmark, 'instance is not passed in');
assert.ok(theirs !== saved, 'instance is not passed in');
assert.equal(mine.toString(), '[object Object]', 'serialized objects');
assert.equal(theirs.toString(), '[object Object]', 'serialized objects');
mine.title = 'a new title';
return mine;
}});
}).then((results) => {
let result = results[0];
assert.equal(result.title, 'a new title', 'resolve handles results');
done();
});
};

Expand Down Expand Up @@ -951,4 +957,11 @@ function saveP () {
function searchP () {
return promisedEmitter(search.apply(null, Array.slice(arguments)));
}

function delayed (value, ms) {
let { promise, resolve } = defer();
setTimeout(() => resolve(value), ms || 10);
return promise;
}

require('test').run(exports);

0 comments on commit d9ceb04

Please sign in to comment.