| Index: chrome/renderer/extensions/activity_log_value_converter_unittest.cc
|
| diff --git a/chrome/renderer/extensions/activity_log_value_converter_unittest.cc b/chrome/renderer/extensions/activity_log_value_converter_unittest.cc
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..ec5c87378be3eb634e3d5afdafa97277d7ea85c6
|
| --- /dev/null
|
| +++ b/chrome/renderer/extensions/activity_log_value_converter_unittest.cc
|
| @@ -0,0 +1,162 @@
|
| +// 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_value_converter.h"
|
| +#include "testing/gtest/include/gtest/gtest.h"
|
| +#include "v8/include/v8.h"
|
| +
|
| +namespace extensions {
|
| +
|
| +class ActivityLogValueConverterTest : public testing::Test {
|
| + public:
|
| + ActivityLogValueConverterTest()
|
| + : 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));
|
| + }
|
| +
|
| + virtual void TearDown() {
|
| + context_.Dispose();
|
| + }
|
| +
|
| + v8::Isolate* isolate_;
|
| +
|
| + // Context for the JavaScript in the test.
|
| + v8::Persistent<v8::Context> context_;
|
| +};
|
| +
|
| +TEST_F(ActivityLogValueConverterTest, 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>();
|
| + ASSERT_FALSE(v8_object.IsEmpty());
|
| +
|
| + ActivityLogValueConverter converter;
|
| + bool out_boolean;
|
| + int out_integer;
|
| + double out_double;
|
| + std::string out_string;
|
| +
|
| + v8::Handle<v8::Context> context =
|
| + v8::Handle<v8::Context>::New(isolate_, context_);
|
| +
|
| + scoped_ptr<base::Value> value(converter.FromV8Value(v8_object, context));
|
| + ASSERT_TRUE(value->IsType(base::Value::TYPE_STRING)
|
| + && value->GetAsString(&out_string)
|
| + && out_string == std::string("[Object]"));
|
| + value.reset(converter.FromV8Value(
|
| + v8_object->Get(v8::String::New("null")), context));
|
| + ASSERT_TRUE(value->IsType(base::Value::TYPE_NULL));
|
| + value.reset(converter.FromV8Value(
|
| + v8_object->Get(v8::String::New("true")), context));
|
| + ASSERT_TRUE(value->IsType(base::Value::TYPE_BOOLEAN)
|
| + && value->GetAsBoolean(&out_boolean)
|
| + && out_boolean == true);
|
| + value.reset(converter.FromV8Value(
|
| + v8_object->Get(v8::String::New("false")), context));
|
| + ASSERT_TRUE(value->IsType(base::Value::TYPE_BOOLEAN)
|
| + && value->GetAsBoolean(&out_boolean)
|
| + && out_boolean == false);
|
| + value.reset(converter.FromV8Value(
|
| + v8_object->Get(v8::String::New("positive_int")), context));
|
| + ASSERT_TRUE(value->IsType(base::Value::TYPE_INTEGER)
|
| + && value->GetAsInteger(&out_integer)
|
| + && out_integer == 42);
|
| + value.reset(converter.FromV8Value(
|
| + v8_object->Get(v8::String::New("negative_int")), context));
|
| + ASSERT_TRUE(value->IsType(base::Value::TYPE_INTEGER)
|
| + && value->GetAsInteger(&out_integer)
|
| + && out_integer == -42);
|
| + value.reset(converter.FromV8Value(
|
| + v8_object->Get(v8::String::New("zero")), context));
|
| + ASSERT_TRUE(value->IsType(base::Value::TYPE_INTEGER)
|
| + && value->GetAsInteger(&out_integer)
|
| + && out_integer == 0);
|
| + value.reset(converter.FromV8Value(
|
| + v8_object->Get(v8::String::New("double")), context));
|
| + ASSERT_TRUE(value->IsType(base::Value::TYPE_DOUBLE)
|
| + && value->GetAsDouble(&out_double)
|
| + && out_double == 88.8);
|
| + value.reset(converter.FromV8Value(
|
| + v8_object->Get(v8::String::New("big_integral_double")), context));
|
| + ASSERT_TRUE(value->IsType(base::Value::TYPE_DOUBLE)
|
| + && value->GetAsDouble(&out_double)
|
| + && out_double == 9007199254740992.0);
|
| + value.reset(converter.FromV8Value(
|
| + v8_object->Get(v8::String::New("string")), context));
|
| + ASSERT_TRUE(value->IsType(base::Value::TYPE_STRING)
|
| + && value->GetAsString(&out_string)
|
| + && out_string == std::string("foobar"));
|
| + value.reset(converter.FromV8Value(
|
| + v8_object->Get(v8::String::New("empty_string")), context));
|
| + ASSERT_TRUE(value->IsType(base::Value::TYPE_STRING)
|
| + && value->GetAsString(&out_string)
|
| + && out_string == std::string());
|
| + value.reset(converter.FromV8Value(
|
| + v8_object->Get(v8::String::New("dictionary")), context));
|
| + ASSERT_TRUE(value->IsType(base::Value::TYPE_STRING)
|
| + && value->GetAsString(&out_string)
|
| + && out_string == std::string("[Object]"));
|
| + value.reset(converter.FromV8Value(
|
| + v8_object->Get(v8::String::New("empty_dictionary")), context));
|
| + ASSERT_TRUE(value->IsType(base::Value::TYPE_STRING)
|
| + && value->GetAsString(&out_string)
|
| + && out_string == std::string("[Object]"));
|
| + value.reset(converter.FromV8Value(
|
| + v8_object->Get(v8::String::New("list")), context));
|
| + ASSERT_TRUE(value->IsType(base::Value::TYPE_STRING)
|
| + && value->GetAsString(&out_string)
|
| + && out_string == std::string("[Array]"));
|
| + value.reset(converter.FromV8Value(
|
| + v8_object->Get(v8::String::New("empty_list")), context));
|
| + ASSERT_TRUE(value->IsType(base::Value::TYPE_STRING)
|
| + && value->GetAsString(&out_string)
|
| + && out_string == std::string("[Array]"));
|
| + value.reset(converter.FromV8Value(
|
| + v8_object->Get(v8::String::New("function")), context));
|
| + ASSERT_TRUE(value->IsType(base::Value::TYPE_STRING)
|
| + && value->GetAsString(&out_string)
|
| + && out_string == std::string("[Function]"));
|
| + value.reset(converter.FromV8Value(
|
| + v8_object->Get(v8::String::New("named_function")), context));
|
| + ASSERT_TRUE(value->IsType(base::Value::TYPE_STRING)
|
| + && value->GetAsString(&out_string)
|
| + && out_string == std::string("[Function foo()]"));
|
| +}
|
| +
|
| +} // namespace extensions
|
| +
|
|
|