1 #include "tracing/traced_value.h"
2
3 #include <cmath>
4 #include <cstddef>
5 #include <cstring>
6
7 #include "gtest/gtest.h"
8
9 using node::tracing::TracedValue;
10
TEST(TracedValue,Object)11 TEST(TracedValue, Object) {
12 auto traced_value = TracedValue::Create();
13 traced_value->SetString("a", "b");
14 traced_value->SetInteger("b", 1);
15 traced_value->SetDouble("c", 1.234);
16 traced_value->SetDouble("d", NAN);
17 traced_value->SetDouble("e", INFINITY);
18 traced_value->SetDouble("f", -INFINITY);
19 traced_value->SetDouble("g", 1.23e7);
20 traced_value->SetBoolean("h", false);
21 traced_value->SetBoolean("i", true);
22 traced_value->SetNull("j");
23 traced_value->BeginDictionary("k");
24 traced_value->SetString("l", "m");
25 traced_value->EndDictionary();
26
27 std::string string;
28 traced_value->AppendAsTraceFormat(&string);
29
30 static const char* check = "{\"a\":\"b\",\"b\":1,\"c\":1.234,\"d\":\"NaN\","
31 "\"e\":\"Infinity\",\"f\":\"-Infinity\",\"g\":"
32 "1.23e+07,\"h\":false,\"i\":true,\"j\":null,\"k\":"
33 "{\"l\":\"m\"}}";
34
35 EXPECT_EQ(check, string);
36 }
37
TEST(TracedValue,Array)38 TEST(TracedValue, Array) {
39 auto traced_value = TracedValue::CreateArray();
40 traced_value->AppendString("a");
41 traced_value->AppendInteger(1);
42 traced_value->AppendDouble(1.234);
43 traced_value->AppendDouble(NAN);
44 traced_value->AppendDouble(INFINITY);
45 traced_value->AppendDouble(-INFINITY);
46 traced_value->AppendDouble(1.23e7);
47 traced_value->AppendBoolean(false);
48 traced_value->AppendBoolean(true);
49 traced_value->AppendNull();
50 traced_value->BeginDictionary();
51 traced_value->BeginArray("foo");
52 traced_value->EndArray();
53 traced_value->EndDictionary();
54
55 std::string string;
56 traced_value->AppendAsTraceFormat(&string);
57
58 static const char* check = "[\"a\",1,1.234,\"NaN\",\"Infinity\","
59 "\"-Infinity\",1.23e+07,false,true,null,"
60 "{\"foo\":[]}]";
61
62 EXPECT_EQ(check, string);
63 }
64
65 #define UTF8_SEQUENCE "1" "\xE2\x82\xAC" "23\"\x01\b\f\n\r\t\\"
66 #if defined(NODE_HAVE_I18N_SUPPORT)
67 # define UTF8_RESULT \
68 "\"1\\u20AC23\\\"\\u0001\\b\\f\\n\\r\\t\\\\\""
69 #else
70 # define UTF8_RESULT \
71 "\"1\\u00E2\\u0082\\u00AC23\\\"\\u0001\\b\\f\\n\\r\\t\\\\\""
72 #endif
73
TEST(TracedValue,EscapingObject)74 TEST(TracedValue, EscapingObject) {
75 auto traced_value = TracedValue::Create();
76 traced_value->SetString("a", UTF8_SEQUENCE);
77
78 std::string string;
79 traced_value->AppendAsTraceFormat(&string);
80
81 static const char* check = "{\"a\":" UTF8_RESULT "}";
82
83 EXPECT_EQ(check, string);
84 }
85
TEST(TracedValue,EscapingArray)86 TEST(TracedValue, EscapingArray) {
87 auto traced_value = TracedValue::CreateArray();
88 traced_value->AppendString(UTF8_SEQUENCE);
89
90 std::string string;
91 traced_value->AppendAsTraceFormat(&string);
92
93 static const char* check = "[" UTF8_RESULT "]";
94
95 EXPECT_EQ(check, string);
96 }
97