blob: 60d4dc808793fc37ff87a2787dbeb833fde606cd [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.
import 'package:async/async.dart';
import 'package:test/test.dart';
import '../utils.dart';
void main() {
test('runs once before all tests', () {
return expectTestsPass(() {
var setUpAllRun = false;
setUpAll(() {
expect(setUpAllRun, isFalse);
setUpAllRun = true;
});
test('test 1', () {
expect(setUpAllRun, isTrue);
});
test('test 2', () {
expect(setUpAllRun, isTrue);
});
});
});
test('runs once per group, outside-in', () {
return expectTestsPass(() {
var setUpAll1Run = false;
var setUpAll2Run = false;
var setUpAll3Run = false;
setUpAll(() {
expect(setUpAll1Run, isFalse);
expect(setUpAll2Run, isFalse);
expect(setUpAll3Run, isFalse);
setUpAll1Run = true;
});
group('mid', () {
setUpAll(() {
expect(setUpAll1Run, isTrue);
expect(setUpAll2Run, isFalse);
expect(setUpAll3Run, isFalse);
setUpAll2Run = true;
});
group('inner', () {
setUpAll(() {
expect(setUpAll1Run, isTrue);
expect(setUpAll2Run, isTrue);
expect(setUpAll3Run, isFalse);
setUpAll3Run = true;
});
test('test', () {
expect(setUpAll1Run, isTrue);
expect(setUpAll2Run, isTrue);
expect(setUpAll3Run, isTrue);
});
});
});
});
});
test('runs before setUps', () {
return expectTestsPass(() {
var setUpAllRun = false;
setUp(() {
expect(setUpAllRun, isTrue);
});
setUpAll(() {
expect(setUpAllRun, isFalse);
setUpAllRun = true;
});
setUp(() {
expect(setUpAllRun, isTrue);
});
test('test', () {
expect(setUpAllRun, isTrue);
});
});
});
test('multiples run in order', () {
return expectTestsPass(() {
var setUpAll1Run = false;
var setUpAll2Run = false;
var setUpAll3Run = false;
setUpAll(() {
expect(setUpAll1Run, isFalse);
expect(setUpAll2Run, isFalse);
expect(setUpAll3Run, isFalse);
setUpAll1Run = true;
});
setUpAll(() {
expect(setUpAll1Run, isTrue);
expect(setUpAll2Run, isFalse);
expect(setUpAll3Run, isFalse);
setUpAll2Run = true;
});
setUpAll(() {
expect(setUpAll1Run, isTrue);
expect(setUpAll2Run, isTrue);
expect(setUpAll3Run, isFalse);
setUpAll3Run = true;
});
test('test', () {
expect(setUpAll1Run, isTrue);
expect(setUpAll2Run, isTrue);
expect(setUpAll3Run, isTrue);
});
});
});
group('asynchronously', () {
test('blocks additional setUpAlls on in-band async', () {
return expectTestsPass(() {
var setUpAll1Run = false;
var setUpAll2Run = false;
var setUpAll3Run = false;
setUpAll(() async {
expect(setUpAll1Run, isFalse);
expect(setUpAll2Run, isFalse);
expect(setUpAll3Run, isFalse);
await pumpEventQueue();
setUpAll1Run = true;
});
setUpAll(() async {
expect(setUpAll1Run, isTrue);
expect(setUpAll2Run, isFalse);
expect(setUpAll3Run, isFalse);
await pumpEventQueue();
setUpAll2Run = true;
});
setUpAll(() async {
expect(setUpAll1Run, isTrue);
expect(setUpAll2Run, isTrue);
expect(setUpAll3Run, isFalse);
await pumpEventQueue();
setUpAll3Run = true;
});
test('test', () {
expect(setUpAll1Run, isTrue);
expect(setUpAll2Run, isTrue);
expect(setUpAll3Run, isTrue);
});
});
});
test("doesn't block additional setUpAlls on out-of-band async", () {
return expectTestsPass(() {
var setUpAll1Run = false;
var setUpAll2Run = false;
var setUpAll3Run = false;
setUpAll(() {
expect(setUpAll1Run, isFalse);
expect(setUpAll2Run, isFalse);
expect(setUpAll3Run, isFalse);
expect(
pumpEventQueue().then((_) {
setUpAll1Run = true;
}),
completes);
});
setUpAll(() {
expect(setUpAll1Run, isFalse);
expect(setUpAll2Run, isFalse);
expect(setUpAll3Run, isFalse);
expect(
pumpEventQueue().then((_) {
setUpAll2Run = true;
}),
completes);
});
setUpAll(() {
expect(setUpAll1Run, isFalse);
expect(setUpAll2Run, isFalse);
expect(setUpAll3Run, isFalse);
expect(
pumpEventQueue().then((_) {
setUpAll3Run = true;
}),
completes);
});
test('test', () {
expect(setUpAll1Run, isTrue);
expect(setUpAll2Run, isTrue);
expect(setUpAll3Run, isTrue);
});
});
});
});
test("isn't run for a skipped group", () async {
// Declare this in the outer test so if it runs, the outer test will fail.
var shouldNotRun = expectAsync0(() {}, count: 0);
var engine = declareEngine(() {
group('skipped', () {
setUpAll(shouldNotRun);
test('test', () {});
}, skip: true);
});
await engine.run();
expect(engine.liveTests, hasLength(1));
expect(engine.skipped, hasLength(1));
expect(engine.liveTests, equals(engine.skipped));
});
test('is emitted through Engine.onTestStarted', () async {
var engine = declareEngine(() {
setUpAll(() {});
test('test', () {});
});
var queue = StreamQueue(engine.onTestStarted);
var setUpAllFuture = queue.next;
var liveTestFuture = queue.next;
await engine.run();
var setUpAllLiveTest = await setUpAllFuture;
expect(setUpAllLiveTest.test.name, equals('(setUpAll)'));
expectTestPassed(setUpAllLiveTest);
// The fake test for setUpAll should be removed from the engine's live
// test list so that reporters don't display it as a passed test.
expect(engine.liveTests, isNot(contains(setUpAllLiveTest)));
expect(engine.passed, isNot(contains(setUpAllLiveTest)));
expect(engine.failed, isNot(contains(setUpAllLiveTest)));
expect(engine.skipped, isNot(contains(setUpAllLiveTest)));
expect(engine.active, isNot(contains(setUpAllLiveTest)));
var liveTest = await liveTestFuture;
expectTestPassed(await liveTestFuture);
expect(engine.liveTests, contains(liveTest));
expect(engine.passed, contains(liveTest));
});
group('with an error', () {
test('reports the error and remains in Engine.liveTests', () async {
var engine = declareEngine(() {
setUpAll(() => throw TestFailure('fail'));
test('test', () {});
});
var queue = StreamQueue(engine.onTestStarted);
var setUpAllFuture = queue.next;
expect(await engine.run(), isFalse);
var setUpAllLiveTest = await setUpAllFuture;
expect(setUpAllLiveTest.test.name, equals('(setUpAll)'));
expectTestFailed(setUpAllLiveTest, 'fail');
// The fake test for setUpAll should be removed from the engine's live
// test list so that reporters don't display it as a passed test.
expect(engine.liveTests, contains(setUpAllLiveTest));
expect(engine.failed, contains(setUpAllLiveTest));
expect(engine.passed, isNot(contains(setUpAllLiveTest)));
expect(engine.skipped, isNot(contains(setUpAllLiveTest)));
expect(engine.active, isNot(contains(setUpAllLiveTest)));
});
test("doesn't run tests in the group", () async {
// Declare this in the outer test so if it runs, the outer test will fail.
var shouldNotRun = expectAsync0(() {}, count: 0);
var engine = declareEngine(() {
setUpAll(() => throw 'error');
test('test', shouldNotRun);
});
expect(await engine.run(), isFalse);
});
test("doesn't run inner groups", () async {
// Declare this in the outer test so if it runs, the outer test will fail.
var shouldNotRun = expectAsync0(() {}, count: 0);
var engine = declareEngine(() {
setUpAll(() => throw 'error');
group('group', () {
test('test', shouldNotRun);
});
});
expect(await engine.run(), isFalse);
});
test("doesn't run further setUpAlls", () async {
// Declare this in the outer test so if it runs, the outer test will fail.
var shouldNotRun = expectAsync0(() {}, count: 0);
var engine = declareEngine(() {
setUpAll(() => throw 'error');
setUpAll(shouldNotRun);
test('test', shouldNotRun);
});
expect(await engine.run(), isFalse);
});
});
}