Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(5357)

Unified Diff: chrome/test/data/extensions/api_test/launcher_search_provider/set_search_results/test.js

Issue 1060733003: Support custom icon in search result. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: WIP: Add API test. Created 5 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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.
+]);

Powered by Google App Engine
This is Rietveld 408576698