blob: 96a4197064d6a9c64134c55252df3c3c0495a8d1 [file] [log] [blame]
// Copyright (c) 2023, 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:analyzer/dart/analysis/analysis_options.dart';
import 'package:analyzer/src/dart/analysis/analysis_options.dart';
import 'package:analyzer/src/dart/analysis/analysis_options_map.dart';
import 'package:analyzer/src/test_utilities/resource_provider_mixin.dart';
import 'package:test/test.dart';
import 'package:test_reflective_loader/test_reflective_loader.dart';
main() {
defineReflectiveSuite(() {
defineReflectiveTests(AnalysisOptionsMapTest);
});
}
@reflectiveTest
class AnalysisOptionsMapTest with ResourceProviderMixin {
var map = AnalysisOptionsMap();
test_nestedOptions() {
var rootOptions = AnalysisOptionsImpl();
var rootFolder = newFolder('/home/test');
map.add(rootFolder, rootOptions);
var nestedOptions = AnalysisOptionsImpl();
var nestedFolder = newFolder('/home/test/example');
map.add(nestedFolder, nestedOptions);
var rootFile = newFile('/home/test/a.dart', '');
var nestedFile = newFile('/home/test/example/a.dart', '');
expect(map.getOptions(rootFile), rootOptions);
expect(map.getOptions(nestedFile), nestedOptions);
}
test_noOptions() {
var file = newFile('/home/test/a.dart', '');
expect(map.getOptions(file).file, isNull);
}
/// https://github.com/dart-lang/sdk/issues/55252
test_optionsMapLookup() {
AnalysisOptions optionsFor(String file) =>
map.getOptions(newFile(file, ''));
AnalysisOptions addOptions(String folder) {
var options = AnalysisOptionsImpl();
map.add(newFolder(folder), options);
return options;
}
var fOptions = addOptions('/home/test/f');
addOptions('/home/test/g');
var fghOptions = addOptions('/home/test/f/g/h');
var fghiOptions = addOptions('/home/test/f/g/h/i');
addOptions('/home/test/h');
var fgOptions = addOptions('/home/test/f/g');
// Ensure lookup retrieves the most specific options files.
expect(optionsFor('/home/test/f/c.dart'), fOptions);
expect(optionsFor('/home/test/f/g/c.dart'), fgOptions);
expect(optionsFor('/home/test/f/g/h/c.dart'), fghOptions);
expect(optionsFor('/home/test/f/g/h/i/c.dart'), fghiOptions);
}
test_singleOptions() {
var rootOptions = AnalysisOptionsImpl();
var rootFolder = newFolder('/home/test');
map.add(rootFolder, rootOptions);
var rootFile = newFile('/home/test/a.dart', '');
var nestedFile = newFile('/home/test/example/lib/src/a.dart', '');
expect(map.getOptions(rootFile), rootOptions);
expect(map.getOptions(nestedFile), rootOptions);
}
}