diff options
author | erikkay@chromium.org <erikkay@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-09-08 15:49:52 +0000 |
---|---|---|
committer | erikkay@chromium.org <erikkay@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-09-08 15:49:52 +0000 |
commit | 173bf063a54257fcfa4cac7576d2822950d7af31 (patch) | |
tree | a3944c884bcdc1414d286332d90f75c5a66e1cac /chrome/renderer/resources | |
parent | c3eb7e8c5d61bff19ea58294aeeedb93e0988503 (diff) | |
download | chromium_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.js | 100 |
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(); |