Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(450)

Side by Side Diff: chrome/test/data/file_manager/unit_tests/metadata_cache_unittest.js

Issue 340843005: Files.app: Create unit tests for MetadataCache. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
(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 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698