Chromium Code Reviews| Index: chrome/test/data/file_manager/unit_tests/metadata_cache_unittest.js |
| diff --git a/chrome/test/data/file_manager/unit_tests/metadata_cache_unittest.js b/chrome/test/data/file_manager/unit_tests/metadata_cache_unittest.js |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..5ecd44e4ded31ddc67535a77f61037a9106119ae |
| --- /dev/null |
| +++ b/chrome/test/data/file_manager/unit_tests/metadata_cache_unittest.js |
| @@ -0,0 +1,118 @@ |
| +// Copyright 2013 The Chromium Authors. All rights reserved. |
| +// Use of this source code is governed by a BSD-style license that can be |
| +// found in the LICENSE file. |
| + |
| +var metadataCache; |
| +var provider; |
| + |
| +/** |
| + * Mock of MetadataProvider. |
| + * @constructor |
| + */ |
| +function MockProvider() { |
| + MetadataProvider.call(this); |
| + this.callbackPool = []; |
| + Object.freeze(this); |
| +} |
| + |
| +MockProvider.prototype = { |
| + __proto__: MetadataProvider.prototype |
| +}; |
| + |
| +MockProvider.prototype.supportsEntry = function(entry) { |
| + return true; |
| +}; |
| + |
| +MockProvider.prototype.providesType = function(type) { |
| + return type === 'stub'; |
| +}; |
| + |
| +MockProvider.prototype.getId = function() { |
| + return 'stub'; |
| +}; |
| + |
| +MockProvider.prototype.fetch = function(entry, type, callback) { |
| + this.callbackPool.push(callback); |
| +}; |
| + |
| +/** |
| + * 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.
|
| + */ |
| +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.
|
| + return new Promise(metadataCache.get.bind(metadataCache, entries, type)); |
| +}; |
| + |
| +/** |
| + * Invokes a callback function depending on the result of promise. |
| + * |
| + * @param {Promise} promise Promise. |
| + * @param {function(boolean)} calllback Callback function. True is passed if the |
| + * test failed. |
| + */ |
| +function reportPromise(promise, callback) { |
| + promise.then(function() { |
| + callback(/* error */ false); |
| + }, function(error) { |
| + console.error(error.stack || error); |
| + callback(/* error */ true); |
| + }); |
| +} |
| + |
| +/** |
| + * Constructs the metadata cache and its provider. |
| + */ |
| +function setUp() { |
| + provider = new MockProvider(); |
| + metadataCache = new MetadataCache([provider]); |
| +} |
| + |
| +/** |
| + * 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.
|
| + */ |
| +function testCached(callback) { |
| + var entry = new MockFileEntry('volumeId', '/banjo.txt'); |
| + |
| + var promises = []; |
| + var firstPromise = get([entry], 'stub'); |
| + var cachedBeforeFetchingPromise = get([entry], 'stub'); |
| + provider.callbackPool[0]({stub: {value: 'banjo'}}); |
| + var cachedAfterFethingPromise = get([entry], 'stub'); |
| + |
| + // Provide should be called only once. |
| + assertEquals(1, provider.callbackPool.length); |
| + |
| + reportPromise(Promise.all([ |
| + firstPromise, |
| + cachedBeforeFetchingPromise, |
| + cachedAfterFethingPromise |
| + ]).then(function(metadata) { |
| + assertDeepEquals([{value: 'banjo'}], metadata[0]); |
| + assertDeepEquals([{value: 'banjo'}], metadata[1]); |
| + assertDeepEquals([{value: 'banjo'}], metadata[1]); |
| + }), callback); |
| +} |
| + |
| +/** |
| + * 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.
|
| + */ |
| +function testNotCached(callback) { |
| + var entry1 = new MockFileEntry('volumeId', '/banjo.txt'); |
| + var entry2 = new MockFileEntry('volumeId', '/fiddle.txt'); |
| + |
| + var firstPromise = get([entry1], 'stub'); |
| + var anotherPromise = get([entry2], 'stub'); |
| + |
| + // Provide should be called for each entry. |
| + assertEquals(2, provider.callbackPool.length); |
| + |
| + provider.callbackPool[0]({stub: {value: 'banjo'}}); |
| + provider.callbackPool[1]({stub: {value: 'fiddle'}}); |
| + |
| + reportPromise(Promise.all([ |
| + firstPromise, |
| + anotherPromise |
| + ]).then(function(metadata) { |
| + assertDeepEquals([{value: 'banjo'}], metadata[0]); |
| + assertDeepEquals([{value: 'fiddle'}], metadata[1]); |
| + }), callback); |
| +} |