[vm] Prevent empty range in coverage output
Closes https://github.com/dart-lang/sdk/pull/49251 GitOrigin-RevId: 4c399e9b8150bbce495b4f88e0546bdd40fff7ed Change-Id: Ic16843edeeca9678a7caedbe8f675f7d0d20548d TEST=Added a case to source_report_test.cc Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/248349 Reviewed-by: Ben Konyi <bkonyi@google.com> Commit-Queue: Liam Appelbe <liama@google.com> Reviewed-by: Liam Appelbe <liama@google.com>
This commit is contained in:
@@ -606,12 +606,12 @@ void SourceReport::VisitLibrary(JSONArray* jsarr, const Library& lib) {
|
||||
Error& err = Error::Handle(cls.EnsureIsFinalized(thread()));
|
||||
if (!err.IsNull()) {
|
||||
// Emit an uncompiled range for this class with error information.
|
||||
JSONObject range(jsarr);
|
||||
script = cls.script();
|
||||
const intptr_t script_index = GetScriptIndex(script);
|
||||
if (script_index < 0) {
|
||||
continue;
|
||||
}
|
||||
JSONObject range(jsarr);
|
||||
range.AddProperty("scriptIndex", script_index);
|
||||
range.AddProperty("startPos", cls.token_pos());
|
||||
range.AddProperty("endPos", cls.end_token_pos());
|
||||
@@ -623,12 +623,12 @@ void SourceReport::VisitLibrary(JSONArray* jsarr, const Library& lib) {
|
||||
} else {
|
||||
cls.EnsureDeclarationLoaded();
|
||||
// Emit one range for the whole uncompiled class.
|
||||
JSONObject range(jsarr);
|
||||
script = cls.script();
|
||||
const intptr_t script_index = GetScriptIndex(script);
|
||||
if (script_index < 0) {
|
||||
continue;
|
||||
}
|
||||
JSONObject range(jsarr);
|
||||
range.AddProperty("scriptIndex", script_index);
|
||||
range.AddProperty("startPos", cls.token_pos());
|
||||
range.AddProperty("endPos", cls.end_token_pos());
|
||||
|
||||
@@ -58,6 +58,72 @@ ISOLATE_UNIT_TEST_CASE(SourceReport_Coverage_NoCalls) {
|
||||
buffer);
|
||||
}
|
||||
|
||||
ISOLATE_UNIT_TEST_CASE(SourceReport_Coverage_Filters_single) {
|
||||
// WARNING: This MUST be big enough for the serialized JSON string.
|
||||
const int kBufferSize = 1024;
|
||||
char buffer[kBufferSize];
|
||||
const char* kScript =
|
||||
"main() {\n"
|
||||
"}";
|
||||
|
||||
Library& lib = Library::Handle();
|
||||
lib ^= ExecuteScript(kScript);
|
||||
ASSERT(!lib.IsNull());
|
||||
|
||||
GrowableObjectArray& filters =
|
||||
GrowableObjectArray::Handle(GrowableObjectArray::New());
|
||||
filters.Add(String::Handle(String::New(RESOLVED_USER_TEST_URI)));
|
||||
SourceReport report(SourceReport::kCoverage, filters);
|
||||
JSONStream js;
|
||||
report.PrintJSON(&js, Script::Handle(Script::null()));
|
||||
const char* json_str = js.ToCString();
|
||||
ASSERT(strlen(json_str) < kBufferSize);
|
||||
ElideJSONSubstring("libraries", json_str, buffer);
|
||||
EXPECT_STREQ(
|
||||
"{\"type\":\"SourceReport\",\"ranges\":"
|
||||
|
||||
// One compiled range, one hit at function declaration.
|
||||
"[{\"scriptIndex\":0,\"startPos\":0,\"endPos\":9,\"compiled\":true,"
|
||||
"\"coverage\":{\"hits\":[0],\"misses\":[]}}],"
|
||||
|
||||
// One script in the script table.
|
||||
"\"scripts\":[{\"type\":\"@Script\",\"fixedId\":true,\"id\":\"\","
|
||||
"\"uri\":\"file:\\/\\/\\/test-lib\",\"_kind\":\"kernel\"}]}",
|
||||
buffer);
|
||||
}
|
||||
|
||||
ISOLATE_UNIT_TEST_CASE(SourceReport_Coverage_Filters_empty) {
|
||||
// WARNING: This MUST be big enough for the serialized JSON string.
|
||||
const int kBufferSize = 1024;
|
||||
char buffer[kBufferSize];
|
||||
const char* kScript =
|
||||
"main() {\n"
|
||||
"}";
|
||||
|
||||
Library& lib = Library::Handle();
|
||||
lib ^= ExecuteScript(kScript);
|
||||
ASSERT(!lib.IsNull());
|
||||
|
||||
GrowableObjectArray& filters =
|
||||
GrowableObjectArray::Handle(GrowableObjectArray::New());
|
||||
filters.Add(String::Handle(String::New("foo:bar/")));
|
||||
SourceReport report(SourceReport::kCoverage, filters);
|
||||
JSONStream js;
|
||||
report.PrintJSON(&js, Script::Handle(Script::null()));
|
||||
const char* json_str = js.ToCString();
|
||||
ASSERT(strlen(json_str) < kBufferSize);
|
||||
ElideJSONSubstring("libraries", json_str, buffer);
|
||||
EXPECT_STREQ(
|
||||
"{\"type\":\"SourceReport\",\"ranges\":"
|
||||
|
||||
// No compiled range.
|
||||
"[],"
|
||||
|
||||
// No script.
|
||||
"\"scripts\":[]}",
|
||||
buffer);
|
||||
}
|
||||
|
||||
ISOLATE_UNIT_TEST_CASE(SourceReport_Coverage_SimpleCall) {
|
||||
// WARNING: This MUST be big enough for the serialized JSON string.
|
||||
const int kBufferSize = 1024;
|
||||
|
||||
Reference in New Issue
Block a user