| Index: chrome/renderer/resources/extensions/test_custom_bindings.js
|
| diff --git a/chrome/renderer/resources/extensions/apitest.js b/chrome/renderer/resources/extensions/test_custom_bindings.js
|
| similarity index 56%
|
| rename from chrome/renderer/resources/extensions/apitest.js
|
| rename to chrome/renderer/resources/extensions/test_custom_bindings.js
|
| index 52414c2b07fcb46ffc10d265337c597d1fa98119..300ba42766ea71e38b8c8ff065196f4734a09226 100644
|
| --- a/chrome/renderer/resources/extensions/apitest.js
|
| +++ b/chrome/renderer/resources/extensions/test_custom_bindings.js
|
| @@ -2,12 +2,20 @@
|
| // Use of this source code is governed by a BSD-style license that can be
|
| // found in the LICENSE file.
|
|
|
| -// extension_apitest.js
|
| +// test_custom_bindings.js
|
| // mini-framework for ExtensionApiTest browser tests
|
|
|
| - chrome.test = chrome.test || {};
|
| +var binding = require('binding').Binding.create('test');
|
|
|
| - chrome.test.tests = chrome.test.tests || [];
|
| +var chrome = requireNative('chrome').GetChrome();
|
| +var GetExtensionAPIDefinition =
|
| + requireNative('apiDefinitions').GetExtensionAPIDefinition;
|
| +
|
| +binding.registerCustomHook(function(api) {
|
| + var chromeTest = api.compiledApi;
|
| + var apiFunctions = api.apiFunctions;
|
| +
|
| + chromeTest.tests = chromeTest.tests || [];
|
|
|
| var currentTest = null;
|
| var lastTest = null;
|
| @@ -24,14 +32,14 @@
|
| function testDone() {
|
| // Use setTimeout here to allow previous test contexts to be
|
| // eligible for garbage collection.
|
| - setTimeout(chrome.test.runNextTest, 0);
|
| + setTimeout(chromeTest.runNextTest, 0);
|
| }
|
|
|
| function allTestsDone() {
|
| if (testsFailed == 0) {
|
| - chrome.test.notifyPass();
|
| + chromeTest.notifyPass();
|
| } else {
|
| - chrome.test.notifyFail('Failed ' + testsFailed + ' of ' +
|
| + chromeTest.notifyFail('Failed ' + testsFailed + ' of ' +
|
| testCount + ' tests');
|
| }
|
|
|
| @@ -42,28 +50,28 @@
|
|
|
| var pendingCallbacks = 0;
|
|
|
| - chrome.test.callbackAdded = function() {
|
| + apiFunctions.setHandleRequest('callbackAdded', function() {
|
| pendingCallbacks++;
|
|
|
| var called = false;
|
| return function() {
|
| - chrome.test.assertFalse(called, 'callback has already been run');
|
| + chromeTest.assertFalse(called, 'callback has already been run');
|
| called = true;
|
|
|
| pendingCallbacks--;
|
| if (pendingCallbacks == 0) {
|
| - chrome.test.succeed();
|
| + chromeTest.succeed();
|
| }
|
| };
|
| - };
|
| + });
|
|
|
| - chrome.test.runNextTest = function() {
|
| + apiFunctions.setHandleRequest('runNextTest', function() {
|
| // There may have been callbacks which were interrupted by failure
|
| // exceptions.
|
| pendingCallbacks = 0;
|
|
|
| lastTest = currentTest;
|
| - currentTest = chrome.test.tests.shift();
|
| + currentTest = chromeTest.tests.shift();
|
|
|
| if (!currentTest) {
|
| allTestsDone();
|
| @@ -71,19 +79,19 @@
|
| }
|
|
|
| try {
|
| - chrome.test.log("( RUN ) " + testName(currentTest));
|
| + chromeTest.log("( RUN ) " + testName(currentTest));
|
| currentTest.call();
|
| } catch (e) {
|
| if (e !== failureException)
|
| - chrome.test.fail('uncaught exception: ' + e);
|
| + chromeTest.fail('uncaught exception: ' + e);
|
| }
|
| - };
|
| + });
|
|
|
| - chrome.test.fail = function(message) {
|
| - chrome.test.log("( FAILED ) " + testName(currentTest));
|
| + apiFunctions.setHandleRequest('fail', function(message) {
|
| + chromeTest.log("( FAILED ) " + testName(currentTest));
|
|
|
| var stack = {};
|
| - Error.captureStackTrace(stack, chrome.test.fail);
|
| + Error.captureStackTrace(stack, chromeTest.fail);
|
|
|
| if (!message)
|
| message = "FAIL (no message)";
|
| @@ -95,23 +103,24 @@
|
|
|
| // Interrupt the rest of the test.
|
| throw failureException;
|
| - };
|
| + });
|
|
|
| - chrome.test.succeed = function() {
|
| + apiFunctions.setHandleRequest('succeed', function() {
|
| console.log("[SUCCESS] " + testName(currentTest));
|
| - chrome.test.log("( SUCCESS )");
|
| + chromeTest.log("( SUCCESS )");
|
| testDone();
|
| - };
|
| + });
|
|
|
| - chrome.test.assertTrue = function(test, message) {
|
| - chrome.test.assertBool(test, true, message);
|
| - };
|
| + apiFunctions.setHandleRequest('assertTrue', function(test, message) {
|
| + chromeTest.assertBool(test, true, message);
|
| + });
|
|
|
| - chrome.test.assertFalse = function(test, message) {
|
| - chrome.test.assertBool(test, false, message);
|
| - };
|
| + apiFunctions.setHandleRequest('assertFalse', function(test, message) {
|
| + chromeTest.assertBool(test, false, message);
|
| + });
|
|
|
| - chrome.test.assertBool = function(test, expected, message) {
|
| + apiFunctions.setHandleRequest('assertBool',
|
| + function(test, expected, message) {
|
| if (test !== expected) {
|
| if (typeof(test) == "string") {
|
| if (message)
|
| @@ -119,11 +128,11 @@
|
| else
|
| message = test;
|
| }
|
| - chrome.test.fail(message);
|
| + chromeTest.fail(message);
|
| }
|
| - };
|
| + });
|
|
|
| - chrome.test.checkDeepEq = function (expected, actual) {
|
| + apiFunctions.setHandleRequest('checkDeepEq', function(expected, actual) {
|
| if ((expected === null) != (actual === null))
|
| return false;
|
|
|
| @@ -146,7 +155,7 @@
|
| var eq = true;
|
| switch (typeof(expected[p])) {
|
| case 'object':
|
| - eq = chrome.test.checkDeepEq(expected[p], actual[p]);
|
| + eq = chromeTest.checkDeepEq(expected[p], actual[p]);
|
| break;
|
| case 'function':
|
| eq = (typeof(actual[p]) != 'undefined' &&
|
| @@ -161,44 +170,45 @@
|
| return false;
|
| }
|
| return true;
|
| - };
|
| + });
|
|
|
| - chrome.test.assertEq = function(expected, actual, message) {
|
| + apiFunctions.setHandleRequest('assertEq',
|
| + function(expected, actual, message) {
|
| var error_msg = "API Test Error in " + testName(currentTest);
|
| if (message)
|
| error_msg += ": " + message;
|
| if (typeof(expected) == 'object') {
|
| - if (!chrome.test.checkDeepEq(expected, actual)) {
|
| - chrome.test.fail(error_msg +
|
| + if (!chromeTest.checkDeepEq(expected, actual)) {
|
| + chromeTest.fail(error_msg +
|
| "\nActual: " + JSON.stringify(actual) +
|
| "\nExpected: " + JSON.stringify(expected));
|
| }
|
| return;
|
| }
|
| if (expected != actual) {
|
| - chrome.test.fail(error_msg +
|
| + chromeTest.fail(error_msg +
|
| "\nActual: " + actual + "\nExpected: " + expected);
|
| }
|
| if (typeof(expected) != typeof(actual)) {
|
| - chrome.test.fail(error_msg +
|
| + chromeTest.fail(error_msg +
|
| " (type mismatch)\nActual Type: " + typeof(actual) +
|
| "\nExpected Type:" + typeof(expected));
|
| }
|
| - };
|
| + });
|
|
|
| - chrome.test.assertNoLastError = function() {
|
| + apiFunctions.setHandleRequest('assertNoLastError', function() {
|
| if (chrome.runtime.lastError != undefined) {
|
| - chrome.test.fail("lastError.message == " +
|
| + chromeTest.fail("lastError.message == " +
|
| chrome.runtime.lastError.message);
|
| }
|
| - };
|
| + });
|
|
|
| - chrome.test.assertLastError = function(expectedError) {
|
| - chrome.test.assertEq(typeof(expectedError), 'string');
|
| - chrome.test.assertTrue(chrome.runtime.lastError != undefined,
|
| + apiFunctions.setHandleRequest('assertLastError', function(expectedError) {
|
| + chromeTest.assertEq(typeof(expectedError), 'string');
|
| + chromeTest.assertTrue(chrome.runtime.lastError != undefined,
|
| "No lastError, but expected " + expectedError);
|
| - chrome.test.assertEq(expectedError, chrome.runtime.lastError.message);
|
| - }
|
| + chromeTest.assertEq(expectedError, chrome.runtime.lastError.message);
|
| + });
|
|
|
| function safeFunctionApply(func, args) {
|
| try {
|
| @@ -206,23 +216,23 @@
|
| func.apply(null, args);
|
| } catch (e) {
|
| var msg = "uncaught exception " + e;
|
| - chrome.test.fail(msg);
|
| + chromeTest.fail(msg);
|
| }
|
| };
|
|
|
| // Wrapper for generating test functions, that takes care of calling
|
| // assertNoLastError() and (optionally) succeed() for you.
|
| - chrome.test.callback = function(func, expectedError) {
|
| + apiFunctions.setHandleRequest('callback', function(func, expectedError) {
|
| if (func) {
|
| - chrome.test.assertEq(typeof(func), 'function');
|
| + chromeTest.assertEq(typeof(func), 'function');
|
| }
|
| - var callbackCompleted = chrome.test.callbackAdded();
|
| + var callbackCompleted = chromeTest.callbackAdded();
|
|
|
| return function() {
|
| if (expectedError == null) {
|
| - chrome.test.assertNoLastError();
|
| + chromeTest.assertNoLastError();
|
| } else {
|
| - chrome.test.assertLastError(expectedError);
|
| + chromeTest.assertLastError(expectedError);
|
| }
|
|
|
| if (func) {
|
| @@ -231,20 +241,20 @@
|
|
|
| callbackCompleted();
|
| };
|
| - };
|
| + });
|
|
|
| - chrome.test.listenOnce = function(event, func) {
|
| - var callbackCompleted = chrome.test.callbackAdded();
|
| + apiFunctions.setHandleRequest('listenOnce', function(event, func) {
|
| + var callbackCompleted = chromeTest.callbackAdded();
|
| var listener = function() {
|
| event.removeListener(listener);
|
| safeFunctionApply(func, arguments);
|
| callbackCompleted();
|
| };
|
| event.addListener(listener);
|
| - };
|
| + });
|
|
|
| - chrome.test.listenForever = function(event, func) {
|
| - var callbackCompleted = chrome.test.callbackAdded();
|
| + apiFunctions.setHandleRequest('listenForever', function(event, func) {
|
| + var callbackCompleted = chromeTest.callbackAdded();
|
|
|
| var listener = function() {
|
| safeFunctionApply(func, arguments);
|
| @@ -257,18 +267,25 @@
|
|
|
| event.addListener(listener);
|
| return done;
|
| - };
|
| + });
|
|
|
| - chrome.test.callbackPass = function(func) {
|
| - return chrome.test.callback(func);
|
| - };
|
| + apiFunctions.setHandleRequest('callbackPass', function(func) {
|
| + return chromeTest.callback(func);
|
| + });
|
|
|
| - chrome.test.callbackFail = function(expectedError, func) {
|
| - return chrome.test.callback(func, expectedError);
|
| - };
|
| + apiFunctions.setHandleRequest('callbackFail', function(expectedError, func) {
|
| + return chromeTest.callback(func, expectedError);
|
| + });
|
|
|
| - chrome.test.runTests = function(tests) {
|
| - chrome.test.tests = tests;
|
| - testCount = chrome.test.tests.length;
|
| - chrome.test.runNextTest();
|
| - };
|
| + apiFunctions.setHandleRequest('runTests', function(tests) {
|
| + chromeTest.tests = tests;
|
| + testCount = chromeTest.tests.length;
|
| + chromeTest.runNextTest();
|
| + });
|
| +
|
| + apiFunctions.setHandleRequest('getApiDefinitions', function(apiNames) {
|
| + return GetExtensionAPIDefinition();
|
| + });
|
| +});
|
| +
|
| +exports.binding = binding.generate();
|
|
|