blob: c1cd3157df80399d63c855c2c9776cc5c63b9dde [file] [log] [blame]
// 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.
@TestOn('vm')
import 'dart:async';
import 'dart:io';
import 'package:pedantic/pedantic.dart';
import 'package:test/test.dart';
import 'package:test_descriptor/test_descriptor.dart' as d;
import '../io.dart';
void main() {
test('pauses the test runner for each file until the user presses enter',
() async {
await d.file('test1.dart', '''
import 'package:test/test.dart';
void main() {
print('loaded test 1!');
test("success", () {});
}
''').create();
await d.file('test2.dart', '''
import 'package:test/test.dart';
void main() {
print('loaded test 2!');
test("success", () {});
}
''').create();
var test = await runTest(
['--pause-after-load', '-p', 'chrome', 'test1.dart', 'test2.dart']);
await expectLater(test.stdout, emitsThrough('loaded test 1!'));
await expectLater(test.stdout, emitsThrough(equalsIgnoringWhitespace('''
The test runner is paused. Open the dev console in Chrome and set
breakpoints. Once you're finished, return to this terminal and press
Enter.
''')));
var nextLineFired = false;
unawaited(test.stdout.next.then(expectAsync1((line) {
expect(line, contains('+0: test1.dart: success'));
nextLineFired = true;
})));
// Wait a little bit to be sure that the tests don't start running without
// our input.
await Future.delayed(Duration(seconds: 2));
expect(nextLineFired, isFalse);
test.stdin.writeln();
await expectLater(test.stdout, emitsThrough('loaded test 2!'));
await expectLater(test.stdout, emitsThrough(equalsIgnoringWhitespace('''
The test runner is paused. Open the dev console in Chrome and set
breakpoints. Once you're finished, return to this terminal and press
Enter.
''')));
nextLineFired = false;
unawaited(test.stdout.next.then(expectAsync1((line) {
expect(line, contains('+1: test2.dart: success'));
nextLineFired = true;
})));
// Wait a little bit to be sure that the tests don't start running without
// our input.
await Future.delayed(Duration(seconds: 2));
expect(nextLineFired, isFalse);
test.stdin.writeln();
await expectLater(
test.stdout, emitsThrough(contains('+2: All tests passed!')));
await test.shouldExit(0);
}, tags: 'chrome');
test('pauses the test runner for each platform until the user presses enter',
() async {
await d.file('test.dart', '''
import 'package:test/test.dart';
void main() {
print('loaded test!');
test("success", () {});
}
''').create();
var test = await runTest([
'--pause-after-load',
'-p',
'firefox',
'-p',
'chrome',
'-p',
'vm',
'test.dart'
]);
await expectLater(test.stdout, emitsThrough('loaded test!'));
await expectLater(test.stdout, emitsThrough(equalsIgnoringWhitespace('''
The test runner is paused. Open the dev console in Firefox and set
breakpoints. Once you're finished, return to this terminal and press
Enter.
''')));
var nextLineFired = false;
unawaited(test.stdout.next.then(expectAsync1((line) {
expect(line, contains('+0: [Firefox] success'));
nextLineFired = true;
})));
// Wait a little bit to be sure that the tests don't start running without
// our input.
await Future.delayed(Duration(seconds: 2));
expect(nextLineFired, isFalse);
test.stdin.writeln();
await expectLater(test.stdout, emitsThrough('loaded test!'));
await expectLater(
test.stdout,
emitsThrough(emitsInOrder([
'The test runner is paused. Open the dev console in Chrome and set '
"breakpoints. Once you're finished, return to this terminal and "
'press Enter.'
])));
nextLineFired = false;
unawaited(test.stdout.next.then(expectAsync1((line) {
expect(line, contains('+1: [Chrome] success'));
nextLineFired = true;
})));
// Wait a little bit to be sure that the tests don't start running without
// our input.
await Future.delayed(Duration(seconds: 2));
expect(nextLineFired, isFalse);
test.stdin.writeln();
await expectLater(test.stdout, emitsThrough('loaded test!'));
await expectLater(
test.stdout,
emitsThrough(emitsInOrder([
'The test runner is paused. Open the Observatory and set '
"breakpoints. Once you're finished, return to this terminal "
'and press Enter.'
])));
nextLineFired = false;
unawaited(test.stdout.next.then(expectAsync1((line) {
expect(line, contains('+2: [VM] success'));
nextLineFired = true;
})));
// Wait a little bit to be sure that the tests don't start running without
// our input.
await Future.delayed(Duration(seconds: 2));
expect(nextLineFired, isFalse);
test.stdin.writeln();
await expectLater(
test.stdout, emitsThrough(contains('+3: All tests passed!')));
await test.shouldExit(0);
}, tags: ['firefox', 'chrome', 'vm']);
test("warns if SILENT_OBSERVATORY isn't set when trying to debug the vm",
() async {
await d.file('test.dart', '''
import 'package:test/test.dart';
void main() {
test("success", () {});
}
''').create();
var test = await runTest(['--pause-after-load', '-p', 'vm', 'test.dart']);
await expectLater(
test.stderr,
emits('Warning: You should set `SILENT_OBSERVATORY` to true when '
'debugging the VM as it will output the observatory URL by '
'default.'));
test.stdin.writeln();
await expectLater(
test.stdout, emitsThrough(contains('+1: All tests passed!')));
await test.shouldExit(0);
});
test('stops immediately if killed while paused', () async {
await d.file('test.dart', '''
import 'package:test/test.dart';
void main() {
print('loaded test!');
test("success", () {});
}
''').create();
var test =
await runTest(['--pause-after-load', '-p', 'chrome', 'test.dart']);
await expectLater(test.stdout, emitsThrough('loaded test!'));
await expectLater(test.stdout, emitsThrough(equalsIgnoringWhitespace('''
The test runner is paused. Open the dev console in Chrome and set
breakpoints. Once you're finished, return to this terminal and press
Enter.
''')));
test.signal(ProcessSignal.sigterm);
await test.shouldExit();
await expectLater(test.stderr, emitsDone);
}, tags: 'chrome', testOn: '!windows');
test('disables timeouts', () async {
await d.file('test.dart', '''
import 'dart:async';
import 'package:test/test.dart';
void main() {
print('loaded test 1!');
test("success", () async {
await Future.delayed(Duration.zero);
}, timeout: Timeout(Duration.zero));
}
''').create();
var test = await runTest(
['--pause-after-load', '-p', 'chrome', '-n', 'success', 'test.dart']);
await expectLater(test.stdout, emitsThrough('loaded test 1!'));
await expectLater(test.stdout, emitsThrough(equalsIgnoringWhitespace('''
The test runner is paused. Open the dev console in Chrome and set
breakpoints. Once you're finished, return to this terminal and press
Enter.
''')));
var nextLineFired = false;
unawaited(test.stdout.next.then(expectAsync1((line) {
expect(line, contains('+0: success'));
nextLineFired = true;
})));
// Wait a little bit to be sure that the tests don't start running without
// our input.
await Future.delayed(Duration(seconds: 2));
expect(nextLineFired, isFalse);
test.stdin.writeln();
await expectLater(
test.stdout, emitsThrough(contains('+1: All tests passed!')));
await test.shouldExit(0);
}, tags: 'chrome');
// Regression test for #304.
test('supports test name patterns', () async {
await d.file('test.dart', '''
import 'package:test/test.dart';
void main() {
print('loaded test 1!');
test("failure 1", () {});
test("success", () {});
test("failure 2", () {});
}
''').create();
var test = await runTest(
['--pause-after-load', '-p', 'chrome', '-n', 'success', 'test.dart']);
await expectLater(test.stdout, emitsThrough('loaded test 1!'));
await expectLater(test.stdout, emitsThrough(equalsIgnoringWhitespace('''
The test runner is paused. Open the dev console in Chrome and set
breakpoints. Once you're finished, return to this terminal and press
Enter.
''')));
var nextLineFired = false;
unawaited(test.stdout.next.then(expectAsync1((line) {
expect(line, contains('+0: success'));
nextLineFired = true;
})));
// Wait a little bit to be sure that the tests don't start running without
// our input.
await Future.delayed(Duration(seconds: 2));
expect(nextLineFired, isFalse);
test.stdin.writeln();
await expectLater(
test.stdout, emitsThrough(contains('+1: All tests passed!')));
await test.shouldExit(0);
}, tags: 'chrome');
}