33// BSD-style license that can be found in the LICENSE file.
44
55import 'package:analyzer/src/dart/element/element.dart' ;
6- import 'package:analyzer/src/utilities/extensions/element.dart' ;
76import 'package:test/test.dart' ;
87import 'package:test_reflective_loader/test_reflective_loader.dart' ;
98
10- import '../../../generated/type_system_base .dart' ;
9+ import '../resolution/context_collection_resolution .dart' ;
1110
1211main () {
1312 defineReflectiveSuite (() {
@@ -16,68 +15,72 @@ main() {
1615}
1716
1817@reflectiveTest
19- class ElementDisplayStringTest extends AbstractTypeSystemTest {
20- void test_class () {
21- var classA = class_ (
22- name: 'A' ,
23- isAbstract: true ,
24- superType: stringNone,
25- typeParameters: [typeParameter ('T' )],
26- );
27-
28- var displayString = classA.getDisplayString ();
29- expect (displayString, 'abstract class A<T> extends String' );
18+ class ElementDisplayStringTest extends PubPackageResolutionTest {
19+ test_class () async {
20+ await assertNoErrorsInCode (r'''
21+ class A {}
22+ abstract class B<T> extends A {}
23+ ''' );
24+
25+ var B = findElement2.class_ ('B' ).firstFragment as ClassFragmentImpl ;
26+ var displayString = B .getDisplayString ();
27+ expect (displayString, 'abstract class B<T> extends A' );
3028 }
3129
32- void test_extension_named () {
33- var element = extension (name: 'StringExtension' , extendedType: stringNone);
30+ test_extension_named () async {
31+ await assertNoErrorsInCode (r'''
32+ extension StringExtension on String {}
33+ ''' );
34+
35+ var element = findElement2.extension_ ('StringExtension' );
36+ var fragment = element.firstFragment as ExtensionFragmentImpl ;
3437
35- var displayString = element .getDisplayString ();
38+ var displayString = fragment .getDisplayString ();
3639 expect (displayString, 'extension StringExtension on String' );
3740 }
3841
39- void test_extension_unnamed () {
40- var element = extension (extendedType: stringNone);
42+ test_extension_unnamed () async {
43+ await assertNoErrorsInCode (r'''
44+ extension on String {}
45+ ''' );
4146
42- var displayString = element.getDisplayString ();
47+ var element = result.libraryElement2.extensions.single;
48+ var fragment = element.firstFragment;
49+
50+ var displayString = fragment.getDisplayString ();
4351 expect (displayString, 'extension on String' );
4452 }
4553
46- void test_extensionType () {
47- var element = extensionType (
48- 'MyString' ,
49- representationType: stringNone,
50- interfaces: [stringNone],
51- typeParameters: [typeParameter ('T' )],
52- );
54+ test_extensionType () async {
55+ await assertNoErrorsInCode (r'''
56+ extension type MyString<T>(String it) implements String {}
57+ ''' );
5358
54- var displayString = element.getDisplayString ();
59+ var element = findElement2.extensionType ('MyString' );
60+ var fragment = element.firstFragment as ExtensionTypeFragmentImpl ;
61+
62+ var displayString = fragment.getDisplayString ();
5563 expect (
5664 displayString,
5765 'extension type MyString<T>(String it) implements String' ,
5866 );
5967 }
6068
61- void test_longMethod () {
62- var methodA = method (
63- 'longMethodName' ,
64- stringQuestion,
65- formalParameters: [
66- requiredParameter (name: 'aaa' , type: stringQuestion),
67- positionalParameter (
68- name: 'bbb' ,
69- type: stringQuestion,
70- defaultValueCode: "'a'" ,
71- ),
72- positionalParameter (name: 'ccc' , type: stringQuestion),
73- ],
74- );
69+ test_longMethod () async {
70+ await assertNoErrorsInCode (r'''
71+ abstract class A {
72+ String? longMethodName(String? aaa, [String? bbb = 'a', String? ccc]);
73+ }
74+ ''' );
75+
76+ var methodElement = findElement2.method ('longMethodName' );
77+ var methodFragment = methodElement.firstFragment as MethodFragmentImpl ;
7578
76- var singleLine = methodA .getDisplayString ();
79+ var singleLine = methodFragment .getDisplayString ();
7780 expect (singleLine, '''
7881String? longMethodName(String? aaa, [String? bbb = 'a', String? ccc])''' );
7982
80- var multiLine = methodA .getDisplayString (multiline: true );
83+ var multiLine = methodFragment .getDisplayString (multiline: true );
8184 expect (multiLine, '''
8285String? longMethodName(
8386 String? aaa, [
@@ -86,37 +89,28 @@ String? longMethodName(
8689])''' );
8790 }
8891
89- void test_longMethod_functionType () {
90- // Function types are always kept on one line, even nested within multiline
91- // signatures.
92- var methodA = method (
93- 'longMethodName' ,
94- stringQuestion,
95- formalParameters: [
96- requiredParameter (name: 'aaa' , type: stringQuestion),
97- positionalParameter (
98- name: 'bbb' ,
99- type: functionTypeNone (
100- formalParameters: [
101- requiredParameter (name: 'xxx' , type: stringQuestion),
102- requiredParameter (name: 'yyy' , type: stringQuestion),
103- requiredParameter (name: 'zzz' , type: stringQuestion),
104- ],
105- returnType: stringQuestion,
106- ),
107- ),
108- positionalParameter (name: 'ccc' , type: stringQuestion),
109- ],
110- );
92+ test_longMethod_functionType () async {
93+ await assertNoErrorsInCode (r'''
94+ abstract class A {
95+ String? longMethodName(
96+ String? aaa,
97+ [String? Function(String?, String?, String?) bbb,
98+ String? ccc]
99+ );
100+ }
101+ ''' );
102+
103+ var methodElement = findElement2.method ('longMethodName' );
104+ var methodFragment = methodElement.firstFragment as MethodFragmentImpl ;
111105
112- var singleLine = methodA .getDisplayString ();
106+ var singleLine = methodFragment .getDisplayString ();
113107 expect (
114108 singleLine,
115109 '''
116110String? longMethodName(String? aaa, [String? Function(String?, String?, String?) bbb, String? ccc])''' ,
117111 );
118112
119- var multiLine = methodA .getDisplayString (multiline: true );
113+ var multiLine = methodFragment .getDisplayString (multiline: true );
120114 expect (multiLine, '''
121115String? longMethodName(
122116 String? aaa, [
@@ -125,41 +119,42 @@ String? longMethodName(
125119])''' );
126120 }
127121
128- void test_property_getter () {
129- var getterA = GetterFragmentImpl . forVariable (
130- TopLevelVariableFragmentImpl (name2 : 'a' , nameOffset : 0 ),
131- )..returnType = stringNone ;
122+ test_property_getter () async {
123+ await assertNoErrorsInCode ( r'''
124+ String get a => '';
125+ ''' ) ;
132126
133- expect (getterA.getDisplayString (), 'String get a' );
127+ var element = findElement2.topGet ('a' );
128+ var fragment = element.firstFragment as GetterFragmentImpl ;
129+
130+ expect (fragment.getDisplayString (), 'String get a' );
134131 }
135132
136- void test_property_setter () {
137- var setterA =
138- SetterFragmentImpl .forVariable (
139- TopLevelVariableFragmentImpl (name2: 'a' , nameOffset: 0 ),
140- )
141- ..returnType = voidNone
142- ..parameters = [
143- requiredParameter (name: 'value' , type: stringNone).asElement,
144- ];
145-
146- expect (setterA.getDisplayString (), 'set a(String value)' );
133+ test_property_setter () async {
134+ await assertNoErrorsInCode (r'''
135+ set a(String value) {}
136+ ''' );
137+
138+ var element = findElement2.topSet ('a' );
139+ var fragment = element.firstFragment as SetterFragmentImpl ;
140+
141+ expect (fragment.getDisplayString (), 'set a(String value)' );
147142 }
148143
149- void test_shortMethod () {
150- var methodA = method (
151- 'm' ,
152- stringQuestion,
153- formalParameters : [
154- requiredParameter (name : 'a' , type : stringQuestion),
155- positionalParameter (name : 'b' , type : stringQuestion),
156- ],
157- ) ;
144+ test_shortMethod () async {
145+ await assertNoErrorsInCode ( r'''
146+ abstract class A {
147+ String? m(String? a, [String? b]);
148+ }
149+ ''' );
150+
151+ var element = findElement2. method ( 'm' );
152+ var fragment = element.firstFragment as MethodFragmentImpl ;
158153
159- var singleLine = methodA .getDisplayString ();
154+ var singleLine = fragment .getDisplayString ();
160155 expect (singleLine, 'String? m(String? a, [String? b])' );
161156
162- var multiLine = methodA .getDisplayString (multiline: true );
157+ var multiLine = fragment .getDisplayString (multiline: true );
163158 // The signature is short enough that it remains on one line even for
164159 // multiline: true.
165160 expect (multiLine, 'String? m(String? a, [String? b])' );
0 commit comments