diff options
author | Matt A. Tobin <mattatobin@localhost.localdomain> | 2018-02-02 04:16:08 -0500 |
---|---|---|
committer | Matt A. Tobin <mattatobin@localhost.localdomain> | 2018-02-02 04:16:08 -0500 |
commit | 5f8de423f190bbb79a62f804151bc24824fa32d8 (patch) | |
tree | 10027f336435511475e392454359edea8e25895d /addon-sdk/source/test/addons/places/lib/test-places-history.js | |
parent | 49ee0794b5d912db1f95dce6eb52d781dc210db5 (diff) | |
download | UXP-5f8de423f190bbb79a62f804151bc24824fa32d8.tar UXP-5f8de423f190bbb79a62f804151bc24824fa32d8.tar.gz UXP-5f8de423f190bbb79a62f804151bc24824fa32d8.tar.lz UXP-5f8de423f190bbb79a62f804151bc24824fa32d8.tar.xz UXP-5f8de423f190bbb79a62f804151bc24824fa32d8.zip |
Add m-esr52 at 52.6.0
Diffstat (limited to 'addon-sdk/source/test/addons/places/lib/test-places-history.js')
-rw-r--r-- | addon-sdk/source/test/addons/places/lib/test-places-history.js | 244 |
1 files changed, 244 insertions, 0 deletions
diff --git a/addon-sdk/source/test/addons/places/lib/test-places-history.js b/addon-sdk/source/test/addons/places/lib/test-places-history.js new file mode 100644 index 000000000..0a1e2b8cc --- /dev/null +++ b/addon-sdk/source/test/addons/places/lib/test-places-history.js @@ -0,0 +1,244 @@ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ +'use strict'; + +module.metadata = { + 'engines': { + 'Firefox': '*' + } +}; + +const { Cc, Ci } = require('chrome'); +const { defer, all } = require('sdk/core/promise'); +const { has } = require('sdk/util/array'); +const { setTimeout } = require('sdk/timers'); +const { before, after } = require('sdk/test/utils'); +const { set } = require('sdk/preferences/service'); +const { + search +} = require('sdk/places/history'); +const { + invalidResolve, createTree, + compareWithHost, addVisits, resetPlaces +} = require('./places-helper'); +const { promisedEmitter } = require('sdk/places/utils'); + +exports.testEmptyQuery = function*(assert) { + let within = toBeWithin(); + yield addVisits([ + 'http://simplequery-1.com', 'http://simplequery-2.com' + ]); + + let results = yield searchP(); + assert.equal(results.length, 2, 'Correct number of entries returned'); + assert.equal(results[0].url, 'http://simplequery-1.com/', + 'matches url'); + assert.equal(results[1].url, 'http://simplequery-2.com/', + 'matches url'); + assert.equal(results[0].title, 'Test visit for ' + results[0].url, + 'title matches'); + assert.equal(results[1].title, 'Test visit for ' + results[1].url, + 'title matches'); + assert.equal(results[0].visitCount, 1, 'matches access'); + assert.equal(results[1].visitCount, 1, 'matches access'); + assert.ok(within(results[0].time), 'accurate access time'); + assert.ok(within(results[1].time), 'accurate access time'); + assert.equal(Object.keys(results[0]).length, 4, + 'no addition exposed properties on history result'); +}; + +exports.testVisitCount = function*(assert) { + yield addVisits([ + 'http://simplequery-1.com', 'http://simplequery-1.com', + 'http://simplequery-1.com', 'http://simplequery-1.com' + ]); + let results = yield searchP(); + assert.equal(results.length, 1, 'Correct number of entries returned'); + assert.equal(results[0].url, 'http://simplequery-1.com/', 'correct url'); + assert.equal(results[0].visitCount, 4, 'matches access count'); +}; + +/* + * Tests 4 scenarios + * '*.mozilla.org' + * 'mozilla.org' + * 'http://mozilla.org/' + * 'http://mozilla.org/*' + */ +exports.testSearchURLForHistory = function*(assert) { + yield addVisits([ + 'http://developer.mozilla.org', 'http://mozilla.org', + 'http://mozilla.org/index', 'https://mozilla.org' + ]); + + let results = yield searchP({ url: 'http://mozilla.org/' }); + assert.equal(results.length, 1, 'should just be an exact match'); + + results = yield searchP({ url: '*.mozilla.org' }); + assert.equal(results.length, 4, 'returns all entries'); + + results = yield searchP({ url: 'mozilla.org' }); + assert.equal(results.length, 3, 'returns entries where mozilla.org is host'); + + results = yield searchP({ url: 'http://mozilla.org/*' }); + assert.equal(results.length, 2, 'should match anything starting with substring'); +}; + +// Disabling due to intermittent Bug 892619 +// TODO solve this +/* +exports.testSearchTimeRange = function (assert, done) { + let firstTime, secondTime; + addVisits([ + 'http://earlyvisit.org', 'http://earlyvisit.org/earlytown.html' + ]).then(searchP).then(results => { + firstTime = results[0].time; + var deferred = defer(); + setTimeout(() => deferred.resolve(), 1000); + return deferred.promise; + }).then(() => { + return addVisits(['http://newvisit.org', 'http://newvisit.org/whoawhoa.html']); + }).then(searchP).then(results => { + results.filter(({url, time}) => { + if (/newvisit/.test(url)) secondTime = time; + }); + return searchP({ from: firstTime - 1000 }); + }).then(results => { + assert.equal(results.length, 4, 'should return all entries'); + return searchP({ to: firstTime + 500 }); + }).then(results => { + assert.equal(results.length, 2, 'should return only first entries'); + results.map(item => { + assert.ok(/earlyvisit/.test(item.url), 'correct entry'); + }); + return searchP({ from: firstTime + 500 }); + }).then(results => { + assert.equal(results.length, 2, 'should return only last entries'); + results.map(item => { + assert.ok(/newvisit/.test(item.url), 'correct entry'); + }); + done(); + }); +}; +*/ +exports.testSearchQueryForHistory = function*(assert) { + yield addVisits([ + 'http://mozilla.com', 'http://webaud.io', 'http://mozilla.com/webfwd' + ]); + + let results = yield searchP({ query: 'moz' }); + assert.equal(results.length, 2, 'should return urls that match substring'); + results.map(({url}) => { + assert.ok(/moz/.test(url), 'correct item'); + }); + + results = yield searchP([{ query: 'webfwd' }, { query: 'aud.io' }]); + assert.equal(results.length, 2, 'should OR separate queries'); + results.map(({url}) => { + assert.ok(/webfwd|aud\.io/.test(url), 'correct item'); + }); +}; + +/* + * Query Options + */ + +exports.testSearchCount = function (assert, done) { + addVisits([ + 'http://mozilla.com', 'http://webaud.io', 'http://mozilla.com/webfwd', + 'http://developer.mozilla.com', 'http://bandcamp.com' + ]).then(testCount(1)) + .then(testCount(2)) + .then(testCount(3)) + .then(testCount(5)) + .then(done); + + function testCount (n) { + return function () { + return searchP({}, { count: n }).then(results => { + assert.equal(results.length, n, + 'count ' + n + ' returns ' + n + ' results'); + }); + }; + } +}; + +exports.testSearchSortForHistory = function*(assert) { + function checkOrder (results, nums) { + assert.equal(results.length, nums.length, 'expected return count'); + for (let i = 0; i < nums.length; i++) { + assert.equal(results[i].url, places[nums[i]], 'successful order'); + } + } + + let places = [ + 'http://mozilla.com/', 'http://webaud.io/', 'http://mozilla.com/webfwd/', + 'http://developer.mozilla.com/', 'http://bandcamp.com/' + ]; + yield addVisits(places); + + let results = yield searchP({}, { sort: 'title' }); + checkOrder(results, [4,3,0,2,1]); + + results = yield searchP({}, { sort: 'title', descending: true }); + checkOrder(results, [1,2,0,3,4]); + + results = yield searchP({}, { sort: 'url' }); + checkOrder(results, [4,3,0,2,1]); + + results = yield searchP({}, { sort: 'url', descending: true }); + checkOrder(results, [1,2,0,3,4]); + + yield addVisits('http://mozilla.com'); // for visit conut + yield addVisits('http://github.com'); // for checking date + + results = yield searchP({}, { sort: 'visitCount' }); + assert.equal(results[5].url, 'http://mozilla.com/', + 'last entry is the highest visit count'); + + results = yield searchP({}, { sort: 'visitCount', descending: true }); + assert.equal(results[0].url, 'http://mozilla.com/', + 'first entry is the highest visit count'); + + results = yield searchP({}, { sort: 'date' }); + assert.equal(results[5].url, 'http://github.com/', + 'latest visited should be first'); + + results = yield searchP({}, { sort: 'date', descending: true }); + assert.equal(results[0].url, 'http://github.com/', + 'latest visited should be at the end'); +}; + +exports.testEmitters = function (assert, done) { + let urls = [ + 'http://mozilla.com/', 'http://webaud.io/', 'http://mozilla.com/webfwd/', + 'http://developer.mozilla.com/', 'http://bandcamp.com/' + ]; + addVisits(urls).then(() => { + let count = 0; + search().on('data', item => { + assert.ok(~urls.indexOf(item.url), 'data value found in url list'); + count++; + }).on('end', results => { + assert.equal(results.length, 5, 'correct count of items'); + assert.equal(count, 5, 'data event called 5 times'); + done(); + }); + }); +}; + +function toBeWithin (range) { + range = range || 2000; + var current = new Date() * 1000; // convert to microseconds + return compared => { + return compared - current < range; + }; +} + +function searchP () { + return promisedEmitter(search.apply(null, Array.prototype.slice.call(arguments))); +} + +before(exports, (name, assert, done) => resetPlaces(done)); +after(exports, (name, assert, done) => resetPlaces(done)); |