Index: tools/code_coverage/croc.py |
=================================================================== |
--- tools/code_coverage/croc.py (revision 39945) |
+++ tools/code_coverage/croc.py (working copy) |
@@ -52,6 +52,14 @@ |
class CoverageStats(dict): |
"""Coverage statistics.""" |
+ # Default dictionary values for this stat. |
+ DEFAULTS = { 'files_covered': 0, |
+ 'files_instrumented': 0, |
+ 'files_executable': 0, |
+ 'lines_covered': 0, |
+ 'lines_instrumented': 0, |
+ 'lines_executable': 0 } |
+ |
def Add(self, coverage_stats): |
"""Adds a contribution from another coverage stats dict. |
@@ -64,6 +72,15 @@ |
else: |
self[k] = v |
+ def AddDefaults(self): |
+ """Add some default stats which might be assumed present. |
+ |
+ Do not clobber if already present. Adds resilience when evaling a |
+ croc file which expects certain stats to exist.""" |
+ for k, v in self.DEFAULTS.iteritems(): |
+ if not k in self: |
+ self[k] = v |
+ |
#------------------------------------------------------------------------------ |
@@ -399,6 +416,10 @@ |
return default |
stats = self.tree.stats_by_group[group] |
+ # Unit tests use real dicts, not CoverageStats objects, |
+ # so we can't AddDefaults() on them. |
+ if group == 'all' and hasattr(stats, 'AddDefaults'): |
+ stats.AddDefaults() |
try: |
return eval(stat, {'__builtins__': {'S': self.GetStat}}, stats) |
except Exception, e: |