|  | // Copyright (c) 2015, the Dart project authors.  Please see the AUTHORS file | 
|  | // for details. All rights reserved. Use of this source code is governed by a | 
|  | // BSD-style license that can be found in the LICENSE file. | 
|  |  | 
|  | import 'dart:developer'; | 
|  | import 'dart:io'; | 
|  | import 'dart:isolate' show ReceivePort; | 
|  | import 'package:observatory/models.dart' as M; | 
|  | import 'package:observatory/service_io.dart'; | 
|  | import 'package:test/test.dart'; | 
|  | import 'service_test_common.dart'; | 
|  | import 'test_helper.dart'; | 
|  |  | 
|  | var receivePort; | 
|  |  | 
|  | void testMain() { | 
|  | receivePort = new ReceivePort(); | 
|  | debugger(); | 
|  | } | 
|  |  | 
|  | var tests = <IsolateTest>[ | 
|  | hasStoppedAtBreakpoint, | 
|  | (Isolate isolate) async { | 
|  | print('Resuming...'); | 
|  | await isolate.resume(); | 
|  |  | 
|  | // Wait for the isolate to become idle.  We detect this by querying | 
|  | // the stack until it becomes empty. | 
|  | var frameCount; | 
|  | do { | 
|  | var stack = await isolate.getStack(); | 
|  | frameCount = stack['frames'].length; | 
|  | print('Frames: $frameCount'); | 
|  | sleep(const Duration(milliseconds: 10)); | 
|  | } while (frameCount > 0); | 
|  | print('Isolate is idle.'); | 
|  | await isolate.reload(); | 
|  | expect(isolate.pauseEvent is M.ResumeEvent, isTrue); | 
|  |  | 
|  | // Make sure that the isolate receives an interrupt even when it is | 
|  | // idle. (https://github.com/dart-lang/sdk/issues/24349) | 
|  | var interruptFuture = hasPausedFor(isolate, ServiceEvent.kPauseInterrupted); | 
|  | print('Pausing...'); | 
|  | await isolate.pause(); | 
|  | await interruptFuture; | 
|  | }, | 
|  | ]; | 
|  |  | 
|  | main(args) => runIsolateTests(args, tests, | 
|  | testeeConcurrent: testMain, | 
|  | verbose_vm: true, | 
|  | extraArgs: ['--trace-service', '--trace-service-verbose']); |