diff options
author | James M Snell <jasnell@gmail.com> | 2018-06-22 12:50:01 -0700 |
---|---|---|
committer | James M Snell <jasnell@gmail.com> | 2018-07-12 10:32:26 -0700 |
commit | d85449dcdf60513dc8bb8d54b22fdb1da5316bad (patch) | |
tree | 972f1c715c78baeed913b60edf8a0e5c3f406777 /test/cctest | |
parent | d4164ca559f5d458384b379852972c84ff918ab4 (diff) | |
download | android-node-v8-d85449dcdf60513dc8bb8d54b22fdb1da5316bad.tar.gz android-node-v8-d85449dcdf60513dc8bb8d54b22fdb1da5316bad.tar.bz2 android-node-v8-d85449dcdf60513dc8bb8d54b22fdb1da5316bad.zip |
trace_events: add traced_value.cc/traced_value.h
Port of the V8 internal v8::tracing::TracedValue that allows
structured data to be included in the trace event. The v8 class
is not exported in the public API so we cannot use it directly.
This is a simplified and slightly modified port. This commit only
adds the class, it does not add uses of it. Those will come in
separate PRs/commits.
PR-URL: https://github.com/nodejs/node/pull/21475
Reviewed-By: Anna Henningsen <anna@addaleax.net>
Reviewed-By: Matteo Collina <matteo.collina@gmail.com>
Diffstat (limited to 'test/cctest')
-rw-r--r-- | test/cctest/test_traced_value.cc | 96 |
1 files changed, 96 insertions, 0 deletions
diff --git a/test/cctest/test_traced_value.cc b/test/cctest/test_traced_value.cc new file mode 100644 index 0000000000..5329c78446 --- /dev/null +++ b/test/cctest/test_traced_value.cc @@ -0,0 +1,96 @@ +#include "tracing/traced_value.h" + +#include <math.h> +#include <stddef.h> +#include <string.h> + +#include "gtest/gtest.h" + +using node::tracing::TracedValue; + +TEST(TracedValue, Object) { + auto traced_value = TracedValue::Create(); + traced_value->SetString("a", "b"); + traced_value->SetInteger("b", 1); + traced_value->SetDouble("c", 1.234); + traced_value->SetDouble("d", NAN); + traced_value->SetDouble("e", INFINITY); + traced_value->SetDouble("f", -INFINITY); + traced_value->SetDouble("g", 1.23e7); + traced_value->SetBoolean("h", false); + traced_value->SetBoolean("i", true); + traced_value->SetNull("j"); + traced_value->BeginDictionary("k"); + traced_value->SetString("l", "m"); + traced_value->EndDictionary(); + + std::string string; + traced_value->AppendAsTraceFormat(&string); + + static const char* check = "{\"a\":\"b\",\"b\":1,\"c\":1.234,\"d\":\"NaN\"," + "\"e\":\"Infinity\",\"f\":\"-Infinity\",\"g\":" + "1.23e+07,\"h\":false,\"i\":true,\"j\":null,\"k\":" + "{\"l\":\"m\"}}"; + + EXPECT_EQ(check, string); +} + +TEST(TracedValue, Array) { + auto traced_value = TracedValue::CreateArray(); + traced_value->AppendString("a"); + traced_value->AppendInteger(1); + traced_value->AppendDouble(1.234); + traced_value->AppendDouble(NAN); + traced_value->AppendDouble(INFINITY); + traced_value->AppendDouble(-INFINITY); + traced_value->AppendDouble(1.23e7); + traced_value->AppendBoolean(false); + traced_value->AppendBoolean(true); + traced_value->AppendNull(); + traced_value->BeginDictionary(); + traced_value->BeginArray("foo"); + traced_value->EndArray(); + traced_value->EndDictionary(); + + std::string string; + traced_value->AppendAsTraceFormat(&string); + + static const char* check = "[\"a\",1,1.234,\"NaN\",\"Infinity\"," + "\"-Infinity\",1.23e+07,false,true,null," + "{\"foo\":[]}]"; + + EXPECT_EQ(check, string); +} + +#define UTF8_SEQUENCE "1" "\xE2\x82\xAC" "23\"\x01\b\f\n\r\t\\" +#if defined(NODE_HAVE_I18N_SUPPORT) +# define UTF8_RESULT \ + "\"1\\u20AC23\\\"\\u0001\\b\\f\\n\\r\\t\\\\\"" +#else +# define UTF8_RESULT \ + "\"1\\u00E2\\u0082\\u00AC23\\\"\\u0001\\b\\f\\n\\r\\t\\\\\"" +#endif + +TEST(TracedValue, EscapingObject) { + auto traced_value = TracedValue::Create(); + traced_value->SetString("a", UTF8_SEQUENCE); + + std::string string; + traced_value->AppendAsTraceFormat(&string); + + static const char* check = "{\"a\":" UTF8_RESULT "}"; + + EXPECT_EQ(check, string); +} + +TEST(TracedValue, EscapingArray) { + auto traced_value = TracedValue::CreateArray(); + traced_value->AppendString(UTF8_SEQUENCE); + + std::string string; + traced_value->AppendAsTraceFormat(&string); + + static const char* check = "[" UTF8_RESULT "]"; + + EXPECT_EQ(check, string); +} |