Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(31)

Unified Diff: chrome/test/base/javascript_browsertest.cc

Issue 320753002: Support javascript gtests in an extension background page. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: WS Created 6 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/test/base/javascript_browsertest.cc
diff --git a/chrome/test/base/javascript_browsertest.cc b/chrome/test/base/javascript_browsertest.cc
new file mode 100644
index 0000000000000000000000000000000000000000..a53d5f2897eca6f94bf12b87ea2838db385c4c0e
--- /dev/null
+++ b/chrome/test/base/javascript_browsertest.cc
@@ -0,0 +1,116 @@
+// Copyright 2014 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "chrome/test/base/javascript_browsertest.h"
+
+#include "base/path_service.h"
+#include "base/strings/utf_string_conversions.h"
+#include "chrome/common/chrome_paths.h"
+#include "content/public/browser/web_ui.h"
+#include "ui/base/resource/resource_bundle.h"
+
+// static
+const base::FilePath::CharType
Peter Lundblad 2014/06/08 23:27:22 Shouldn't we keep this in the webui tests? We sho
David Tseng 2014/06/10 05:35:22 Requires changing the generator / test api. Puntin
+ JavaScriptBrowserTest::kA11yAuditLibraryJSPath[] =
+ FILE_PATH_LITERAL("third_party/accessibility-audit/axs_testing.js");
+
+// static
+const base::FilePath::CharType JavaScriptBrowserTest::kMockJSPath[] =
+ FILE_PATH_LITERAL("chrome/third_party/mock4js/mock4js.js");
+
+// static
+const base::FilePath::CharType JavaScriptBrowserTest::kWebUILibraryJS[] =
+ FILE_PATH_LITERAL("test_api.js");
+
+// static
+const base::FilePath::CharType JavaScriptBrowserTest::kWebUITestFolder[] =
+ FILE_PATH_LITERAL("webui");
+
+void JavaScriptBrowserTest::AddLibrary(const base::FilePath& library_path) {
+ user_libraries_.push_back(library_path);
+}
+
+void JavaScriptBrowserTest::SetUpOnMainThread() {
+ base::FilePath test_data_directory;
+ ASSERT_TRUE(PathService::Get(chrome::DIR_TEST_DATA, &test_data_directory));
+ test_data_directory = test_data_directory.Append(kWebUITestFolder);
+ library_search_paths_.push_back(test_data_directory);
+
+ base::FilePath gen_test_data_directory;
+ ASSERT_TRUE(
+ PathService::Get(chrome::DIR_GEN_TEST_DATA, &gen_test_data_directory));
+ library_search_paths_.push_back(gen_test_data_directory);
+
+ base::FilePath source_root_directory;
+ ASSERT_TRUE(PathService::Get(base::DIR_SOURCE_ROOT, &source_root_directory));
+ library_search_paths_.push_back(source_root_directory);
+
+ base::FilePath resources_pack_path;
+ PathService::Get(chrome::FILE_RESOURCES_PACK, &resources_pack_path);
+ ResourceBundle::GetSharedInstance().AddDataPackFromPath(
+ resources_pack_path, ui::SCALE_FACTOR_NONE);
+
+ AddLibrary(base::FilePath(kA11yAuditLibraryJSPath));
+ AddLibrary(base::FilePath(kMockJSPath));
+ AddLibrary(base::FilePath(kWebUILibraryJS));
+}
+
+void JavaScriptBrowserTest::BuildJavascriptLibraries(
+ std::vector<base::string16>* libraries) {
+ ASSERT_TRUE(libraries != NULL);
+ std::vector<base::FilePath>::iterator user_libraries_iterator;
+ for (user_libraries_iterator = user_libraries_.begin();
+ user_libraries_iterator != user_libraries_.end();
+ ++user_libraries_iterator) {
+ std::string library_content;
+ if (user_libraries_iterator->IsAbsolute()) {
+ ASSERT_TRUE(
+ base::ReadFileToString(*user_libraries_iterator, &library_content))
+ << user_libraries_iterator->value();
+ } else {
+ bool ok = false;
+ std::vector<base::FilePath>::iterator library_search_path_iterator;
+ for (library_search_path_iterator = library_search_paths_.begin();
+ library_search_path_iterator != library_search_paths_.end();
+ ++library_search_path_iterator) {
+ ok = base::ReadFileToString(
+ base::MakeAbsoluteFilePath(
+ library_search_path_iterator->Append(*user_libraries_iterator)),
+ &library_content);
+ if (ok)
+ break;
+ }
+ ASSERT_TRUE(ok) << "User library not found: "
+ << user_libraries_iterator->value();
+ }
+ library_content.append(";\n");
+
+ // This magic code puts filenames in stack traces.
+ library_content.append("//# sourceURL=");
+ library_content.append(user_libraries_iterator->BaseName().AsUTF8Unsafe());
+ library_content.append("\n");
+ libraries->push_back(base::UTF8ToUTF16(library_content));
+ }
+}
+
+base::string16 JavaScriptBrowserTest::BuildRunTestJSCall(
+ bool is_async,
+ const std::string& function_name,
+ const ConstValueVector& test_func_args) {
+ ConstValueVector arguments;
+ base::FundamentalValue* is_async_arg = new base::FundamentalValue(is_async);
+ arguments.push_back(is_async_arg);
+ base::StringValue* function_name_arg = new base::StringValue(function_name);
+ arguments.push_back(function_name_arg);
+ base::ListValue* baked_argument_list = new base::ListValue();
+ ConstValueVector::const_iterator arguments_iterator;
+ for (arguments_iterator = test_func_args.begin();
+ arguments_iterator != test_func_args.end();
+ ++arguments_iterator) {
+ baked_argument_list->Append((*arguments_iterator)->DeepCopy());
+ }
+ arguments.push_back(baked_argument_list);
+ return content::WebUI::GetJavascriptCall(std::string("runTest"),
+ arguments.get());
+}

Powered by Google App Engine
This is Rietveld 408576698