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

Side by Side 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: Dan's comment 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
(Empty)
1 // Copyright (c) 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "base/memory/scoped_ptr.h"
6 #include "base/values.h"
7 #include "chrome/renderer/extensions/activity_log_converter_strategy.h"
8 #include "chrome/renderer/extensions/scoped_persistent.h"
9 #include "testing/gtest/include/gtest/gtest.h"
10 #include "v8/include/v8.h"
11
12 using content::V8ValueConverter;
13
14 namespace extensions {
15
16 class ActivityLogConverterStrategyTest : public testing::Test {
17 public:
18 ActivityLogConverterStrategyTest()
19 : isolate_(v8::Isolate::GetCurrent())
20 , handle_scope_(isolate_)
21 , context_(v8::Context::New(isolate_))
22 , context_scope_(context_.get()) {
23 }
24
25 protected:
26 virtual void SetUp() {
27 converter_.reset(V8ValueConverter::create());
28 strategy_.reset(new ActivityLogConverterStrategy());
29 converter_->SetFunctionAllowed(true);
30 converter_->SetStrategy(strategy_.get());
31 }
32
33 testing::AssertionResult VerifyNull(v8::Local<v8::Value> v8_value) {
34 scoped_ptr<base::Value> value(
35 converter_->FromV8Value(v8_value, context_.get()));
36 if (value->IsType(base::Value::TYPE_NULL))
37 return testing::AssertionSuccess();
38 return testing::AssertionFailure();
39 }
40
41 testing::AssertionResult VerifyBoolean(v8::Local<v8::Value> v8_value,
42 bool expected) {
43 bool out;
44 scoped_ptr<base::Value> value(
45 converter_->FromV8Value(v8_value, context_.get()));
46 if (value->IsType(base::Value::TYPE_BOOLEAN)
47 && value->GetAsBoolean(&out)
48 && out == expected)
49 return testing::AssertionSuccess();
50 return testing::AssertionFailure();
51 }
52
53 testing::AssertionResult VerifyInteger(v8::Local<v8::Value> v8_value,
54 int expected) {
55 int out;
56 scoped_ptr<base::Value> value(
57 converter_->FromV8Value(v8_value, context_.get()));
58 if (value->IsType(base::Value::TYPE_INTEGER)
59 && value->GetAsInteger(&out)
60 && out == expected)
61 return testing::AssertionSuccess();
62 return testing::AssertionFailure();
63 }
64
65 testing::AssertionResult VerifyDouble(v8::Local<v8::Value> v8_value,
66 double expected) {
67 double out;
68 scoped_ptr<base::Value> value(
69 converter_->FromV8Value(v8_value, context_.get()));
70 if (value->IsType(base::Value::TYPE_DOUBLE)
71 && value->GetAsDouble(&out)
72 && out == expected)
73 return testing::AssertionSuccess();
74 return testing::AssertionFailure();
75 }
76
77 testing::AssertionResult VerifyString(v8::Local<v8::Value> v8_value,
78 const std::string& expected) {
79 std::string out;
80 scoped_ptr<base::Value> value(
81 converter_->FromV8Value(v8_value, context_.get()));
82 if (value->IsType(base::Value::TYPE_STRING)
83 && value->GetAsString(&out)
84 && out == expected)
85 return testing::AssertionSuccess();
86 return testing::AssertionFailure();
87 }
88
89 v8::Isolate* isolate_;
90 v8::HandleScope handle_scope_;
91 ScopedPersistent<v8::Context> context_;
92 v8::Context::Scope context_scope_;
93 scoped_ptr<V8ValueConverter> converter_;
94 scoped_ptr<ActivityLogConverterStrategy> strategy_;
95 };
96
97 TEST_F(ActivityLogConverterStrategyTest, ConversionTest) {
98 const char* source = "(function() {"
99 "function foo() {}"
100 "return {"
101 "null: null,"
102 "true: true,"
103 "false: false,"
104 "positive_int: 42,"
105 "negative_int: -42,"
106 "zero: 0,"
107 "double: 88.8,"
108 "big_integral_double: 9007199254740992.0," // 2.0^53
109 "string: \"foobar\","
110 "empty_string: \"\","
111 "dictionary: {"
112 "foo: \"bar\","
113 "hot: \"dog\","
114 "},"
115 "empty_dictionary: {},"
116 "list: [ \"monkey\", \"balls\" ],"
117 "empty_list: [],"
118 "function: function() {},"
119 "named_function: foo"
120 "};"
121 "})();";
122
123 v8::Handle<v8::Script> script(v8::Script::New(v8::String::New(source)));
124 v8::Handle<v8::Object> v8_object = script->Run().As<v8::Object>();
125
126 EXPECT_TRUE(VerifyString(v8_object, "[Object]"));
127 EXPECT_TRUE(VerifyNull(v8_object->Get(v8::String::New("null"))));
128 EXPECT_TRUE(VerifyBoolean(v8_object->Get(v8::String::New("true")), true));
129 EXPECT_TRUE(VerifyBoolean(v8_object->Get(v8::String::New("false")), false));
130 EXPECT_TRUE(VerifyInteger(v8_object->Get(v8::String::New("positive_int")),
131 42));
132 EXPECT_TRUE(VerifyInteger(v8_object->Get(v8::String::New("negative_int")),
133 -42));
134 EXPECT_TRUE(VerifyInteger(v8_object->Get(v8::String::New("zero")), 0));
135 EXPECT_TRUE(VerifyDouble(v8_object->Get(v8::String::New("double")), 88.8));
136 EXPECT_TRUE(VerifyDouble(
137 v8_object->Get(v8::String::New("big_integral_double")),
138 9007199254740992.0));
139 EXPECT_TRUE(VerifyString(v8_object->Get(v8::String::New("string")),
140 "foobar"));
141 EXPECT_TRUE(VerifyString(v8_object->Get(v8::String::New("empty_string")),
142 ""));
143 EXPECT_TRUE(VerifyString(v8_object->Get(v8::String::New("dictionary")),
144 "[Object]"));
145 EXPECT_TRUE(VerifyString(v8_object->Get(v8::String::New("empty_dictionary")),
146 "[Object]"));
147 EXPECT_TRUE(VerifyString(v8_object->Get(v8::String::New("list")),
148 "[Array]"));
149 EXPECT_TRUE(VerifyString(v8_object->Get(v8::String::New("empty_list")),
150 "[Array]"));
151 EXPECT_TRUE(VerifyString(v8_object->Get(v8::String::New("function")),
152 "[Function]"));
153 EXPECT_TRUE(VerifyString(v8_object->Get(v8::String::New("named_function")),
154 "[Function foo()]"));
155 }
156
157 } // namespace extensions
158
OLDNEW
« no previous file with comments | « chrome/renderer/extensions/activity_log_converter_strategy.cc ('k') | chrome/renderer/extensions/api_activity_logger.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698