Chromium Code Reviews| 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 |