@@ -6,6 +6,7 @@ library dartdoc.model_test;
66
77import 'dart:io' ;
88
9+ import 'package:analyzer/source/line_info.dart' ;
910import 'package:async/async.dart' ;
1011import 'package:dartdoc/src/element_type.dart' ;
1112import 'package:dartdoc/src/model/feature.dart' ;
@@ -3347,6 +3348,39 @@ String topLevelFunction(int param1, bool param2, Cool coolBeans,
33473348 classB = exLibrary.classes.singleWhere ((c) => c.name == 'B' );
33483349 });
33493350
3351+ test ('always has a valid location' , () {
3352+ void expectValidLocation (CharacterLocation location) {
3353+ expect (location.lineNumber, greaterThanOrEqualTo (0 ));
3354+ expect (location.columnNumber, greaterThanOrEqualTo (0 ));
3355+ }
3356+
3357+ ;
3358+ var simpleProperty =
3359+ fakeLibrary.properties.firstWhere ((p) => p.name == 'simpleProperty' );
3360+ expectValidLocation (simpleProperty.getter.characterLocation);
3361+ expectValidLocation (simpleProperty.setter.characterLocation);
3362+ expectValidLocation (onlyGetterGetter.characterLocation);
3363+ expectValidLocation (onlySetterSetter.characterLocation);
3364+
3365+ Iterable <Accessor > _expandAccessors (Field f) sync * {
3366+ if (f.hasGetter) yield f.getter;
3367+ if (f.hasSetter) yield f.setter;
3368+ }
3369+
3370+ // classB has a variety of inherited and partially overridden fields.
3371+ // All should have valid locations on their accessors.
3372+ for (var a in classB.allFields.expand (_expandAccessors)) {
3373+ expectValidLocation (a.characterLocation);
3374+ }
3375+
3376+ // Enums also have fields and have historically had problems.
3377+ var macrosFromAccessors =
3378+ fakeLibrary.enums.firstWhere ((e) => e.name == 'MacrosFromAccessors' );
3379+ for (var a in macrosFromAccessors.allFields.expand (_expandAccessors)) {
3380+ expectValidLocation (a.characterLocation);
3381+ }
3382+ });
3383+
33503384 test ('are available on top-level variables' , () {
33513385 expect (onlyGetterGetter.name, equals ('justGetter' ));
33523386 expect (onlyGetterSetter, isNull);
0 commit comments