Index: pkg/unittest/lib/mirror_matchers.dart |
diff --git a/pkg/unittest/lib/mirror_matchers.dart b/pkg/unittest/lib/mirror_matchers.dart |
index 7d1597f2ac27f59c752109141a93a6a58ce6c51c..25f2b6d69206d80b4b77bedadd1901eafd634b09 100644 |
--- a/pkg/unittest/lib/mirror_matchers.dart |
+++ b/pkg/unittest/lib/mirror_matchers.dart |
@@ -49,10 +49,19 @@ class _HasProperty extends Matcher { |
var mirror = reflect(item); |
var classMirror = mirror.type; |
var symbol = new Symbol(_name); |
- if (!classMirror.getters.containsKey(symbol)) { |
+ var candidate = classMirror.declarations[symbol]; |
+ if (candidate == null) { |
addStateInfo(matchState, {'reason': 'has no property named "$_name"'}); |
return false; |
} |
+ bool isInstanceField = candidate is VariableMirror && !candidate.isStatic; |
+ bool isInstanceGetter = |
+ candidate is MethodMirror && candidate.isGetter && !candidate.isStatic; |
+ if (!(isInstanceField || isInstanceGetter)) { |
+ addStateInfo(matchState, {'reason': |
+ 'has a member named "$_name", but it is not an instance property'}); |
+ return false; |
+ } |
if (_matcher == null) return true; |
var result = mirror.getField(symbol); |
var resultMatches = _matcher.matches(result.reflectee, matchState); |