blob: 1d5abb0508340404a6eecbb7d33716870268f657 [file] [log] [blame] [edit]
// Copyright (c) 2024, 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:dart_style/src/analysis_options/merge_options.dart';
import 'package:test/test.dart';
void main() {
group('merge()', () {
test('Map', () {
_testMerge(
{
'one': true,
'two': false,
'three': {
'nested': {'four': true, 'six': true},
},
},
{
'three': {
'nested': {'four': false, 'five': true},
'five': true,
},
'seven': true,
},
{
'one': true,
'two': false,
'three': {
'nested': {'four': false, 'five': true, 'six': true},
'five': true,
},
'seven': true,
},
);
});
test('List', () {
_testMerge([1, 2, 3], [2, 3, 4, 5], [1, 2, 3, 4, 5]);
});
test('List with promotion', () {
_testMerge(['one', 'two', 'three'], {'three': false, 'four': true}, {
'one': true,
'two': true,
'three': false,
'four': true,
});
_testMerge({'one': false, 'two': false}, ['one', 'three'], {
'one': true,
'two': false,
'three': true,
});
});
test('Map with list promotion', () {
_testMerge(
{
'one': ['a', 'b', 'c'],
},
{
'one': {'a': true, 'b': false},
},
{
'one': {'a': true, 'b': false, 'c': true},
},
);
});
test('Map with no promotion', () {
_testMerge(
{
'one': ['a', 'b', 'c'],
},
{
'one': {'a': 'foo', 'b': 'bar'},
},
{
'one': {'a': 'foo', 'b': 'bar'},
},
);
});
test('Map with no promotion 2', () {
_testMerge(
{
'one': {'a': 'foo', 'b': 'bar'},
},
{
'one': ['a', 'b', 'c'],
},
{
'one': ['a', 'b', 'c'],
},
);
});
test('Other values', () {
_testMerge(1, 2, 2);
_testMerge(1, 'foo', 'foo');
_testMerge({'foo': 1}, 'foo', 'foo');
});
});
}
void _testMerge(Object defaults, Object overrides, Object expected) {
expect(merge(defaults, overrides), equals(expected));
}