summaryrefslogtreecommitdiffstats
path: root/chrome/renderer/resources
diff options
context:
space:
mode:
authorerikkay@chromium.org <erikkay@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2009-09-08 15:49:52 +0000
committererikkay@chromium.org <erikkay@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2009-09-08 15:49:52 +0000
commit173bf063a54257fcfa4cac7576d2822950d7af31 (patch)
treea3944c884bcdc1414d286332d90f75c5a66e1cac /chrome/renderer/resources
parentc3eb7e8c5d61bff19ea58294aeeedb93e0988503 (diff)
downloadchromium_src-173bf063a54257fcfa4cac7576d2822950d7af31.zip
chromium_src-173bf063a54257fcfa4cac7576d2822950d7af31.tar.gz
chromium_src-173bf063a54257fcfa4cac7576d2822950d7af31.tar.bz2
finished testing functions and added events to bookmark tests.
added infrastructure to better support events and cleaned up callback testing. Review URL: http://codereview.chromium.org/192028 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@25623 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/renderer/resources')
-rw-r--r--chrome/renderer/resources/extension_apitest.js100
1 files changed, 77 insertions, 23 deletions
diff --git a/chrome/renderer/resources/extension_apitest.js b/chrome/renderer/resources/extension_apitest.js
index 13150fb..9e4ed5e 100644
--- a/chrome/renderer/resources/extension_apitest.js
+++ b/chrome/renderer/resources/extension_apitest.js
@@ -8,7 +8,8 @@ var chrome = chrome || {};
chrome.test.tests = chrome.test.tests || [];
var completed = false;
- var currentTest;
+ var currentTest = null;
+ var lastTest = null;
function complete() {
completed = true;
@@ -48,7 +49,28 @@ var chrome = chrome || {};
complete();
}
+ var pendingCallbacks = 0;
+ var totalCallbacks = 0;
+
+ function callbackAdded() {
+ pendingCallbacks++;
+ chrome.test.assertEq(totalCallbacks, 0);
+ };
+
+ function callbackCompleted() {
+ if (!totalCallbacks)
+ totalCallbacks = pendingCallbacks;
+ pendingCallbacks--;
+ if (pendingCallbacks == 0) {
+ //chrome.test.log(" " + totalCallbacks + " callbacks ran");
+ totalCallbacks = 0;
+ chrome.test.succeed();
+ }
+ };
+
chrome.test.runNextTest = function() {
+ chrome.test.assertEq(pendingCallbacks, 0);
+ lastTest = currentTest;
currentTest = chrome.test.tests.shift();
if (!currentTest) {
allTestsSucceeded();
@@ -104,36 +126,68 @@ var chrome = chrome || {};
chrome.extension.lastError.message);
}
};
+
+ function safeFunctionApply(func, arguments) {
+ try {
+ if (func) {
+ func.apply(null, arguments);
+ }
+ } catch (e) {
+ var stack = null;
+ if (typeof(e.stack) != "undefined") {
+ stack = e.stack.toString();
+ }
+ var msg = "Exception during execution of callback in " +
+ currentTest.name;
+ if (stack) {
+ msg += "\n" + stack;
+ } else {
+ msg += "\n(no stack available)";
+ }
+ chrome.test.fail(msg);
+ }
+ };
// Wrapper for generating test functions, that takes care of calling
// assertNoLastError() and (optionally) succeed() for you.
- chrome.test.testCallback = function(succeedWhenDone, func) {
+ chrome.test.callback = function(func, expectedError) {
+ chrome.test.assertEq(typeof(func), 'function');
+ callbackAdded();
return function() {
- chrome.test.assertNoLastError();
- try {
- if (func) {
- func.apply(null, arguments);
- }
- } catch (e) {
- var stack = null;
- if (typeof(e.stack) != "undefined") {
- stack = e.stack.toString();
- }
- var msg = "Exception during execution of testCallback in " +
- currentTest.name;
- if (stack) {
- msg += "\n" + stack;
- } else {
- msg += "\n(no stack available)";
- }
- chrome.test.fail(msg);
- }
- if (succeedWhenDone) {
- chrome.test.succeed();
+ if (expectedError == null) {
+ chrome.test.assertNoLastError();
+ } else {
+ chrome.test.assertEq(typeof(expectedError), 'string');
+ chrome.test.assertEq(expectedError, chrome.extension.lastError.message);
}
+ safeFunctionApply(func, arguments);
+ callbackCompleted();
+ };
+ };
+
+ chrome.test.listenOnce = function(event, func) {
+ callbackAdded();
+ var listener = function() {
+ event.removeListener(listener);
+ safeFunctionApply(func, arguments);
+ callbackCompleted();
};
+ event.addListener(listener);
+ };
+
+ chrome.test.callbackPass = function(func) {
+ return chrome.test.callback(func);
+ };
+
+ chrome.test.callbackFail = function(func, expectedError) {
+ return chrome.test.callback(func, expectedError);
};
+ // TODO(erikkay) This is deprecated and should be removed.
+ chrome.test.testCallback = function(succeedWhenDone, func) {
+ return chrome.test.callback(func);
+ };
+
chrome.test.runTests = function(tests) {
chrome.test.tests = tests;
chrome.test.runNextTest();