d5da8dc67d
* Auto-dispose the TestProject (several instances were never disposed) * Don't rely on package:test by default from the test-project. Change-Id: I383eb36cbacb341b702f42075af562d20a2be45d Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/291069 Reviewed-by: Jonas Jensen <jonasfj@google.com> Commit-Queue: Sigurd Meldgaard <sigurdm@google.com>
218 lines
5.8 KiB
Dart
218 lines
5.8 KiB
Dart
// Copyright (c) 2020, 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 'dart:io';
|
|
|
|
import 'package:path/path.dart' as path;
|
|
import 'package:pub_semver/pub_semver.dart';
|
|
import 'package:test/test.dart';
|
|
|
|
import '../experiment_util.dart';
|
|
import '../utils.dart';
|
|
|
|
void main() {
|
|
ensureRunFromSdkBinDart();
|
|
|
|
final experiments = experimentsWithValidation();
|
|
group('test', () => defineTest(experiments), timeout: longTimeout);
|
|
}
|
|
|
|
void defineTest(List<Experiment> experiments) {
|
|
test('--help', () async {
|
|
final p = project(pubspecExtras: {
|
|
'dev_dependencies': {'test': 'any'}
|
|
});
|
|
|
|
final result = await p.run(['test', '--help']);
|
|
|
|
expect(result.exitCode, 0);
|
|
expect(result.stdout, startsWith('''
|
|
Runs tests in this package.
|
|
|
|
Usage: dart test [files or directories...]
|
|
'''));
|
|
expect(result.stderr, isEmpty);
|
|
});
|
|
|
|
test('dart help test', () async {
|
|
final p = project(pubspecExtras: {
|
|
'dev_dependencies': {'test': 'any'}
|
|
});
|
|
|
|
final result = await p.run(['help', 'test']);
|
|
|
|
expect(result.exitCode, 0);
|
|
expect(result.stdout, contains('Usage: dart test [arguments]'));
|
|
expect(result.stderr, isEmpty);
|
|
});
|
|
|
|
test('no pubspec.yaml', () async {
|
|
final p = project(pubspecExtras: {
|
|
'dev_dependencies': {'test': 'any'}
|
|
});
|
|
var pubspec = File(path.join(p.dirPath, 'pubspec.yaml'));
|
|
pubspec.deleteSync();
|
|
|
|
var result = await p.run(['test']);
|
|
|
|
expect(result.stderr, isEmpty);
|
|
expect(result.stdout, '''
|
|
No pubspec.yaml file found - run this command in your project folder.
|
|
''');
|
|
expect(result.exitCode, 65);
|
|
|
|
var resultHelp = await p.run(['test', '--help']);
|
|
|
|
expect(resultHelp.stderr, isEmpty);
|
|
expect(resultHelp.stdout, contains('No pubspec.yaml file found'));
|
|
expect(resultHelp.stdout, contains('Usage: dart test [arguments]'));
|
|
expect(resultHelp.exitCode, 65);
|
|
});
|
|
|
|
test('runs test', () async {
|
|
final p = project(pubspecExtras: {
|
|
'dev_dependencies': {'test': 'any'}
|
|
});
|
|
p.file('test/foo_test.dart', '''
|
|
import 'package:test/test.dart';
|
|
|
|
void main() {
|
|
test('', () {
|
|
expect(1,1);
|
|
});
|
|
}
|
|
''');
|
|
|
|
// An implicit `pub get` will happen.
|
|
final result =
|
|
await p.run(['test', '--no-color', '--reporter', 'expanded']);
|
|
expect(result.stderr, isEmpty);
|
|
expect(result.stdout, contains('All tests passed!'));
|
|
expect(result.exitCode, 0);
|
|
});
|
|
|
|
test('no package:test dependency', () async {
|
|
final p = project(
|
|
mainSrc: 'int get foo => 1;\n',
|
|
pubspecExtras: {
|
|
'dev_dependencies': {'test': 'any'}
|
|
},
|
|
);
|
|
p.file('pubspec.yaml', '''
|
|
name: ${p.name}
|
|
environment:
|
|
sdk: '>=2.12.0 <4.0.0'
|
|
''');
|
|
p.file('test/foo_test.dart', '''
|
|
import 'package:test/test.dart';
|
|
|
|
void main() {
|
|
test('', () {
|
|
expect(1,1);
|
|
});
|
|
}
|
|
''');
|
|
|
|
final result = await p.run(['test']);
|
|
expect(result.exitCode, 65);
|
|
expect(
|
|
result.stdout,
|
|
contains('You need to add a dev_dependency on package:test'),
|
|
);
|
|
expect(result.stderr, isEmpty);
|
|
expect(result.exitCode, 65);
|
|
|
|
final resultPubAdd = await p.run(['pub', 'add', 'test']);
|
|
|
|
expect(resultPubAdd.exitCode, 0);
|
|
final result2 =
|
|
await p.run(['test', '--no-color', '--reporter', 'expanded']);
|
|
expect(result2.stderr, isEmpty);
|
|
expect(result2.stdout, contains('All tests passed!'));
|
|
expect(result2.exitCode, 0);
|
|
});
|
|
|
|
test('has package:test dependency', () async {
|
|
final p = project(
|
|
mainSrc: 'int get foo => 1;\n',
|
|
pubspecExtras: {
|
|
'dev_dependencies': {'test': 'any'}
|
|
},
|
|
);
|
|
p.file('test/foo_test.dart', '''
|
|
import 'package:test/test.dart';
|
|
|
|
void main() {
|
|
test('', () {
|
|
print('hello world');
|
|
});
|
|
}
|
|
''');
|
|
|
|
final result =
|
|
await p.run(['test', '--no-color', '--reporter', 'expanded']);
|
|
expect(result.exitCode, 0);
|
|
expect(result.stdout, contains('All tests passed!'));
|
|
expect(result.stderr, isEmpty);
|
|
});
|
|
|
|
group('--enable-experiment', () {
|
|
late TestProject p;
|
|
Future<ProcessResult> runTestWithExperimentFlag(String? flag) async {
|
|
return await p.run([
|
|
if (flag != null) flag,
|
|
'test',
|
|
'--no-color',
|
|
'--reporter',
|
|
'expanded',
|
|
]);
|
|
}
|
|
|
|
Future<void> expectSuccess(String? flag) async {
|
|
final result = await runTestWithExperimentFlag(flag);
|
|
expect(result.stdout, contains('feature enabled'),
|
|
reason: 'stderr: ${result.stderr}');
|
|
expect(result.exitCode, 0,
|
|
reason: 'stdout: ${result.stdout} stderr: ${result.stderr}');
|
|
}
|
|
|
|
Future<void> expectFailure(String? flag) async {
|
|
final result = await runTestWithExperimentFlag(flag);
|
|
expect(result.exitCode, isNot(0));
|
|
}
|
|
|
|
for (final experiment in experiments) {
|
|
test(experiment.name, () async {
|
|
final currentSdk = Version.parse(Platform.version.split(' ').first);
|
|
p = project(
|
|
mainSrc: experiment.validation,
|
|
sdkConstraint: VersionConstraint.compatibleWith(currentSdk),
|
|
pubspecExtras: {
|
|
'dev_dependencies': {'test': 'any'}
|
|
},
|
|
);
|
|
p.file('test/experiment_test.dart', '''
|
|
import 'package:dartdev_temp/main.dart' as imported;
|
|
import 'package:test/test.dart';
|
|
|
|
void main() {
|
|
test('testing feature', () {
|
|
imported.main();
|
|
});
|
|
}
|
|
''');
|
|
if (experiment.enabledIn != null) {
|
|
// The experiment has been released - enabling it should have no effect.
|
|
await expectSuccess(null);
|
|
await expectSuccess('--enable-experiment=${experiment.name}');
|
|
} else {
|
|
await expectFailure(null);
|
|
await expectFailure('--enable-experiment=no-${experiment.name}');
|
|
await expectSuccess('--enable-experiment=${experiment.name}');
|
|
}
|
|
});
|
|
}
|
|
});
|
|
}
|