blob: 63bed87ea5036a4afe7f895c05231415abede465 [file] [log] [blame]
// Copyright (c) 2018, 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 'package:path/path.dart' as p;
import 'package:test_core/src/runner/configuration.dart';
import 'package:test/test.dart';
import 'package:test_descriptor/test_descriptor.dart' as d;
void main() {
test('should merge with a base configuration', () async {
await d.dir('repo', [
d.file('dart_test_base.yaml', 'filename: "test_*.dart"'),
d.dir('pkg', [
d.file('dart_test.yaml', '''
include: ../dart_test_base.yaml
concurrency: 3
'''),
]),
]).create();
var path = p.join(d.sandbox, 'repo', 'pkg', 'dart_test.yaml');
var config = Configuration.load(path);
expect(config.filename.pattern, equals('test_*.dart'));
expect(config.concurrency, equals(3));
});
test('should merge fields with a base configuration', () async {
await d.dir('repo', [
d.file('dart_test_base.yaml', '''
tags:
hello:
'''),
d.dir('pkg', [
d.file('dart_test.yaml', '''
include: ../dart_test_base.yaml
tags:
world:
'''),
]),
]).create();
var path = p.join(d.sandbox, 'repo', 'pkg', 'dart_test.yaml');
var config = Configuration.load(path);
expect(config.knownTags, unorderedEquals(['hello', 'world']));
});
test('should allow an included file to include a file', () async {
await d.dir('repo', [
d.file('dart_test_base_base.yaml', '''
tags:
tag:
'''),
d.file('dart_test_base.yaml', '''
include: dart_test_base_base.yaml
filename: "test_*.dart"
'''),
d.dir('pkg', [
d.file('dart_test.yaml', '''
include: ../dart_test_base.yaml
concurrency: 3
'''),
]),
]).create();
var path = p.join(d.sandbox, 'repo', 'pkg', 'dart_test.yaml');
var config = Configuration.load(path);
expect(config.knownTags, ['tag']);
expect(config.filename.pattern, 'test_*.dart');
expect(config.concurrency, 3);
});
test('should not allow an include field in a test config context', () async {
await d.dir('repo', [
d.dir('pkg', [
d.file('dart_test.yaml', r'''
tags:
foo:
include: ../dart_test.yaml
'''),
]),
]).create();
var path = p.join(d.sandbox, 'repo', 'pkg', 'dart_test.yaml');
expect(
() => Configuration.load(path),
throwsA(allOf(
isFormatException,
predicate((error) =>
error.toString().contains("include isn't supported here")))));
});
test('should allow an include field in a runner config context', () async {
await d.dir('repo', [
d.dir('pkg', [
d.file('dart_test.yaml', '''
presets:
bar:
include: other_dart_test.yaml
pause_after_load: true
'''),
d.file('other_dart_test.yaml', 'reporter: expanded'),
]),
]).create();
var path = p.join(d.sandbox, 'repo', 'pkg', 'dart_test.yaml');
var config = Configuration.load(path);
var presetBar = config.presets['bar']!;
expect(presetBar.pauseAfterLoad, isTrue);
expect(presetBar.reporter, 'expanded');
});
test('local configuration should take precedence after merging', () async {
await d.dir('repo', [
d.dir('pkg', [
d.file('dart_test.yaml', '''
include: other_dart_test.yaml
concurrency: 5
'''),
d.file('other_dart_test.yaml', 'concurrency: 10'),
]),
]).create();
var path = p.join(d.sandbox, 'repo', 'pkg', 'dart_test.yaml');
var config = Configuration.load(path);
expect(config.concurrency, 5);
});
group('gracefully handles', () {
test('a non-string include field', () async {
await d.dir('repo', [
d.dir('pkg', [
d.file('dart_test.yaml', 'include: 3'),
]),
]).create();
var path = p.join(d.sandbox, 'repo', 'pkg', 'dart_test.yaml');
expect(() => Configuration.load(path), throwsFormatException);
});
test('a non-existent included file', () async {
await d.dir('repo', [
d.dir('pkg', [
d.file('dart_test.yaml', 'include: other_test.yaml'),
]),
]).create();
var path = p.join(d.sandbox, 'repo', 'pkg', 'dart_test.yaml');
expect(() => Configuration.load(path), throwsFormatException);
});
test('an include field in a test config context', () async {
await d.dir('repo', [
d.dir('pkg', [
d.file('dart_test.yaml', '''
tags:
foo:
include: ../dart_test.yaml
'''),
]),
]).create();
var path = p.join(d.sandbox, 'repo', 'pkg', 'dart_test.yaml');
expect(() => Configuration.load(path), throwsFormatException);
});
});
}