@@ -42,7 +42,8 @@ void main() {
42
42
group ('Experiments' , () {
43
43
Library lateFinalWithoutInitializer,
44
44
nnbdClassMemberDeclarations,
45
- optOutOfNnbd;
45
+ optOutOfNnbd,
46
+ nullableElements;
46
47
Class b;
47
48
48
49
setUpAll (() async {
@@ -55,6 +56,9 @@ void main() {
55
56
optOutOfNnbd = (await utils.testPackageGraphExperiments)
56
57
.libraries
57
58
.firstWhere ((lib) => lib.name == 'opt_out_of_nnbd' );
59
+ nullableElements = (await utils.testPackageGraphExperiments)
60
+ .libraries
61
+ .firstWhere ((lib) => lib.name == 'nullable_elements' );
58
62
b = nnbdClassMemberDeclarations.allClasses
59
63
.firstWhere ((c) => c.name == 'B' );
60
64
});
@@ -142,6 +146,65 @@ void main() {
142
146
expect (initializeMe.isLate, isTrue);
143
147
expect (initializeMe.features, contains ('late' ));
144
148
});
149
+
150
+ test ('Opt out of NNBD' , () {
151
+ var notOptedIn = optOutOfNnbd.publicProperties
152
+ .firstWhere ((v) => v.name == 'notOptedIn' );
153
+ expect (notOptedIn.isNNBD, isFalse);
154
+ expect (notOptedIn.modelType.nullabilitySuffix, isEmpty);
155
+ });
156
+
157
+ test ('complex nullable elements are detected and rendered correctly' , () {
158
+ var complexNullableMembers = nullableElements.allClasses
159
+ .firstWhere ((c) => c.name == 'ComplexNullableMembers' );
160
+ var aComplexType = complexNullableMembers.allFields
161
+ .firstWhere ((f) => f.name == 'aComplexType' );
162
+ var aComplexSetterOnlyType = complexNullableMembers.allFields
163
+ .firstWhere ((f) => f.name == 'aComplexSetterOnlyType' );
164
+ expect (complexNullableMembers.isNNBD, isTrue);
165
+ expect (
166
+ complexNullableMembers.nameWithGenerics,
167
+ equals (
168
+ 'ComplexNullableMembers<<wbr><span class=\" type-parameter\" >T extends String?</span>>' ));
169
+ expect (
170
+ aComplexType.linkedReturnType,
171
+ equals (
172
+ 'Map<span class="signature"><<wbr><span class="type-parameter">T?</span>, <span class="type-parameter">String?</span>></span>' ));
173
+ expect (aComplexSetterOnlyType.linkedReturnType, equals (
174
+ // TODO(jcollins-g): fix wrong span class for setter-only return type (#2226)
175
+ '<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><wbr>' ));
176
+ });
177
+
178
+ test ('simple nullable elements are detected and rendered correctly' , () {
179
+ var nullableMembers = nullableElements.allClasses
180
+ .firstWhere ((c) => c.name == 'NullableMembers' );
181
+ var initialized =
182
+ nullableMembers.allFields.firstWhere ((f) => f.name == 'initialized' );
183
+ var nullableField = nullableMembers.allFields
184
+ .firstWhere ((f) => f.name == 'nullableField' );
185
+ var methodWithNullables = nullableMembers.publicInstanceMethods
186
+ .firstWhere ((f) => f.name == 'methodWithNullables' );
187
+ var operatorStar = nullableMembers.publicInstanceOperators
188
+ .firstWhere ((f) => f.name == 'operator *' );
189
+ expect (nullableMembers.isNNBD, isTrue);
190
+ expect (
191
+ nullableField.linkedReturnType,
192
+ equals (
193
+ 'Iterable<span class=\" signature\" ><<wbr><span class=\" type-parameter\" >BigInt</span>></span>?' ));
194
+ expect (
195
+ methodWithNullables.linkedParams,
196
+ equals (
197
+ '<span class="parameter" id="methodWithNullables-param-foo"><span class="type-annotation">String?</span> <span class="parameter-name">foo</span></span><wbr>' ));
198
+ expect (methodWithNullables.linkedReturnType, equals ('int?' ));
199
+ expect (
200
+ initialized.linkedReturnType,
201
+ equals (
202
+ 'Map<span class="signature"><<wbr><span class="type-parameter">String</span>, <span class="type-parameter">Map</span>></span>?' ));
203
+ expect (
204
+ operatorStar.linkedParams,
205
+ equals (
206
+ '<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><wbr>' ));
207
+ });
145
208
},
146
209
skip: (! _nnbdExperimentAllowed.allows (_platformVersion) &&
147
210
! _platformVersionString.contains ('edge' )));
0 commit comments