blob: 4cc60a36f96280d2b4f92789280ec89b5fd87e24 [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/protocol_server.dart';
import 'package:analysis_server/src/services/completion/completion_core.dart';
import 'package:analysis_server/src/services/completion/completion_performance.dart';
import 'package:analysis_server/src/services/completion/dart/completion_manager.dart';
import 'package:analysis_server/src/services/completion/dart/suggestion_builder.dart';
import 'package:analyzer/src/dartdoc/dartdoc_directive_info.dart';
import 'package:analyzer/src/util/performance/operation_performance.dart';
import 'package:test/test.dart';
import 'package:test_reflective_loader/test_reflective_loader.dart';
import '../../../../abstract_single_unit.dart';
void main() {
defineReflectiveSuite(() {
defineReflectiveTests(ContextTypeTest);
});
}
@reflectiveTest
class ContextTypeTest extends AbstractSingleUnitTest {
void assertSuggestion(CompletionSuggestion suggestion,
{String? expectedDefaultArgumentList}) {
if (expectedDefaultArgumentList != null) {
var defaultArgumentList = suggestion.defaultArgumentListString!;
expect(defaultArgumentList, expectedDefaultArgumentList);
}
}
Future<CompletionSuggestion> forTopLevelFunction(String functionName) async {
var request = await DartCompletionRequestImpl.from(
OperationPerformanceImpl(''),
CompletionRequestImpl(testAnalysisResult, 0, CompletionPerformance()),
DartdocDirectiveInfo());
var builder = SuggestionBuilder(request);
builder.suggestTopLevelFunction(findElement.topFunction('f'));
var suggestions = builder.suggestions.toList();
expect(suggestions, hasLength(1));
return suggestions[0];
}
Future<void>
test_topLevelFunction_functionTypedArgument_noParameterName() async {
await resolveTestCode('''
void f(void Function(int) g) {}
''');
var suggestion = await forTopLevelFunction('f');
assertSuggestion(suggestion, expectedDefaultArgumentList: '(p0) { }');
}
Future<void>
test_topLevelFunction_functionTypedArgument_potentialDuplication() async {
await resolveTestCode('''
void f(void Function(int, int p0) g) {}
''');
var suggestion = await forTopLevelFunction('f');
assertSuggestion(suggestion, expectedDefaultArgumentList: '(p0_1, p0) { }');
}
}