blob: d619d12f6fe8a23a2398addf623939e88093921d [file] [log] [blame]
// Copyright (c) 2021, 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:analysis_server/src/lsp/client_configuration.dart';
import 'package:analyzer_testing/resource_provider_mixin.dart';
import 'package:test/test.dart';
import 'package:test_reflective_loader/test_reflective_loader.dart';
void main() {
defineReflectiveSuite(() {
defineReflectiveTests(ClientConfigurationTest);
defineReflectiveTests(InlayHintsConfigurationTest);
});
}
@reflectiveTest
class ClientConfigurationTest with ResourceProviderMixin {
void test_folderConfig() {
var folder = convertPath('/home/test');
var file = convertPath('/home/test/file.dart');
var config = LspClientConfiguration(resourceProvider.pathContext);
config.replace(
{'lineLength': 100},
{
folder: {'lineLength': 200},
},
);
expect(config.forResource(file).lineLength, equals(200));
}
void test_folderConfig_globalFallback() {
var file = convertPath('/home/test/file.dart');
var config = LspClientConfiguration(resourceProvider.pathContext);
config.replace({'lineLength': 100}, {});
// Should fall back to the global config.
expect(config.forResource(file).lineLength, equals(100));
}
void test_folderConfig_nested() {
var folderOne = convertPath('/one');
var folderTwo = convertPath('/one/two');
var folderThree = convertPath('/one/two/three');
var file = convertPath('/one/two/three/file.dart');
var config = LspClientConfiguration(resourceProvider.pathContext);
config.replace(
{'lineLength': 50},
{
folderOne: {'lineLength': 100},
folderThree: {'lineLength': 300},
folderTwo: {'lineLength': 200},
},
);
// Should use the inner-most folder (folderThree).
expect(config.forResource(file).lineLength, equals(300));
}
void test_globalConfig() {
var config = LspClientConfiguration(resourceProvider.pathContext);
config.replace({'lineLength': 100}, {});
expect(config.global.lineLength, equals(100));
}
}
/// Verifies all the different ways of expressions the config resolve to the
/// same values, so the inlay hint handler tests can simply test one combination
/// for each kind of hint.
@reflectiveTest
class InlayHintsConfigurationTest {
void test_parameterNames_all() {
var options = [
LspClientInlayHintsConfiguration(null),
LspClientInlayHintsConfiguration(true),
LspClientInlayHintsConfiguration({'parameterNames': true}),
LspClientInlayHintsConfiguration({'parameterNames': 'all'}),
LspClientInlayHintsConfiguration({
'parameterNames': {'enabled': true},
}),
LspClientInlayHintsConfiguration({
'parameterNames': {'enabled': 'all'},
}),
];
for (var option in options) {
expect(option.parameterNamesMode, InlayHintsParameterNamesMode.all);
}
}
void test_parameterNames_literal() {
var options = [
LspClientInlayHintsConfiguration({'parameterNames': 'literal'}),
LspClientInlayHintsConfiguration({
'parameterNames': {'enabled': 'literal'},
}),
];
for (var option in options) {
expect(option.parameterNamesMode, InlayHintsParameterNamesMode.literal);
}
}
void test_parameterNames_none() {
var options = [
LspClientInlayHintsConfiguration(false),
LspClientInlayHintsConfiguration({'parameterNames': false}),
LspClientInlayHintsConfiguration({'parameterNames': 'none'}),
LspClientInlayHintsConfiguration({
'parameterNames': {'enabled': false},
}),
LspClientInlayHintsConfiguration({
'parameterNames': {'enabled': 'none'},
}),
];
for (var option in options) {
expect(option.parameterNamesMode, InlayHintsParameterNamesMode.none);
}
}
void test_parameterTypes_disabled() {
var options = [
LspClientInlayHintsConfiguration(false),
LspClientInlayHintsConfiguration({'parameterTypes': false}),
LspClientInlayHintsConfiguration({
'parameterTypes': {'enabled': false},
}),
];
for (var option in options) {
expect(option.parameterTypesEnabled, false);
}
}
void test_parameterTypes_enabled() {
var options = [
LspClientInlayHintsConfiguration(null),
LspClientInlayHintsConfiguration(true),
LspClientInlayHintsConfiguration({'parameterTypes': true}),
LspClientInlayHintsConfiguration({
'parameterTypes': {'enabled': true},
}),
];
for (var option in options) {
expect(option.parameterTypesEnabled, true);
}
}
void test_returnTypes_disabled() {
var options = [
LspClientInlayHintsConfiguration(false),
LspClientInlayHintsConfiguration({'returnTypes': false}),
LspClientInlayHintsConfiguration({
'returnTypes': {'enabled': false},
}),
];
for (var option in options) {
expect(option.returnTypesEnabled, false);
}
}
void test_returnTypes_enabled() {
var options = [
LspClientInlayHintsConfiguration(null),
LspClientInlayHintsConfiguration(true),
LspClientInlayHintsConfiguration({'returnTypes': true}),
LspClientInlayHintsConfiguration({
'returnTypes': {'enabled': true},
}),
];
for (var option in options) {
expect(option.returnTypesEnabled, true);
}
}
void test_typeArguments_disabled() {
var options = [
LspClientInlayHintsConfiguration(false),
LspClientInlayHintsConfiguration({'typeArguments': false}),
LspClientInlayHintsConfiguration({
'typeArguments': {'enabled': false},
}),
];
for (var option in options) {
expect(option.typeArgumentsEnabled, false);
}
}
void test_typeArguments_enabled() {
var options = [
LspClientInlayHintsConfiguration(null),
LspClientInlayHintsConfiguration(true),
LspClientInlayHintsConfiguration({'typeArguments': true}),
LspClientInlayHintsConfiguration({
'typeArguments': {'enabled': true},
}),
];
for (var option in options) {
expect(option.typeArgumentsEnabled, true);
}
}
void test_variableTypes_disabled() {
var options = [
LspClientInlayHintsConfiguration(false),
LspClientInlayHintsConfiguration({'variableTypes': false}),
LspClientInlayHintsConfiguration({
'variableTypes': {'enabled': false},
}),
];
for (var option in options) {
expect(option.variableTypesEnabled, false);
}
}
void test_variableTypes_enabled() {
var options = [
LspClientInlayHintsConfiguration(null),
LspClientInlayHintsConfiguration(true),
LspClientInlayHintsConfiguration({'variableTypes': true}),
LspClientInlayHintsConfiguration({
'variableTypes': {'enabled': true},
}),
];
for (var option in options) {
expect(option.variableTypesEnabled, true);
}
}
}