mirror of
https://github.com/dart-lang/sdk
synced 2024-10-05 06:17:29 +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:observatory/service_io.dart';
|
||||||
import 'package:unittest/unittest.dart';
|
import 'package:unittest/unittest.dart';
|
||||||
import 'test_helper.dart';
|
import 'test_helper.dart';
|
||||||
import 'dart:async';
|
import 'dart:developer';
|
||||||
|
|
||||||
int globalVar = 100;
|
int globalVar = 100;
|
||||||
|
|
||||||
class MyClass {
|
class MyClass {
|
||||||
static void myFunction(int value) {
|
static void myFunction(int value) {
|
||||||
print(value); // line 14
|
|
||||||
if (value < 0) {
|
if (value < 0) {
|
||||||
print("negative");
|
print("negative");
|
||||||
} else {
|
} else {
|
||||||
print("positive");
|
print("positive");
|
||||||
}
|
}
|
||||||
|
debugger();
|
||||||
}
|
}
|
||||||
|
|
||||||
static void otherFunction(int value) {
|
static void otherFunction(int value) {
|
||||||
|
@ -31,59 +31,17 @@ class MyClass {
|
||||||
|
|
||||||
void testFunction() {
|
void testFunction() {
|
||||||
MyClass.otherFunction(-100);
|
MyClass.otherFunction(-100);
|
||||||
int i = 0;
|
|
||||||
while (true) {
|
|
||||||
if (++i % 100000000 == 0) {
|
|
||||||
MyClass.myFunction(10000);
|
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;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
var tests = [
|
var tests = [
|
||||||
|
|
||||||
// Go to breakpoint at line 14.
|
hasStoppedAtBreakpoint,
|
||||||
(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;
|
|
||||||
});
|
|
||||||
},
|
|
||||||
|
|
||||||
// Get coverage for function, class, library, script, and isolate.
|
// Get coverage for function, class, library, script, and isolate.
|
||||||
(Isolate isolate) {
|
(Isolate isolate) async {
|
||||||
return isolate.getStack().then((ServiceMap stack) {
|
var stack = await isolate.getStack();
|
||||||
|
|
||||||
// Make sure we are in the right place.
|
// Make sure we are in the right place.
|
||||||
expect(stack.type, equals('Stack'));
|
expect(stack.type, equals('Stack'));
|
||||||
expect(stack['frames'].length, greaterThanOrEqualTo(2));
|
expect(stack['frames'].length, greaterThanOrEqualTo(2));
|
||||||
|
@ -96,63 +54,50 @@ var tests = [
|
||||||
var cls = func.dartOwner;
|
var cls = func.dartOwner;
|
||||||
expect(cls.name, equals('MyClass'));
|
expect(cls.name, equals('MyClass'));
|
||||||
|
|
||||||
List tests = [];
|
|
||||||
// Function
|
// Function
|
||||||
tests.add(isolate.invokeRpcNoUpgrade('_getCoverage',
|
var coverage = await isolate.invokeRpcNoUpgrade('_getCoverage',
|
||||||
{ 'targetId': func.id })
|
{ 'targetId': func.id });
|
||||||
.then((Map coverage) {
|
|
||||||
expect(coverage['type'], equals('CodeCoverage'));
|
expect(coverage['type'], equals('CodeCoverage'));
|
||||||
expect(coverage['coverage'].length, equals(1));
|
expect(coverage['coverage'].length, equals(1));
|
||||||
expect(normalize(coverage['coverage'][0]['hits']),
|
expect(coverage['coverage'][0]['hits'],
|
||||||
equals([15, 1, 16, 1, 17, 0, 19, 1]));
|
equals([15, 1, 16, 0, 18, 1, 20, 1]));
|
||||||
}));
|
|
||||||
// Class
|
// Class
|
||||||
tests.add(isolate.invokeRpcNoUpgrade('_getCoverage',
|
coverage = await isolate.invokeRpcNoUpgrade('_getCoverage',
|
||||||
{ 'targetId': cls.id })
|
{ 'targetId': cls.id });
|
||||||
.then((Map coverage) {
|
|
||||||
expect(coverage['type'], equals('CodeCoverage'));
|
expect(coverage['type'], equals('CodeCoverage'));
|
||||||
expect(coverage['coverage'].length, equals(1));
|
expect(coverage['coverage'].length, equals(1));
|
||||||
expect(normalize(coverage['coverage'][0]['hits']),
|
expect(coverage['coverage'][0]['hits'],
|
||||||
equals([15, 1, 16, 1, 17, 0, 19, 1,
|
equals([15, 1, 16, 0, 18, 1, 20, 1,
|
||||||
24, 1, 25, 1, 27, 0]));
|
24, 1, 25, 1, 27, 0]));
|
||||||
}));
|
|
||||||
// Library
|
// Library
|
||||||
tests.add(isolate.invokeRpcNoUpgrade('_getCoverage',
|
coverage = await isolate.invokeRpcNoUpgrade('_getCoverage',
|
||||||
{ 'targetId': lib.id })
|
{ 'targetId': lib.id });
|
||||||
.then((Map coverage) {
|
|
||||||
expect(coverage['type'], equals('CodeCoverage'));
|
expect(coverage['type'], equals('CodeCoverage'));
|
||||||
expect(coverage['coverage'].length, equals(3));
|
expect(coverage['coverage'].length, equals(3));
|
||||||
expect(normalize(coverage['coverage'][0]['hits']),
|
expect(coverage['coverage'][0]['hits'],
|
||||||
equals([15, 1, 16, 1, 17, 0, 19, 1,
|
equals([15, 1, 16, 0, 18, 1, 20, 1,
|
||||||
24, 1, 25, 1, 27, 0]));
|
24, 1, 25, 1, 27, 0]));
|
||||||
expect(normalize(coverage['coverage'][1]['hits']).take(12),
|
expect(coverage['coverage'][1]['hits'].take(12),
|
||||||
equals([33, 1, 36, 1, 37, 0, 32, 1, 45, 0, 46, 0]));
|
equals([33, 1, 34, 1, 32, 1, 105, 2, 105, 1]));
|
||||||
}));
|
|
||||||
// Script
|
// Script
|
||||||
tests.add(cls.load().then((_) {
|
await cls.load();
|
||||||
return isolate.invokeRpcNoUpgrade(
|
coverage = await isolate.invokeRpcNoUpgrade('_getCoverage',
|
||||||
'_getCoverage',
|
{ 'targetId': cls.location.script.id });
|
||||||
{ 'targetId': cls.location.script.id })
|
|
||||||
.then((Map coverage) {
|
|
||||||
expect(coverage['type'], equals('CodeCoverage'));
|
expect(coverage['type'], equals('CodeCoverage'));
|
||||||
expect(coverage['coverage'].length, equals(3));
|
expect(coverage['coverage'].length, equals(3));
|
||||||
expect(normalize(coverage['coverage'][0]['hits']),
|
expect(coverage['coverage'][0]['hits'],
|
||||||
equals([15, 1, 16, 1, 17, 0, 19, 1,
|
equals([15, 1, 16, 0, 18, 1, 20, 1,
|
||||||
24, 1, 25, 1, 27, 0]));
|
24, 1, 25, 1, 27, 0]));
|
||||||
expect(normalize(coverage['coverage'][1]['hits']).take(12),
|
expect(coverage['coverage'][1]['hits'].take(12),
|
||||||
equals([33, 1, 36, 1, 37, 0, 32, 1, 45, 0, 46, 0]));
|
equals([33, 1, 34, 1, 32, 1, 105, 2, 105, 1]));
|
||||||
});
|
|
||||||
}));
|
|
||||||
// Isolate
|
// Isolate
|
||||||
tests.add(cls.load().then((_) {
|
coverage = await isolate.invokeRpcNoUpgrade('_getCoverage', {});
|
||||||
return isolate.invokeRpcNoUpgrade('_getCoverage', {})
|
|
||||||
.then((Map coverage) {
|
|
||||||
expect(coverage['type'], equals('CodeCoverage'));
|
expect(coverage['type'], equals('CodeCoverage'));
|
||||||
expect(coverage['coverage'].length, greaterThan(100));
|
expect(coverage['coverage'].length, greaterThan(100));
|
||||||
});
|
|
||||||
}));
|
|
||||||
return Future.wait(tests);
|
|
||||||
});
|
|
||||||
},
|
},
|
||||||
|
|
||||||
];
|
];
|
||||||
|
|
|
@ -8,13 +8,14 @@ import 'package:observatory/debugger.dart';
|
||||||
import 'package:unittest/unittest.dart';
|
import 'package:unittest/unittest.dart';
|
||||||
import 'test_helper.dart';
|
import 'test_helper.dart';
|
||||||
import 'dart:async';
|
import 'dart:async';
|
||||||
|
import 'dart:developer';
|
||||||
|
|
||||||
void testFunction() {
|
void testFunction() {
|
||||||
int i = 0;
|
int i = 0;
|
||||||
while (true) {
|
while (true) {
|
||||||
if (++i % 100000000 == 0) { // line 15
|
debugger();
|
||||||
print(i);
|
print('loop');
|
||||||
}
|
print('loop');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -51,35 +52,14 @@ Future<Debugger> initDebugger(Isolate isolate) {
|
||||||
|
|
||||||
var tests = [
|
var tests = [
|
||||||
|
|
||||||
// Bring the isolate to a breakpoint at line 15.
|
hasStoppedAtBreakpoint,
|
||||||
(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.
|
|
||||||
});
|
|
||||||
});
|
|
||||||
},
|
|
||||||
|
|
||||||
// Parse '' => current position
|
// Parse '' => current position
|
||||||
(Isolate isolate) {
|
(Isolate isolate) {
|
||||||
return initDebugger(isolate).then((debugger) {
|
return initDebugger(isolate).then((debugger) {
|
||||||
return DebuggerLocation.parse(debugger, '').then((DebuggerLocation loc) {
|
return DebuggerLocation.parse(debugger, '').then((DebuggerLocation loc) {
|
||||||
expect(loc.valid, isTrue);
|
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
|
// Parse line
|
||||||
(Isolate isolate) {
|
(Isolate isolate) {
|
||||||
return initDebugger(isolate).then((debugger) {
|
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.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
|
// 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
|
// 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.
|
// 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:observatory/service_io.dart';
|
||||||
import 'package:unittest/unittest.dart';
|
|
||||||
import 'test_helper.dart';
|
import 'test_helper.dart';
|
||||||
import 'dart:async';
|
import 'dart:async';
|
||||||
|
|
||||||
|
|
|
@ -1,10 +1,9 @@
|
||||||
// Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file
|
// 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
|
// 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.
|
// 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:observatory/service_io.dart';
|
||||||
import 'package:unittest/unittest.dart';
|
|
||||||
import 'test_helper.dart';
|
import 'test_helper.dart';
|
||||||
import 'dart:async';
|
import 'dart:async';
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue