addon-sdk/source/test/addons/places/tests/test-places-utils.js

branch
TOR_BUG_9701
changeset 10
ac0c01689b40
equal deleted inserted replaced
-1:000000000000 0:1a6a0805628a
1 /* This Source Code Form is subject to the terms of the Mozilla Public
2 * License, v. 2.0. If a copy of the MPL was not distributed with this
3 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
4 'use strict';
5
6 module.metadata = {
7 'engines': {
8 'Firefox': '*'
9 }
10 };
11
12 const { defer, all } = require('sdk/core/promise');
13 const { setTimeout } = require('sdk/timers');
14 const { TreeNode } = require('sdk/places/utils');
15
16 exports['test construct tree'] = function (assert) {
17 let tree = TreeNode(1);
18 tree.add([2, 3, 4]);
19 tree.get(2).add([2.1, 2.2, 2.3]);
20 let newTreeNode = TreeNode(4.3);
21 newTreeNode.add([4.31, 4.32]);
22 tree.get(4).add([4.1, 4.2, newTreeNode]);
23
24 assert.equal(tree.get(2).value, 2, 'get returns node with correct value');
25 assert.equal(tree.get(2.3).value, 2.3, 'get returns node with correct value');
26 assert.equal(tree.get(4.32).value, 4.32, 'get returns node even if created from nested node');
27 assert.equal(tree.get(4).children.length, 3, 'nodes have correct children length');
28 assert.equal(tree.get(3).children.length, 0, 'nodes have correct children length');
29
30 assert.equal(tree.get(4).get(4.32).value, 4.32, 'node.get descends from itself');
31 assert.equal(tree.get(4).get(2), null, 'node.get descends from itself fails if not descendant');
32 };
33
34 exports['test walk'] = function (assert, done) {
35 let resultsAll = [];
36 let resultsNode = [];
37 let tree = TreeNode(1);
38 tree.add([2, 3, 4]);
39 tree.get(2).add([2.1, 2.2]);
40
41 tree.walk(function (node) {
42 resultsAll.push(node.value);
43 }).then(() => {
44 [1, 2, 2.1, 2.2, 3, 4].forEach(num => {
45 assert.ok(~resultsAll.indexOf(num), 'function applied to each node from root');
46 });
47 return tree.get(2).walk(node => resultsNode.push(node.value));
48 }).then(() => {
49 [2, 2.1, 2.2].forEach(function (num) {
50 assert.ok(~resultsNode.indexOf(num), 'function applied to each node from node');
51 });
52 }).catch(assert.fail).then(done);
53 };
54
55 exports['test async walk'] = function (assert, done) {
56 let resultsAll = [];
57 let tree = TreeNode(1);
58 tree.add([2, 3, 4]);
59 tree.get(2).add([2.1, 2.2]);
60
61 tree.walk(function (node) {
62 let deferred = defer();
63 setTimeout(function () {
64 resultsAll.push(node.value);
65 deferred.resolve(node.value);
66 }, node.value === 2 ? 50 : 5);
67 return deferred.promise;
68 }).then(function () {
69 [1, 2, 2.1, 2.2, 3, 4].forEach(function (num) {
70 assert.ok(~resultsAll.indexOf(num), 'function applied to each node from root');
71 });
72 assert.ok(resultsAll.indexOf(2) < resultsAll.indexOf(2.1),
73 'child should wait for parent to complete');
74 assert.ok(resultsAll.indexOf(2) < resultsAll.indexOf(2.2),
75 'child should wait for parent to complete');
76 done();
77 });
78 };

mercurial