Index: ui/file_manager/file_manager/foreground/js/list_thumbnail_loader_unittest.js |
diff --git a/ui/file_manager/file_manager/foreground/js/list_thumbnail_loader_unittest.js b/ui/file_manager/file_manager/foreground/js/list_thumbnail_loader_unittest.js |
index e02aead228fb12fedc62add64444d7fbe2154c63..49afbe2472fbc4a2abbcfc068158aebe0de3844f 100644 |
--- a/ui/file_manager/file_manager/foreground/js/list_thumbnail_loader_unittest.js |
+++ b/ui/file_manager/file_manager/foreground/js/list_thumbnail_loader_unittest.js |
@@ -42,7 +42,7 @@ function generateSampleImageDataUrl(document) { |
} |
var listThumbnailLoader; |
-var getOneCallbacks; |
+var getLatestCallbacks; |
var thumbnailLoadedEvents; |
var fileListModel; |
var fileSystem = new MockFileSystem('volume-id'); |
@@ -63,10 +63,10 @@ function setUp() { |
MockThumbnailLoader.testImageWidth = 160; |
MockThumbnailLoader.testImageHeight = 160; |
- getOneCallbacks = {}; |
+ getLatestCallbacks = {}; |
var metadataCache = { |
- getOne: function(entry, type, callback) { |
- getOneCallbacks[entry.toURL()] = callback; |
+ getLatest: function(entries, type, callback) { |
+ getLatestCallbacks[getKeyOfGetLatestCallback_(entries)] = callback; |
} |
}; |
@@ -81,10 +81,21 @@ function setUp() { |
}); |
} |
-function resolveGetOneCallback(url) { |
- assert(getOneCallbacks[url]); |
- getOneCallbacks[url](); |
- delete getOneCallbacks[url]; |
+function getKeyOfGetLatestCallback_(entries) { |
+ return entries.reduce(function(previous, current) { |
+ return previous + '|' + current.toURL(); |
+ }, ''); |
+} |
+ |
+function resolveGetLatestCallback(entries) { |
+ var key = getKeyOfGetLatestCallback_(entries); |
+ assert(getLatestCallbacks[key]); |
+ getLatestCallbacks[key](entries.map(function() { return {}; })); |
+ delete getLatestCallbacks[key]; |
+} |
+ |
+function hasPendingGetLatestCallback(entries) { |
+ return !!getLatestCallbacks[getKeyOfGetLatestCallback_(entries)]; |
} |
function areEntriesInCache(entries) { |
@@ -105,8 +116,9 @@ function testStory(callback) { |
listThumbnailLoader.setHighPriorityRange(0, 2); |
// Assert that 2 fetch tasks are running. |
- assertArrayEquals([entry1.toURL(), entry2.toURL()], |
- Object.keys(getOneCallbacks)); |
+ assertTrue(hasPendingGetLatestCallback([entry1])); |
+ assertTrue(hasPendingGetLatestCallback([entry2])); |
+ assertEquals(2, Object.keys(getLatestCallbacks).length); |
// Fails to get thumbnail from cache for Test2.jpg. |
assertEquals(null, listThumbnailLoader.getThumbnailFromCache(entry2)); |
@@ -115,10 +127,11 @@ function testStory(callback) { |
listThumbnailLoader.setHighPriorityRange(4, 6); |
// Assert that no new tasks are enqueued. |
- assertArrayEquals([entry1.toURL(), entry2.toURL()], |
- Object.keys(getOneCallbacks)); |
+ assertTrue(hasPendingGetLatestCallback([entry1])); |
+ assertTrue(hasPendingGetLatestCallback([entry2])); |
+ assertEquals(2, Object.keys(getLatestCallbacks).length); |
- resolveGetOneCallback(entry2.toURL()); |
+ resolveGetLatestCallback([entry2]); |
reportPromise(waitUntil(function() { |
// Assert that thumbnailLoaded event is fired for Test2.jpg. |
@@ -140,21 +153,21 @@ function testStory(callback) { |
// Assert that new task is enqueued. |
return waitUntil(function() { |
- return !!getOneCallbacks[entry1.toURL()] && |
- !!getOneCallbacks[entry4.toURL()] && |
- Object.keys(getOneCallbacks).length === 2; |
+ return hasPendingGetLatestCallback([entry1]) && |
+ hasPendingGetLatestCallback([entry4]) && |
+ Object.keys(getLatestCallbacks).length === 2; |
}); |
}).then(function() { |
// Set high priority range to 2 - 4. |
listThumbnailLoader.setHighPriorityRange(2, 4); |
- resolveGetOneCallback(entry1.toURL()); |
+ resolveGetLatestCallback([entry1]); |
// Assert that task for (Test3.jpg) is enqueued. |
return waitUntil(function() { |
- return !!getOneCallbacks[entry3.toURL()] && |
- !!getOneCallbacks[entry4.toURL()] && |
- Object.keys(getOneCallbacks).length === 2; |
+ return hasPendingGetLatestCallback([entry3]) && |
+ hasPendingGetLatestCallback([entry4]) && |
+ Object.keys(getLatestCallbacks).length === 2; |
}); |
}), callback); |
} |
@@ -169,9 +182,8 @@ function testRangeIsAtTheEndOfList() { |
fileListModel.push(directory1, entry1, entry2, entry3, entry4, entry5); |
// Assert that a task is enqueued for entry5. |
- assertEquals(1, Object.keys(getOneCallbacks).length); |
- assertEquals('filesystem:volume-id/Test5.jpg', |
- Object.keys(getOneCallbacks)[0]); |
+ assertTrue(hasPendingGetLatestCallback([entry5])); |
+ assertEquals(1, Object.keys(getLatestCallbacks).length); |
} |
function testCache(callback) { |
@@ -181,19 +193,19 @@ function testCache(callback) { |
listThumbnailLoader.setHighPriorityRange(0, 2); |
fileListModel.push(entry1, entry2, entry3, entry4, entry5, entry6); |
- resolveGetOneCallback(entry1.toURL()); |
+ resolveGetLatestCallback([entry1]); |
// In this test case, entry 3 is resolved earlier than entry 2. |
- resolveGetOneCallback(entry3.toURL()); |
- resolveGetOneCallback(entry2.toURL()); |
- assertEquals(0, Object.keys(getOneCallbacks).length); |
+ resolveGetLatestCallback([entry3]); |
+ resolveGetLatestCallback([entry2]); |
+ assertEquals(0, Object.keys(getLatestCallbacks).length); |
reportPromise(waitUntil(function() { |
return areEntriesInCache([entry3, entry2, entry1]); |
}).then(function() { |
// Move high priority range to 1 - 3. |
listThumbnailLoader.setHighPriorityRange(1, 3); |
- resolveGetOneCallback(entry4.toURL()); |
- assertEquals(0, Object.keys(getOneCallbacks).length); |
+ resolveGetLatestCallback([entry4]); |
+ assertEquals(0, Object.keys(getLatestCallbacks).length); |
return waitUntil(function() { |
return areEntriesInCache([entry4, entry3, entry2, entry1]); |
@@ -201,9 +213,9 @@ function testCache(callback) { |
}).then(function() { |
// Move high priority range to 4 - 6. |
listThumbnailLoader.setHighPriorityRange(4, 6); |
- resolveGetOneCallback(entry5.toURL()); |
- resolveGetOneCallback(entry6.toURL()); |
- assertEquals(0, Object.keys(getOneCallbacks).length); |
+ resolveGetLatestCallback([entry5]); |
+ resolveGetLatestCallback([entry6]); |
+ assertEquals(0, Object.keys(getLatestCallbacks).length); |
return waitUntil(function() { |
return areEntriesInCache([entry6, entry5, entry4, entry3, entry2]); |
@@ -211,13 +223,13 @@ function testCache(callback) { |
}).then(function() { |
// Move high priority range to 3 - 5. |
listThumbnailLoader.setHighPriorityRange(3, 5); |
- assertEquals(0, Object.keys(getOneCallbacks).length); |
+ assertEquals(0, Object.keys(getLatestCallbacks).length); |
assertTrue(areEntriesInCache([entry6, entry5, entry4, entry3, entry2])); |
// Move high priority range to 0 - 2. |
listThumbnailLoader.setHighPriorityRange(0, 2); |
- resolveGetOneCallback(entry1.toURL()); |
- assertEquals(0, Object.keys(getOneCallbacks).length); |
+ resolveGetLatestCallback([entry1]); |
+ assertEquals(0, Object.keys(getLatestCallbacks).length); |
return waitUntil(function() { |
return areEntriesInCache([entry3, entry2, entry1, entry6, entry5]); |
@@ -235,11 +247,11 @@ function testErrorHandling(callback) { |
listThumbnailLoader.setHighPriorityRange(0, 2); |
fileListModel.push(entry1, entry2, entry3, entry4); |
- resolveGetOneCallback(entry2.toURL()); |
+ resolveGetLatestCallback([entry2]); |
// Assert that new task is enqueued for entry3. |
reportPromise(waitUntil(function() { |
- return !!getOneCallbacks[entry3.toURL()]; |
+ return hasPendingGetLatestCallback([entry3]); |
}), callback); |
} |
@@ -250,9 +262,9 @@ function testSortedEvent(callback) { |
listThumbnailLoader.setHighPriorityRange(0, 2); |
fileListModel.push(directory1, entry1, entry2, entry3, entry4, entry5); |
- resolveGetOneCallback(entry1.toURL()); |
- resolveGetOneCallback(entry2.toURL()); |
- assertEquals(0, Object.keys(getOneCallbacks).length); |
+ resolveGetLatestCallback([entry1]); |
+ resolveGetLatestCallback([entry2]); |
+ assertEquals(0, Object.keys(getLatestCallbacks).length); |
// In order to assert that following task enqueues are fired by sorted event, |
// wait until all thumbnail loads are completed. |
@@ -264,8 +276,8 @@ function testSortedEvent(callback) { |
fileListModel.sort('name', 'desc'); |
return waitUntil(function() { |
- return !!getOneCallbacks[entry5.toURL()] && |
- !!getOneCallbacks[entry4.toURL()] |
+ return hasPendingGetLatestCallback([entry5]) && |
+ hasPendingGetLatestCallback([entry4]) |
}); |
}), callback); |
} |