diff options
author | skerner@chromium.org <skerner@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-03-03 14:25:39 +0000 |
---|---|---|
committer | skerner@chromium.org <skerner@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-03-03 14:25:39 +0000 |
commit | aaadcd81066a3430b33702288cd56a39986b4326 (patch) | |
tree | 08f2f9e011880015dd47c669f4311f17faa55391 | |
parent | 83e29c010812422515660e4a0b77f1738f238aec (diff) | |
download | chromium_src-aaadcd81066a3430b33702288cd56a39986b4326.zip chromium_src-aaadcd81066a3430b33702288cd56a39986b4326.tar.gz chromium_src-aaadcd81066a3430b33702288cd56a39986b4326.tar.bz2 |
Add unit test that uses V8's JSON.parse() to read extension_api.json .
BUG=18717
TEST=ExtensionApiJsonValidityTest.WithV8
Review URL: http://codereview.chromium.org/661406
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@40516 0039d316-1c4b-4281-b951-d872f2087c98
-rw-r--r-- | chrome/chrome_tests.gypi | 2 | ||||
-rw-r--r-- | chrome/renderer/extensions/extension_api_json_validity_unittest.cc (renamed from chrome/common/extensions/api/extension_api_json_validity_unittest.cc) | 28 | ||||
-rw-r--r-- | chrome/test/v8_unit_test.cc | 7 | ||||
-rw-r--r-- | chrome/test/v8_unit_test.h | 4 |
4 files changed, 37 insertions, 4 deletions
diff --git a/chrome/chrome_tests.gypi b/chrome/chrome_tests.gypi index 533d779..e33fa37 100644 --- a/chrome/chrome_tests.gypi +++ b/chrome/chrome_tests.gypi @@ -866,7 +866,6 @@ 'common/bzip2_unittest.cc', 'common/child_process_logging_mac_unittest.mm', 'common/common_param_traits_unittest.cc', - 'common/extensions/api/extension_api_json_validity_unittest.cc', 'common/extensions/extension_action_unittest.cc', 'common/extensions/extension_file_util_unittest.cc', 'common/extensions/extension_l10n_util_unittest.cc', @@ -893,6 +892,7 @@ 'renderer/audio_message_filter_unittest.cc', 'renderer/form_manager_unittest.cc', 'renderer/media/audio_renderer_impl_unittest.cc', + 'renderer/extensions/extension_api_json_validity_unittest.cc', 'renderer/extensions/extension_api_client_unittest.cc', 'renderer/extensions/json_schema_unittest.cc', 'renderer/net/render_dns_master_unittest.cc', diff --git a/chrome/common/extensions/api/extension_api_json_validity_unittest.cc b/chrome/renderer/extensions/extension_api_json_validity_unittest.cc index 6746cc7..7a54d77 100644 --- a/chrome/common/extensions/api/extension_api_json_validity_unittest.cc +++ b/chrome/renderer/extensions/extension_api_json_validity_unittest.cc @@ -8,6 +8,9 @@ #include "base/scoped_ptr.h" #include "chrome/common/json_value_serializer.h" #include "chrome/common/chrome_paths.h" +#include "chrome/renderer/extensions/bindings_utils.h" +#include "chrome/test/v8_unit_test.h" +#include "grit/common_resources.h" #include "testing/gtest/include/gtest/gtest.h" namespace { @@ -64,10 +67,15 @@ bool FindDictionaryWithProperyValue(ListValue* list, } -class ExtensionApiJsonValidityTest : public testing::Test { +class ExtensionApiJsonValidityTest : public V8UnitTest { }; -TEST(ExtensionApiJsonValidityTest, Basic) { +// Read extension_api.json with JSONFileValueSerializer. This test checks +// that the file is valid without using V8 or grit generated code. +// Unlike V8's JSON.Parse(), it produces easy to read error messages. +// If this test passes, and ExtensionApiJsonValidityTest.WithV8 fails, +// check to see if V8 or the grit build step is broken. +TEST_F(ExtensionApiJsonValidityTest, Basic) { // Build the path to extension_api.json, and check that the file exists. FilePath extension_api_json; ASSERT_TRUE(PathService::Get(base::DIR_SOURCE_ROOT, &extension_api_json)); @@ -110,4 +118,18 @@ TEST(ExtensionApiJsonValidityTest, Basic) { << error_message; } -// TODO(skerner): Add a test that parses extension_api.json using v8. +// Use V8 to load the string resource version of extension_api.json . +// This test mimics the method extension_api.json is loaded in +// chrome/renderer/resources/extension_process_bindings.js . +TEST_F(ExtensionApiJsonValidityTest, WithV8) { + std::string ext_api_string = + bindings_utils::GetStringResource<IDR_EXTENSION_API_JSON>(); + + // Create a global variable holding the text of extension_api.json . + SetGlobalStringVar("ext_api_json_text", ext_api_string); + + // Parse the text of extension_api.json . If there is a parse error, + // an exception will be printed that includes a line number. + std::string test_js = "var extension_api = JSON.parse(ext_api_json_text);"; + ExecuteScriptInContext(test_js, "ParseExtensionApiJson"); +} diff --git a/chrome/test/v8_unit_test.cc b/chrome/test/v8_unit_test.cc index 4b94ad9..0ac6c1f 100644 --- a/chrome/test/v8_unit_test.cc +++ b/chrome/test/v8_unit_test.cc @@ -14,6 +14,13 @@ void V8UnitTest::SetUp() { context_ = v8::Context::New(NULL, global); } +void V8UnitTest::SetGlobalStringVar(const std::string& var_name, + const std::string& value) { + v8::Context::Scope context_scope(context_); + context_->Global()->Set(v8::String::New(var_name.c_str(), var_name.length()), + v8::String::New(value.c_str(), value.length())); +} + void V8UnitTest::ExecuteScriptInContext(const base::StringPiece& script_source, const base::StringPiece& script_name) { v8::Context::Scope context_scope(context_); diff --git a/chrome/test/v8_unit_test.h b/chrome/test/v8_unit_test.h index 644c660..7e05783 100644 --- a/chrome/test/v8_unit_test.h +++ b/chrome/test/v8_unit_test.h @@ -28,6 +28,10 @@ class V8UnitTest : public testing::Test { virtual void ExecuteScriptInContext(const base::StringPiece& script_source, const base::StringPiece& script_name); + // Set a variable to a string value in the global scope. + virtual void SetGlobalStringVar(const std::string& var_name, + const std::string& value); + // Converts a v8::TryCatch into a human readable string. virtual std::string ExceptionToString(v8::TryCatch* try_catch); |