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

Unified Diff: chrome/renderer/extensions/activity_log_converter_strategy_unittest.cc

Issue 19730002: V8ValueConverter for the activity logger that does not invoke interceptors and (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Ben's comments Created 7 years, 4 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/renderer/extensions/activity_log_converter_strategy_unittest.cc
diff --git a/chrome/renderer/extensions/activity_log_converter_strategy_unittest.cc b/chrome/renderer/extensions/activity_log_converter_strategy_unittest.cc
new file mode 100644
index 0000000000000000000000000000000000000000..540d5f42309161e003d967115d0d7c99779a00d2
--- /dev/null
+++ b/chrome/renderer/extensions/activity_log_converter_strategy_unittest.cc
@@ -0,0 +1,167 @@
+// Copyright (c) 2013 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 "base/memory/scoped_ptr.h"
+#include "base/values.h"
+#include "chrome/renderer/extensions/activity_log_converter_strategy.h"
+#include "testing/gtest/include/gtest/gtest.h"
+#include "v8/include/v8.h"
+
+using content::V8ValueConverter;
+
+namespace extensions {
+
+class ActivityLogConverterStrategyTest : public testing::Test {
+ public:
+ ActivityLogConverterStrategyTest()
+ : isolate_(v8::Isolate::GetCurrent()) {
+ }
+
+ protected:
+ virtual void SetUp() {
+ v8::HandleScope handle_scope(isolate_);
+ v8::Handle<v8::ObjectTemplate> global = v8::ObjectTemplate::New();
+ context_.Reset(isolate_, v8::Context::New(isolate_, NULL, global));
not at google - send to devlin 2013/08/08 01:02:21 global not needed
pmarch 2013/08/08 03:20:18 Done.
+ converter_.reset(V8ValueConverter::create());
+ strategy_.reset(new ActivityLogConverterStrategy());
+ converter_->SetFunctionAllowed(true);
+ converter_->SetStrategy(strategy_.get());
+ }
+
+ virtual void TearDown() {
+ context_.Dispose();
+ }
+
+ testing::AssertionResult VerifyNull(v8::Local<v8::Value> v8_value) {
+ v8::Handle<v8::Context> context =
+ v8::Handle<v8::Context>::New(isolate_, context_);
+ scoped_ptr<base::Value> value(converter_->FromV8Value(v8_value, context));
not at google - send to devlin 2013/08/08 01:02:21 you should be able to pass context_ into these dir
pmarch 2013/08/08 03:20:18 Done.
+ if (value->IsType(base::Value::TYPE_NULL))
+ return testing::AssertionSuccess();
+ return testing::AssertionFailure();
+ }
+
+ testing::AssertionResult VerifyBoolean(v8::Local<v8::Value> v8_value,
+ bool expected) {
+ bool out;
+ v8::Handle<v8::Context> context =
+ v8::Handle<v8::Context>::New(isolate_, context_);
+ scoped_ptr<base::Value> value(converter_->FromV8Value(v8_value, context));
+ if (value->IsType(base::Value::TYPE_BOOLEAN)
+ && value->GetAsBoolean(&out)
+ && out == expected)
+ return testing::AssertionSuccess();
+ return testing::AssertionFailure();
+ }
+
+ testing::AssertionResult VerifyInteger(v8::Local<v8::Value> v8_value,
+ int expected) {
+ int out;
+ v8::Handle<v8::Context> context =
+ v8::Handle<v8::Context>::New(isolate_, context_);
+ scoped_ptr<base::Value> value(converter_->FromV8Value(v8_value, context));
+ if (value->IsType(base::Value::TYPE_INTEGER)
+ && value->GetAsInteger(&out)
+ && out == expected)
+ return testing::AssertionSuccess();
+ return testing::AssertionFailure();
+ }
+
+ testing::AssertionResult VerifyDouble(v8::Local<v8::Value> v8_value,
+ double expected) {
+ double out;
+ v8::Handle<v8::Context> context =
+ v8::Handle<v8::Context>::New(isolate_, context_);
+ scoped_ptr<base::Value> value(converter_->FromV8Value(v8_value, context));
+ if (value->IsType(base::Value::TYPE_DOUBLE)
+ && value->GetAsDouble(&out)
+ && out == expected)
+ return testing::AssertionSuccess();
+ return testing::AssertionFailure();
+ }
+
+ testing::AssertionResult VerifyString(v8::Local<v8::Value> v8_value,
+ const std::string& expected) {
+ std::string out;
+ v8::Handle<v8::Context> context =
+ v8::Handle<v8::Context>::New(isolate_, context_);
+ scoped_ptr<base::Value> value(converter_->FromV8Value(v8_value, context));
+ if (value->IsType(base::Value::TYPE_STRING)
+ && value->GetAsString(&out)
+ && out == expected)
+ return testing::AssertionSuccess();
+ return testing::AssertionFailure();
+ }
+
+ v8::Isolate* isolate_;
+ // Context for the JavaScript in the test.
+ v8::Persistent<v8::Context> context_;
not at google - send to devlin 2013/08/08 01:02:21 use ScopedPersistent, don't need the Dispose
pmarch 2013/08/08 03:20:18 Done.
+ scoped_ptr<V8ValueConverter> converter_;
+ scoped_ptr<ActivityLogConverterStrategy> strategy_;
+};
+
+TEST_F(ActivityLogConverterStrategyTest, ConversionTest) {
+ const char* source = "(function() {"
+ "function foo() {}"
+ "return {"
+ "null: null,"
+ "true: true,"
+ "false: false,"
+ "positive_int: 42,"
+ "negative_int: -42,"
+ "zero: 0,"
+ "double: 88.8,"
+ "big_integral_double: 9007199254740992.0," // 2.0^53
+ "string: \"foobar\","
+ "empty_string: \"\","
+ "dictionary: {"
+ "foo: \"bar\","
+ "hot: \"dog\","
+ "},"
+ "empty_dictionary: {},"
+ "list: [ \"monkey\", \"balls\" ],"
+ "empty_list: [],"
+ "function: function() {},"
+ "named_function: foo"
+ "};"
+ "})();";
+
+ v8::HandleScope handle_scope(isolate_);
+ v8::Context::Scope context_scope(isolate_, context_);
+ v8::Handle<v8::Script> script(v8::Script::New(v8::String::New(source)));
+ v8::Handle<v8::Object> v8_object = script->Run().As<v8::Object>();
+
+ EXPECT_TRUE(VerifyString(v8_object, "[Object]"));
+ EXPECT_TRUE(VerifyNull(v8_object->Get(v8::String::New("null"))));
+ EXPECT_TRUE(VerifyBoolean(v8_object->Get(v8::String::New("true")), true));
+ EXPECT_TRUE(VerifyBoolean(v8_object->Get(v8::String::New("false")), false));
+ EXPECT_TRUE(VerifyInteger(v8_object->Get(v8::String::New("positive_int")),
+ 42));
+ EXPECT_TRUE(VerifyInteger(v8_object->Get(v8::String::New("negative_int")),
+ -42));
+ EXPECT_TRUE(VerifyInteger(v8_object->Get(v8::String::New("zero")), 0));
+ EXPECT_TRUE(VerifyDouble(v8_object->Get(v8::String::New("double")), 88.8));
+ EXPECT_TRUE(VerifyDouble(
+ v8_object->Get(v8::String::New("big_integral_double")),
+ 9007199254740992.0));
+ EXPECT_TRUE(VerifyString(v8_object->Get(v8::String::New("string")),
+ "foobar"));
+ EXPECT_TRUE(VerifyString(v8_object->Get(v8::String::New("empty_string")),
+ ""));
+ EXPECT_TRUE(VerifyString(v8_object->Get(v8::String::New("dictionary")),
+ "[Object]"));
+ EXPECT_TRUE(VerifyString(v8_object->Get(v8::String::New("empty_dictionary")),
+ "[Object]"));
+ EXPECT_TRUE(VerifyString(v8_object->Get(v8::String::New("list")),
+ "[Array]"));
+ EXPECT_TRUE(VerifyString(v8_object->Get(v8::String::New("empty_list")),
+ "[Array]"));
+ EXPECT_TRUE(VerifyString(v8_object->Get(v8::String::New("function")),
+ "[Function]"));
+ EXPECT_TRUE(VerifyString(v8_object->Get(v8::String::New("named_function")),
+ "[Function foo()]"));
+}
+
+} // namespace extensions
+

Powered by Google App Engine
This is Rietveld 408576698