mirror of
https://github.com/dart-lang/sdk
synced 2024-10-05 02:17:16 +00:00
Minor observatory test cleanups.
- Remove --compile-all from a couple of tests. - Use debugger() instead of busy-waiting in a couple of tests. BUG= R=johnmccutchan@google.com Review URL: https://codereview.chromium.org//1278803005 .
This commit is contained in:
parent
093f654bf7
commit
fbe47ffa53
|
@ -6,18 +6,18 @@
|
|||
import 'package:observatory/service_io.dart';
|
||||
import 'package:unittest/unittest.dart';
|
||||
import 'test_helper.dart';
|
||||
import 'dart:async';
|
||||
import 'dart:developer';
|
||||
|
||||
int globalVar = 100;
|
||||
|
||||
class MyClass {
|
||||
static void myFunction(int value) {
|
||||
print(value); // line 14
|
||||
if (value < 0) {
|
||||
print("negative");
|
||||
} else {
|
||||
print("positive");
|
||||
}
|
||||
debugger();
|
||||
}
|
||||
|
||||
static void otherFunction(int value) {
|
||||
|
@ -31,128 +31,73 @@ class MyClass {
|
|||
|
||||
void testFunction() {
|
||||
MyClass.otherFunction(-100);
|
||||
int i = 0;
|
||||
while (true) {
|
||||
if (++i % 100000000 == 0) {
|
||||
MyClass.myFunction(10000);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
List normalize(List coverage) {
|
||||
// The exact coverage numbers may vary based on how many times
|
||||
// things run. Normalize the data to 0 or 1.
|
||||
List normalized = [];
|
||||
for (int i = 0; i < coverage.length; i += 2) {
|
||||
normalized.add(coverage[i]);
|
||||
normalized.add(coverage[i+1] == 0 ? 0 : 1);
|
||||
}
|
||||
return normalized;
|
||||
MyClass.myFunction(10000);
|
||||
}
|
||||
|
||||
var tests = [
|
||||
|
||||
// Go to breakpoint at line 14.
|
||||
(Isolate isolate) {
|
||||
return isolate.rootLibrary.load().then((_) {
|
||||
// Set up a listener to wait for breakpoint events.
|
||||
Completer completer = new Completer();
|
||||
isolate.vm.getEventStream(VM.kDebugStream).then((stream) {
|
||||
var subscription;
|
||||
subscription = stream.listen((ServiceEvent event) {
|
||||
if (event.kind == ServiceEvent.kPauseBreakpoint) {
|
||||
print('Breakpoint reached');
|
||||
completer.complete();
|
||||
subscription.cancel();
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
// Create a timer to set a breakpoint with a short delay.
|
||||
new Timer(new Duration(milliseconds: 2000), () {
|
||||
// Add the breakpoint.
|
||||
print('Setting breakpoint.');
|
||||
var script = isolate.rootLibrary.scripts[0];
|
||||
var line = 14;
|
||||
isolate.addBreakpoint(script, line);
|
||||
});
|
||||
|
||||
return completer.future;
|
||||
});
|
||||
},
|
||||
hasStoppedAtBreakpoint,
|
||||
|
||||
// Get coverage for function, class, library, script, and isolate.
|
||||
(Isolate isolate) {
|
||||
return isolate.getStack().then((ServiceMap stack) {
|
||||
// Make sure we are in the right place.
|
||||
expect(stack.type, equals('Stack'));
|
||||
expect(stack['frames'].length, greaterThanOrEqualTo(2));
|
||||
expect(stack['frames'][0].function.name, equals('myFunction'));
|
||||
expect(stack['frames'][0].function.dartOwner.name, equals('MyClass'));
|
||||
(Isolate isolate) async {
|
||||
var stack = await isolate.getStack();
|
||||
|
||||
var lib = isolate.rootLibrary;
|
||||
var func = stack['frames'][0].function;
|
||||
expect(func.name, equals('myFunction'));
|
||||
var cls = func.dartOwner;
|
||||
expect(cls.name, equals('MyClass'));
|
||||
// Make sure we are in the right place.
|
||||
expect(stack.type, equals('Stack'));
|
||||
expect(stack['frames'].length, greaterThanOrEqualTo(2));
|
||||
expect(stack['frames'][0].function.name, equals('myFunction'));
|
||||
expect(stack['frames'][0].function.dartOwner.name, equals('MyClass'));
|
||||
|
||||
List tests = [];
|
||||
// Function
|
||||
tests.add(isolate.invokeRpcNoUpgrade('_getCoverage',
|
||||
{ 'targetId': func.id })
|
||||
.then((Map coverage) {
|
||||
expect(coverage['type'], equals('CodeCoverage'));
|
||||
expect(coverage['coverage'].length, equals(1));
|
||||
expect(normalize(coverage['coverage'][0]['hits']),
|
||||
equals([15, 1, 16, 1, 17, 0, 19, 1]));
|
||||
}));
|
||||
// Class
|
||||
tests.add(isolate.invokeRpcNoUpgrade('_getCoverage',
|
||||
{ 'targetId': cls.id })
|
||||
.then((Map coverage) {
|
||||
expect(coverage['type'], equals('CodeCoverage'));
|
||||
expect(coverage['coverage'].length, equals(1));
|
||||
expect(normalize(coverage['coverage'][0]['hits']),
|
||||
equals([15, 1, 16, 1, 17, 0, 19, 1,
|
||||
24, 1, 25, 1, 27, 0]));
|
||||
}));
|
||||
// Library
|
||||
tests.add(isolate.invokeRpcNoUpgrade('_getCoverage',
|
||||
{ 'targetId': lib.id })
|
||||
.then((Map coverage) {
|
||||
expect(coverage['type'], equals('CodeCoverage'));
|
||||
expect(coverage['coverage'].length, equals(3));
|
||||
expect(normalize(coverage['coverage'][0]['hits']),
|
||||
equals([15, 1, 16, 1, 17, 0, 19, 1,
|
||||
24, 1, 25, 1, 27, 0]));
|
||||
expect(normalize(coverage['coverage'][1]['hits']).take(12),
|
||||
equals([33, 1, 36, 1, 37, 0, 32, 1, 45, 0, 46, 0]));
|
||||
}));
|
||||
// Script
|
||||
tests.add(cls.load().then((_) {
|
||||
return isolate.invokeRpcNoUpgrade(
|
||||
'_getCoverage',
|
||||
{ 'targetId': cls.location.script.id })
|
||||
.then((Map coverage) {
|
||||
expect(coverage['type'], equals('CodeCoverage'));
|
||||
expect(coverage['coverage'].length, equals(3));
|
||||
expect(normalize(coverage['coverage'][0]['hits']),
|
||||
equals([15, 1, 16, 1, 17, 0, 19, 1,
|
||||
24, 1, 25, 1, 27, 0]));
|
||||
expect(normalize(coverage['coverage'][1]['hits']).take(12),
|
||||
equals([33, 1, 36, 1, 37, 0, 32, 1, 45, 0, 46, 0]));
|
||||
});
|
||||
}));
|
||||
// Isolate
|
||||
tests.add(cls.load().then((_) {
|
||||
return isolate.invokeRpcNoUpgrade('_getCoverage', {})
|
||||
.then((Map coverage) {
|
||||
expect(coverage['type'], equals('CodeCoverage'));
|
||||
expect(coverage['coverage'].length, greaterThan(100));
|
||||
});
|
||||
}));
|
||||
return Future.wait(tests);
|
||||
});
|
||||
var lib = isolate.rootLibrary;
|
||||
var func = stack['frames'][0].function;
|
||||
expect(func.name, equals('myFunction'));
|
||||
var cls = func.dartOwner;
|
||||
expect(cls.name, equals('MyClass'));
|
||||
|
||||
// Function
|
||||
var coverage = await isolate.invokeRpcNoUpgrade('_getCoverage',
|
||||
{ 'targetId': func.id });
|
||||
expect(coverage['type'], equals('CodeCoverage'));
|
||||
expect(coverage['coverage'].length, equals(1));
|
||||
expect(coverage['coverage'][0]['hits'],
|
||||
equals([15, 1, 16, 0, 18, 1, 20, 1]));
|
||||
|
||||
// Class
|
||||
coverage = await isolate.invokeRpcNoUpgrade('_getCoverage',
|
||||
{ 'targetId': cls.id });
|
||||
expect(coverage['type'], equals('CodeCoverage'));
|
||||
expect(coverage['coverage'].length, equals(1));
|
||||
expect(coverage['coverage'][0]['hits'],
|
||||
equals([15, 1, 16, 0, 18, 1, 20, 1,
|
||||
24, 1, 25, 1, 27, 0]));
|
||||
|
||||
// Library
|
||||
coverage = await isolate.invokeRpcNoUpgrade('_getCoverage',
|
||||
{ 'targetId': lib.id });
|
||||
expect(coverage['type'], equals('CodeCoverage'));
|
||||
expect(coverage['coverage'].length, equals(3));
|
||||
expect(coverage['coverage'][0]['hits'],
|
||||
equals([15, 1, 16, 0, 18, 1, 20, 1,
|
||||
24, 1, 25, 1, 27, 0]));
|
||||
expect(coverage['coverage'][1]['hits'].take(12),
|
||||
equals([33, 1, 34, 1, 32, 1, 105, 2, 105, 1]));
|
||||
|
||||
// Script
|
||||
await cls.load();
|
||||
coverage = await isolate.invokeRpcNoUpgrade('_getCoverage',
|
||||
{ 'targetId': cls.location.script.id });
|
||||
expect(coverage['type'], equals('CodeCoverage'));
|
||||
expect(coverage['coverage'].length, equals(3));
|
||||
expect(coverage['coverage'][0]['hits'],
|
||||
equals([15, 1, 16, 0, 18, 1, 20, 1,
|
||||
24, 1, 25, 1, 27, 0]));
|
||||
expect(coverage['coverage'][1]['hits'].take(12),
|
||||
equals([33, 1, 34, 1, 32, 1, 105, 2, 105, 1]));
|
||||
|
||||
// Isolate
|
||||
coverage = await isolate.invokeRpcNoUpgrade('_getCoverage', {});
|
||||
expect(coverage['type'], equals('CodeCoverage'));
|
||||
expect(coverage['coverage'].length, greaterThan(100));
|
||||
},
|
||||
|
||||
];
|
||||
|
|
|
@ -8,13 +8,14 @@ import 'package:observatory/debugger.dart';
|
|||
import 'package:unittest/unittest.dart';
|
||||
import 'test_helper.dart';
|
||||
import 'dart:async';
|
||||
import 'dart:developer';
|
||||
|
||||
void testFunction() {
|
||||
int i = 0;
|
||||
while (true) {
|
||||
if (++i % 100000000 == 0) { // line 15
|
||||
print(i);
|
||||
}
|
||||
debugger();
|
||||
print('loop');
|
||||
print('loop');
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -51,35 +52,14 @@ Future<Debugger> initDebugger(Isolate isolate) {
|
|||
|
||||
var tests = [
|
||||
|
||||
// Bring the isolate to a breakpoint at line 15.
|
||||
(Isolate isolate) {
|
||||
return isolate.rootLibrary.load().then((_) {
|
||||
// Listen for breakpoint event.
|
||||
Completer completer = new Completer();
|
||||
isolate.vm.getEventStream(VM.kDebugStream).then((stream) {
|
||||
var subscription;
|
||||
subscription = stream.listen((ServiceEvent event) {
|
||||
if (event.kind == ServiceEvent.kPauseBreakpoint) {
|
||||
subscription.cancel();
|
||||
completer.complete();
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
// Add the breakpoint.
|
||||
var script = isolate.rootLibrary.scripts[0];
|
||||
return isolate.addBreakpoint(script, 15).then((ServiceObject bpt) {
|
||||
return completer.future; // Wait for breakpoint events.
|
||||
});
|
||||
});
|
||||
},
|
||||
hasStoppedAtBreakpoint,
|
||||
|
||||
// Parse '' => current position
|
||||
(Isolate isolate) {
|
||||
return initDebugger(isolate).then((debugger) {
|
||||
return DebuggerLocation.parse(debugger, '').then((DebuggerLocation loc) {
|
||||
expect(loc.valid, isTrue);
|
||||
expect(loc.toString(), equals('debugger_location_test.dart:15'));
|
||||
expect(loc.toString(), equals('debugger_location_test.dart:17'));
|
||||
});
|
||||
});
|
||||
},
|
||||
|
@ -87,9 +67,9 @@ var tests = [
|
|||
// Parse line
|
||||
(Isolate isolate) {
|
||||
return initDebugger(isolate).then((debugger) {
|
||||
return DebuggerLocation.parse(debugger, '16').then((DebuggerLocation loc) {
|
||||
return DebuggerLocation.parse(debugger, '18').then((DebuggerLocation loc) {
|
||||
expect(loc.valid, isTrue);
|
||||
expect(loc.toString(), equals('debugger_location_test.dart:16'));
|
||||
expect(loc.toString(), equals('debugger_location_test.dart:18'));
|
||||
});
|
||||
});
|
||||
},
|
||||
|
|
|
@ -1,10 +1,9 @@
|
|||
// 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
|
||||
// VMOptions=--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';
|
||||
|
||||
|
|
|
@ -1,10 +1,9 @@
|
|||
// 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
|
||||
// VMOptions=--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';
|
||||
|
||||
|
|
Loading…
Reference in a new issue