Index: ui/file_manager/file_manager/foreground/js/metadata/new_metadata_provider_unittest.js |
diff --git a/ui/file_manager/file_manager/foreground/js/metadata/new_metadata_provider_unittest.js b/ui/file_manager/file_manager/foreground/js/metadata/new_metadata_provider_unittest.js |
new file mode 100644 |
index 0000000000000000000000000000000000000000..533be6097550109a147604fe79546c6afdaa135c |
--- /dev/null |
+++ b/ui/file_manager/file_manager/foreground/js/metadata/new_metadata_provider_unittest.js |
@@ -0,0 +1,115 @@ |
+// Copyright 2015 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. |
+ |
+function TestMetadataProvider(cache) { |
+ NewMetadataProvider.call(this, cache); |
+ this.requestCount = 0; |
+} |
+ |
+TestMetadataProvider.prototype.__proto__ = NewMetadataProvider.prototype; |
+ |
+TestMetadataProvider.prototype.getImpl = function(requests) { |
+ this.requestCount++; |
+ return Promise.resolve(requests.map(function(request) { |
+ var entry = request.entry; |
+ var names = request.names; |
+ var result = {}; |
+ for (var i = 0; i < names.length; i++) { |
+ result[names[i]] = entry.toURL() + ':' + names[i]; |
+ } |
+ return result; |
+ })); |
+}; |
+ |
+var entryA = { |
+ toURL: function() { return "filesystem://A"; } |
+}; |
+ |
+var entryB = { |
+ toURL: function() { return "filesystem://B"; } |
+}; |
+ |
+function testNewMetadataProviderBasic(callback) { |
+ var cache = new MetadataProviderCache(); |
+ var provider = new TestMetadataProvider(cache); |
+ reportPromise(provider.get([entryA, entryB], ['property']).then( |
+ function(results) { |
+ assertEquals(1, provider.requestCount); |
+ assertEquals('filesystem://A:property', results[0].property); |
+ assertEquals('filesystem://B:property', results[1].property); |
+ }), callback); |
+} |
+ |
+function testNewMetadataProviderRequestForCachedProperty(callback) { |
+ var cache = new MetadataProviderCache(); |
+ var provider = new TestMetadataProvider(cache); |
+ reportPromise(provider.get([entryA, entryB], ['property']).then( |
+ function() { |
+ // All the result should be cached here. |
+ return provider.get([entryA, entryB], ['property']); |
+ }).then(function(results) { |
+ assertEquals(1, provider.requestCount); |
+ assertEquals('filesystem://A:property', results[0].property); |
+ assertEquals('filesystem://B:property', results[1].property); |
+ }), callback); |
+} |
+ |
+function testNewMetadataProviderRequestForCachedAndNonCachedProperty(callback) { |
+ var cache = new MetadataProviderCache(); |
+ var provider = new TestMetadataProvider(cache); |
+ reportPromise(provider.get([entryA, entryB], ['propertyA']).then( |
+ function() { |
+ assertEquals(1, provider.requestCount); |
+ // propertyB has not been cached here. |
+ return provider.get([entryA, entryB], ['propertyA', 'propertyB']); |
+ }).then(function(results) { |
+ assertEquals(2, provider.requestCount); |
+ assertEquals('filesystem://A:propertyA', results[0].propertyA); |
+ assertEquals('filesystem://A:propertyB', results[0].propertyB); |
+ assertEquals('filesystem://B:propertyA', results[1].propertyA); |
+ assertEquals('filesystem://B:propertyB', results[1].propertyB); |
+ }), callback); |
+} |
+ |
+function testNewMetadataProviderRequestForCachedAndNonCachedEntry(callback) { |
+ var cache = new MetadataProviderCache(); |
+ var provider = new TestMetadataProvider(cache); |
+ reportPromise(provider.get([entryA], ['property']).then( |
+ function() { |
+ assertEquals(1, provider.requestCount); |
+ // entryB has not been cached here. |
+ return provider.get([entryA, entryB], ['property']); |
+ }).then(function(results) { |
+ assertEquals(2, provider.requestCount); |
+ assertEquals('filesystem://A:property', results[0].property); |
+ assertEquals('filesystem://B:property', results[1].property); |
+ }), callback); |
+} |
+ |
+function testNewMetadataProviderRequestBeforeCompletingPreviousRequest( |
+ callback) { |
+ var cache = new MetadataProviderCache(); |
+ var provider = new TestMetadataProvider(cache); |
+ provider.get([entryA], ['property']); |
+ assertEquals(1, provider.requestCount); |
+ // The result of first call has not been fetched yet. |
+ reportPromise(provider.get([entryA], ['property']).then( |
+ function(results) { |
+ assertEquals(1, provider.requestCount); |
+ assertEquals('filesystem://A:property', results[0].property); |
+ }), callback); |
+} |
+ |
+function testNewMetadataProviderGetCache(callback) { |
+ var cache = new MetadataProviderCache(); |
+ var provider = new TestMetadataProvider(cache); |
+ var promise = provider.get([entryA], ['property']); |
+ var cache = provider.getCache([entryA], ['property']); |
+ assertEquals(null, cache[0].property); |
+ reportPromise(promise.then(function() { |
+ var cache = provider.getCache([entryA], ['property']); |
+ assertEquals(1, provider.requestCount); |
+ assertEquals('filesystem://A:property', cache[0].property); |
+ }), callback); |
+} |