| 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.
|
| +]);
|
|
|