blob: 8d6f45b1440eb822f5eef27e5f3fcc98c6a811a6 [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:analyzer/src/dart/element/element.dart';
import 'package:test/test.dart';
import 'package:test_reflective_loader/test_reflective_loader.dart';
import '../resolution/context_collection_resolution.dart';
main() {
defineReflectiveSuite(() {
defineReflectiveTests(ElementDisplayStringTest);
});
}
@reflectiveTest
class ElementDisplayStringTest extends PubPackageResolutionTest {
test_class() async {
await assertNoErrorsInCode(r'''
class A {}
abstract class B<T> extends A {}
''');
var B = findElement2.class_('B').firstFragment as ClassFragmentImpl;
var displayString = B.getDisplayString();
expect(displayString, 'abstract class B<T> extends A');
}
test_extension_named() async {
await assertNoErrorsInCode(r'''
extension StringExtension on String {}
''');
var element = findElement2.extension_('StringExtension');
var fragment = element.firstFragment as ExtensionFragmentImpl;
var displayString = fragment.getDisplayString();
expect(displayString, 'extension StringExtension on String');
}
test_extension_unnamed() async {
await assertNoErrorsInCode(r'''
extension on String {}
''');
var element = result.libraryElement2.extensions.single;
var fragment = element.firstFragment;
var displayString = fragment.getDisplayString();
expect(displayString, 'extension on String');
}
test_extensionType() async {
await assertNoErrorsInCode(r'''
extension type MyString<T>(String it) implements String {}
''');
var element = findElement2.extensionType('MyString');
var fragment = element.firstFragment as ExtensionTypeFragmentImpl;
var displayString = fragment.getDisplayString();
expect(
displayString,
'extension type MyString<T>(String it) implements String',
);
}
test_longMethod() async {
await assertNoErrorsInCode(r'''
abstract class A {
String? longMethodName(String? aaa, [String? bbb = 'a', String? ccc]);
}
''');
var methodElement = findElement2.method('longMethodName');
var methodFragment = methodElement.firstFragment as MethodFragmentImpl;
var singleLine = methodFragment.getDisplayString();
expect(singleLine, '''
String? longMethodName(String? aaa, [String? bbb = 'a', String? ccc])''');
var multiLine = methodFragment.getDisplayString(multiline: true);
expect(multiLine, '''
String? longMethodName(
String? aaa, [
String? bbb = 'a',
String? ccc,
])''');
}
test_longMethod_functionType() async {
await assertNoErrorsInCode(r'''
abstract class A {
String? longMethodName(
String? aaa,
[String? Function(String?, String?, String?) bbb,
String? ccc]
);
}
''');
var methodElement = findElement2.method('longMethodName');
var methodFragment = methodElement.firstFragment as MethodFragmentImpl;
var singleLine = methodFragment.getDisplayString();
expect(
singleLine,
'''
String? longMethodName(String? aaa, [String? Function(String?, String?, String?) bbb, String? ccc])''',
);
var multiLine = methodFragment.getDisplayString(multiline: true);
expect(multiLine, '''
String? longMethodName(
String? aaa, [
String? Function(String?, String?, String?) bbb,
String? ccc,
])''');
}
test_property_getter() async {
await assertNoErrorsInCode(r'''
String get a => '';
''');
var element = findElement2.topGet('a');
var fragment = element.firstFragment as GetterFragmentImpl;
expect(fragment.getDisplayString(), 'String get a');
}
test_property_setter() async {
await assertNoErrorsInCode(r'''
set a(String value) {}
''');
var element = findElement2.topSet('a');
var fragment = element.firstFragment as SetterFragmentImpl;
expect(fragment.getDisplayString(), 'set a(String value)');
}
test_shortMethod() async {
await assertNoErrorsInCode(r'''
abstract class A {
String? m(String? a, [String? b]);
}
''');
var element = findElement2.method('m');
var fragment = element.firstFragment as MethodFragmentImpl;
var singleLine = fragment.getDisplayString();
expect(singleLine, 'String? m(String? a, [String? b])');
var multiLine = fragment.getDisplayString(multiline: true);
// The signature is short enough that it remains on one line even for
// multiline: true.
expect(multiLine, 'String? m(String? a, [String? b])');
}
}