diff options
author | erikkay@chromium.org <erikkay@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-08-31 17:15:47 +0000 |
---|---|---|
committer | erikkay@chromium.org <erikkay@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-08-31 17:15:47 +0000 |
commit | 5c1cea3f04d6913960bc25b233d79410406bd3ee (patch) | |
tree | d4f20d40a5b41ac3b8288d10251fd2a3ccca0109 /chrome/renderer | |
parent | ba6e39cbfcbc4b91edf95a6d82216ee22d2ad3d5 (diff) | |
download | chromium_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')
-rw-r--r-- | chrome/renderer/extensions/extension_process_bindings.cc | 1 | ||||
-rw-r--r-- | chrome/renderer/extensions/js_only_v8_extensions.cc | 9 | ||||
-rw-r--r-- | chrome/renderer/extensions/js_only_v8_extensions.h | 6 | ||||
-rw-r--r-- | chrome/renderer/render_thread.cc | 4 | ||||
-rw-r--r-- | chrome/renderer/renderer_resources.grd | 3 | ||||
-rw-r--r-- | chrome/renderer/resources/extension_apitest.js | 120 |
6 files changed, 142 insertions, 1 deletions
diff --git a/chrome/renderer/extensions/extension_process_bindings.cc b/chrome/renderer/extensions/extension_process_bindings.cc index 0b019ae..8aaa2f2 100644 --- a/chrome/renderer/extensions/extension_process_bindings.cc +++ b/chrome/renderer/extensions/extension_process_bindings.cc @@ -46,6 +46,7 @@ const char* kExtensionDeps[] = { EventBindings::kName, JsonSchemaJsV8Extension::kName, RendererExtensionBindings::kName, + ExtensionApiTestV8Extension::kName, }; struct SingletonData { diff --git a/chrome/renderer/extensions/js_only_v8_extensions.cc b/chrome/renderer/extensions/js_only_v8_extensions.cc index 986e656..94b12be 100644 --- a/chrome/renderer/extensions/js_only_v8_extensions.cc +++ b/chrome/renderer/extensions/js_only_v8_extensions.cc @@ -27,3 +27,12 @@ v8::Extension* JsonSchemaJsV8Extension::Get() { kName, GetStringResource<IDR_JSON_SCHEMA_JS>(), 0, NULL); return extension; } + +// ExtensionApiTestV8Extension +const char* ExtensionApiTestV8Extension::kName = "chrome/extensionapitest"; +v8::Extension* ExtensionApiTestV8Extension::Get() { + static v8::Extension* extension = + new bindings_utils::ExtensionBase( + kName, GetStringResource<IDR_EXTENSION_APITEST_JS>(), 0, NULL); + return extension; +} diff --git a/chrome/renderer/extensions/js_only_v8_extensions.h b/chrome/renderer/extensions/js_only_v8_extensions.h index 58f9861..79b6c30 100644 --- a/chrome/renderer/extensions/js_only_v8_extensions.h +++ b/chrome/renderer/extensions/js_only_v8_extensions.h @@ -22,4 +22,10 @@ class JsonSchemaJsV8Extension { static v8::Extension* Get(); }; +class ExtensionApiTestV8Extension { + public: + static const char* kName; + static v8::Extension* Get(); +}; + #endif // CHROME_RENDERER_JS_ONLY_V8_EXTENSIONS_H_ diff --git a/chrome/renderer/render_thread.cc b/chrome/renderer/render_thread.cc index 56b4215..fd076ba 100644 --- a/chrome/renderer/render_thread.cc +++ b/chrome/renderer/render_thread.cc @@ -433,6 +433,10 @@ void RenderThread::EnsureWebKitInitialized() { WebKit::registerExtension(RendererExtensionBindings::Get(), EXTENSION_GROUP_CONTENT_SCRIPTS); WebKit::registerExtension(RendererExtensionBindings::Get(), kExtensionScheme); + WebKit::registerExtension(ExtensionApiTestV8Extension::Get(), + kExtensionScheme); + WebKit::registerExtension(ExtensionApiTestV8Extension::Get(), + EXTENSION_GROUP_CONTENT_SCRIPTS); const CommandLine& command_line = *CommandLine::ForCurrentProcess(); diff --git a/chrome/renderer/renderer_resources.grd b/chrome/renderer/renderer_resources.grd index eb128c7..98e2092 100644 --- a/chrome/renderer/renderer_resources.grd +++ b/chrome/renderer/renderer_resources.grd @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="UTF-8"?> <!-- This comment is only here because changes to resources are not picked up -without changes to the corresponding grd file. aa1 --> +without changes to the corresponding grd file. ek6 --> <grit latest_public_release="0" current_release="1"> <outputs> <output filename="grit/renderer_resources.h" type="rc_header"> @@ -20,6 +20,7 @@ without changes to the corresponding grd file. aa1 --> <include name="IDR_NET_ERROR_HTML" file="resources\neterror.html" type="BINDATA" /> <include name="IDR_RENDERER_EXTENSION_BINDINGS_JS" file="resources\renderer_extension_bindings.js" type="BINDATA" /> <include name="IDR_SAD_PLUGIN" file="resources\sadplugin.png" type="BINDATA" /> + <include name="IDR_EXTENSION_APITEST_JS" file="resources\extension_apitest.js" type="BINDATA" /> </includes> </release> </grit> 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(); + } +})(); |