@@ -16,26 +16,10 @@ import 'package:dartdoc/src/model/model.dart';
16
16
import 'package:dartdoc/src/package_config_provider.dart' ;
17
17
import 'package:dartdoc/src/package_meta.dart' ;
18
18
import 'package:dartdoc/src/special_elements.dart' ;
19
- import 'package:pub_semver/pub_semver.dart' ;
20
19
import 'package:test/test.dart' ;
21
20
22
21
import '../src/utils.dart' as utils;
23
22
24
- final String _platformVersionString = Platform .version.split (' ' ).first;
25
- final Version _platformVersion = Version .parse (_platformVersionString);
26
-
27
- final _testPackageGraphExperimentsMemo = AsyncMemoizer <PackageGraph >();
28
- Future <PackageGraph > get _testPackageGraphExperiments =>
29
- _testPackageGraphExperimentsMemo.runOnce (() => utils.bootBasicPackage (
30
- 'testing/test_package_experiments' ,
31
- pubPackageMetaProvider,
32
- PhysicalPackageConfigProvider (),
33
- additionalArguments: [
34
- '--enable-experiment' ,
35
- 'non-nullable' ,
36
- '--no-link-to-remote'
37
- ]));
38
-
39
23
final _testPackageGraphGinormousMemo = AsyncMemoizer <PackageGraph >();
40
24
Future <PackageGraph > get _testPackageGraphGinormous =>
41
25
_testPackageGraphGinormousMemo.runOnce (() => utils.bootBasicPackage (
@@ -74,205 +58,11 @@ void main() {
74
58
exit (1 );
75
59
}
76
60
77
- // This doesn't have the `max` because Null safety is supposed to work after
78
- // this version, and if the `max` is placed here we'll silently pass 2.10
79
- // stable if we haven't figured out how to switch on Null safety outside of
80
- // dev builds as specified in #2148.
81
- final _nullSafetyExperimentAllowed =
82
- VersionRange (min: Version .parse ('2.9.0-9.0.dev' ), includeMin: true );
83
-
84
61
// Experimental features not yet enabled by default. Move tests out of this
85
62
// block when the feature is enabled by default.
86
63
group ('Experiments' , () {
87
- Library lateFinalWithoutInitializer,
88
- nullSafetyClassMemberDeclarations,
89
- optOutOfNullSafety,
90
- nullableElements;
91
- Class b;
92
- Class c;
93
-
94
- setUpAll (() async {
95
- lateFinalWithoutInitializer = (await _testPackageGraphExperiments)
96
- .libraries
97
- .firstWhere ((lib) => lib.name == 'late_final_without_initializer' );
98
- nullSafetyClassMemberDeclarations = (await _testPackageGraphExperiments)
99
- .libraries
100
- .firstWhere ((lib) => lib.name == 'nnbd_class_member_declarations' );
101
- optOutOfNullSafety = (await _testPackageGraphExperiments)
102
- .libraries
103
- .firstWhere ((lib) => lib.name == 'opt_out_of_nnbd' );
104
- nullableElements = (await _testPackageGraphExperiments)
105
- .libraries
106
- .firstWhere ((lib) => lib.name == 'nullable_elements' );
107
- b = nullSafetyClassMemberDeclarations.allClasses
108
- .firstWhere ((c) => c.name == 'B' );
109
- c = nullSafetyClassMemberDeclarations.allClasses
110
- .firstWhere ((c) => c.name == 'C' );
111
- });
112
-
113
- test ('isNullSafety is set correctly for libraries' , () {
114
- expect (lateFinalWithoutInitializer.isNullSafety, isTrue);
115
- expect (optOutOfNullSafety.isNullSafety, isFalse);
116
- });
117
-
118
- test ('method parameters with required' , () {
119
- var m1 = b.instanceMethods.firstWhere ((m) => m.name == 'm1' );
120
- var p1 = m1.allParameters.firstWhere ((p) => p.name == 'p1' );
121
- var p2 = m1.allParameters.firstWhere ((p) => p.name == 'p2' );
122
- expect (p1.isRequiredNamed, isTrue);
123
- expect (p2.isRequiredNamed, isFalse);
124
- expect (p2.isNamed, isTrue);
125
-
126
- expect (
127
- m1.linkedParamsLines,
128
- equals (
129
- '<ol class="parameter-list"><li><span class="parameter" id="m1-param-some"><span class="type-annotation">int</span> <span class="parameter-name">some</span>, </span></li>\n '
130
- '<li><span class="parameter" id="m1-param-regular"><span class="type-annotation">dynamic</span> <span class="parameter-name">regular</span>, </span></li>\n '
131
- '<li><span class="parameter" id="m1-param-parameters"><span>covariant</span> <span class="type-annotation">dynamic</span> <span class="parameter-name">parameters</span>, </span></li>\n '
132
- '<li><span class="parameter" id="m1-param-p1">{<span>required</span> <span class="type-annotation">dynamic</span> <span class="parameter-name">p1</span>, </span></li>\n '
133
- '<li><span class="parameter" id="m1-param-p2"><span class="type-annotation">int</span> <span class="parameter-name">p2</span> = <span class="default-value">3</span>, </span></li>\n '
134
- '<li><span class="parameter" id="m1-param-p3"><span>required</span> <span>covariant</span> <span class="type-annotation">dynamic</span> <span class="parameter-name">p3</span>, </span></li>\n '
135
- '<li><span class="parameter" id="m1-param-p4"><span>required</span> <span>covariant</span> <span class="type-annotation">int</span> <span class="parameter-name">p4</span>}</span></li>\n '
136
- '</ol>' ));
137
- });
138
-
139
- test ('verify no regression on ordinary optionals' , () {
140
- var m2 = b.instanceMethods.firstWhere ((m) => m.name == 'm2' );
141
- var sometimes = m2.allParameters.firstWhere ((p) => p.name == 'sometimes' );
142
- var optionals = m2.allParameters.firstWhere ((p) => p.name == 'optionals' );
143
- expect (sometimes.isRequiredNamed, isFalse);
144
- expect (sometimes.isRequiredPositional, isTrue);
145
- expect (sometimes.isOptionalPositional, isFalse);
146
- expect (optionals.isRequiredNamed, isFalse);
147
- expect (optionals.isRequiredPositional, isFalse);
148
- expect (optionals.isOptionalPositional, isTrue);
149
-
150
- expect (
151
- m2.linkedParamsLines,
152
- equals (
153
- '<ol class="parameter-list"><li><span class="parameter" id="m2-param-sometimes"><span class="type-annotation">int</span> <span class="parameter-name">sometimes</span>, </span></li>\n '
154
- '<li><span class="parameter" id="m2-param-we"><span class="type-annotation">dynamic</span> <span class="parameter-name">we</span>, </span></li>\n '
155
- '<li><span class="parameter" id="m2-param-have">[<span class="type-annotation">String</span> <span class="parameter-name">have</span>, </span></li>\n '
156
- '<li><span class="parameter" id="m2-param-optionals"><span class="type-annotation">double</span> <span class="parameter-name">optionals</span>]</span></li>\n '
157
- '</ol>' ));
158
- });
159
-
160
- test ('anonymous callback parameters are correctly marked as nullable' , () {
161
- var m3 = c.instanceMethods.firstWhere ((m) => m.name == 'm3' );
162
- var listen = m3.allParameters.firstWhere ((p) => p.name == 'listen' );
163
- var onDone = m3.allParameters.firstWhere ((p) => p.name == 'onDone' );
164
- expect (listen.isRequiredPositional, isTrue);
165
- expect (onDone.isNamed, isTrue);
166
-
167
- expect (
168
- m3.linkedParamsLines,
169
- equals (
170
- '<ol class="parameter-list"><li><span class="parameter" id="m3-param-listen"><span class="type-annotation">void</span> <span class="parameter-name">listen</span>(<ol class="parameter-list"><li><span class="parameter" id="param-t"><span class="type-annotation">int</span> <span class="parameter-name">t</span></span></li>\n '
171
- '</ol>\n '
172
- ')?, </span></li>\n '
173
- '<li><span class="parameter" id="m3-param-onDone">{<span class="type-annotation">void</span> <span class="parameter-name">onDone</span>(<ol class="parameter-list"></ol>\n '
174
- ')?}</span></li>\n '
175
- '</ol>' ));
176
- });
177
-
178
- test ('Late final class member test' , () {
179
- var c = lateFinalWithoutInitializer.allClasses
180
- .firstWhere ((c) => c.name == 'C' );
181
- var a = c.instanceFields.firstWhere ((f) => f.name == 'a' );
182
- var b = c.instanceFields.firstWhere ((f) => f.name == 'b' );
183
- var cField = c.instanceFields.firstWhere ((f) => f.name == 'cField' );
184
- var dField = c.instanceFields.firstWhere ((f) => f.name == 'dField' );
185
-
186
- // If Null safety isn't enabled, fields named 'late' come back from the
187
- // analyzer instead of setting up 'isLate'.
188
- expect (c.instanceFields.any ((f) => f.name == 'late' ), isFalse);
189
-
190
- expect (a.modelType.returnType.name, equals ('dynamic' ));
191
- expect (a.isLate, isTrue);
192
- expect (a.features, contains ('late' ));
193
-
194
- expect (b.modelType.returnType.name, equals ('int' ));
195
- expect (b.isLate, isTrue);
196
- expect (b.features, contains ('late' ));
197
-
198
- expect (cField.modelType.returnType.name, equals ('dynamic' ));
199
- expect (cField.isLate, isTrue);
200
- expect (cField.features, contains ('late' ));
201
-
202
- expect (dField.modelType.returnType.name, equals ('double' ));
203
- expect (dField.isLate, isTrue);
204
- expect (dField.features, contains ('late' ));
205
- });
206
-
207
- test ('Late final top level variables' , () {
208
- var initializeMe = lateFinalWithoutInitializer.publicProperties
209
- .firstWhere ((v) => v.name == 'initializeMe' );
210
- expect (initializeMe.modelType.returnType.name, equals ('String' ));
211
- expect (initializeMe.isLate, isTrue);
212
- expect (initializeMe.features, contains ('late' ));
213
- });
214
-
215
- test ('Opt out of Null safety' , () {
216
- var notOptedIn = optOutOfNullSafety.publicProperties
217
- .firstWhere ((v) => v.name == 'notOptedIn' );
218
- expect (notOptedIn.isNullSafety, isFalse);
219
- expect (notOptedIn.modelType.nullabilitySuffix, isEmpty);
220
- });
221
-
222
- test ('complex nullable elements are detected and rendered correctly' , () {
223
- var complexNullableMembers = nullableElements.allClasses
224
- .firstWhere ((c) => c.name == 'ComplexNullableMembers' );
225
- var aComplexType = complexNullableMembers.allFields
226
- .firstWhere ((f) => f.name == 'aComplexType' );
227
- var aComplexSetterOnlyType = complexNullableMembers.allFields
228
- .firstWhere ((f) => f.name == 'aComplexSetterOnlyType' );
229
- expect (complexNullableMembers.isNullSafety, isTrue);
230
- expect (
231
- complexNullableMembers.nameWithGenerics,
232
- equals (
233
- 'ComplexNullableMembers<<wbr><span class=\" type-parameter\" >T extends String?</span>>' ));
234
- expect (
235
- aComplexType.linkedReturnType,
236
- equals (
237
- 'Map<span class="signature"><<wbr><span class="type-parameter">T?</span>, <span class="type-parameter">String?</span>></span>' ));
238
- expect (aComplexSetterOnlyType.linkedReturnType, equals (
239
- // TODO(jcollins-g): fix wrong span class for setter-only return type (#2226)
240
- '<span class="parameter" id="aComplexSetterOnlyType=-param-value"><span class="type-annotation">List<span class="signature"><<wbr><span class="type-parameter">Map<span class="signature"><<wbr><span class="type-parameter">T?</span>, <span class="type-parameter">String?</span>></span>?</span>></span></span></span>' ));
241
- });
242
-
243
- test ('simple nullable elements are detected and rendered correctly' , () {
244
- var nullableMembers = nullableElements.allClasses
245
- .firstWhere ((c) => c.name == 'NullableMembers' );
246
- var initialized =
247
- nullableMembers.allFields.firstWhere ((f) => f.name == 'initialized' );
248
- var nullableField = nullableMembers.allFields
249
- .firstWhere ((f) => f.name == 'nullableField' );
250
- var methodWithNullables = nullableMembers.publicInstanceMethods
251
- .firstWhere ((f) => f.name == 'methodWithNullables' );
252
- var operatorStar = nullableMembers.publicInstanceOperators
253
- .firstWhere ((f) => f.name == 'operator *' );
254
- expect (nullableMembers.isNullSafety, isTrue);
255
- expect (
256
- nullableField.linkedReturnType,
257
- equals (
258
- 'Iterable<span class=\" signature\" ><<wbr><span class=\" type-parameter\" >BigInt</span>></span>?' ));
259
- expect (
260
- methodWithNullables.linkedParams,
261
- equals (
262
- '<span class="parameter" id="methodWithNullables-param-foo"><span class="type-annotation">String?</span> <span class="parameter-name">foo</span></span>' ));
263
- expect (methodWithNullables.linkedReturnType, equals ('int?' ));
264
- expect (
265
- initialized.linkedReturnType,
266
- equals (
267
- 'Map<span class="signature"><<wbr><span class="type-parameter">String</span>, <span class="type-parameter">Map</span>></span>?' ));
268
- expect (
269
- operatorStar.linkedParams,
270
- equals (
271
- '<span class="parameter" id="*-param-nullableOther"><span class="type-annotation"><a href="%%__HTMLBASE_dartdoc_internal__%%nullable_elements/NullableMembers-class.html">NullableMembers</a>?</span> <span class="parameter-name">nullableOther</span></span>' ));
272
- });
273
- },
274
- skip: (! _nullSafetyExperimentAllowed.allows (_platformVersion) &&
275
- ! _platformVersionString.contains ('edge' )));
64
+ setUpAll (() async {});
65
+ });
276
66
277
67
group ('HTML Injection when allowed' , () {
278
68
Class htmlInjection;
0 commit comments