| Index: runtime/observatory/tests/service/break_on_activation_test.dart
|
| diff --git a/runtime/observatory/tests/service/break_on_activation_test.dart b/runtime/observatory/tests/service/break_on_activation_test.dart
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..0b20631d04e17565e9c4d65164815113d75d42b3
|
| --- /dev/null
|
| +++ b/runtime/observatory/tests/service/break_on_activation_test.dart
|
| @@ -0,0 +1,191 @@
|
| +// 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.
|
| +// VMOptions=--compile-all --error_on_bad_type --error_on_bad_override
|
| +
|
| +import 'package:observatory/service_io.dart';
|
| +import 'package:unittest/unittest.dart';
|
| +import 'test_helper.dart';
|
| +import 'dart:async';
|
| +
|
| +genRepeater(value) {
|
| + return () => print(value);
|
| +}
|
| +
|
| +genRepeaterNamed(value) {
|
| + return ({x, y}) => print(value);
|
| +}
|
| +
|
| +var r1;
|
| +var r2;
|
| +var r3;
|
| +
|
| +var r1_named;
|
| +var r2_named;
|
| +var r3_named;
|
| +
|
| +void testeeSetup() {
|
| + // These closures have the same function.
|
| + r1 = genRepeater('r1');
|
| + r2 = genRepeater('r2');
|
| + r3 = genRepeater('r3');
|
| +
|
| + // These closures have the same function.
|
| + r1_named = genRepeaterNamed('r1_named');
|
| + r2_named = genRepeaterNamed('r2_named');
|
| + r3_named = genRepeaterNamed('r3_named');
|
| +}
|
| +
|
| +void testeeDo() {
|
| + r1();
|
| + r2();
|
| + r3();
|
| +}
|
| +
|
| +void testeeDoNamed() {
|
| + r1_named(y: 'Not a closure', x: 'Not a closure');
|
| + r2_named(y: 'Not a closure', x: 'Not a closure');
|
| + r3_named(y: 'Not a closure', x: 'Not a closure');
|
| +}
|
| +
|
| +
|
| +var tests = [
|
| +(Isolate isolate) async {
|
| + var rootLib = await isolate.rootLibrary.load();
|
| +
|
| + var breaksHit = 0;
|
| +
|
| + var subscription;
|
| + subscription = isolate.vm.events.stream.listen((ServiceEvent event) {
|
| + if (event.eventType == ServiceEvent.kPauseBreakpoint) {
|
| + print("Hit breakpoint ${event.breakpoint}");
|
| + breaksHit++;
|
| + isolate.resume();
|
| + }
|
| + });
|
| +
|
| + valueOfField(String name) {
|
| + return rootLib.variables.singleWhere((v) => v.name == name).value;
|
| + }
|
| + var r1Ref = valueOfField('r1');
|
| + var r2Ref = valueOfField('r2');
|
| + var r3Ref = valueOfField('r3');
|
| +
|
| + var bpt1 = await isolate.addBreakOnActivation(r1Ref);
|
| + print("Added breakpoint $bpt1");
|
| + expect(bpt1 is Breakpoint, isTrue);
|
| + expect(breaksHit, equals(0));
|
| + print("testeeDo()");
|
| + var res = await rootLib.evaluate("testeeDo()");
|
| + expect(res is Instance, isTrue); // Not error.
|
| + expect(breaksHit, equals(1));
|
| +
|
| + await isolate.removeBreakpoint(bpt1);
|
| + print("Removed breakpoint $bpt1");
|
| + print("testeeDo()");
|
| + res = await rootLib.evaluate("testeeDo()");
|
| + expect(res is Instance, isTrue); // Not error.
|
| + expect(breaksHit, equals(1));
|
| +
|
| + await subscription.cancel();
|
| +},
|
| +
|
| +(Isolate isolate) async {
|
| + var rootLib = await isolate.rootLibrary.load();
|
| +
|
| + var breaksHit = 0;
|
| +
|
| + var subscription;
|
| + subscription = isolate.vm.events.stream.listen((ServiceEvent event) {
|
| + if (event.eventType == ServiceEvent.kPauseBreakpoint) {
|
| + print("Hit breakpoint ${event.breakpoint}");
|
| + breaksHit++;
|
| + isolate.resume();
|
| + }
|
| + });
|
| +
|
| + valueOfField(String name) {
|
| + return rootLib.variables.singleWhere((v) => v.name == name).value;
|
| + }
|
| + var r1Ref = valueOfField('r1_named');
|
| + var r2Ref = valueOfField('r2_named');
|
| + var r3Ref = valueOfField('r3_named');
|
| +
|
| + var bpt1 = await isolate.addBreakOnActivation(r1Ref);
|
| + print("Added breakpoint $bpt1");
|
| + expect(bpt1 is Breakpoint, isTrue);
|
| + expect(breaksHit, equals(0));
|
| + print("testeeDoNamed()");
|
| + var res = await rootLib.evaluate("testeeDoNamed()");
|
| + expect(res is Instance, isTrue); // Not error.
|
| + expect(breaksHit, equals(1));
|
| +
|
| + await isolate.removeBreakpoint(bpt1);
|
| + print("Removed breakpoint $bpt1");
|
| + print("testeeDoNamed()");
|
| + res = await rootLib.evaluate("testeeDoNamed()");
|
| + expect(res is Instance, isTrue); // Not error.
|
| + expect(breaksHit, equals(1));
|
| +
|
| + await subscription.cancel();
|
| +},
|
| +
|
| +(Isolate isolate) async {
|
| + var rootLib = await isolate.rootLibrary.load();
|
| +
|
| + var breaksHit = 0;
|
| +
|
| + var subscription;
|
| + subscription = isolate.vm.events.stream.listen((ServiceEvent event) {
|
| + if (event.eventType == ServiceEvent.kPauseBreakpoint) {
|
| + print("Hit breakpoint ${event.breakpoint}");
|
| + breaksHit++;
|
| + isolate.resume();
|
| + }
|
| + });
|
| +
|
| + valueOfField(String name) {
|
| + return rootLib.variables.singleWhere((v) => v.name == name).value;
|
| + }
|
| + var r1Ref = valueOfField('r1');
|
| + var r2Ref = valueOfField('r2');
|
| + var r3Ref = valueOfField('r3');
|
| +
|
| + var bpt1 = await isolate.addBreakOnActivation(r1Ref);
|
| + print("Added breakpoint $bpt1");
|
| + expect(bpt1 is Breakpoint, isTrue);
|
| + expect(breaksHit, equals(0));
|
| + print("testeeDo()");
|
| + var res = await rootLib.evaluate("testeeDo()");
|
| + expect(res is Instance, isTrue); // Not error.
|
| + expect(breaksHit, equals(1));
|
| +
|
| + var bpt2 = await isolate.addBreakOnActivation(r2Ref);
|
| + print("Added breakpoint $bpt2");
|
| + expect(bpt2 is Breakpoint, isTrue);
|
| + expect(breaksHit, equals(1));
|
| + print("testeeDo()");
|
| + res = await rootLib.evaluate("testeeDo()");
|
| + expect(res is Instance, isTrue); // Not error.
|
| + expect(breaksHit, equals(3));
|
| +
|
| + await isolate.removeBreakpoint(bpt1);
|
| + print("Removed breakpoint $bpt1");
|
| + print("testeeDo()");
|
| + res = await rootLib.evaluate("testeeDo()");
|
| + expect(res is Instance, isTrue); // Not error.
|
| + expect(breaksHit, equals(4));
|
| +
|
| + await isolate.removeBreakpoint(bpt2);
|
| + print("Removed breakpoint $bpt2");
|
| + print("testeeDo()");
|
| + res = await rootLib.evaluate("testeeDo()");
|
| + expect(res is Instance, isTrue); // Not error.
|
| + expect(breaksHit, equals(4));
|
| +
|
| + await subscription.cancel();
|
| +},
|
| +
|
| +];
|
| +
|
| +main(args) => runIsolateTests(args, tests, testeeBefore: testeeSetup);
|
|
|