15f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)// Copyright (c) 2014 The Chromium Authors. All rights reserved.
25f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)// found in the LICENSE file.
45f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
55f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "base/debug/trace_event_argument.h"
65f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h"
75f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
85f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)namespace base {
95f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)namespace debug {
105f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
115f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)TEST(TraceEventArgumentTest, FlatDictionary) {
125f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  scoped_refptr<TracedValue> value = new TracedValue();
135f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  value->SetInteger("int", 2014);
145f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  value->SetDouble("double", 0.0);
155f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  value->SetBoolean("bool", true);
165f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  value->SetString("string", "string");
175f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  std::string json;
185f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  value->AppendAsTraceFormat(&json);
195f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  EXPECT_EQ("{\"bool\":true,\"double\":0.0,\"int\":2014,\"string\":\"string\"}",
205f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)            json);
215f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)}
225f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
235f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)TEST(TraceEventArgumentTest, Hierarchy) {
245f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  scoped_refptr<TracedValue> value = new TracedValue();
255f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  value->SetInteger("i0", 2014);
265f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  value->BeginDictionary("dict1");
275f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  value->SetInteger("i1", 2014);
285f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  value->BeginDictionary("dict2");
295f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  value->SetBoolean("b2", false);
305f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  value->EndDictionary();
315f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  value->SetString("s1", "foo");
325f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  value->EndDictionary();
335f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  value->SetDouble("d0", 0.0);
345f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  value->SetBoolean("b0", true);
355f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  value->BeginArray("a1");
365f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  value->AppendInteger(1);
375f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  value->AppendBoolean(true);
385f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  value->BeginDictionary();
395f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  value->SetInteger("i2", 3);
405f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  value->EndDictionary();
415f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  value->EndArray();
425f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  value->SetString("s0", "foo");
435f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  std::string json;
445f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  value->AppendAsTraceFormat(&json);
455f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  EXPECT_EQ(
465f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      "{\"a1\":[1,true,{\"i2\":3}],\"b0\":true,\"d0\":0.0,\"dict1\":{\"dict2\":"
475f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      "{\"b2\":false},\"i1\":2014,\"s1\":\"foo\"},\"i0\":2014,\"s0\":"
485f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      "\"foo\"}",
495f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      json);
505f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)}
515f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
525f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)}  // namespace debug
535f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)}  // namespace base
54