OLD | NEW |
---|---|
(Empty) | |
1 // Copyright 2013 The Chromium Authors. All rights reserved. | |
2 // Use of this source code is governed by a BSD-style license that can be | |
3 // found in the LICENSE file. | |
4 | |
5 var metadataCache; | |
6 var provider; | |
7 | |
8 /** | |
9 * Mock of MetadataProvider. | |
10 * @constructor | |
11 */ | |
12 function MockProvider() { | |
13 MetadataProvider.call(this); | |
14 this.callbackPool = []; | |
15 Object.freeze(this); | |
16 } | |
17 | |
18 MockProvider.prototype = { | |
19 __proto__: MetadataProvider.prototype | |
20 }; | |
21 | |
22 MockProvider.prototype.supportsEntry = function(entry) { | |
23 return true; | |
24 }; | |
25 | |
26 MockProvider.prototype.providesType = function(type) { | |
27 return type === 'stub'; | |
28 }; | |
29 | |
30 MockProvider.prototype.getId = function() { | |
31 return 'stub'; | |
32 }; | |
33 | |
34 MockProvider.prototype.fetch = function(entry, type, callback) { | |
35 this.callbackPool.push(callback); | |
36 }; | |
37 | |
38 /** | |
39 * Short hand for the metadataCache.get. | |
yoshiki
2014/06/20 05:02:47
nit: missing @param's
hirono
2014/06/20 10:01:05
Done.
| |
40 */ | |
41 function get(entries, type) { | |
yoshiki
2014/06/20 05:02:47
I think 'get' is too short. 'getMetadata' is more
hirono
2014/06/20 10:01:06
Done.
| |
42 return new Promise(metadataCache.get.bind(metadataCache, entries, type)); | |
43 }; | |
44 | |
45 /** | |
46 * Invokes a callback function depending on the result of promise. | |
47 * | |
48 * @param {Promise} promise Promise. | |
49 * @param {function(boolean)} calllback Callback function. True is passed if the | |
50 * test failed. | |
51 */ | |
52 function reportPromise(promise, callback) { | |
53 promise.then(function() { | |
54 callback(/* error */ false); | |
55 }, function(error) { | |
56 console.error(error.stack || error); | |
57 callback(/* error */ true); | |
58 }); | |
59 } | |
60 | |
61 /** | |
62 * Constructs the metadata cache and its provider. | |
63 */ | |
64 function setUp() { | |
65 provider = new MockProvider(); | |
66 metadataCache = new MetadataCache([provider]); | |
67 } | |
68 | |
69 /** | |
70 * Confirms metadata is cached for the same entry. | |
yoshiki
2014/06/20 05:02:47
nit: missing @param
hirono
2014/06/20 10:01:06
Done.
| |
71 */ | |
72 function testCached(callback) { | |
73 var entry = new MockFileEntry('volumeId', '/banjo.txt'); | |
74 | |
75 var promises = []; | |
76 var firstPromise = get([entry], 'stub'); | |
77 var cachedBeforeFetchingPromise = get([entry], 'stub'); | |
78 provider.callbackPool[0]({stub: {value: 'banjo'}}); | |
79 var cachedAfterFethingPromise = get([entry], 'stub'); | |
80 | |
81 // Provide should be called only once. | |
82 assertEquals(1, provider.callbackPool.length); | |
83 | |
84 reportPromise(Promise.all([ | |
85 firstPromise, | |
86 cachedBeforeFetchingPromise, | |
87 cachedAfterFethingPromise | |
88 ]).then(function(metadata) { | |
89 assertDeepEquals([{value: 'banjo'}], metadata[0]); | |
90 assertDeepEquals([{value: 'banjo'}], metadata[1]); | |
91 assertDeepEquals([{value: 'banjo'}], metadata[1]); | |
92 }), callback); | |
93 } | |
94 | |
95 /** | |
96 * Confirms metadata is not cached for different entries. | |
yoshiki
2014/06/20 05:02:47
nit: missing @param
hirono
2014/06/20 10:01:05
Done.
| |
97 */ | |
98 function testNotCached(callback) { | |
99 var entry1 = new MockFileEntry('volumeId', '/banjo.txt'); | |
100 var entry2 = new MockFileEntry('volumeId', '/fiddle.txt'); | |
101 | |
102 var firstPromise = get([entry1], 'stub'); | |
103 var anotherPromise = get([entry2], 'stub'); | |
104 | |
105 // Provide should be called for each entry. | |
106 assertEquals(2, provider.callbackPool.length); | |
107 | |
108 provider.callbackPool[0]({stub: {value: 'banjo'}}); | |
109 provider.callbackPool[1]({stub: {value: 'fiddle'}}); | |
110 | |
111 reportPromise(Promise.all([ | |
112 firstPromise, | |
113 anotherPromise | |
114 ]).then(function(metadata) { | |
115 assertDeepEquals([{value: 'banjo'}], metadata[0]); | |
116 assertDeepEquals([{value: 'fiddle'}], metadata[1]); | |
117 }), callback); | |
118 } | |
OLD | NEW |