| Index: test/cctest/test-traced-value.cc
|
| diff --git a/test/cctest/test-traced-value.cc b/test/cctest/test-traced-value.cc
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..5a8b9ab9c498bf3009d563f8b6f458d9b45275e2
|
| --- /dev/null
|
| +++ b/test/cctest/test-traced-value.cc
|
| @@ -0,0 +1,125 @@
|
| +// Copyright 2016 the V8 project 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 "src/tracing/traced-value.h"
|
| +#include "test/cctest/cctest.h"
|
| +
|
| +using v8::tracing::TracedValue;
|
| +
|
| +TEST(FlatDictionary) {
|
| + auto value = TracedValue::Create();
|
| + value->SetInteger("int", 2014);
|
| + value->SetDouble("double", 0.0);
|
| + value->SetBoolean("bool", true);
|
| + value->SetString("string", "string");
|
| + std::string json = "PREFIX";
|
| + value->AppendAsTraceFormat(&json);
|
| + CHECK_EQ(
|
| + "PREFIX{\"int\":2014,\"double\":0.000000,\"bool\":true,\"string\":"
|
| + "\"string\"}",
|
| + json);
|
| +}
|
| +
|
| +TEST(NoDotPathExpansion) {
|
| + auto value = TracedValue::Create();
|
| + value->SetInteger("in.t", 2014);
|
| + value->SetDouble("doub.le", 0.0);
|
| + value->SetBoolean("bo.ol", true);
|
| + value->SetString("str.ing", "str.ing");
|
| + std::string json;
|
| + value->AppendAsTraceFormat(&json);
|
| + CHECK_EQ(
|
| + "{\"in.t\":2014,\"doub.le\":0.000000,\"bo.ol\":true,\"str.ing\":\"str."
|
| + "ing\"}",
|
| + json);
|
| +}
|
| +
|
| +TEST(Hierarchy) {
|
| + auto value = TracedValue::Create();
|
| + value->SetInteger("i0", 2014);
|
| + value->BeginDictionary("dict1");
|
| + value->SetInteger("i1", 2014);
|
| + value->BeginDictionary("dict2");
|
| + value->SetBoolean("b2", false);
|
| + value->EndDictionary();
|
| + value->SetString("s1", "foo");
|
| + value->EndDictionary();
|
| + value->SetDouble("d0", 0.0);
|
| + value->SetBoolean("b0", true);
|
| + value->BeginArray("a1");
|
| + value->AppendInteger(1);
|
| + value->AppendBoolean(true);
|
| + value->BeginDictionary();
|
| + value->SetInteger("i2", 3);
|
| + value->EndDictionary();
|
| + value->EndArray();
|
| + value->SetString("s0", "foo");
|
| +
|
| + value->BeginArray("arr1");
|
| + value->BeginDictionary();
|
| + value->EndDictionary();
|
| + value->BeginArray();
|
| + value->EndArray();
|
| + value->BeginDictionary();
|
| + value->EndDictionary();
|
| + value->EndArray();
|
| +
|
| + std::string json;
|
| + value->AppendAsTraceFormat(&json);
|
| + CHECK_EQ(
|
| + "{\"i0\":2014,\"dict1\":{\"i1\":2014,\"dict2\":{\"b2\":false},"
|
| + "\"s1\":\"foo\"},\"d0\":0.000000,\"b0\":true,\"a1\":[1,true,{\"i2\":3}],"
|
| + "\"s0\":\"foo\",\"arr1\":[{},[],{}]}",
|
| + json);
|
| +}
|
| +
|
| +TEST(LongStrings) {
|
| + std::string long_string = "supercalifragilisticexpialidocious";
|
| + std::string long_string2 = "0123456789012345678901234567890123456789";
|
| + char long_string3[4096];
|
| + for (size_t i = 0; i < sizeof(long_string3); ++i)
|
| + long_string3[i] = static_cast<char>('a' + (i % 26));
|
| + long_string3[sizeof(long_string3) - 1] = '\0';
|
| +
|
| + auto value = TracedValue::Create();
|
| + value->SetString("a", "short");
|
| + value->SetString("b", long_string);
|
| + value->BeginArray("c");
|
| + value->AppendString(long_string2);
|
| + value->AppendString("");
|
| + value->BeginDictionary();
|
| + value->SetString("a", long_string3);
|
| + value->EndDictionary();
|
| + value->EndArray();
|
| +
|
| + std::string json;
|
| + value->AppendAsTraceFormat(&json);
|
| + CHECK_EQ("{\"a\":\"short\",\"b\":\"" + long_string + "\",\"c\":[\"" +
|
| + long_string2 + "\",\"\",{\"a\":\"" + long_string3 + "\"}]}",
|
| + json);
|
| +}
|
| +
|
| +TEST(Escaping) {
|
| + const char* string1 = "abc\"\'\\\\x\"y\'z\n\x09\x17";
|
| + std::string chars127;
|
| + for (int i = 1; i <= 127; ++i) {
|
| + chars127 += static_cast<char>(i);
|
| + }
|
| + auto value = TracedValue::Create();
|
| + value->SetString("a", string1);
|
| + value->SetString("b", chars127);
|
| +
|
| + std::string json;
|
| + value->AppendAsTraceFormat(&json);
|
| + // Cannot use the expected value literal directly in CHECK_EQ
|
| + // as it fails to process # character on Windows.
|
| + const char* expected =
|
| + "{\"a\":\"abc\\\"\'\\\\\\\\x\\\"y\'z\\n\\t\\u0017\",\"b\":"
|
| + "\"\\u0001\\u0002\\u0003\\u0004\\u0005\\u0006\\u0007\\u0008\\t\\n\\u000B"
|
| + "\\u000C\\u000D\\u000E\\u000F\\u0010\\u0011\\u0012\\u0013\\u0014\\u0015\\"
|
| + "u0016\\u0017\\u0018\\u0019\\u001A\\u001B\\u001C\\u001D\\u001E\\u001F "
|
| + "!\\\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\\\]^_`"
|
| + "abcdefghijklmnopqrstuvwxyz{|}~\177\"}";
|
| + CHECK_EQ(expected, json);
|
| +}
|
|
|