summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorskerner@chromium.org <skerner@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-03-03 14:25:39 +0000
committerskerner@chromium.org <skerner@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-03-03 14:25:39 +0000
commitaaadcd81066a3430b33702288cd56a39986b4326 (patch)
tree08f2f9e011880015dd47c669f4311f17faa55391
parent83e29c010812422515660e4a0b77f1738f238aec (diff)
downloadchromium_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.gypi2
-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.cc7
-rw-r--r--chrome/test/v8_unit_test.h4
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);