summaryrefslogtreecommitdiffstats
path: root/chrome/renderer/resources/extension_apitest.js
diff options
context:
space:
mode:
authorerikkay@chromium.org <erikkay@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2009-08-31 17:15:47 +0000
committererikkay@chromium.org <erikkay@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2009-08-31 17:15:47 +0000
commit5c1cea3f04d6913960bc25b233d79410406bd3ee (patch)
treed4f20d40a5b41ac3b8288d10251fd2a3ccca0109 /chrome/renderer/resources/extension_apitest.js
parentba6e39cbfcbc4b91edf95a6d82216ee22d2ad3d5 (diff)
downloadchromium_src-5c1cea3f04d6913960bc25b233d79410406bd3ee.zip
chromium_src-5c1cea3f04d6913960bc25b233d79410406bd3ee.tar.gz
chromium_src-5c1cea3f04d6913960bc25b233d79410406bd3ee.tar.bz2
share extension API test framework
BUG=18442 TEST=ExtensionApiTest.* Review URL: http://codereview.chromium.org/173622 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@24892 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/renderer/resources/extension_apitest.js')
-rw-r--r--chrome/renderer/resources/extension_apitest.js120
1 files changed, 120 insertions, 0 deletions
diff --git a/chrome/renderer/resources/extension_apitest.js b/chrome/renderer/resources/extension_apitest.js
new file mode 100644
index 0000000..41ef1ef
--- /dev/null
+++ b/chrome/renderer/resources/extension_apitest.js
@@ -0,0 +1,120 @@
+// extension_apitest.js
+// mini-framework for ExtensionApiTest browser tests
+
+var chrome = chrome || {};
+(function() {
+ chrome.test = chrome.test || {};
+
+ chrome.test.tests = chrome.test.tests || [];
+
+ var completed = false;
+ var currentTest;
+
+ function complete() {
+ completed = true;
+
+ // Try to get the script to stop running immediately.
+ // This isn't an error, just an attempt at saying "done".
+ throw "completed";
+ }
+
+ chrome.test.fail = function(message) {
+ if (completed) throw "completed";
+
+ var stack;
+ try {
+ crash.me += 0; // An intentional exception to get the stack trace.
+ } catch (e) {
+ stack = e.stack.split("\n");
+ stack = stack.slice(2); // Remove title and fail() lines.
+ stack = stack.join("\n");
+ }
+
+ if (!message) {
+ message = "FAIL (no message)";
+ }
+ message += "\n" + stack;
+ console.log("[FAIL] " + currentTest.name + ": " + message);
+ chrome.test.notifyFail(message);
+ complete();
+ }
+
+ function allTestsSucceeded() {
+ console.log("All tests succeeded");
+ if (completed) throw "completed";
+
+ chrome.test.notifyPass();
+ complete();
+ }
+
+ chrome.test.runNextTest = function() {
+ currentTest = chrome.test.tests.shift();
+ if (!currentTest) {
+ allTestsSucceeded();
+ return;
+ }
+ try {
+ currentTest.call();
+ } catch (e) {
+ message = e.stack;
+ console.log("[FAIL] " + currentTest.name + ": " + message);
+ chrome.test.notifyFail(message);
+ complete();
+ }
+ }
+
+ chrome.test.succeed = function() {
+ console.log("[SUCCESS] " + currentTest.name);
+ chrome.test.runNextTest();
+ }
+
+ chrome.test.assertTrue = function(test, message) {
+ if (test !== true) {
+ if (typeof(test) == "string") {
+ if (message) {
+ message = test + "\n" + message;
+ } else {
+ message = test;
+ }
+ }
+ chrome.test.fail(message);
+ }
+ }
+
+ chrome.test.assertNoLastError = function() {
+ if (chrome.extension.lastError != undefined) {
+ chrome.test.fail("lastError.message == " +
+ chrome.extension.lastError.message);
+ }
+ }
+
+ // Wrapper for generating test functions, that takes care of calling
+ // assertNoLastError() and succeed() for you.
+ chrome.test.testFunction = function(func) {
+ return function() {
+ chrome.test.assertNoLastError();
+ try {
+ func.apply(null, arguments);
+ } catch (e) {
+ var stack = null;
+ if (typeof(e.stack) != "undefined") {
+ stack = e.stack.toString()
+ }
+ var msg = "Exception during execution of testFunction in " +
+ currentTest.name;
+ if (stack) {
+ msg += "\n" + stack;
+ } else {
+ msg += "\n(no stack available)";
+ }
+ chrome.test.fail(msg);
+ }
+ chrome.test.succeed();
+ };
+ }
+
+ chrome.test.runTests = function(tests) {
+ chrome.test.tests = tests;
+ chrome.test.runNextTest();
+ }
+})();