Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(376)

Unified Diff: runtime/vm/service_test.cc

Issue 346003003: vmservice: Add /coverage collection to scripts, classes and libraries. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: exclude service_classescoverage from simmips tests Created 6 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« runtime/vm/service.cc ('K') | « runtime/vm/service.cc ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: runtime/vm/service_test.cc
diff --git a/runtime/vm/service_test.cc b/runtime/vm/service_test.cc
index 0f45894d873a2c770a67301e167974e0091a1465..51a19aa4b68e3a65307a545be54e6279a341d19f 100644
--- a/runtime/vm/service_test.cc
+++ b/runtime/vm/service_test.cc
@@ -1236,6 +1236,161 @@ TEST_CASE(Service_Coverage) {
"[5,1,6,1]}", handler.msg());
}
+
+TEST_CASE(Service_ScriptsCoverage) {
+ const char* kScript =
+ "var port;\n" // Set to our mock port by C++.
+ "\n"
+ "var x = 7;\n"
+ "main() {\n"
+ " x = x * x;\n"
+ " x = x / 13;\n"
+ "}";
+
+ Isolate* isolate = Isolate::Current();
+ Dart_Handle h_lib = TestCase::LoadTestScript(kScript, NULL);
+ EXPECT_VALID(h_lib);
+ Library& lib = Library::Handle();
+ lib ^= Api::UnwrapHandle(h_lib);
+ EXPECT(!lib.IsNull());
+ Dart_Handle result = Dart_Invoke(h_lib, NewString("main"), 0, NULL);
+ EXPECT_VALID(result);
+
+ // Build a mock message handler and wrap it in a dart port.
+ ServiceTestMessageHandler handler;
+ Dart_Port port_id = PortMap::CreatePort(&handler);
+ Dart_Handle port = Api::NewHandle(isolate, SendPort::New(port_id));
+ EXPECT_VALID(port);
+ EXPECT_VALID(Dart_SetField(h_lib, NewString("port"), port));
+
+ Instance& service_msg = Instance::Handle();
+ service_msg = Eval(
+ h_lib, "[0, port, ['scripts', 'test-lib', 'coverage'], [], []]");
+ Service::HandleIsolateMessage(isolate, service_msg);
+ handler.HandleNextMessage();
+ EXPECT_STREQ(
+ "{\"type\":\"CodeCoverage\",\"id\":\"coverage\",\"coverage\":["
+ "{\"source\":\"test-lib\",\"script\":{"
+ "\"type\":\"@Script\",\"id\":\"scripts\\/test-lib\","
+ "\"name\":\"test-lib\",\"user_name\":\"test-lib\","
+ "\"kind\":\"script\"},\"hits\":[5,1,6,1]}]}", handler.msg());
+}
+
+
+TEST_CASE(Service_LibrariesCoverage) {
+ const char* kScript =
+ "var port;\n" // Set to our mock port by C++.
+ "\n"
+ "var x = 7;\n"
+ "main() {\n"
+ " x = x * x;\n"
+ " x = x / 13;\n"
+ "}";
+
+ Isolate* isolate = Isolate::Current();
+ Dart_Handle h_lib = TestCase::LoadTestScript(kScript, NULL);
+ EXPECT_VALID(h_lib);
+ Library& lib = Library::Handle();
+ lib ^= Api::UnwrapHandle(h_lib);
+ EXPECT(!lib.IsNull());
+ Dart_Handle result = Dart_Invoke(h_lib, NewString("main"), 0, NULL);
+ EXPECT_VALID(result);
+
+ // Build a mock message handler and wrap it in a dart port.
+ ServiceTestMessageHandler handler;
+ Dart_Port port_id = PortMap::CreatePort(&handler);
+ Dart_Handle port = Api::NewHandle(isolate, SendPort::New(port_id));
+ EXPECT_VALID(port);
+ EXPECT_VALID(Dart_SetField(h_lib, NewString("port"), port));
+
+ // Look up the service id for the library containg the test-lib script.
+ const GrowableObjectArray& libs =
+ GrowableObjectArray::Handle(isolate->object_store()->libraries());
+ intptr_t i;
+ for (i = 0; i < libs.Length(); i++) {
+ if (libs.At(i) == lib.raw()) {
+ break;
+ }
+ }
+ ASSERT(i != libs.Length());
+ char buf[1024];
+ OS::SNPrint(buf, sizeof(buf),
+ "[0, port, ['libraries', '%" Pd "', 'coverage'], [], []]", i);
+
+ Instance& service_msg = Instance::Handle();
+ service_msg = Eval(h_lib, buf);
+ Service::HandleIsolateMessage(isolate, service_msg);
+ handler.HandleNextMessage();
+ EXPECT_STREQ(
+ "{\"type\":\"CodeCoverage\",\"id\":\"coverage\",\"coverage\":["
+ "{\"source\":\"test-lib\",\"script\":{"
+ "\"type\":\"@Script\",\"id\":\"scripts\\/test-lib\","
+ "\"name\":\"test-lib\",\"user_name\":\"test-lib\","
+ "\"kind\":\"script\"},\"hits\":[5,1,6,1]}]}", handler.msg());
+}
+
+
+TEST_CASE(Service_ClassesCoverage) {
+ const char* kScript =
+ "var port;\n" // Set to our mock port by C++.
+ "\n"
+ "class Foo {\n"
+ " var x;\n"
+ " Foo(this.x);\n"
+ " bar() {\n"
+ " x = x * x;\n"
+ " x = x / 13;\n"
+ " }\n"
+ "}\n"
+ "main() {\n"
+ " var foo = new Foo(7);\n"
+ " foo.bar();\n"
+ "}";
+
+ Isolate* isolate = Isolate::Current();
+ Dart_Handle h_lib = TestCase::LoadTestScript(kScript, NULL);
+ EXPECT_VALID(h_lib);
+ Library& lib = Library::Handle();
+ lib ^= Api::UnwrapHandle(h_lib);
+ EXPECT(!lib.IsNull());
+ Dart_Handle result = Dart_Invoke(h_lib, NewString("main"), 0, NULL);
+ EXPECT_VALID(result);
+
+ // Build a mock message handler and wrap it in a dart port.
+ ServiceTestMessageHandler handler;
+ Dart_Port port_id = PortMap::CreatePort(&handler);
+ Dart_Handle port = Api::NewHandle(isolate, SendPort::New(port_id));
+ EXPECT_VALID(port);
+ EXPECT_VALID(Dart_SetField(h_lib, NewString("port"), port));
+
+ // Look up the service id of Foo.
+ const Class& cls = Class::Handle(
+ lib.LookupClass(String::Handle(String::New("Foo"))));
+ ASSERT(!cls.IsNull());
+ ClassTable* table = isolate->class_table();
+ intptr_t i;
+ for (i = 1; i < table->NumCids(); i++) {
+ if (table->HasValidClassAt(i) && table->At(i) == cls.raw()) {
+ break;
+ }
+ }
+ ASSERT(i != table->NumCids());
+ char buf[1024];
+ OS::SNPrint(buf, sizeof(buf),
+ "[0, port, ['classes', '%" Pd "', 'coverage'], [], []]", i);
+
+ Instance& service_msg = Instance::Handle();
+ service_msg = Eval(h_lib, buf);
+ Service::HandleIsolateMessage(isolate, service_msg);
+ handler.HandleNextMessage();
+ EXPECT_STREQ(
+ "{\"type\":\"CodeCoverage\",\"id\":\"coverage\",\"coverage\":["
+ "{\"source\":\"test-lib\",\"script\":{"
+ "\"type\":\"@Script\",\"id\":\"scripts\\/test-lib\","
+ "\"name\":\"test-lib\",\"user_name\":\"test-lib\","
+ "\"kind\":\"script\"},\"hits\":[5,1,7,4,8,3]}]}", handler.msg());
+}
+
#endif
« runtime/vm/service.cc ('K') | « runtime/vm/service.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698