blob: 913325da639205957f02440ea6ec623e4befe684 [file] [log] [blame]
// Copyright (c) 2016, 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/test.dart';
import 'package:test_core/src/runner/configuration.dart';
import 'package:test_core/src/runner/configuration/reporters.dart';
import 'package:test_core/src/util/io.dart';
void main() {
group('merge', () {
group('for most fields', () {
test('if neither is defined, preserves the default', () {
var merged = Configuration().merge(Configuration());
expect(merged.help, isFalse);
expect(merged.version, isFalse);
expect(merged.pauseAfterLoad, isFalse);
expect(merged.debug, isFalse);
expect(merged.color, equals(canUseSpecialChars));
expect(merged.configurationPath, equals('dart_test.yaml'));
expect(merged.dart2jsPath, equals(p.join(sdkDir, 'bin', 'dart2js')));
expect(merged.reporter, equals(defaultReporter));
expect(merged.fileReporters, isEmpty);
expect(merged.pubServeUrl, isNull);
expect(merged.shardIndex, isNull);
expect(merged.totalShards, isNull);
expect(merged.paths, equals(['test']));
});
test("if only the old configuration's is defined, uses it", () {
var merged = Configuration(
help: true,
version: true,
pauseAfterLoad: true,
debug: true,
color: true,
configurationPath: 'special_test.yaml',
dart2jsPath: '/tmp/dart2js',
reporter: 'json',
fileReporters: {'json': 'out.json'},
pubServePort: 1234,
shardIndex: 3,
totalShards: 10,
paths: ['bar']).merge(Configuration());
expect(merged.help, isTrue);
expect(merged.version, isTrue);
expect(merged.pauseAfterLoad, isTrue);
expect(merged.debug, isTrue);
expect(merged.color, isTrue);
expect(merged.configurationPath, equals('special_test.yaml'));
expect(merged.dart2jsPath, equals('/tmp/dart2js'));
expect(merged.reporter, equals('json'));
expect(merged.fileReporters, equals({'json': 'out.json'}));
expect(merged.pubServeUrl.port, equals(1234));
expect(merged.shardIndex, equals(3));
expect(merged.totalShards, equals(10));
expect(merged.paths, equals(['bar']));
});
test("if only the new configuration's is defined, uses it", () {
var merged = Configuration().merge(Configuration(
help: true,
version: true,
pauseAfterLoad: true,
debug: true,
color: true,
configurationPath: 'special_test.yaml',
dart2jsPath: '/tmp/dart2js',
reporter: 'json',
fileReporters: {'json': 'out.json'},
pubServePort: 1234,
shardIndex: 3,
totalShards: 10,
paths: ['bar']));
expect(merged.help, isTrue);
expect(merged.version, isTrue);
expect(merged.pauseAfterLoad, isTrue);
expect(merged.debug, isTrue);
expect(merged.color, isTrue);
expect(merged.configurationPath, equals('special_test.yaml'));
expect(merged.dart2jsPath, equals('/tmp/dart2js'));
expect(merged.reporter, equals('json'));
expect(merged.fileReporters, equals({'json': 'out.json'}));
expect(merged.pubServeUrl.port, equals(1234));
expect(merged.shardIndex, equals(3));
expect(merged.totalShards, equals(10));
expect(merged.paths, equals(['bar']));
});
test(
"if the two configurations conflict, uses the new configuration's "
'values', () {
var older = Configuration(
help: true,
version: false,
pauseAfterLoad: true,
debug: true,
color: false,
configurationPath: 'special_test.yaml',
dart2jsPath: '/tmp/dart2js',
reporter: 'json',
fileReporters: {'json': 'old.json'},
pubServePort: 1234,
shardIndex: 2,
totalShards: 4,
paths: ['bar']);
var newer = Configuration(
help: false,
version: true,
pauseAfterLoad: false,
debug: false,
color: true,
configurationPath: 'test_special.yaml',
dart2jsPath: '../dart2js',
reporter: 'compact',
fileReporters: {'json': 'new.json'},
pubServePort: 5678,
shardIndex: 3,
totalShards: 10,
paths: ['blech']);
var merged = older.merge(newer);
expect(merged.help, isFalse);
expect(merged.version, isTrue);
expect(merged.pauseAfterLoad, isFalse);
expect(merged.debug, isFalse);
expect(merged.color, isTrue);
expect(merged.configurationPath, equals('test_special.yaml'));
expect(merged.dart2jsPath, equals('../dart2js'));
expect(merged.reporter, equals('compact'));
expect(merged.fileReporters, equals({'json': 'new.json'}));
expect(merged.pubServeUrl.port, equals(5678));
expect(merged.shardIndex, equals(3));
expect(merged.totalShards, equals(10));
expect(merged.paths, equals(['blech']));
});
});
group('for chosenPresets', () {
test('if neither is defined, preserves the default', () {
var merged = Configuration().merge(Configuration());
expect(merged.chosenPresets, isEmpty);
});
test("if only the old configuration's is defined, uses it", () {
var merged = Configuration(chosenPresets: ['baz', 'bang'])
.merge(Configuration());
expect(merged.chosenPresets, equals(['baz', 'bang']));
});
test("if only the new configuration's is defined, uses it", () {
var merged = Configuration()
.merge(Configuration(chosenPresets: ['baz', 'bang']));
expect(merged.chosenPresets, equals(['baz', 'bang']));
});
test('if both are defined, unions them', () {
var merged = Configuration(chosenPresets: ['baz', 'bang'])
.merge(Configuration(chosenPresets: ['qux']));
expect(merged.chosenPresets, equals(['baz', 'bang', 'qux']));
});
});
group('for presets', () {
test('merges each nested configuration', () {
var merged = Configuration(presets: {
'bang': Configuration(pauseAfterLoad: true),
'qux': Configuration(color: true)
}).merge(Configuration(presets: {
'qux': Configuration(color: false),
'zap': Configuration(help: true)
}));
expect(merged.presets['bang'].pauseAfterLoad, isTrue);
expect(merged.presets['qux'].color, isFalse);
expect(merged.presets['zap'].help, isTrue);
});
test('automatically resolves a matching chosen preset', () {
var configuration = Configuration(
presets: {'foo': Configuration(color: true)},
chosenPresets: ['foo']);
expect(configuration.presets, isEmpty);
expect(configuration.chosenPresets, equals(['foo']));
expect(configuration.knownPresets, equals(['foo']));
expect(configuration.color, isTrue);
});
test('resolves a chosen presets in order', () {
var configuration = Configuration(presets: {
'foo': Configuration(color: true),
'bar': Configuration(color: false)
}, chosenPresets: [
'foo',
'bar'
]);
expect(configuration.presets, isEmpty);
expect(configuration.chosenPresets, equals(['foo', 'bar']));
expect(configuration.knownPresets, unorderedEquals(['foo', 'bar']));
expect(configuration.color, isFalse);
configuration = Configuration(presets: {
'foo': Configuration(color: true),
'bar': Configuration(color: false)
}, chosenPresets: [
'bar',
'foo'
]);
expect(configuration.presets, isEmpty);
expect(configuration.chosenPresets, equals(['bar', 'foo']));
expect(configuration.knownPresets, unorderedEquals(['foo', 'bar']));
expect(configuration.color, isTrue);
});
test('ignores inapplicable chosen presets', () {
var configuration = Configuration(presets: {}, chosenPresets: ['baz']);
expect(configuration.presets, isEmpty);
expect(configuration.chosenPresets, equals(['baz']));
expect(configuration.knownPresets, equals(isEmpty));
});
test('resolves presets through merging', () {
var configuration =
Configuration(presets: {'foo': Configuration(color: true)})
.merge(Configuration(chosenPresets: ['foo']));
expect(configuration.presets, isEmpty);
expect(configuration.chosenPresets, equals(['foo']));
expect(configuration.knownPresets, equals(['foo']));
expect(configuration.color, isTrue);
});
test('preserves known presets through merging', () {
var configuration = Configuration(
presets: {'foo': Configuration(color: true)},
chosenPresets: ['foo']).merge(Configuration());
expect(configuration.presets, isEmpty);
expect(configuration.chosenPresets, equals(['foo']));
expect(configuration.knownPresets, equals(['foo']));
expect(configuration.color, isTrue);
});
});
});
}