Index: chrome/test/data/extensions/api_test/launcher_search_provider/set_search_results/test.js |
diff --git a/chrome/test/data/extensions/api_test/launcher_search_provider/set_search_results/test.js b/chrome/test/data/extensions/api_test/launcher_search_provider/set_search_results/test.js |
new file mode 100644 |
index 0000000000000000000000000000000000000000..07dc7efe933917949ff0b096e87ac4f235e338f3 |
--- /dev/null |
+++ b/chrome/test/data/extensions/api_test/launcher_search_provider/set_search_results/test.js |
@@ -0,0 +1,123 @@ |
+// 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. |
+ |
+'use strict'; |
+ |
+/** |
+ * Tests whether |url| image is same with |canvas| or not. |
+ * @param {HTMLCanvasElement} canvas |
+ * @param {string} url |
+ */ |
+function testImageUrlIsSameAs(canvas, url) { |
+ return new Promise(function(resolve, reject) { |
+ var image = new Image(); |
+ image.onload = function() { |
+ // Draw new image to targetCanvas. |
+ var targetCanvas = document.createElement('canvas'); |
+ targetCanvas.width = canvas.width; |
+ targetCanvas.height = canvas.height; |
+ var targetContext = targetCanvas.getContext('2d'); |
+ targetContext.drawImage(image, 0, 0); |
+ |
+ // Compare two image data. |
+ var originalContext = canvas.getContext('2d'); |
+ var originalImageData = originalContext.getImageData( |
+ 0, 0, canvas.width, canvas.height); |
+ var targetImageData = targetContext.getImageData( |
+ 0, 0, canvas.width, canvas.height); |
+ |
+ for (var i = 0; i < originalImageData.data.length; i++) { |
+ if (originalImageData.data[i] !== targetImageData.data[i]) { |
+ resolve(false); |
+ return; |
+ } |
+ } |
+ resolve(true); |
+ }; |
+ image.src = url; |
+ }); |
+} |
+ |
+/** |
+ * Tests icon of |resultItem| is rendered correctly as |canvas|. |
+ * @param {HTMLCanvasElement} canvas |
+ * @param {Object} resultItem |
+ * @param {function(boolean)} callback |
+ */ |
+function testResultIcon(canvas, resultItem, callback) { |
+ var onMessage = function(info) { |
+ var data = JSON.parse(info.data); |
+ if (data.functionName === 'ExtensionBadgedIconImage::Update') { |
+ testImageUrlIsSameAs(canvas, data.dataURL).then(function(result) { |
+ if (result) { |
+ chrome.test.onMessage.removeListener(onMessage); |
+ callback(); |
+ } |
+ }); |
+ } |
+ }; |
+ var onQueryStarted = function(queryId, query, limit) { |
+ chrome.launcherSearchProvider.setSearchResults(queryId, [resultItem]); |
+ chrome.launcherSearchProvider.onQueryStarted.removeListener(onQueryStarted); |
+ }; |
+ |
+ chrome.test.onMessage.addListener(onMessage); |
+ chrome.launcherSearchProvider.onQueryStarted.addListener(onQueryStarted); |
+ |
+ // Dispatches sample query to obtain query id. |
+ chrome.test.sendMessage('dispatchOnQueryStarted'); |
+} |
+ |
+/** |
+ * Runs next test case. |
+ * @param {Array<Function>} testFunctions |
+ */ |
+function runNextTest(testFunctions) { |
+ if (testFunctions.length === 0) { |
+ chrome.test.sendMessage('testSuccess'); |
+ return; |
+ } |
+ |
+ var testFunction = testFunctions.shift(); |
+ var callback = runNextTest.bind(null, testFunctions); |
+ testFunction(callback); |
+} |
+ |
+runNextTest([ |
+ function(callback) { |
+ // Generate correct image. |
+ var canvas = document.createElement('canvas'); |
+ canvas.width = 24; |
+ canvas.height = 24; |
+ var context = canvas.getContext('2d'); |
+ context.fillStyle = '#0000ff'; |
+ context.fillRect(0, 0, 24, 24); |
+ |
+ testResultIcon(canvas, { |
+ itemId: 'foo', |
+ title: 'Test item', |
+ relevance: 2, |
+ }, callback); |
+ }, |
+ function(callback) { |
+ // Generate correct image. |
+ var canvas = document.createElement('canvas'); |
+ canvas.width = 24; |
+ canvas.height = 24; |
+ var context = canvas.getContext('2d'); |
+ context.fillStyle = '#000000'; |
+ context.fillRect(0, 0, 24, 24); |
+ context.fillStyle = '#0000ff'; |
+ context.fillRect(8, 8, 16, 16); |
+ |
+ testResultIcon(canvas, { |
+ itemId: 'foo', |
+ title: 'Test item', |
+ relevance: 2, |
+ iconUrl: chrome.runtime.getURL('/custom_icon.png') |
+ }, callback); |
+ } |
+ // TODO(yawano): Add more test cases (failure test cases). Do this in the next |
+ // patch set. |
+]); |