Index: base/test/trace_event_analyzer_unittest.cc |
diff --git a/base/test/trace_event_analyzer_unittest.cc b/base/test/trace_event_analyzer_unittest.cc |
index af1a3e0c3aa8fadfcb0c630b76f5c525822fccf8..dd5e6b599628c5513f7c594d74d15553399fd551 100644 |
--- a/base/test/trace_event_analyzer_unittest.cc |
+++ b/base/test/trace_event_analyzer_unittest.cc |
@@ -11,6 +11,7 @@ |
#include "base/test/trace_event_analyzer.h" |
#include "base/threading/platform_thread.h" |
#include "base/trace_event/trace_buffer.h" |
+#include "base/trace_event/trace_event_argument.h" |
#include "testing/gmock/include/gmock/gmock.h" |
#include "testing/gtest/include/gtest/gtest.h" |
@@ -98,6 +99,7 @@ TEST_F(TraceEventAnalyzerTest, TraceEvent) { |
event.arg_numbers["int"] = static_cast<double>(int_num); |
event.arg_numbers["double"] = double_num; |
event.arg_strings["string"] = str; |
+ event.arg_values["dict"] = make_scoped_ptr(new base::DictionaryValue()); |
ASSERT_TRUE(event.HasNumberArg("false")); |
ASSERT_TRUE(event.HasNumberArg("true")); |
@@ -106,12 +108,18 @@ TEST_F(TraceEventAnalyzerTest, TraceEvent) { |
ASSERT_TRUE(event.HasStringArg("string")); |
ASSERT_FALSE(event.HasNumberArg("notfound")); |
ASSERT_FALSE(event.HasStringArg("notfound")); |
+ ASSERT_TRUE(event.HasArg("dict")); |
+ ASSERT_FALSE(event.HasArg("notfound")); |
EXPECT_FALSE(event.GetKnownArgAsBool("false")); |
EXPECT_TRUE(event.GetKnownArgAsBool("true")); |
EXPECT_EQ(int_num, event.GetKnownArgAsInt("int")); |
EXPECT_EQ(double_num, event.GetKnownArgAsDouble("double")); |
EXPECT_STREQ(str, event.GetKnownArgAsString("string").c_str()); |
+ |
+ scoped_ptr<base::Value> arg; |
+ EXPECT_TRUE(event.GetArgAsValue("dict", &arg)); |
+ EXPECT_EQ(base::Value::TYPE_DICTIONARY, arg->GetType()); |
} |
TEST_F(TraceEventAnalyzerTest, QueryEventMember) { |
@@ -895,5 +903,37 @@ TEST_F(TraceEventAnalyzerTest, CountMatches) { |
EXPECT_EQ(num_named, CountMatches(event_ptrs, query_named)); |
} |
+TEST_F(TraceEventAnalyzerTest, ComplexArgument) { |
+ ManualSetUp(); |
+ |
+ BeginTracing(); |
+ { |
+ scoped_ptr<base::trace_event::TracedValue> value( |
+ new base::trace_event::TracedValue); |
+ value->SetString("property", "value"); |
+ TRACE_EVENT1("cat", "name", "arg", std::move(value)); |
+ } |
+ EndTracing(); |
+ |
+ scoped_ptr<TraceAnalyzer> analyzer( |
+ TraceAnalyzer::Create(output_.json_output)); |
+ ASSERT_TRUE(analyzer.get()); |
+ |
+ TraceEventVector events; |
+ analyzer->FindEvents(Query::EventName() == Query::String("name"), &events); |
+ |
+ EXPECT_EQ(1u, events.size()); |
+ EXPECT_EQ("cat", events[0]->category); |
+ EXPECT_EQ("name", events[0]->name); |
+ EXPECT_TRUE(events[0]->HasArg("arg")); |
+ |
+ scoped_ptr<base::Value> arg; |
+ events[0]->GetArgAsValue("arg", &arg); |
+ base::DictionaryValue* arg_dict; |
+ EXPECT_TRUE(arg->GetAsDictionary(&arg_dict)); |
+ std::string property; |
+ EXPECT_TRUE(arg_dict->GetString("property", &property)); |
+ EXPECT_EQ("value", property); |
+} |
} // namespace trace_analyzer |