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

Side by Side Diff: runtime/vm/service_test.cc

Issue 300223011: - Add possibility to redirect messages if they were not delivered. (Closed) Base URL: http://dart.googlecode.com/svn/branches/bleeding_edge/dart/
Patch Set: 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 unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « runtime/vm/service/message.dart ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a 2 // for details. All rights reserved. Use of this source code is governed by a
3 // BSD-style license that can be found in the LICENSE file. 3 // BSD-style license that can be found in the LICENSE file.
4 4
5 #include "platform/globals.h" 5 #include "platform/globals.h"
6 6
7 #include "include/dart_debugger_api.h" 7 #include "include/dart_debugger_api.h"
8 #include "vm/dart_api_impl.h" 8 #include "vm/dart_api_impl.h"
9 #include "vm/dart_entry.h" 9 #include "vm/dart_entry.h"
10 #include "vm/debugger.h" 10 #include "vm/debugger.h"
(...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after
83 } 83 }
84 84
85 const char* msg() const { return _msg; } 85 const char* msg() const { return _msg; }
86 86
87 private: 87 private:
88 char* _msg; 88 char* _msg;
89 }; 89 };
90 90
91 91
92 static RawInstance* Eval(Dart_Handle lib, const char* expr) { 92 static RawInstance* Eval(Dart_Handle lib, const char* expr) {
93 Dart_Handle result = Dart_EvaluateExpr(lib, NewString(expr)); 93 Dart_Handle expr_val = Dart_EvaluateExpr(lib, NewString(expr));
94 EXPECT_VALID(result); 94 EXPECT_VALID(expr_val);
95 Isolate* isolate = Isolate::Current(); 95 Isolate* isolate = Isolate::Current();
96 const Instance& instance = Api::UnwrapInstanceHandle(isolate, result); 96 const GrowableObjectArray& value =
97 return instance.raw(); 97 Api::UnwrapGrowableObjectArrayHandle(isolate, expr_val);
98 const Array& result = Array::Handle(Array::MakeArray(value));
99 GrowableObjectArray& growable = GrowableObjectArray::Handle();
100 growable ^= result.At(3);
101 Array& array = Array::Handle(Array::MakeArray(growable));
102 result.SetAt(3, array);
103 growable ^= result.At(4);
104 array = Array::MakeArray(growable);
105 result.SetAt(4, array);
106 return result.raw();
98 } 107 }
99 108
100 109
101 static RawInstance* EvalF(Dart_Handle lib, const char* fmt, ...) { 110 static RawInstance* EvalF(Dart_Handle lib, const char* fmt, ...) {
102 Isolate* isolate = Isolate::Current(); 111 Isolate* isolate = Isolate::Current();
103 112
104 va_list args; 113 va_list args;
105 va_start(args, fmt); 114 va_start(args, fmt);
106 intptr_t len = OS::VSNPrint(NULL, 0, fmt, args); 115 intptr_t len = OS::VSNPrint(NULL, 0, fmt, args);
107 va_end(args); 116 va_end(args);
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after
168 // Build a mock message handler and wrap it in a dart port. 177 // Build a mock message handler and wrap it in a dart port.
169 ServiceTestMessageHandler handler; 178 ServiceTestMessageHandler handler;
170 Dart_Port port_id = PortMap::CreatePort(&handler); 179 Dart_Port port_id = PortMap::CreatePort(&handler);
171 Dart_Handle port = Api::NewHandle(isolate, SendPort::New(port_id)); 180 Dart_Handle port = Api::NewHandle(isolate, SendPort::New(port_id));
172 EXPECT_VALID(port); 181 EXPECT_VALID(port);
173 EXPECT_VALID(Dart_SetField(lib, NewString("port"), port)); 182 EXPECT_VALID(Dart_SetField(lib, NewString("port"), port));
174 183
175 Instance& service_msg = Instance::Handle(); 184 Instance& service_msg = Instance::Handle();
176 185
177 // Get the isolate summary. 186 // Get the isolate summary.
178 service_msg = Eval(lib, "[port, [], [], []]"); 187 service_msg = Eval(lib, "[0, port, [], [], []]");
179 Service::HandleIsolateMessage(isolate, service_msg); 188 Service::HandleIsolateMessage(isolate, service_msg);
180 handler.HandleNextMessage(); 189 handler.HandleNextMessage();
181 190
182 JSONReader reader(handler.msg()); 191 JSONReader reader(handler.msg());
183 192
184 const int kBufferSize = 128; 193 const int kBufferSize = 128;
185 char buffer[kBufferSize]; 194 char buffer[kBufferSize];
186 195
187 // Check that the response string is somewhat sane. 196 // Check that the response string is somewhat sane.
188 197
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
223 // Build a mock message handler and wrap it in a dart port. 232 // Build a mock message handler and wrap it in a dart port.
224 ServiceTestMessageHandler handler; 233 ServiceTestMessageHandler handler;
225 Dart_Port port_id = PortMap::CreatePort(&handler); 234 Dart_Port port_id = PortMap::CreatePort(&handler);
226 Dart_Handle port = Api::NewHandle(isolate, SendPort::New(port_id)); 235 Dart_Handle port = Api::NewHandle(isolate, SendPort::New(port_id));
227 EXPECT_VALID(port); 236 EXPECT_VALID(port);
228 EXPECT_VALID(Dart_SetField(lib, NewString("port"), port)); 237 EXPECT_VALID(Dart_SetField(lib, NewString("port"), port));
229 238
230 Instance& service_msg = Instance::Handle(); 239 Instance& service_msg = Instance::Handle();
231 240
232 // Get the stacktrace. 241 // Get the stacktrace.
233 service_msg = Eval(lib, "[port, ['stacktrace'], [], []]"); 242 service_msg = Eval(lib, "[0, port, ['stacktrace'], [], []]");
234 Service::HandleIsolateMessage(isolate, service_msg); 243 Service::HandleIsolateMessage(isolate, service_msg);
235 handler.HandleNextMessage(); 244 handler.HandleNextMessage();
236 EXPECT_STREQ( 245 EXPECT_STREQ(
237 "{\"type\":\"StackTrace\",\"id\":\"stacktrace\",\"members\":[]}", 246 "{\"type\":\"StackTrace\",\"id\":\"stacktrace\",\"members\":[]}",
238 handler.msg()); 247 handler.msg());
239 248
240 // Malformed request. 249 // Malformed request.
241 service_msg = Eval(lib, "[port, ['stacktrace', 'jamboree'], [], []]"); 250 service_msg = Eval(lib, "[0, port, ['stacktrace', 'jamboree'], [], []]");
242 Service::HandleIsolateMessage(isolate, service_msg); 251 Service::HandleIsolateMessage(isolate, service_msg);
243 handler.HandleNextMessage(); 252 handler.HandleNextMessage();
244 EXPECT_STREQ( 253 EXPECT_STREQ(
245 "{\"type\":\"Error\",\"id\":\"\",\"message\":\"Command too long\"," 254 "{\"type\":\"Error\",\"id\":\"\",\"message\":\"Command too long\","
246 "\"request\":{\"arguments\":[\"stacktrace\",\"jamboree\"]," 255 "\"request\":{\"arguments\":[\"stacktrace\",\"jamboree\"],"
247 "\"option_keys\":[],\"option_values\":[]}}", 256 "\"option_keys\":[],\"option_values\":[]}}",
248 handler.msg()); 257 handler.msg());
249 } 258 }
250 259
251 260
(...skipping 15 matching lines...) Expand all
267 EXPECT_VALID(port); 276 EXPECT_VALID(port);
268 EXPECT_VALID(Dart_SetField(lib, NewString("port"), port)); 277 EXPECT_VALID(Dart_SetField(lib, NewString("port"), port));
269 278
270 Instance& service_msg = Instance::Handle(); 279 Instance& service_msg = Instance::Handle();
271 280
272 // Add a breakpoint. 281 // Add a breakpoint.
273 const String& url = String::Handle(String::New(TestCase::url())); 282 const String& url = String::Handle(String::New(TestCase::url()));
274 isolate->debugger()->SetBreakpointAtLine(url, 3); 283 isolate->debugger()->SetBreakpointAtLine(url, 3);
275 284
276 // Get the breakpoint list. 285 // Get the breakpoint list.
277 service_msg = Eval(lib, "[port, ['debug', 'breakpoints'], [], []]"); 286 service_msg = Eval(lib, "[0, port, ['debug', 'breakpoints'], [], []]");
278 Service::HandleIsolateMessage(isolate, service_msg); 287 Service::HandleIsolateMessage(isolate, service_msg);
279 handler.HandleNextMessage(); 288 handler.HandleNextMessage();
280 EXPECT_STREQ( 289 EXPECT_STREQ(
281 "{\"type\":\"BreakpointList\",\"breakpoints\":[{" 290 "{\"type\":\"BreakpointList\",\"breakpoints\":[{"
282 "\"type\":\"Breakpoint\",\"id\":1,\"enabled\":true," 291 "\"type\":\"Breakpoint\",\"id\":1,\"enabled\":true,"
283 "\"resolved\":false," 292 "\"resolved\":false,"
284 "\"location\":{\"type\":\"Location\"," 293 "\"location\":{\"type\":\"Location\","
285 "\"script\":\"test-lib\",\"tokenPos\":5}}]}", 294 "\"script\":\"test-lib\",\"tokenPos\":5}}]}",
286 handler.msg()); 295 handler.msg());
287 296
288 // Individual breakpoint. 297 // Individual breakpoint.
289 service_msg = Eval(lib, "[port, ['debug', 'breakpoints', '1'], [], []]"); 298 service_msg = Eval(lib, "[0, port, ['debug', 'breakpoints', '1'], [], []]");
290 Service::HandleIsolateMessage(isolate, service_msg); 299 Service::HandleIsolateMessage(isolate, service_msg);
291 handler.HandleNextMessage(); 300 handler.HandleNextMessage();
292 EXPECT_STREQ( 301 EXPECT_STREQ(
293 "{\"type\":\"Breakpoint\",\"id\":1,\"enabled\":true," 302 "{\"type\":\"Breakpoint\",\"id\":1,\"enabled\":true,"
294 "\"resolved\":false," 303 "\"resolved\":false,"
295 "\"location\":{\"type\":\"Location\"," 304 "\"location\":{\"type\":\"Location\","
296 "\"script\":\"test-lib\",\"tokenPos\":5}}", 305 "\"script\":\"test-lib\",\"tokenPos\":5}}",
297 handler.msg()); 306 handler.msg());
298 307
299 // Missing sub-command. 308 // Missing sub-command.
300 service_msg = Eval(lib, "[port, ['debug'], [], []]"); 309 service_msg = Eval(lib, "[0, port, ['debug'], [], []]");
301 Service::HandleIsolateMessage(isolate, service_msg); 310 Service::HandleIsolateMessage(isolate, service_msg);
302 handler.HandleNextMessage(); 311 handler.HandleNextMessage();
303 EXPECT_STREQ( 312 EXPECT_STREQ(
304 "{\"type\":\"Error\",\"id\":\"\"," 313 "{\"type\":\"Error\",\"id\":\"\","
305 "\"message\":\"Must specify a subcommand\"," 314 "\"message\":\"Must specify a subcommand\","
306 "\"request\":{\"arguments\":[\"debug\"],\"option_keys\":[]," 315 "\"request\":{\"arguments\":[\"debug\"],\"option_keys\":[],"
307 "\"option_values\":[]}}", 316 "\"option_values\":[]}}",
308 handler.msg()); 317 handler.msg());
309 318
310 // Unrecognized breakpoint. 319 // Unrecognized breakpoint.
311 service_msg = Eval(lib, "[port, ['debug', 'breakpoints', '1111'], [], []]"); 320 service_msg = Eval(lib,
321 "[0, port, ['debug', 'breakpoints', '1111'], [], []]");
312 Service::HandleIsolateMessage(isolate, service_msg); 322 Service::HandleIsolateMessage(isolate, service_msg);
313 handler.HandleNextMessage(); 323 handler.HandleNextMessage();
314 EXPECT_STREQ("{\"type\":\"Error\",\"id\":\"\"," 324 EXPECT_STREQ("{\"type\":\"Error\",\"id\":\"\","
315 "\"message\":\"Unrecognized breakpoint id 1111\"," 325 "\"message\":\"Unrecognized breakpoint id 1111\","
316 "\"request\":{" 326 "\"request\":{"
317 "\"arguments\":[\"debug\",\"breakpoints\",\"1111\"]," 327 "\"arguments\":[\"debug\",\"breakpoints\",\"1111\"],"
318 "\"option_keys\":[],\"option_values\":[]}}", 328 "\"option_keys\":[],\"option_values\":[]}}",
319 handler.msg()); 329 handler.msg());
320 330
321 // Command too long. 331 // Command too long.
322 service_msg = 332 service_msg =
323 Eval(lib, "[port, ['debug', 'breakpoints', '1111', 'green'], [], []]"); 333 Eval(lib, "[0, port, ['debug', 'breakpoints', '1111', 'green'], [], []]");
324 Service::HandleIsolateMessage(isolate, service_msg); 334 Service::HandleIsolateMessage(isolate, service_msg);
325 handler.HandleNextMessage(); 335 handler.HandleNextMessage();
326 EXPECT_STREQ("{\"type\":\"Error\",\"id\":\"\"," 336 EXPECT_STREQ("{\"type\":\"Error\",\"id\":\"\","
327 "\"message\":\"Command too long\"," 337 "\"message\":\"Command too long\","
328 "\"request\":{\"arguments\":[\"debug\",\"breakpoints\"," 338 "\"request\":{\"arguments\":[\"debug\",\"breakpoints\","
329 "\"1111\",\"green\"]," 339 "\"1111\",\"green\"],"
330 "\"option_keys\":[],\"option_values\":[]}}", 340 "\"option_keys\":[],\"option_values\":[]}}",
331 handler.msg()); 341 handler.msg());
332 342
333 // Unrecognized subcommand. 343 // Unrecognized subcommand.
334 service_msg = Eval(lib, "[port, ['debug', 'nosferatu'], [], []]"); 344 service_msg = Eval(lib, "[0, port, ['debug', 'nosferatu'], [], []]");
335 Service::HandleIsolateMessage(isolate, service_msg); 345 Service::HandleIsolateMessage(isolate, service_msg);
336 handler.HandleNextMessage(); 346 handler.HandleNextMessage();
337 EXPECT_STREQ("{\"type\":\"Error\",\"id\":\"\"," 347 EXPECT_STREQ("{\"type\":\"Error\",\"id\":\"\","
338 "\"message\":\"Unrecognized subcommand 'nosferatu'\"," 348 "\"message\":\"Unrecognized subcommand 'nosferatu'\","
339 "\"request\":{\"arguments\":[\"debug\",\"nosferatu\"]," 349 "\"request\":{\"arguments\":[\"debug\",\"nosferatu\"],"
340 "\"option_keys\":[],\"option_values\":[]}}", 350 "\"option_keys\":[],\"option_values\":[]}}",
341 handler.msg()); 351 handler.msg());
342 } 352 }
343 353
344 354
(...skipping 25 matching lines...) Expand all
370 arr.SetAt(0, str); 380 arr.SetAt(0, str);
371 } 381 }
372 intptr_t arr_id = ring->GetIdForObject(arr.raw()); 382 intptr_t arr_id = ring->GetIdForObject(arr.raw());
373 Dart_Handle valid_id = Dart_NewInteger(arr_id); 383 Dart_Handle valid_id = Dart_NewInteger(arr_id);
374 EXPECT_VALID(valid_id); 384 EXPECT_VALID(valid_id);
375 EXPECT_VALID(Dart_SetField(lib, NewString("validId"), valid_id)); 385 EXPECT_VALID(Dart_SetField(lib, NewString("validId"), valid_id));
376 386
377 Instance& service_msg = Instance::Handle(); 387 Instance& service_msg = Instance::Handle();
378 388
379 // null 389 // null
380 service_msg = Eval(lib, "[port, ['objects', 'null'], [], []]"); 390 service_msg = Eval(lib, "[0, port, ['objects', 'null'], [], []]");
381 Service::HandleIsolateMessage(isolate, service_msg); 391 Service::HandleIsolateMessage(isolate, service_msg);
382 handler.HandleNextMessage(); 392 handler.HandleNextMessage();
383 handler.filterMsg("name"); 393 handler.filterMsg("name");
384 EXPECT_STREQ( 394 EXPECT_STREQ(
385 "{\"type\":\"Null\",\"id\":\"objects\\/null\"," 395 "{\"type\":\"Null\",\"id\":\"objects\\/null\","
386 "\"valueAsString\":\"null\"}", 396 "\"valueAsString\":\"null\"}",
387 handler.msg()); 397 handler.msg());
388 398
389 // not initialized 399 // not initialized
390 service_msg = Eval(lib, "[port, ['objects', 'not-initialized'], [], []]"); 400 service_msg = Eval(lib, "[0, port, ['objects', 'not-initialized'], [], []]");
391 Service::HandleIsolateMessage(isolate, service_msg); 401 Service::HandleIsolateMessage(isolate, service_msg);
392 handler.HandleNextMessage(); 402 handler.HandleNextMessage();
393 handler.filterMsg("name"); 403 handler.filterMsg("name");
394 EXPECT_STREQ( 404 EXPECT_STREQ(
395 "{\"type\":\"Null\",\"id\":\"objects\\/not-initialized\"," 405 "{\"type\":\"Null\",\"id\":\"objects\\/not-initialized\","
396 "\"valueAsString\":\"<not initialized>\"}", 406 "\"valueAsString\":\"<not initialized>\"}",
397 handler.msg()); 407 handler.msg());
398 408
399 // being initialized 409 // being initialized
400 service_msg = Eval(lib, "[port, ['objects', 'being-initialized'], [], []]"); 410 service_msg = Eval(lib,
411 "[0, port, ['objects', 'being-initialized'], [], []]");
401 Service::HandleIsolateMessage(isolate, service_msg); 412 Service::HandleIsolateMessage(isolate, service_msg);
402 handler.HandleNextMessage(); 413 handler.HandleNextMessage();
403 handler.filterMsg("name"); 414 handler.filterMsg("name");
404 EXPECT_STREQ( 415 EXPECT_STREQ(
405 "{\"type\":\"Null\",\"id\":\"objects\\/being-initialized\"," 416 "{\"type\":\"Null\",\"id\":\"objects\\/being-initialized\","
406 "\"valueAsString\":\"<being initialized>\"}", 417 "\"valueAsString\":\"<being initialized>\"}",
407 handler.msg()); 418 handler.msg());
408 419
409 // optimized out 420 // optimized out
410 service_msg = Eval(lib, "[port, ['objects', 'optimized-out'], [], []]"); 421 service_msg = Eval(lib, "[0, port, ['objects', 'optimized-out'], [], []]");
411 Service::HandleIsolateMessage(isolate, service_msg); 422 Service::HandleIsolateMessage(isolate, service_msg);
412 handler.HandleNextMessage(); 423 handler.HandleNextMessage();
413 handler.filterMsg("name"); 424 handler.filterMsg("name");
414 EXPECT_STREQ( 425 EXPECT_STREQ(
415 "{\"type\":\"Null\",\"id\":\"objects\\/optimized-out\"," 426 "{\"type\":\"Null\",\"id\":\"objects\\/optimized-out\","
416 "\"valueAsString\":\"<optimized out>\"}", 427 "\"valueAsString\":\"<optimized out>\"}",
417 handler.msg()); 428 handler.msg());
418 429
419 // collected 430 // collected
420 service_msg = Eval(lib, "[port, ['objects', 'collected'], [], []]"); 431 service_msg = Eval(lib, "[0, port, ['objects', 'collected'], [], []]");
421 Service::HandleIsolateMessage(isolate, service_msg); 432 Service::HandleIsolateMessage(isolate, service_msg);
422 handler.HandleNextMessage(); 433 handler.HandleNextMessage();
423 handler.filterMsg("name"); 434 handler.filterMsg("name");
424 EXPECT_STREQ( 435 EXPECT_STREQ(
425 "{\"type\":\"Null\",\"id\":\"objects\\/collected\"," 436 "{\"type\":\"Null\",\"id\":\"objects\\/collected\","
426 "\"valueAsString\":\"<collected>\"}", 437 "\"valueAsString\":\"<collected>\"}",
427 handler.msg()); 438 handler.msg());
428 439
429 // expired 440 // expired
430 service_msg = Eval(lib, "[port, ['objects', 'expired'], [], []]"); 441 service_msg = Eval(lib, "[0, port, ['objects', 'expired'], [], []]");
431 Service::HandleIsolateMessage(isolate, service_msg); 442 Service::HandleIsolateMessage(isolate, service_msg);
432 handler.HandleNextMessage(); 443 handler.HandleNextMessage();
433 handler.filterMsg("name"); 444 handler.filterMsg("name");
434 EXPECT_STREQ( 445 EXPECT_STREQ(
435 "{\"type\":\"Null\",\"id\":\"objects\\/expired\"," 446 "{\"type\":\"Null\",\"id\":\"objects\\/expired\","
436 "\"valueAsString\":\"<expired>\"}", 447 "\"valueAsString\":\"<expired>\"}",
437 handler.msg()); 448 handler.msg());
438 449
439 // bool 450 // bool
440 service_msg = Eval(lib, "[port, ['objects', 'bool-true'], [], []]"); 451 service_msg = Eval(lib, "[0, port, ['objects', 'bool-true'], [], []]");
441 Service::HandleIsolateMessage(isolate, service_msg); 452 Service::HandleIsolateMessage(isolate, service_msg);
442 handler.HandleNextMessage(); 453 handler.HandleNextMessage();
443 handler.filterMsg("name"); 454 handler.filterMsg("name");
444 EXPECT_STREQ( 455 EXPECT_STREQ(
445 "{\"type\":\"Bool\",\"id\":\"objects\\/bool-true\"," 456 "{\"type\":\"Bool\",\"id\":\"objects\\/bool-true\","
446 "\"class\":{\"type\":\"@Class\",\"id\":\"classes\\/46\"," 457 "\"class\":{\"type\":\"@Class\",\"id\":\"classes\\/46\","
447 "\"user_name\":\"bool\"},\"valueAsString\":\"true\"}", 458 "\"user_name\":\"bool\"},\"valueAsString\":\"true\"}",
448 handler.msg()); 459 handler.msg());
449 460
450 // int 461 // int
451 service_msg = Eval(lib, "[port, ['objects', 'int-123'], [], []]"); 462 service_msg = Eval(lib, "[0, port, ['objects', 'int-123'], [], []]");
452 Service::HandleIsolateMessage(isolate, service_msg); 463 Service::HandleIsolateMessage(isolate, service_msg);
453 handler.HandleNextMessage(); 464 handler.HandleNextMessage();
454 handler.filterMsg("name"); 465 handler.filterMsg("name");
455 EXPECT_STREQ( 466 EXPECT_STREQ(
456 "{\"type\":\"Smi\"," 467 "{\"type\":\"Smi\","
457 "\"class\":{\"type\":\"@Class\",\"id\":\"classes\\/42\"," 468 "\"class\":{\"type\":\"@Class\",\"id\":\"classes\\/42\","
458 "\"user_name\":\"_Smi\"}," 469 "\"user_name\":\"_Smi\"},"
459 "\"fields\":[]," 470 "\"fields\":[],"
460 "\"id\":\"objects\\/int-123\"," 471 "\"id\":\"objects\\/int-123\","
461 "\"valueAsString\":\"123\"}", 472 "\"valueAsString\":\"123\"}",
462 handler.msg()); 473 handler.msg());
463 474
464 // object id ring / valid 475 // object id ring / valid
465 service_msg = Eval(lib, "[port, ['objects', '$validId'], [], []]"); 476 service_msg = Eval(lib, "[0, port, ['objects', '$validId'], [], []]");
466 Service::HandleIsolateMessage(isolate, service_msg); 477 Service::HandleIsolateMessage(isolate, service_msg);
467 handler.HandleNextMessage(); 478 handler.HandleNextMessage();
468 handler.filterMsg("name"); 479 handler.filterMsg("name");
469 handler.filterMsg("size"); 480 handler.filterMsg("size");
470 handler.filterMsg("id"); 481 handler.filterMsg("id");
471 EXPECT_STREQ( 482 EXPECT_STREQ(
472 "{\"type\":\"Array\"," 483 "{\"type\":\"Array\","
473 "\"class\":{\"type\":\"@Class\",\"user_name\":\"_List\"}," 484 "\"class\":{\"type\":\"@Class\",\"user_name\":\"_List\"},"
474 "\"fields\":[]," 485 "\"fields\":[],"
475 "\"length\":1," 486 "\"length\":1,"
476 "\"elements\":[{" 487 "\"elements\":[{"
477 "\"index\":0," 488 "\"index\":0,"
478 "\"value\":{\"type\":\"@String\"," 489 "\"value\":{\"type\":\"@String\","
479 "\"class\":{\"type\":\"@Class\",\"user_name\":\"_OneByteString\"}," 490 "\"class\":{\"type\":\"@Class\",\"user_name\":\"_OneByteString\"},"
480 "\"valueAsString\":\"\\\"value\\\"\"}}]}", 491 "\"valueAsString\":\"\\\"value\\\"\"}}]}",
481 handler.msg()); 492 handler.msg());
482 493
483 // object id ring / invalid => expired 494 // object id ring / invalid => expired
484 service_msg = Eval(lib, "[port, ['objects', '99999999'], [], []]"); 495 service_msg = Eval(lib, "[0, port, ['objects', '99999999'], [], []]");
485 Service::HandleIsolateMessage(isolate, service_msg); 496 Service::HandleIsolateMessage(isolate, service_msg);
486 handler.HandleNextMessage(); 497 handler.HandleNextMessage();
487 handler.filterMsg("name"); 498 handler.filterMsg("name");
488 EXPECT_STREQ( 499 EXPECT_STREQ(
489 "{\"type\":\"Null\",\"id\":\"objects\\/expired\"," 500 "{\"type\":\"Null\",\"id\":\"objects\\/expired\","
490 "\"valueAsString\":\"<expired>\"}", 501 "\"valueAsString\":\"<expired>\"}",
491 handler.msg()); 502 handler.msg());
492 503
493 // expired/eval => error 504 // expired/eval => error
494 service_msg = Eval(lib, "[port, ['objects', 'expired', 'eval'], [], []]"); 505 service_msg = Eval(lib, "[0, port, ['objects', 'expired', 'eval'], [], []]");
495 Service::HandleIsolateMessage(isolate, service_msg); 506 Service::HandleIsolateMessage(isolate, service_msg);
496 handler.HandleNextMessage(); 507 handler.HandleNextMessage();
497 handler.filterMsg("name"); 508 handler.filterMsg("name");
498 EXPECT_STREQ( 509 EXPECT_STREQ(
499 "{\"type\":\"Error\",\"id\":\"\"," 510 "{\"type\":\"Error\",\"id\":\"\","
500 "\"message\":\"expected at most 2 arguments but found 3\\n\"," 511 "\"message\":\"expected at most 2 arguments but found 3\\n\","
501 "\"request\":{\"arguments\":[\"objects\",\"expired\",\"eval\"]," 512 "\"request\":{\"arguments\":[\"objects\",\"expired\",\"eval\"],"
502 "\"option_keys\":[],\"option_values\":[]}}", 513 "\"option_keys\":[],\"option_values\":[]}}",
503 handler.msg()); 514 handler.msg());
504 515
505 // int/eval => good 516 // int/eval => good
506 service_msg = Eval(lib, 517 service_msg = Eval(lib,
507 "[port, ['objects', 'int-123', 'eval'], " 518 "[0, port, ['objects', 'int-123', 'eval'], "
508 "['expr'], ['this+99']]"); 519 "['expr'], ['this+99']]");
509 Service::HandleIsolateMessage(isolate, service_msg); 520 Service::HandleIsolateMessage(isolate, service_msg);
510 handler.HandleNextMessage(); 521 handler.HandleNextMessage();
511 handler.filterMsg("name"); 522 handler.filterMsg("name");
512 EXPECT_STREQ( 523 EXPECT_STREQ(
513 "{\"type\":\"@Smi\"," 524 "{\"type\":\"@Smi\","
514 "\"class\":{\"type\":\"@Class\",\"id\":\"classes\\/42\"," 525 "\"class\":{\"type\":\"@Class\",\"id\":\"classes\\/42\","
515 "\"user_name\":\"_Smi\"}," 526 "\"user_name\":\"_Smi\"},"
516 "\"id\":\"objects\\/int-222\"," 527 "\"id\":\"objects\\/int-222\","
517 "\"valueAsString\":\"222\"}", 528 "\"valueAsString\":\"222\"}",
518 handler.msg()); 529 handler.msg());
519 530
520 // eval returning null works 531 // eval returning null works
521 service_msg = Eval(lib, 532 service_msg = Eval(lib,
522 "[port, ['objects', 'int-123', 'eval'], " 533 "[0, port, ['objects', 'int-123', 'eval'], "
523 "['expr'], ['null']]"); 534 "['expr'], ['null']]");
524 Service::HandleIsolateMessage(isolate, service_msg); 535 Service::HandleIsolateMessage(isolate, service_msg);
525 handler.HandleNextMessage(); 536 handler.HandleNextMessage();
526 handler.filterMsg("name"); 537 handler.filterMsg("name");
527 EXPECT_STREQ( 538 EXPECT_STREQ(
528 "{\"type\":\"@Null\",\"id\":\"objects\\/null\"," 539 "{\"type\":\"@Null\",\"id\":\"objects\\/null\","
529 "\"valueAsString\":\"null\"}", 540 "\"valueAsString\":\"null\"}",
530 handler.msg()); 541 handler.msg());
531 542
532 // object id ring / invalid => expired 543 // object id ring / invalid => expired
533 service_msg = Eval(lib, "[port, ['objects', '99999999', 'eval'], " 544 service_msg = Eval(lib, "[0, port, ['objects', '99999999', 'eval'], "
534 "['expr'], ['this']]"); 545 "['expr'], ['this']]");
535 Service::HandleIsolateMessage(isolate, service_msg); 546 Service::HandleIsolateMessage(isolate, service_msg);
536 handler.HandleNextMessage(); 547 handler.HandleNextMessage();
537 handler.filterMsg("name"); 548 handler.filterMsg("name");
538 EXPECT_STREQ( 549 EXPECT_STREQ(
539 "{\"type\":\"Error\",\"id\":\"\",\"kind\":\"EvalExpired\"," 550 "{\"type\":\"Error\",\"id\":\"\",\"kind\":\"EvalExpired\","
540 "\"message\":\"attempt to evaluate against expired object\\n\"," 551 "\"message\":\"attempt to evaluate against expired object\\n\","
541 "\"request\":{\"arguments\":[\"objects\",\"99999999\",\"eval\"]," 552 "\"request\":{\"arguments\":[\"objects\",\"99999999\",\"eval\"],"
542 "\"option_keys\":[\"expr\"],\"option_values\":[\"this\"]}}", 553 "\"option_keys\":[\"expr\"],\"option_values\":[\"this\"]}}",
543 handler.msg()); 554 handler.msg());
544 555
545 // Extra arg to eval. 556 // Extra arg to eval.
546 service_msg = Eval(lib, 557 service_msg = Eval(lib,
547 "[port, ['objects', 'int-123', 'eval', 'foo'], " 558 "[0, port, ['objects', 'int-123', 'eval', 'foo'], "
548 "['expr'], ['this+99']]"); 559 "['expr'], ['this+99']]");
549 Service::HandleIsolateMessage(isolate, service_msg); 560 Service::HandleIsolateMessage(isolate, service_msg);
550 handler.HandleNextMessage(); 561 handler.HandleNextMessage();
551 handler.filterMsg("name"); 562 handler.filterMsg("name");
552 EXPECT_STREQ( 563 EXPECT_STREQ(
553 "{\"type\":\"Error\",\"id\":\"\"," 564 "{\"type\":\"Error\",\"id\":\"\","
554 "\"message\":\"expected at most 3 arguments but found 4\\n\"," 565 "\"message\":\"expected at most 3 arguments but found 4\\n\","
555 "\"request\":{\"arguments\":[\"objects\",\"int-123\",\"eval\",\"foo\"]," 566 "\"request\":{\"arguments\":[\"objects\",\"int-123\",\"eval\",\"foo\"],"
556 "\"option_keys\":[\"expr\"],\"option_values\":[\"this+99\"]}}", 567 "\"option_keys\":[\"expr\"],\"option_values\":[\"this+99\"]}}",
557 handler.msg()); 568 handler.msg());
558 569
559 // Retained by single instance. 570 // Retained by single instance.
560 service_msg = Eval(lib, 571 service_msg = Eval(lib,
561 "[port, ['objects', '$validId', 'retained'], [], []]"); 572 "[0, port, ['objects', '$validId', 'retained'], [], []]");
562 Service::HandleIsolateMessage(isolate, service_msg); 573 Service::HandleIsolateMessage(isolate, service_msg);
563 handler.HandleNextMessage(); 574 handler.HandleNextMessage();
564 handler.filterMsg("name"); 575 handler.filterMsg("name");
565 ExpectSubstringF(handler.msg(), 576 ExpectSubstringF(handler.msg(),
566 "\"id\":\"objects\\/int-%" Pd "\"", 577 "\"id\":\"objects\\/int-%" Pd "\"",
567 arr.raw()->Size() + arr.At(0)->Size()); 578 arr.raw()->Size() + arr.At(0)->Size());
568 579
569 // Retaining path to 'arr', limit 1. 580 // Retaining path to 'arr', limit 1.
570 service_msg = Eval( 581 service_msg = Eval(
571 lib, 582 lib,
572 "[port, ['objects', '$validId', 'retaining_path'], ['limit'], ['1']]"); 583 "[0, port, ['objects', '$validId', 'retaining_path'], ['limit'], ['1']]");
573 Service::HandleIsolateMessage(isolate, service_msg); 584 Service::HandleIsolateMessage(isolate, service_msg);
574 handler.HandleNextMessage(); 585 handler.HandleNextMessage();
575 ExpectSubstringF( 586 ExpectSubstringF(
576 handler.msg(), 587 handler.msg(),
577 "{\"type\":\"RetainingPath\",\"id\":\"retaining_path\",\"length\":1," 588 "{\"type\":\"RetainingPath\",\"id\":\"retaining_path\",\"length\":1,"
578 "\"elements\":[{\"index\":0,\"value\":{\"type\":\"@Array\""); 589 "\"elements\":[{\"index\":0,\"value\":{\"type\":\"@Array\"");
579 590
580 // Retaining path missing limit. 591 // Retaining path missing limit.
581 service_msg = Eval( 592 service_msg = Eval(
582 lib, 593 lib,
583 "[port, ['objects', '$validId', 'retaining_path'], [], []]"); 594 "[0, port, ['objects', '$validId', 'retaining_path'], [], []]");
584 Service::HandleIsolateMessage(isolate, service_msg); 595 Service::HandleIsolateMessage(isolate, service_msg);
585 handler.HandleNextMessage(); 596 handler.HandleNextMessage();
586 ExpectSubstringF(handler.msg(), "{\"type\":\"Error\""); 597 ExpectSubstringF(handler.msg(), "{\"type\":\"Error\"");
587 598
588 // eval against list containing an internal object. 599 // eval against list containing an internal object.
589 Object& internal_object = Object::Handle(); 600 Object& internal_object = Object::Handle();
590 internal_object = LiteralToken::New(); 601 internal_object = LiteralToken::New();
591 arr.SetAt(0, internal_object); 602 arr.SetAt(0, internal_object);
592 service_msg = Eval(lib, 603 service_msg = Eval(lib,
593 "[port, ['objects', '$validId', 'eval'], " 604 "[0, port, ['objects', '$validId', 'eval'], "
594 "['expr'], ['toString()']]"); 605 "['expr'], ['toString()']]");
595 Service::HandleIsolateMessage(isolate, service_msg); 606 Service::HandleIsolateMessage(isolate, service_msg);
596 handler.HandleNextMessage(); 607 handler.HandleNextMessage();
597 ExpectSubstringF(handler.msg(), "\"type\":\"Error\""); 608 ExpectSubstringF(handler.msg(), "\"type\":\"Error\"");
598 ExpectSubstringF( 609 ExpectSubstringF(
599 handler.msg(), 610 handler.msg(),
600 "\"message\":\"attempt to evaluate against internal VM object\\n\""); 611 "\"message\":\"attempt to evaluate against internal VM object\\n\"");
601 } 612 }
602 613
603 614
(...skipping 27 matching lines...) Expand all
631 ServiceTestMessageHandler handler; 642 ServiceTestMessageHandler handler;
632 Dart_Port port_id = PortMap::CreatePort(&handler); 643 Dart_Port port_id = PortMap::CreatePort(&handler);
633 Dart_Handle port = Api::NewHandle(isolate, SendPort::New(port_id)); 644 Dart_Handle port = Api::NewHandle(isolate, SendPort::New(port_id));
634 EXPECT_VALID(port); 645 EXPECT_VALID(port);
635 EXPECT_VALID(Dart_SetField(h_lib, NewString("port"), port)); 646 EXPECT_VALID(Dart_SetField(h_lib, NewString("port"), port));
636 647
637 Instance& service_msg = Instance::Handle(); 648 Instance& service_msg = Instance::Handle();
638 649
639 // Request library. 650 // Request library.
640 service_msg = EvalF(h_lib, 651 service_msg = EvalF(h_lib,
641 "[port, ['libraries', '%" Pd "'], [], []]", lib_id); 652 "[0, port, ['libraries', '%" Pd "'], [], []]", lib_id);
642 Service::HandleIsolateMessage(isolate, service_msg); 653 Service::HandleIsolateMessage(isolate, service_msg);
643 handler.HandleNextMessage(); 654 handler.HandleNextMessage();
644 EXPECT_SUBSTRING("\"type\":\"Library\"", handler.msg()); 655 EXPECT_SUBSTRING("\"type\":\"Library\"", handler.msg());
645 EXPECT_SUBSTRING("\"url\":\"test-lib\"", handler.msg()); 656 EXPECT_SUBSTRING("\"url\":\"test-lib\"", handler.msg());
646 657
647 // Evaluate an expression from a library. 658 // Evaluate an expression from a library.
648 service_msg = EvalF(h_lib, 659 service_msg = EvalF(h_lib,
649 "[port, ['libraries', '%" Pd "', 'eval'], " 660 "[0, port, ['libraries', '%" Pd "', 'eval'], "
650 "['expr'], ['libVar - 1']]", lib_id); 661 "['expr'], ['libVar - 1']]", lib_id);
651 Service::HandleIsolateMessage(isolate, service_msg); 662 Service::HandleIsolateMessage(isolate, service_msg);
652 handler.HandleNextMessage(); 663 handler.HandleNextMessage();
653 handler.filterMsg("name"); 664 handler.filterMsg("name");
654 EXPECT_STREQ( 665 EXPECT_STREQ(
655 "{\"type\":\"@Smi\"," 666 "{\"type\":\"@Smi\","
656 "\"class\":{\"type\":\"@Class\",\"id\":\"classes\\/42\"," 667 "\"class\":{\"type\":\"@Class\",\"id\":\"classes\\/42\","
657 "\"user_name\":\"_Smi\"},\"id\":\"objects\\/int-54320\"," 668 "\"user_name\":\"_Smi\"},\"id\":\"objects\\/int-54320\","
658 "\"valueAsString\":\"54320\"}", 669 "\"valueAsString\":\"54320\"}",
659 handler.msg()); 670 handler.msg());
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
696 // Build a mock message handler and wrap it in a dart port. 707 // Build a mock message handler and wrap it in a dart port.
697 ServiceTestMessageHandler handler; 708 ServiceTestMessageHandler handler;
698 Dart_Port port_id = PortMap::CreatePort(&handler); 709 Dart_Port port_id = PortMap::CreatePort(&handler);
699 Dart_Handle port = Api::NewHandle(isolate, SendPort::New(port_id)); 710 Dart_Handle port = Api::NewHandle(isolate, SendPort::New(port_id));
700 EXPECT_VALID(port); 711 EXPECT_VALID(port);
701 EXPECT_VALID(Dart_SetField(h_lib, NewString("port"), port)); 712 EXPECT_VALID(Dart_SetField(h_lib, NewString("port"), port));
702 713
703 Instance& service_msg = Instance::Handle(); 714 Instance& service_msg = Instance::Handle();
704 715
705 // Request an invalid class id. 716 // Request an invalid class id.
706 service_msg = Eval(h_lib, "[port, ['classes', '999999'], [], []]"); 717 service_msg = Eval(h_lib, "[0, port, ['classes', '999999'], [], []]");
707 Service::HandleIsolateMessage(isolate, service_msg); 718 Service::HandleIsolateMessage(isolate, service_msg);
708 handler.HandleNextMessage(); 719 handler.HandleNextMessage();
709 EXPECT_STREQ( 720 EXPECT_STREQ(
710 "{\"type\":\"Error\",\"id\":\"\"," 721 "{\"type\":\"Error\",\"id\":\"\","
711 "\"message\":\"999999 is not a valid class id.\"," 722 "\"message\":\"999999 is not a valid class id.\","
712 "\"request\":{\"arguments\":[\"classes\",\"999999\"]," 723 "\"request\":{\"arguments\":[\"classes\",\"999999\"],"
713 "\"option_keys\":[],\"option_values\":[]}}", handler.msg()); 724 "\"option_keys\":[],\"option_values\":[]}}", handler.msg());
714 725
715 // Request the class A over the service. 726 // Request the class A over the service.
716 service_msg = EvalF(h_lib, "[port, ['classes', '%" Pd "'], [], []]", cid); 727 service_msg = EvalF(h_lib, "[0, port, ['classes', '%" Pd "'], [], []]", cid);
717 Service::HandleIsolateMessage(isolate, service_msg); 728 Service::HandleIsolateMessage(isolate, service_msg);
718 handler.HandleNextMessage(); 729 handler.HandleNextMessage();
719 EXPECT_SUBSTRING("\"type\":\"Class\"", handler.msg()); 730 EXPECT_SUBSTRING("\"type\":\"Class\"", handler.msg());
720 ExpectSubstringF(handler.msg(), 731 ExpectSubstringF(handler.msg(),
721 "\"id\":\"classes\\/%" Pd "\",\"name\":\"A\",", cid); 732 "\"id\":\"classes\\/%" Pd "\",\"name\":\"A\",", cid);
722 733
723 // Evaluate an expression from class A. 734 // Evaluate an expression from class A.
724 service_msg = EvalF(h_lib, 735 service_msg = EvalF(h_lib,
725 "[port, ['classes', '%" Pd "', 'eval'], " 736 "[0, port, ['classes', '%" Pd "', 'eval'], "
726 "['expr'], ['cobra + 100000']]", cid); 737 "['expr'], ['cobra + 100000']]", cid);
727 Service::HandleIsolateMessage(isolate, service_msg); 738 Service::HandleIsolateMessage(isolate, service_msg);
728 handler.HandleNextMessage(); 739 handler.HandleNextMessage();
729 handler.filterMsg("name"); 740 handler.filterMsg("name");
730 EXPECT_STREQ( 741 EXPECT_STREQ(
731 "{\"type\":\"@Smi\"," 742 "{\"type\":\"@Smi\","
732 "\"class\":{\"type\":\"@Class\",\"id\":\"classes\\/42\"," 743 "\"class\":{\"type\":\"@Class\",\"id\":\"classes\\/42\","
733 "\"user_name\":\"_Smi\"}," 744 "\"user_name\":\"_Smi\"},"
734 "\"id\":\"objects\\/int-111235\"," 745 "\"id\":\"objects\\/int-111235\","
735 "\"valueAsString\":\"111235\"}", 746 "\"valueAsString\":\"111235\"}",
736 handler.msg()); 747 handler.msg());
737 748
738 // Request function 0 from class A. 749 // Request function 0 from class A.
739 service_msg = EvalF(h_lib, "[port, ['classes', '%" Pd "', 'functions', '0']," 750 service_msg = EvalF(h_lib,
740 "[], []]", cid); 751 "[0, port, ['classes', '%" Pd "', 'functions', '0'],"
752 "[], []]", cid);
741 Service::HandleIsolateMessage(isolate, service_msg); 753 Service::HandleIsolateMessage(isolate, service_msg);
742 handler.HandleNextMessage(); 754 handler.HandleNextMessage();
743 EXPECT_SUBSTRING("\"type\":\"Function\"", handler.msg()); 755 EXPECT_SUBSTRING("\"type\":\"Function\"", handler.msg());
744 ExpectSubstringF(handler.msg(), 756 ExpectSubstringF(handler.msg(),
745 "\"id\":\"classes\\/%" Pd "\\/functions\\/0\"," 757 "\"id\":\"classes\\/%" Pd "\\/functions\\/0\","
746 "\"name\":\"get:a\",", cid); 758 "\"name\":\"get:a\",", cid);
747 759
748 // Request field 0 from class A. 760 // Request field 0 from class A.
749 service_msg = EvalF(h_lib, "[port, ['classes', '%" Pd "', 'fields', '0']," 761 service_msg = EvalF(h_lib, "[0, port, ['classes', '%" Pd "', 'fields', '0'],"
750 "[], []]", cid); 762 "[], []]", cid);
751 Service::HandleIsolateMessage(isolate, service_msg); 763 Service::HandleIsolateMessage(isolate, service_msg);
752 handler.HandleNextMessage(); 764 handler.HandleNextMessage();
753 EXPECT_SUBSTRING("\"type\":\"Field\"", handler.msg()); 765 EXPECT_SUBSTRING("\"type\":\"Field\"", handler.msg());
754 ExpectSubstringF(handler.msg(), 766 ExpectSubstringF(handler.msg(),
755 "\"id\":\"classes\\/%" Pd "\\/fields\\/0\"," 767 "\"id\":\"classes\\/%" Pd "\\/fields\\/0\","
756 "\"name\":\"a\",", cid); 768 "\"name\":\"a\",", cid);
757 769
758 // Invalid sub command. 770 // Invalid sub command.
759 service_msg = EvalF(h_lib, "[port, ['classes', '%" Pd "', 'huh', '0']," 771 service_msg = EvalF(h_lib, "[0, port, ['classes', '%" Pd "', 'huh', '0'],"
760 "[], []]", cid); 772 "[], []]", cid);
761 Service::HandleIsolateMessage(isolate, service_msg); 773 Service::HandleIsolateMessage(isolate, service_msg);
762 handler.HandleNextMessage(); 774 handler.HandleNextMessage();
763 ExpectSubstringF(handler.msg(), 775 ExpectSubstringF(handler.msg(),
764 "{\"type\":\"Error\",\"id\":\"\",\"message\":\"Invalid sub collection huh\"" 776 "{\"type\":\"Error\",\"id\":\"\",\"message\":\"Invalid sub collection huh\""
765 ",\"request\":" 777 ",\"request\":"
766 "{\"arguments\":[\"classes\",\"%" Pd "\",\"huh\",\"0\"],\"option_keys\":[]," 778 "{\"arguments\":[\"classes\",\"%" Pd "\",\"huh\",\"0\"],\"option_keys\":[],"
767 "\"option_values\":[]}}", cid); 779 "\"option_values\":[]}}", cid);
768 780
769 // Invalid field request. 781 // Invalid field request.
770 service_msg = EvalF(h_lib, "[port, ['classes', '%" Pd "', 'fields', '9']," 782 service_msg = EvalF(h_lib, "[0, port, ['classes', '%" Pd "', 'fields', '9'],"
771 "[], []]", cid); 783 "[], []]", cid);
772 Service::HandleIsolateMessage(isolate, service_msg); 784 Service::HandleIsolateMessage(isolate, service_msg);
773 handler.HandleNextMessage(); 785 handler.HandleNextMessage();
774 ExpectSubstringF(handler.msg(), 786 ExpectSubstringF(handler.msg(),
775 "{\"type\":\"Error\",\"id\":\"\",\"message\":\"Field 9 not found\"," 787 "{\"type\":\"Error\",\"id\":\"\",\"message\":\"Field 9 not found\","
776 "\"request\":{\"arguments\":[\"classes\",\"%" Pd "\",\"fields\",\"9\"]," 788 "\"request\":{\"arguments\":[\"classes\",\"%" Pd "\",\"fields\",\"9\"],"
777 "\"option_keys\":[],\"option_values\":[]}}", cid); 789 "\"option_keys\":[],\"option_values\":[]}}", cid);
778 790
779 // Invalid function request. 791 // Invalid function request.
780 service_msg = EvalF(h_lib, "[port, ['classes', '%" Pd "', 'functions', '9']," 792 service_msg = EvalF(h_lib,
781 "[], []]", cid); 793 "[0, port, ['classes', '%" Pd "', 'functions', '9'],"
794 "[], []]", cid);
782 Service::HandleIsolateMessage(isolate, service_msg); 795 Service::HandleIsolateMessage(isolate, service_msg);
783 handler.HandleNextMessage(); 796 handler.HandleNextMessage();
784 ExpectSubstringF(handler.msg(), 797 ExpectSubstringF(handler.msg(),
785 "{\"type\":\"Error\",\"id\":\"\",\"message\":\"Function 9 not found\"," 798 "{\"type\":\"Error\",\"id\":\"\",\"message\":\"Function 9 not found\","
786 "\"request\":{\"arguments\":[\"classes\",\"%" Pd "\",\"functions\",\"9\"]," 799 "\"request\":{\"arguments\":[\"classes\",\"%" Pd "\",\"functions\",\"9\"],"
787 "\"option_keys\":[],\"option_values\":[]}}", cid); 800 "\"option_keys\":[],\"option_values\":[]}}", cid);
788 801
789 802
790 // Invalid field subcommand. 803 // Invalid field subcommand.
791 service_msg = EvalF(h_lib, "[port, ['classes', '%" Pd "', 'fields', '9', 'x']" 804 service_msg = EvalF(h_lib,
792 ",[], []]", cid); 805 "[0, port, ['classes', '%" Pd "', 'fields', '9', 'x']"
806 ",[], []]", cid);
793 Service::HandleIsolateMessage(isolate, service_msg); 807 Service::HandleIsolateMessage(isolate, service_msg);
794 handler.HandleNextMessage(); 808 handler.HandleNextMessage();
795 ExpectSubstringF(handler.msg(), 809 ExpectSubstringF(handler.msg(),
796 "{\"type\":\"Error\",\"id\":\"\",\"message\":\"Command too long\"," 810 "{\"type\":\"Error\",\"id\":\"\",\"message\":\"Command too long\","
797 "\"request\":" 811 "\"request\":"
798 "{\"arguments\":[\"classes\",\"%" Pd "\",\"fields\",\"9\",\"x\"]," 812 "{\"arguments\":[\"classes\",\"%" Pd "\",\"fields\",\"9\",\"x\"],"
799 "\"option_keys\":[],\"option_values\":[]}}", cid); 813 "\"option_keys\":[],\"option_values\":[]}}", cid);
800 814
801 // Invalid function request. 815 // Invalid function request.
802 service_msg = EvalF(h_lib, "[port, ['classes', '%" Pd "', 'functions', '9'," 816 service_msg = EvalF(h_lib,
803 "'x'], [], []]", cid); 817 "[0, port, ['classes', '%" Pd "', 'functions', '9',"
818 "'x'], [], []]", cid);
804 Service::HandleIsolateMessage(isolate, service_msg); 819 Service::HandleIsolateMessage(isolate, service_msg);
805 handler.HandleNextMessage(); 820 handler.HandleNextMessage();
806 ExpectSubstringF(handler.msg(), 821 ExpectSubstringF(handler.msg(),
807 "{\"type\":\"Error\",\"id\":\"\",\"message\":\"Command too long\"," 822 "{\"type\":\"Error\",\"id\":\"\",\"message\":\"Command too long\","
808 "\"request\":" 823 "\"request\":"
809 "{\"arguments\":[\"classes\",\"%" Pd "\",\"functions\",\"9\",\"x\"]," 824 "{\"arguments\":[\"classes\",\"%" Pd "\",\"functions\",\"9\",\"x\"],"
810 "\"option_keys\":[],\"option_values\":[]}}", cid); 825 "\"option_keys\":[],\"option_values\":[]}}", cid);
811 826
812 // Retained size of all instances of class B. 827 // Retained size of all instances of class B.
813 const Class& class_b = Class::Handle(GetClass(lib, "B")); 828 const Class& class_b = Class::Handle(GetClass(lib, "B"));
814 EXPECT(!class_b.IsNull()); 829 EXPECT(!class_b.IsNull());
815 const Instance& b0 = Instance::Handle(Instance::New(class_b)); 830 const Instance& b0 = Instance::Handle(Instance::New(class_b));
816 const Instance& b1 = Instance::Handle(Instance::New(class_b)); 831 const Instance& b1 = Instance::Handle(Instance::New(class_b));
817 service_msg = EvalF(h_lib, "[port, ['classes', '%" Pd "', 'retained']," 832 service_msg = EvalF(h_lib, "[0, port, ['classes', '%" Pd "', 'retained'],"
818 "[], []]", class_b.id()); 833 "[], []]", class_b.id());
819 Service::HandleIsolateMessage(isolate, service_msg); 834 Service::HandleIsolateMessage(isolate, service_msg);
820 handler.HandleNextMessage(); 835 handler.HandleNextMessage();
821 ExpectSubstringF(handler.msg(), 836 ExpectSubstringF(handler.msg(),
822 "\"id\":\"objects\\/int-%" Pd "\"", 837 "\"id\":\"objects\\/int-%" Pd "\"",
823 b0.raw()->Size() + b1.raw()->Size()); 838 b0.raw()->Size() + b1.raw()->Size());
824 } 839 }
825 840
826 841
827 TEST_CASE(Service_Types) { 842 TEST_CASE(Service_Types) {
(...skipping 21 matching lines...) Expand all
849 // Build a mock message handler and wrap it in a dart port. 864 // Build a mock message handler and wrap it in a dart port.
850 ServiceTestMessageHandler handler; 865 ServiceTestMessageHandler handler;
851 Dart_Port port_id = PortMap::CreatePort(&handler); 866 Dart_Port port_id = PortMap::CreatePort(&handler);
852 Dart_Handle port = Api::NewHandle(isolate, SendPort::New(port_id)); 867 Dart_Handle port = Api::NewHandle(isolate, SendPort::New(port_id));
853 EXPECT_VALID(port); 868 EXPECT_VALID(port);
854 EXPECT_VALID(Dart_SetField(h_lib, NewString("port"), port)); 869 EXPECT_VALID(Dart_SetField(h_lib, NewString("port"), port));
855 870
856 Instance& service_msg = Instance::Handle(); 871 Instance& service_msg = Instance::Handle();
857 872
858 // Request the class A over the service. 873 // Request the class A over the service.
859 service_msg = EvalF(h_lib, "[port, ['classes', '%" Pd "'], [], []]", cid); 874 service_msg = EvalF(h_lib, "[0, port, ['classes', '%" Pd "'], [], []]", cid);
860 Service::HandleIsolateMessage(isolate, service_msg); 875 Service::HandleIsolateMessage(isolate, service_msg);
861 handler.HandleNextMessage(); 876 handler.HandleNextMessage();
862 EXPECT_SUBSTRING("\"type\":\"Class\"", handler.msg()); 877 EXPECT_SUBSTRING("\"type\":\"Class\"", handler.msg());
863 EXPECT_SUBSTRING("\"name\":\"A\"", handler.msg()); 878 EXPECT_SUBSTRING("\"name\":\"A\"", handler.msg());
864 ExpectSubstringF(handler.msg(), 879 ExpectSubstringF(handler.msg(),
865 "\"id\":\"classes\\/%" Pd "\"", cid); 880 "\"id\":\"classes\\/%" Pd "\"", cid);
866 881
867 // Request canonical type 0 from class A. 882 // Request canonical type 0 from class A.
868 service_msg = EvalF(h_lib, "[port, ['classes', '%" Pd "', 'types', '0']," 883 service_msg = EvalF(h_lib, "[0, port, ['classes', '%" Pd "', 'types', '0'],"
869 "[], []]", cid); 884 "[], []]", cid);
870 Service::HandleIsolateMessage(isolate, service_msg); 885 Service::HandleIsolateMessage(isolate, service_msg);
871 handler.HandleNextMessage(); 886 handler.HandleNextMessage();
872 EXPECT_SUBSTRING("\"type\":\"Type\"", handler.msg()); 887 EXPECT_SUBSTRING("\"type\":\"Type\"", handler.msg());
873 EXPECT_SUBSTRING("\"name\":\"A<bool>\"", handler.msg()); 888 EXPECT_SUBSTRING("\"name\":\"A<bool>\"", handler.msg());
874 ExpectSubstringF(handler.msg(), 889 ExpectSubstringF(handler.msg(),
875 "\"id\":\"classes\\/%" Pd "\\/types\\/0\"", cid); 890 "\"id\":\"classes\\/%" Pd "\\/types\\/0\"", cid);
876 891
877 // Request canonical type 1 from class A. 892 // Request canonical type 1 from class A.
878 service_msg = EvalF(h_lib, "[port, ['classes', '%" Pd "', 'types', '1']," 893 service_msg = EvalF(h_lib, "[0, port, ['classes', '%" Pd "', 'types', '1'],"
879 "[], []]", cid); 894 "[], []]", cid);
880 Service::HandleIsolateMessage(isolate, service_msg); 895 Service::HandleIsolateMessage(isolate, service_msg);
881 handler.HandleNextMessage(); 896 handler.HandleNextMessage();
882 EXPECT_SUBSTRING("\"type\":\"Type\"", handler.msg()); 897 EXPECT_SUBSTRING("\"type\":\"Type\"", handler.msg());
883 EXPECT_SUBSTRING("\"name\":\"A<A<bool>>\"", handler.msg()); 898 EXPECT_SUBSTRING("\"name\":\"A<A<bool>>\"", handler.msg());
884 ExpectSubstringF(handler.msg(), 899 ExpectSubstringF(handler.msg(),
885 "\"id\":\"classes\\/%" Pd "\\/types\\/1\"", cid); 900 "\"id\":\"classes\\/%" Pd "\\/types\\/1\"", cid);
886 901
887 // Request for non-existent canonical type from class A. 902 // Request for non-existent canonical type from class A.
888 service_msg = EvalF(h_lib, "[port, ['classes', '%" Pd "', 'types', '42']," 903 service_msg = EvalF(h_lib, "[0, port, ['classes', '%" Pd "', 'types', '42'],"
889 "[], []]", cid); 904 "[], []]", cid);
890 Service::HandleIsolateMessage(isolate, service_msg); 905 Service::HandleIsolateMessage(isolate, service_msg);
891 handler.HandleNextMessage(); 906 handler.HandleNextMessage();
892 ExpectSubstringF(handler.msg(), 907 ExpectSubstringF(handler.msg(),
893 "{\"type\":\"Error\",\"id\":\"\"," 908 "{\"type\":\"Error\",\"id\":\"\","
894 "\"message\":\"Canonical type 42 not found\"" 909 "\"message\":\"Canonical type 42 not found\""
895 ",\"request\":" 910 ",\"request\":"
896 "{\"arguments\":[\"classes\",\"%" Pd "\",\"types\",\"42\"]," 911 "{\"arguments\":[\"classes\",\"%" Pd "\",\"types\",\"42\"],"
897 "\"option_keys\":[],\"option_values\":[]}}", cid); 912 "\"option_keys\":[],\"option_values\":[]}}", cid);
898 913
899 // Request canonical type arguments. Expect <A<bool>> to be listed. 914 // Request canonical type arguments. Expect <A<bool>> to be listed.
900 service_msg = EvalF(h_lib, "[port, ['typearguments']," 915 service_msg = EvalF(h_lib, "[0, port, ['typearguments'],"
901 "[], []]"); 916 "[], []]");
902 Service::HandleIsolateMessage(isolate, service_msg); 917 Service::HandleIsolateMessage(isolate, service_msg);
903 handler.HandleNextMessage(); 918 handler.HandleNextMessage();
904 EXPECT_SUBSTRING("\"type\":\"TypeArgumentsList\"", handler.msg()); 919 EXPECT_SUBSTRING("\"type\":\"TypeArgumentsList\"", handler.msg());
905 ExpectSubstringF(handler.msg(), "\"name\":\"<A<bool>>\","); 920 ExpectSubstringF(handler.msg(), "\"name\":\"<A<bool>>\",");
906 921
907 // Request canonical type arguments with instantiations. 922 // Request canonical type arguments with instantiations.
908 service_msg = EvalF(h_lib, "[port, ['typearguments', 'withinstantiations']," 923 service_msg = EvalF(h_lib,
909 "[], []]"); 924 "[0, port, ['typearguments', 'withinstantiations'],"
925 "[], []]");
910 Service::HandleIsolateMessage(isolate, service_msg); 926 Service::HandleIsolateMessage(isolate, service_msg);
911 handler.HandleNextMessage(); 927 handler.HandleNextMessage();
912 EXPECT_SUBSTRING("\"type\":\"TypeArgumentsList\"", handler.msg()); 928 EXPECT_SUBSTRING("\"type\":\"TypeArgumentsList\"", handler.msg());
913 } 929 }
914 930
915 931
916 TEST_CASE(Service_Code) { 932 TEST_CASE(Service_Code) {
917 const char* kScript = 933 const char* kScript =
918 "var port;\n" // Set to our mock port by C++. 934 "var port;\n" // Set to our mock port by C++.
919 "\n" 935 "\n"
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
954 // Build a mock message handler and wrap it in a dart port. 970 // Build a mock message handler and wrap it in a dart port.
955 ServiceTestMessageHandler handler; 971 ServiceTestMessageHandler handler;
956 Dart_Port port_id = PortMap::CreatePort(&handler); 972 Dart_Port port_id = PortMap::CreatePort(&handler);
957 Dart_Handle port = Api::NewHandle(isolate, SendPort::New(port_id)); 973 Dart_Handle port = Api::NewHandle(isolate, SendPort::New(port_id));
958 EXPECT_VALID(port); 974 EXPECT_VALID(port);
959 EXPECT_VALID(Dart_SetField(h_lib, NewString("port"), port)); 975 EXPECT_VALID(Dart_SetField(h_lib, NewString("port"), port));
960 976
961 Instance& service_msg = Instance::Handle(); 977 Instance& service_msg = Instance::Handle();
962 978
963 // Request an invalid code object. 979 // Request an invalid code object.
964 service_msg = Eval(h_lib, "[port, ['code', '0'], [], []]"); 980 service_msg = Eval(h_lib, "[0, port, ['code', '0'], [], []]");
965 Service::HandleIsolateMessage(isolate, service_msg); 981 Service::HandleIsolateMessage(isolate, service_msg);
966 handler.HandleNextMessage(); 982 handler.HandleNextMessage();
967 EXPECT_STREQ( 983 EXPECT_STREQ(
968 "{\"type\":\"Error\",\"id\":\"\",\"message\":\"Malformed code id: 0\"," 984 "{\"type\":\"Error\",\"id\":\"\",\"message\":\"Malformed code id: 0\","
969 "\"request\":{\"arguments\":[\"code\",\"0\"]," 985 "\"request\":{\"arguments\":[\"code\",\"0\"],"
970 "\"option_keys\":[],\"option_values\":[]}}", handler.msg()); 986 "\"option_keys\":[],\"option_values\":[]}}", handler.msg());
971 987
972 // The following test checks that a code object can be found only 988 // The following test checks that a code object can be found only
973 // at compile_timestamp()-code.EntryPoint(). 989 // at compile_timestamp()-code.EntryPoint().
974 service_msg = EvalF(h_lib, "[port, ['code', '%" Px64"-%" Px "'], [], []]", 990 service_msg = EvalF(h_lib, "[0, port, ['code', '%" Px64"-%" Px "'], [], []]",
975 compile_timestamp, 991 compile_timestamp,
976 entry); 992 entry);
977 Service::HandleIsolateMessage(isolate, service_msg); 993 Service::HandleIsolateMessage(isolate, service_msg);
978 handler.HandleNextMessage(); 994 handler.HandleNextMessage();
979 { 995 {
980 // Only perform a partial match. 996 // Only perform a partial match.
981 const intptr_t kBufferSize = 512; 997 const intptr_t kBufferSize = 512;
982 char buffer[kBufferSize]; 998 char buffer[kBufferSize];
983 OS::SNPrint(buffer, kBufferSize-1, 999 OS::SNPrint(buffer, kBufferSize-1,
984 "{\"type\":\"Code\",\"id\":\"code\\/%" Px64 "-%" Px "\",", 1000 "{\"type\":\"Code\",\"id\":\"code\\/%" Px64 "-%" Px "\",",
985 compile_timestamp, 1001 compile_timestamp,
986 entry); 1002 entry);
987 EXPECT_SUBSTRING(buffer, handler.msg()); 1003 EXPECT_SUBSTRING(buffer, handler.msg());
988 } 1004 }
989 1005
990 // Request code object at compile_timestamp-code.EntryPoint() + 16 1006 // Request code object at compile_timestamp-code.EntryPoint() + 16
991 // Expect this to fail because the address is not the entry point. 1007 // Expect this to fail because the address is not the entry point.
992 uintptr_t address = entry + 16; 1008 uintptr_t address = entry + 16;
993 service_msg = EvalF(h_lib, "[port, ['code', '%" Px64"-%" Px "'], [], []]", 1009 service_msg = EvalF(h_lib, "[0, port, ['code', '%" Px64"-%" Px "'], [], []]",
994 compile_timestamp, 1010 compile_timestamp,
995 address); 1011 address);
996 Service::HandleIsolateMessage(isolate, service_msg); 1012 Service::HandleIsolateMessage(isolate, service_msg);
997 handler.HandleNextMessage(); 1013 handler.HandleNextMessage();
998 { 1014 {
999 // Only perform a partial match. 1015 // Only perform a partial match.
1000 const intptr_t kBufferSize = 512; 1016 const intptr_t kBufferSize = 512;
1001 char buffer[kBufferSize]; 1017 char buffer[kBufferSize];
1002 OS::SNPrint(buffer, kBufferSize-1, 1018 OS::SNPrint(buffer, kBufferSize-1,
1003 "Could not find code with id: %" Px64 "-%" Px "", 1019 "Could not find code with id: %" Px64 "-%" Px "",
1004 compile_timestamp, 1020 compile_timestamp,
1005 address); 1021 address);
1006 EXPECT_SUBSTRING(buffer, handler.msg()); 1022 EXPECT_SUBSTRING(buffer, handler.msg());
1007 } 1023 }
1008 1024
1009 // Request code object at (compile_timestamp - 1)-code.EntryPoint() 1025 // Request code object at (compile_timestamp - 1)-code.EntryPoint()
1010 // Expect this to fail because the timestamp is wrong. 1026 // Expect this to fail because the timestamp is wrong.
1011 address = entry; 1027 address = entry;
1012 service_msg = EvalF(h_lib, "[port, ['code', '%" Px64"-%" Px "'], [], []]", 1028 service_msg = EvalF(h_lib, "[0, port, ['code', '%" Px64"-%" Px "'], [], []]",
1013 compile_timestamp - 1, 1029 compile_timestamp - 1,
1014 address); 1030 address);
1015 Service::HandleIsolateMessage(isolate, service_msg); 1031 Service::HandleIsolateMessage(isolate, service_msg);
1016 handler.HandleNextMessage(); 1032 handler.HandleNextMessage();
1017 { 1033 {
1018 // Only perform a partial match. 1034 // Only perform a partial match.
1019 const intptr_t kBufferSize = 512; 1035 const intptr_t kBufferSize = 512;
1020 char buffer[kBufferSize]; 1036 char buffer[kBufferSize];
1021 OS::SNPrint(buffer, kBufferSize-1, 1037 OS::SNPrint(buffer, kBufferSize-1,
1022 "Could not find code with id: %" Px64 "-%" Px "", 1038 "Could not find code with id: %" Px64 "-%" Px "",
1023 compile_timestamp - 1, 1039 compile_timestamp - 1,
1024 address); 1040 address);
1025 EXPECT_SUBSTRING(buffer, handler.msg()); 1041 EXPECT_SUBSTRING(buffer, handler.msg());
1026 } 1042 }
1027 1043
1028 // Request native code at address. Expect the null code object back. 1044 // Request native code at address. Expect the null code object back.
1029 address = last; 1045 address = last;
1030 service_msg = EvalF(h_lib, "[port, ['code', 'native-%" Px "'], [], []]", 1046 service_msg = EvalF(h_lib, "[0, port, ['code', 'native-%" Px "'], [], []]",
1031 address); 1047 address);
1032 Service::HandleIsolateMessage(isolate, service_msg); 1048 Service::HandleIsolateMessage(isolate, service_msg);
1033 handler.HandleNextMessage(); 1049 handler.HandleNextMessage();
1034 EXPECT_STREQ("{\"type\":\"Null\",\"id\":\"objects\\/null\"," 1050 EXPECT_STREQ("{\"type\":\"Null\",\"id\":\"objects\\/null\","
1035 "\"valueAsString\":\"null\"}", 1051 "\"valueAsString\":\"null\"}",
1036 handler.msg()); 1052 handler.msg());
1037 1053
1038 // Request malformed native code. 1054 // Request malformed native code.
1039 service_msg = EvalF(h_lib, "[port, ['code', 'native%" Px "'], [], []]", 1055 service_msg = EvalF(h_lib, "[0, port, ['code', 'native%" Px "'], [], []]",
1040 address); 1056 address);
1041 Service::HandleIsolateMessage(isolate, service_msg); 1057 Service::HandleIsolateMessage(isolate, service_msg);
1042 handler.HandleNextMessage(); 1058 handler.HandleNextMessage();
1043 EXPECT_SUBSTRING("\"message\":\"Malformed code id:", handler.msg()); 1059 EXPECT_SUBSTRING("\"message\":\"Malformed code id:", handler.msg());
1044 } 1060 }
1045 1061
1046 1062
1047 TEST_CASE(Service_VM) { 1063 TEST_CASE(Service_VM) {
1048 const char* kScript = 1064 const char* kScript =
1049 "var port;\n" // Set to our mock port by C++. 1065 "var port;\n" // Set to our mock port by C++.
1050 "\n" 1066 "\n"
1051 "main() {\n" 1067 "main() {\n"
1052 "}"; 1068 "}";
1053 1069
1054 Isolate* isolate = Isolate::Current(); 1070 Isolate* isolate = Isolate::Current();
1055 Dart_Handle lib = TestCase::LoadTestScript(kScript, NULL); 1071 Dart_Handle lib = TestCase::LoadTestScript(kScript, NULL);
1056 EXPECT_VALID(lib); 1072 EXPECT_VALID(lib);
1057 1073
1058 // Build a mock message handler and wrap it in a dart port. 1074 // Build a mock message handler and wrap it in a dart port.
1059 ServiceTestMessageHandler handler; 1075 ServiceTestMessageHandler handler;
1060 Dart_Port port_id = PortMap::CreatePort(&handler); 1076 Dart_Port port_id = PortMap::CreatePort(&handler);
1061 Dart_Handle port = Api::NewHandle(isolate, SendPort::New(port_id)); 1077 Dart_Handle port = Api::NewHandle(isolate, SendPort::New(port_id));
1062 EXPECT_VALID(port); 1078 EXPECT_VALID(port);
1063 EXPECT_VALID(Dart_SetField(lib, NewString("port"), port)); 1079 EXPECT_VALID(Dart_SetField(lib, NewString("port"), port));
1064 1080
1065 Instance& service_msg = Instance::Handle(); 1081 Instance& service_msg = Instance::Handle();
1066 service_msg = Eval(lib, "[port, ['vm'], [], []]"); 1082 service_msg = Eval(lib, "[0, port, ['vm'], [], []]");
1067 1083
1068 Service::HandleRootMessage(service_msg); 1084 Service::HandleRootMessage(service_msg);
1069 handler.HandleNextMessage(); 1085 handler.HandleNextMessage();
1070 EXPECT_SUBSTRING("\"type\":\"VM\",\"id\":\"vm\"", handler.msg()); 1086 EXPECT_SUBSTRING("\"type\":\"VM\",\"id\":\"vm\"", handler.msg());
1071 EXPECT_SUBSTRING("\"targetCPU\"", handler.msg()); 1087 EXPECT_SUBSTRING("\"targetCPU\"", handler.msg());
1072 EXPECT_SUBSTRING("\"hostCPU\"", handler.msg()); 1088 EXPECT_SUBSTRING("\"hostCPU\"", handler.msg());
1073 EXPECT_SUBSTRING("\"version\"", handler.msg()); 1089 EXPECT_SUBSTRING("\"version\"", handler.msg());
1074 EXPECT_SUBSTRING("\"uptime\"", handler.msg()); 1090 EXPECT_SUBSTRING("\"uptime\"", handler.msg());
1075 EXPECT_SUBSTRING("\"isolates\"", handler.msg()); 1091 EXPECT_SUBSTRING("\"isolates\"", handler.msg());
1076 } 1092 }
(...skipping 11 matching lines...) Expand all
1088 EXPECT_VALID(lib); 1104 EXPECT_VALID(lib);
1089 1105
1090 // Build a mock message handler and wrap it in a dart port. 1106 // Build a mock message handler and wrap it in a dart port.
1091 ServiceTestMessageHandler handler; 1107 ServiceTestMessageHandler handler;
1092 Dart_Port port_id = PortMap::CreatePort(&handler); 1108 Dart_Port port_id = PortMap::CreatePort(&handler);
1093 Dart_Handle port = Api::NewHandle(isolate, SendPort::New(port_id)); 1109 Dart_Handle port = Api::NewHandle(isolate, SendPort::New(port_id));
1094 EXPECT_VALID(port); 1110 EXPECT_VALID(port);
1095 EXPECT_VALID(Dart_SetField(lib, NewString("port"), port)); 1111 EXPECT_VALID(Dart_SetField(lib, NewString("port"), port));
1096 1112
1097 Instance& service_msg = Instance::Handle(); 1113 Instance& service_msg = Instance::Handle();
1098 service_msg = Eval(lib, "[port, ['flags'], [], []]"); 1114 service_msg = Eval(lib, "[0, port, ['flags'], [], []]");
1099 1115
1100 // Make sure we can get the FlagList. 1116 // Make sure we can get the FlagList.
1101 Service::HandleRootMessage(service_msg); 1117 Service::HandleRootMessage(service_msg);
1102 handler.HandleNextMessage(); 1118 handler.HandleNextMessage();
1103 EXPECT_SUBSTRING("\"type\":\"FlagList\",\"id\":\"flags\"", handler.msg()); 1119 EXPECT_SUBSTRING("\"type\":\"FlagList\",\"id\":\"flags\"", handler.msg());
1104 EXPECT_SUBSTRING( 1120 EXPECT_SUBSTRING(
1105 "\"name\":\"service_testing_flag\",\"comment\":\"Comment\"," 1121 "\"name\":\"service_testing_flag\",\"comment\":\"Comment\","
1106 "\"flagType\":\"bool\",\"valueAsString\":\"false\"", 1122 "\"flagType\":\"bool\",\"valueAsString\":\"false\"",
1107 handler.msg()); 1123 handler.msg());
1108 1124
1109 // Modify a flag through the vm service. 1125 // Modify a flag through the vm service.
1110 service_msg = Eval(lib, 1126 service_msg = Eval(lib,
1111 "[port, ['flags', 'set'], " 1127 "[0, port, ['flags', 'set'], "
1112 "['name', 'value'], ['service_testing_flag', 'true']]"); 1128 "['name', 'value'], ['service_testing_flag', 'true']]");
1113 Service::HandleRootMessage(service_msg); 1129 Service::HandleRootMessage(service_msg);
1114 handler.HandleNextMessage(); 1130 handler.HandleNextMessage();
1115 EXPECT_SUBSTRING("Success", handler.msg()); 1131 EXPECT_SUBSTRING("Success", handler.msg());
1116 1132
1117 // Make sure that the flag changed. 1133 // Make sure that the flag changed.
1118 service_msg = Eval(lib, "[port, ['flags'], [], []]"); 1134 service_msg = Eval(lib, "[0, port, ['flags'], [], []]");
1119 Service::HandleRootMessage(service_msg); 1135 Service::HandleRootMessage(service_msg);
1120 handler.HandleNextMessage(); 1136 handler.HandleNextMessage();
1121 EXPECT_SUBSTRING( 1137 EXPECT_SUBSTRING(
1122 "\"name\":\"service_testing_flag\",\"comment\":\"Comment\"," 1138 "\"name\":\"service_testing_flag\",\"comment\":\"Comment\","
1123 "\"flagType\":\"bool\",\"valueAsString\":\"true\"", 1139 "\"flagType\":\"bool\",\"valueAsString\":\"true\"",
1124 handler.msg()); 1140 handler.msg());
1125 } 1141 }
1126 1142
1127 1143
1128 TEST_CASE(Service_Scripts) { 1144 TEST_CASE(Service_Scripts) {
1129 const char* kScript = 1145 const char* kScript =
1130 "var port;\n" // Set to our mock port by C++. 1146 "var port;\n" // Set to our mock port by C++.
1131 "\n" 1147 "\n"
1132 "main() {\n" 1148 "main() {\n"
1133 "}"; 1149 "}";
1134 1150
1135 Isolate* isolate = Isolate::Current(); 1151 Isolate* isolate = Isolate::Current();
1136 Dart_Handle h_lib = TestCase::LoadTestScript(kScript, NULL); 1152 Dart_Handle h_lib = TestCase::LoadTestScript(kScript, NULL);
1137 EXPECT_VALID(h_lib); 1153 EXPECT_VALID(h_lib);
1138 1154
1139 // Build a mock message handler and wrap it in a dart port. 1155 // Build a mock message handler and wrap it in a dart port.
1140 ServiceTestMessageHandler handler; 1156 ServiceTestMessageHandler handler;
1141 Dart_Port port_id = PortMap::CreatePort(&handler); 1157 Dart_Port port_id = PortMap::CreatePort(&handler);
1142 Dart_Handle port = Api::NewHandle(isolate, SendPort::New(port_id)); 1158 Dart_Handle port = Api::NewHandle(isolate, SendPort::New(port_id));
1143 EXPECT_VALID(port); 1159 EXPECT_VALID(port);
1144 EXPECT_VALID(Dart_SetField(h_lib, NewString("port"), port)); 1160 EXPECT_VALID(Dart_SetField(h_lib, NewString("port"), port));
1145 1161
1146 Instance& service_msg = Instance::Handle(); 1162 Instance& service_msg = Instance::Handle();
1147 service_msg = Eval(h_lib, "[port, ['scripts', 'test-lib'], [], []]"); 1163 service_msg = Eval(h_lib, "[0, port, ['scripts', 'test-lib'], [], []]");
1148 Service::HandleIsolateMessage(isolate, service_msg); 1164 Service::HandleIsolateMessage(isolate, service_msg);
1149 handler.HandleNextMessage(); 1165 handler.HandleNextMessage();
1150 EXPECT_STREQ( 1166 EXPECT_STREQ(
1151 "{\"type\":\"Script\",\"id\":\"scripts\\/test-lib\"," 1167 "{\"type\":\"Script\",\"id\":\"scripts\\/test-lib\","
1152 "\"name\":\"test-lib\",\"user_name\":\"test-lib\"," 1168 "\"name\":\"test-lib\",\"user_name\":\"test-lib\","
1153 "\"kind\":\"script\"," 1169 "\"kind\":\"script\","
1154 "\"source\":\"var port;\\n\\nmain() {\\n}\"," 1170 "\"source\":\"var port;\\n\\nmain() {\\n}\","
1155 "\"tokenPosTable\":[[1,0,1,1,5,2,9],[3,5,1,6,5,7,6,8,8],[4,10,1]]}", 1171 "\"tokenPosTable\":[[1,0,1,1,5,2,9],[3,5,1,6,5,7,6,8,8],[4,10,1]]}",
1156 handler.msg()); 1172 handler.msg());
1157 } 1173 }
(...skipping 22 matching lines...) Expand all
1180 EXPECT_VALID(result); 1196 EXPECT_VALID(result);
1181 1197
1182 // Build a mock message handler and wrap it in a dart port. 1198 // Build a mock message handler and wrap it in a dart port.
1183 ServiceTestMessageHandler handler; 1199 ServiceTestMessageHandler handler;
1184 Dart_Port port_id = PortMap::CreatePort(&handler); 1200 Dart_Port port_id = PortMap::CreatePort(&handler);
1185 Dart_Handle port = Api::NewHandle(isolate, SendPort::New(port_id)); 1201 Dart_Handle port = Api::NewHandle(isolate, SendPort::New(port_id));
1186 EXPECT_VALID(port); 1202 EXPECT_VALID(port);
1187 EXPECT_VALID(Dart_SetField(h_lib, NewString("port"), port)); 1203 EXPECT_VALID(Dart_SetField(h_lib, NewString("port"), port));
1188 1204
1189 Instance& service_msg = Instance::Handle(); 1205 Instance& service_msg = Instance::Handle();
1190 service_msg = Eval(h_lib, "[port, ['coverage'], [], []]"); 1206 service_msg = Eval(h_lib, "[0, port, ['coverage'], [], []]");
1191 Service::HandleIsolateMessage(isolate, service_msg); 1207 Service::HandleIsolateMessage(isolate, service_msg);
1192 handler.HandleNextMessage(); 1208 handler.HandleNextMessage();
1193 EXPECT_SUBSTRING( 1209 EXPECT_SUBSTRING(
1194 "{\"source\":\"test-lib\",\"script\":{" 1210 "{\"source\":\"test-lib\",\"script\":{"
1195 "\"type\":\"@Script\",\"id\":\"scripts\\/test-lib\"," 1211 "\"type\":\"@Script\",\"id\":\"scripts\\/test-lib\","
1196 "\"name\":\"test-lib\",\"user_name\":\"test-lib\"," 1212 "\"name\":\"test-lib\",\"user_name\":\"test-lib\","
1197 "\"kind\":\"script\"},\"hits\":" 1213 "\"kind\":\"script\"},\"hits\":"
1198 "[5,1,6,1]}", handler.msg()); 1214 "[5,1,6,1]}", handler.msg());
1199 } 1215 }
1200 1216
(...skipping 20 matching lines...) Expand all
1221 EXPECT_VALID(result); 1237 EXPECT_VALID(result);
1222 1238
1223 // Build a mock message handler and wrap it in a dart port. 1239 // Build a mock message handler and wrap it in a dart port.
1224 ServiceTestMessageHandler handler; 1240 ServiceTestMessageHandler handler;
1225 Dart_Port port_id = PortMap::CreatePort(&handler); 1241 Dart_Port port_id = PortMap::CreatePort(&handler);
1226 Dart_Handle port = Api::NewHandle(isolate, SendPort::New(port_id)); 1242 Dart_Handle port = Api::NewHandle(isolate, SendPort::New(port_id));
1227 EXPECT_VALID(port); 1243 EXPECT_VALID(port);
1228 EXPECT_VALID(Dart_SetField(h_lib, NewString("port"), port)); 1244 EXPECT_VALID(Dart_SetField(h_lib, NewString("port"), port));
1229 1245
1230 Instance& service_msg = Instance::Handle(); 1246 Instance& service_msg = Instance::Handle();
1231 service_msg = Eval(h_lib, "[port, ['allocationprofile'], [], []]"); 1247 service_msg = Eval(h_lib, "[0, port, ['allocationprofile'], [], []]");
1232 Service::HandleIsolateMessage(isolate, service_msg); 1248 Service::HandleIsolateMessage(isolate, service_msg);
1233 handler.HandleNextMessage(); 1249 handler.HandleNextMessage();
1234 EXPECT_SUBSTRING("\"type\":\"AllocationProfile\"", handler.msg()); 1250 EXPECT_SUBSTRING("\"type\":\"AllocationProfile\"", handler.msg());
1235 1251
1236 // Too long. 1252 // Too long.
1237 service_msg = Eval(h_lib, "[port, ['allocationprofile', 'foo'], [], []]"); 1253 service_msg = Eval(h_lib, "[0, port, ['allocationprofile', 'foo'], [], []]");
1238 Service::HandleIsolateMessage(isolate, service_msg); 1254 Service::HandleIsolateMessage(isolate, service_msg);
1239 handler.HandleNextMessage(); 1255 handler.HandleNextMessage();
1240 EXPECT_SUBSTRING("\"type\":\"Error\"", handler.msg()); 1256 EXPECT_SUBSTRING("\"type\":\"Error\"", handler.msg());
1241 1257
1242 // Bad gc option. 1258 // Bad gc option.
1243 service_msg = Eval(h_lib, "[port, ['allocationprofile'], ['gc'], ['cat']]"); 1259 service_msg = Eval(h_lib,
1260 "[0, port, ['allocationprofile'], ['gc'], ['cat']]");
1244 Service::HandleIsolateMessage(isolate, service_msg); 1261 Service::HandleIsolateMessage(isolate, service_msg);
1245 handler.HandleNextMessage(); 1262 handler.HandleNextMessage();
1246 EXPECT_SUBSTRING("\"type\":\"Error\"", handler.msg()); 1263 EXPECT_SUBSTRING("\"type\":\"Error\"", handler.msg());
1247 1264
1248 // Bad reset option. 1265 // Bad reset option.
1249 service_msg = Eval(h_lib, "[port, ['allocationprofile'], ['reset'], ['ff']]"); 1266 service_msg = Eval(h_lib,
1267 "[0, port, ['allocationprofile'], ['reset'], ['ff']]");
1250 Service::HandleIsolateMessage(isolate, service_msg); 1268 Service::HandleIsolateMessage(isolate, service_msg);
1251 handler.HandleNextMessage(); 1269 handler.HandleNextMessage();
1252 EXPECT_SUBSTRING("\"type\":\"Error\"", handler.msg()); 1270 EXPECT_SUBSTRING("\"type\":\"Error\"", handler.msg());
1253 1271
1254 // Good reset. 1272 // Good reset.
1255 service_msg = 1273 service_msg =
1256 Eval(h_lib, "[port, ['allocationprofile'], ['reset'], ['true']]"); 1274 Eval(h_lib, "[0, port, ['allocationprofile'], ['reset'], ['true']]");
1257 Service::HandleIsolateMessage(isolate, service_msg); 1275 Service::HandleIsolateMessage(isolate, service_msg);
1258 handler.HandleNextMessage(); 1276 handler.HandleNextMessage();
1259 EXPECT_SUBSTRING("\"type\":\"AllocationProfile\"", handler.msg()); 1277 EXPECT_SUBSTRING("\"type\":\"AllocationProfile\"", handler.msg());
1260 1278
1261 // Good GC. 1279 // Good GC.
1262 service_msg = 1280 service_msg =
1263 Eval(h_lib, "[port, ['allocationprofile'], ['gc'], ['full']]"); 1281 Eval(h_lib, "[0, port, ['allocationprofile'], ['gc'], ['full']]");
1264 Service::HandleIsolateMessage(isolate, service_msg); 1282 Service::HandleIsolateMessage(isolate, service_msg);
1265 handler.HandleNextMessage(); 1283 handler.HandleNextMessage();
1266 EXPECT_SUBSTRING("\"type\":\"AllocationProfile\"", handler.msg()); 1284 EXPECT_SUBSTRING("\"type\":\"AllocationProfile\"", handler.msg());
1267 1285
1268 // Good GC and reset. 1286 // Good GC and reset.
1269 service_msg = Eval(h_lib, 1287 service_msg = Eval(h_lib,
1270 "[port, ['allocationprofile'], ['gc', 'reset'], ['full', 'true']]"); 1288 "[0, port, ['allocationprofile'], ['gc', 'reset'], ['full', 'true']]");
1271 Service::HandleIsolateMessage(isolate, service_msg); 1289 Service::HandleIsolateMessage(isolate, service_msg);
1272 handler.HandleNextMessage(); 1290 handler.HandleNextMessage();
1273 EXPECT_SUBSTRING("\"type\":\"AllocationProfile\"", handler.msg()); 1291 EXPECT_SUBSTRING("\"type\":\"AllocationProfile\"", handler.msg());
1274 } 1292 }
1275 1293
1276 1294
1277 TEST_CASE(Service_HeapMap) { 1295 TEST_CASE(Service_HeapMap) {
1278 const char* kScript = 1296 const char* kScript =
1279 "var port;\n" // Set to our mock port by C++. 1297 "var port;\n" // Set to our mock port by C++.
1280 "\n" 1298 "\n"
1281 "main() {\n" 1299 "main() {\n"
1282 "}"; 1300 "}";
1283 1301
1284 Isolate* isolate = Isolate::Current(); 1302 Isolate* isolate = Isolate::Current();
1285 Dart_Handle lib = TestCase::LoadTestScript(kScript, NULL); 1303 Dart_Handle lib = TestCase::LoadTestScript(kScript, NULL);
1286 EXPECT_VALID(lib); 1304 EXPECT_VALID(lib);
1287 1305
1288 // Build a mock message handler and wrap it in a dart port. 1306 // Build a mock message handler and wrap it in a dart port.
1289 ServiceTestMessageHandler handler; 1307 ServiceTestMessageHandler handler;
1290 Dart_Port port_id = PortMap::CreatePort(&handler); 1308 Dart_Port port_id = PortMap::CreatePort(&handler);
1291 Dart_Handle port = Api::NewHandle(isolate, SendPort::New(port_id)); 1309 Dart_Handle port = Api::NewHandle(isolate, SendPort::New(port_id));
1292 EXPECT_VALID(port); 1310 EXPECT_VALID(port);
1293 EXPECT_VALID(Dart_SetField(lib, NewString("port"), port)); 1311 EXPECT_VALID(Dart_SetField(lib, NewString("port"), port));
1294 1312
1295 Instance& service_msg = Instance::Handle(); 1313 Instance& service_msg = Instance::Handle();
1296 service_msg = Eval(lib, "[port, ['heapmap'], [], []]"); 1314 service_msg = Eval(lib, "[0, port, ['heapmap'], [], []]");
1297 Service::HandleIsolateMessage(isolate, service_msg); 1315 Service::HandleIsolateMessage(isolate, service_msg);
1298 handler.HandleNextMessage(); 1316 handler.HandleNextMessage();
1299 EXPECT_SUBSTRING("\"type\":\"HeapMap\"", handler.msg()); 1317 EXPECT_SUBSTRING("\"type\":\"HeapMap\"", handler.msg());
1300 EXPECT_SUBSTRING("\"pages\":[", handler.msg()); 1318 EXPECT_SUBSTRING("\"pages\":[", handler.msg());
1301 } 1319 }
1302 1320
1303 1321
1304 TEST_CASE(Service_Address) { 1322 TEST_CASE(Service_Address) {
1305 const char* kScript = 1323 const char* kScript =
1306 "var port;\n" // Set to our mock port by C++. 1324 "var port;\n" // Set to our mock port by C++.
(...skipping 14 matching lines...) Expand all
1321 1339
1322 const String& str = String::Handle(String::New("foobar", Heap::kOld)); 1340 const String& str = String::Handle(String::New("foobar", Heap::kOld));
1323 Instance& service_msg = Instance::Handle(); 1341 Instance& service_msg = Instance::Handle();
1324 // Note: If we ever introduce old space compaction, this test might fail. 1342 // Note: If we ever introduce old space compaction, this test might fail.
1325 uword start_addr = RawObject::ToAddr(str.raw()); 1343 uword start_addr = RawObject::ToAddr(str.raw());
1326 // Expect to find 'str', also from internal addresses. 1344 // Expect to find 'str', also from internal addresses.
1327 for (int offset = 0; offset < kObjectAlignment; ++offset) { 1345 for (int offset = 0; offset < kObjectAlignment; ++offset) {
1328 uword addr = start_addr + offset; 1346 uword addr = start_addr + offset;
1329 char buf[1024]; 1347 char buf[1024];
1330 OS::SNPrint(buf, sizeof(buf), 1348 OS::SNPrint(buf, sizeof(buf),
1331 "[port, ['address', '%" Px "'], [], []]", addr); 1349 "[0, port, ['address', '%" Px "'], [], []]", addr);
1332 service_msg = Eval(lib, buf); 1350 service_msg = Eval(lib, buf);
1333 Service::HandleIsolateMessage(isolate, service_msg); 1351 Service::HandleIsolateMessage(isolate, service_msg);
1334 handler.HandleNextMessage(); 1352 handler.HandleNextMessage();
1335 EXPECT_SUBSTRING("\"type\":\"@String\"", handler.msg()); 1353 EXPECT_SUBSTRING("\"type\":\"@String\"", handler.msg());
1336 EXPECT_SUBSTRING("foobar", handler.msg()); 1354 EXPECT_SUBSTRING("foobar", handler.msg());
1337 } 1355 }
1338 // Expect null when no object is found. 1356 // Expect null when no object is found.
1339 service_msg = Eval(lib, "[port, ['address', '7'], [], []]"); 1357 service_msg = Eval(lib, "[0, port, ['address', '7'], [], []]");
1340 Service::HandleIsolateMessage(isolate, service_msg); 1358 Service::HandleIsolateMessage(isolate, service_msg);
1341 handler.HandleNextMessage(); 1359 handler.HandleNextMessage();
1342 // TODO(turnidge): Should this be a ServiceException instead? 1360 // TODO(turnidge): Should this be a ServiceException instead?
1343 EXPECT_STREQ("{\"type\":\"@Null\",\"id\":\"objects\\/null\"," 1361 EXPECT_STREQ("{\"type\":\"@Null\",\"id\":\"objects\\/null\","
1344 "\"valueAsString\":\"null\"}", 1362 "\"valueAsString\":\"null\"}",
1345 handler.msg()); 1363 handler.msg());
1346 } 1364 }
1347 1365
1348 1366
1349 static const char* alpha_callback( 1367 static const char* alpha_callback(
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
1391 1409
1392 // Build a mock message handler and wrap it in a dart port. 1410 // Build a mock message handler and wrap it in a dart port.
1393 ServiceTestMessageHandler handler; 1411 ServiceTestMessageHandler handler;
1394 Dart_Port port_id = PortMap::CreatePort(&handler); 1412 Dart_Port port_id = PortMap::CreatePort(&handler);
1395 Dart_Handle port = Api::NewHandle(isolate, SendPort::New(port_id)); 1413 Dart_Handle port = Api::NewHandle(isolate, SendPort::New(port_id));
1396 EXPECT_VALID(port); 1414 EXPECT_VALID(port);
1397 EXPECT_VALID(Dart_SetField(lib, NewString("port"), port)); 1415 EXPECT_VALID(Dart_SetField(lib, NewString("port"), port));
1398 1416
1399 1417
1400 Instance& service_msg = Instance::Handle(); 1418 Instance& service_msg = Instance::Handle();
1401 service_msg = Eval(lib, "[port, ['alpha'], [], []]"); 1419 service_msg = Eval(lib, "[0, port, ['alpha'], [], []]");
1402 Service::HandleRootMessage(service_msg); 1420 Service::HandleRootMessage(service_msg);
1403 handler.HandleNextMessage(); 1421 handler.HandleNextMessage();
1404 EXPECT_STREQ("alpha", handler.msg()); 1422 EXPECT_STREQ("alpha", handler.msg());
1405 service_msg = Eval(lib, "[port, ['beta'], [], []]"); 1423 service_msg = Eval(lib, "[0, port, ['beta'], [], []]");
1406 Service::HandleRootMessage(service_msg); 1424 Service::HandleRootMessage(service_msg);
1407 handler.HandleNextMessage(); 1425 handler.HandleNextMessage();
1408 EXPECT_STREQ("beta", handler.msg()); 1426 EXPECT_STREQ("beta", handler.msg());
1409 } 1427 }
1410 1428
1411 TEST_CASE(Service_EmbedderIsolateHandler) { 1429 TEST_CASE(Service_EmbedderIsolateHandler) {
1412 const char* kScript = 1430 const char* kScript =
1413 "var port;\n" // Set to our mock port by C++. 1431 "var port;\n" // Set to our mock port by C++.
1414 "\n" 1432 "\n"
1415 "var x = 7;\n" 1433 "var x = 7;\n"
(...skipping 12 matching lines...) Expand all
1428 EXPECT_VALID(result); 1446 EXPECT_VALID(result);
1429 1447
1430 // Build a mock message handler and wrap it in a dart port. 1448 // Build a mock message handler and wrap it in a dart port.
1431 ServiceTestMessageHandler handler; 1449 ServiceTestMessageHandler handler;
1432 Dart_Port port_id = PortMap::CreatePort(&handler); 1450 Dart_Port port_id = PortMap::CreatePort(&handler);
1433 Dart_Handle port = Api::NewHandle(isolate, SendPort::New(port_id)); 1451 Dart_Handle port = Api::NewHandle(isolate, SendPort::New(port_id));
1434 EXPECT_VALID(port); 1452 EXPECT_VALID(port);
1435 EXPECT_VALID(Dart_SetField(lib, NewString("port"), port)); 1453 EXPECT_VALID(Dart_SetField(lib, NewString("port"), port));
1436 1454
1437 Instance& service_msg = Instance::Handle(); 1455 Instance& service_msg = Instance::Handle();
1438 service_msg = Eval(lib, "[port, ['alpha'], [], []]"); 1456 service_msg = Eval(lib, "[0, port, ['alpha'], [], []]");
1439 Service::HandleIsolateMessage(isolate, service_msg); 1457 Service::HandleIsolateMessage(isolate, service_msg);
1440 handler.HandleNextMessage(); 1458 handler.HandleNextMessage();
1441 EXPECT_STREQ("alpha", handler.msg()); 1459 EXPECT_STREQ("alpha", handler.msg());
1442 service_msg = Eval(lib, "[port, ['beta'], [], []]"); 1460 service_msg = Eval(lib, "[0, port, ['beta'], [], []]");
1443 Service::HandleIsolateMessage(isolate, service_msg); 1461 Service::HandleIsolateMessage(isolate, service_msg);
1444 handler.HandleNextMessage(); 1462 handler.HandleNextMessage();
1445 EXPECT_STREQ("beta", handler.msg()); 1463 EXPECT_STREQ("beta", handler.msg());
1446 } 1464 }
1447 1465
1448 1466
1449 // TODO(zra): Remove when tests are ready to enable. 1467 // TODO(zra): Remove when tests are ready to enable.
1450 #if !defined(TARGET_ARCH_ARM64) 1468 #if !defined(TARGET_ARCH_ARM64)
1451 1469
1452 TEST_CASE(Service_Profile) { 1470 TEST_CASE(Service_Profile) {
(...skipping 16 matching lines...) Expand all
1469 EXPECT_VALID(result); 1487 EXPECT_VALID(result);
1470 1488
1471 // Build a mock message handler and wrap it in a dart port. 1489 // Build a mock message handler and wrap it in a dart port.
1472 ServiceTestMessageHandler handler; 1490 ServiceTestMessageHandler handler;
1473 Dart_Port port_id = PortMap::CreatePort(&handler); 1491 Dart_Port port_id = PortMap::CreatePort(&handler);
1474 Dart_Handle port = Api::NewHandle(isolate, SendPort::New(port_id)); 1492 Dart_Handle port = Api::NewHandle(isolate, SendPort::New(port_id));
1475 EXPECT_VALID(port); 1493 EXPECT_VALID(port);
1476 EXPECT_VALID(Dart_SetField(h_lib, NewString("port"), port)); 1494 EXPECT_VALID(Dart_SetField(h_lib, NewString("port"), port));
1477 1495
1478 Instance& service_msg = Instance::Handle(); 1496 Instance& service_msg = Instance::Handle();
1479 service_msg = Eval(h_lib, "[port, ['profile'], [], []]"); 1497 service_msg = Eval(h_lib, "[0, port, ['profile'], [], []]");
1480 Service::HandleIsolateMessage(isolate, service_msg); 1498 Service::HandleIsolateMessage(isolate, service_msg);
1481 handler.HandleNextMessage(); 1499 handler.HandleNextMessage();
1482 // Expect profile 1500 // Expect profile
1483 EXPECT_SUBSTRING("\"type\":\"Profile\"", handler.msg()); 1501 EXPECT_SUBSTRING("\"type\":\"Profile\"", handler.msg());
1484 1502
1485 service_msg = Eval(h_lib, "[port, ['profile'], ['tags'], ['hide']]"); 1503 service_msg = Eval(h_lib, "[0, port, ['profile'], ['tags'], ['hide']]");
1486 Service::HandleIsolateMessage(isolate, service_msg); 1504 Service::HandleIsolateMessage(isolate, service_msg);
1487 handler.HandleNextMessage(); 1505 handler.HandleNextMessage();
1488 // Expect profile 1506 // Expect profile
1489 EXPECT_SUBSTRING("\"type\":\"Profile\"", handler.msg()); 1507 EXPECT_SUBSTRING("\"type\":\"Profile\"", handler.msg());
1490 1508
1491 service_msg = Eval(h_lib, "[port, ['profile'], ['tags'], ['hidden']]"); 1509 service_msg = Eval(h_lib, "[0, port, ['profile'], ['tags'], ['hidden']]");
1492 Service::HandleIsolateMessage(isolate, service_msg); 1510 Service::HandleIsolateMessage(isolate, service_msg);
1493 handler.HandleNextMessage(); 1511 handler.HandleNextMessage();
1494 // Expect error. 1512 // Expect error.
1495 EXPECT_SUBSTRING("\"type\":\"Error\"", handler.msg()); 1513 EXPECT_SUBSTRING("\"type\":\"Error\"", handler.msg());
1496 } 1514 }
1497 1515
1498 #endif // !defined(TARGET_ARCH_ARM64) 1516 #endif // !defined(TARGET_ARCH_ARM64)
1499 1517
1500 } // namespace dart 1518 } // namespace dart
OLDNEW
« no previous file with comments | « runtime/vm/service/message.dart ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698