123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249 |
- /* 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, invalidReject, createTree,
- compareWithHost, addVisits, resetPlaces
- } = require('../places-helper');
- const { promisedEmitter } = require('sdk/places/utils');
- exports.testEmptyQuery = function (assert, done) {
- let within = toBeWithin();
- addVisits([
- 'http://simplequery-1.com', 'http://simplequery-2.com'
- ]).then(searchP).then(results => {
- 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');
- done();
- }, invalidReject);
- };
- exports.testVisitCount = function (assert, done) {
- addVisits([
- 'http://simplequery-1.com', 'http://simplequery-1.com',
- 'http://simplequery-1.com', 'http://simplequery-1.com'
- ]).then(searchP).then(results => {
- 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');
- done();
- }, invalidReject);
- };
- /*
- * Tests 4 scenarios
- * '*.mozilla.org'
- * 'mozilla.org'
- * 'http://mozilla.org/'
- * 'http://mozilla.org/*'
- */
- exports.testSearchURL = function (assert, done) {
- addVisits([
- 'http://developer.mozilla.org', 'http://mozilla.org',
- 'http://mozilla.org/index', 'https://mozilla.org'
- ]).then(() => searchP({ url: '*.mozilla.org' }))
- .then(results => {
- assert.equal(results.length, 4, 'returns all entries');
- return searchP({ url: 'mozilla.org' });
- }).then(results => {
- assert.equal(results.length, 3, 'returns entries where mozilla.org is host');
- return searchP({ url: 'http://mozilla.org/' });
- }).then(results => {
- assert.equal(results.length, 1, 'should just be an exact match');
- return searchP({ url: 'http://mozilla.org/*' });
- }).then(results => {
- assert.equal(results.length, 2, 'should match anything starting with substring');
- done();
- });
- };
- // 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(function () 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.testSearchQuery = function (assert, done) {
- addVisits([
- 'http://mozilla.com', 'http://webaud.io', 'http://mozilla.com/webfwd'
- ]).then(() => {
- return searchP({ query: 'moz' });
- }).then(results => {
- assert.equal(results.length, 2, 'should return urls that match substring');
- results.map(({url}) => {
- assert.ok(/moz/.test(url), 'correct item');
- });
- return searchP([{ query: 'webfwd' }, { query: 'aud.io' }]);
- }).then(results => {
- assert.equal(results.length, 2, 'should OR separate queries');
- results.map(({url}) => {
- assert.ok(/webfwd|aud\.io/.test(url), 'correct item');
- });
- done();
- });
- };
- /*
- * 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.testSearchSort = function (assert, done) {
- let places = [
- 'http://mozilla.com/', 'http://webaud.io/', 'http://mozilla.com/webfwd/',
- 'http://developer.mozilla.com/', 'http://bandcamp.com/'
- ];
- addVisits(places).then(() => {
- return searchP({}, { sort: 'title' });
- }).then(results => {
- checkOrder(results, [4,3,0,2,1]);
- return searchP({}, { sort: 'title', descending: true });
- }).then(results => {
- checkOrder(results, [1,2,0,3,4]);
- return searchP({}, { sort: 'url' });
- }).then(results => {
- checkOrder(results, [4,3,0,2,1]);
- return searchP({}, { sort: 'url', descending: true });
- }).then(results => {
- checkOrder(results, [1,2,0,3,4]);
- return addVisits('http://mozilla.com') // for visit conut
- .then(() => addVisits('http://github.com')); // for checking date
- }).then(() => {
- return searchP({}, { sort: 'visitCount' });
- }).then(results => {
- assert.equal(results[5].url, 'http://mozilla.com/',
- 'last entry is the highest visit count');
- return searchP({}, { sort: 'visitCount', descending: true });
- }).then(results => {
- assert.equal(results[0].url, 'http://mozilla.com/',
- 'first entry is the highest visit count');
- return searchP({}, { sort: 'date' });
- }).then(results => {
- assert.equal(results[5].url, 'http://github.com/',
- 'latest visited should be first');
- return searchP({}, { sort: 'date', descending: true });
- }).then(results => {
- assert.equal(results[0].url, 'http://github.com/',
- 'latest visited should be at the end');
- }).then(done);
- 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');
- }
- }
- };
- 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.slice(arguments)));
- }
- before(exports, (name, assert, done) => resetPlaces(done));
- after(exports, (name, assert, done) => resetPlaces(done));
|