dart-sdk/runtime/vm/report_test.cc
rmacnak@google.com 27b99b257c Don't double-escape strings in the VM Service, and don't use \u0000 to determine the string length.
This makes characters above ASCII to display as themselves in Observatory, strings with \u0000 in the middle not to be truncated, and avoids a bug in the previous escaping where a non-ASCII character in the last position would have its escaped representation cut off.

R=johnmccutchan@google.com

Review URL: https://codereview.chromium.org//542363003

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@40060 260f80e4-7a28-3924-810f-c04153c831b5
2014-09-09 21:34:06 +00:00

73 lines
2.9 KiB
C++

// Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
#include "platform/assert.h"
#include "vm/report.h"
#include "vm/unit_test.h"
namespace dart {
TEST_CASE(TraceJSWarning) {
Isolate* isolate = Isolate::Current();
TraceBuffer::Init(isolate, 3);
TraceBuffer* trace_buffer = isolate->trace_buffer();
const String& url = String::Handle(isolate, String::New("Plug"));
const String& source = String::Handle(isolate, String::New("240 100"));
const Script& script = Script::Handle(isolate,
Script::New(url, source, RawScript::kScriptTag));
script.Tokenize(String::Handle(String::New("")));
{
const intptr_t token_pos = 0;
const char* message = "High Voltage";
Report::MessageF(Report::kJSWarning, script, token_pos, "%s", message);
{
JSONStream js;
trace_buffer->PrintToJSONStream(&js);
EXPECT_SUBSTRING("{\"type\":\"TraceBuffer\",\"members\":["
"{\"type\":\"TraceBufferEntry\",\"time\":",
js.ToCString());
// Skip time.
EXPECT_SUBSTRING("\"message\":{\"type\":\"JSCompatibilityWarning\","
"\"script\":{\"type\":\"@Script\",\"id\":"
"\"libraries\\/-1\\/scripts\\/Plug\","
"\"name\":\"Plug\","
"\"kind\":\"script\"},\"tokenPos\":0,"
"\"message\":{\"type\":\"@String\"",
js.ToCString());
// Skip private _OneByteString.
EXPECT_SUBSTRING("\"valueAsString\":\"High Voltage\"",
js.ToCString());
}
}
{
const intptr_t token_pos = 1;
const char* message = "Low Voltage";
Report::MessageF(Report::kJSWarning, script, token_pos, "%s", message);
}
EXPECT_EQ(2, trace_buffer->Length());
EXPECT_SUBSTRING("{\"type\":\"JSCompatibilityWarning\",\"script\":{\"type\":"
"\"@Script\",\"id\":\"libraries\\/-1\\/scripts\\/Plug\","
"\"name\":\"Plug\","
"\"kind\":\"script\"},\"tokenPos\":0,"
"\"message\":{\"type\":\"@String\"",
trace_buffer->At(0)->message);
// Skip private _OneByteString.
EXPECT_SUBSTRING("\"valueAsString\":\"High Voltage\"",
trace_buffer->At(0)->message);
EXPECT_SUBSTRING("{\"type\":\"JSCompatibilityWarning\",\"script\":{\"type\":"
"\"@Script\",\"id\":\"libraries\\/-1\\/scripts\\/Plug\","
"\"name\":\"Plug\","
"\"kind\":\"script\"},\"tokenPos\":1,"
"\"message\":{\"type\":\"@String\"",
trace_buffer->At(1)->message);
// Skip private _OneByteString.
EXPECT_SUBSTRING("\"valueAsString\":\"Low Voltage\"",
trace_buffer->At(1)->message);
delete trace_buffer;
}
} // namespace dart