Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(74)

Side by Side Diff: tools/code_coverage/croc.py

Issue 660142: Add resilience in croc to a failed build (e.g. 0 stats generated).... (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 10 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « no previous file | tools/code_coverage/croc_test.py » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 #!/usr/bin/python2.4 1 #!/usr/bin/python2.4
2 # 2 #
3 # Copyright 2009, Google Inc. 3 # Copyright 2009, Google Inc.
4 # All rights reserved. 4 # All rights reserved.
5 # 5 #
6 # Redistribution and use in source and binary forms, with or without 6 # Redistribution and use in source and binary forms, with or without
7 # modification, are permitted provided that the following conditions are 7 # modification, are permitted provided that the following conditions are
8 # met: 8 # met:
9 # 9 #
10 # * Redistributions of source code must retain the above copyright 10 # * Redistributions of source code must retain the above copyright
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
45 45
46 class CrocStatError(CrocError): 46 class CrocStatError(CrocError):
47 """Error evaluating coverage stat.""" 47 """Error evaluating coverage stat."""
48 48
49 #------------------------------------------------------------------------------ 49 #------------------------------------------------------------------------------
50 50
51 51
52 class CoverageStats(dict): 52 class CoverageStats(dict):
53 """Coverage statistics.""" 53 """Coverage statistics."""
54 54
55 # Default dictionary values for this stat.
56 DEFAULTS = { 'files_covered': 0,
57 'files_instrumented': 0,
58 'files_executable': 0,
59 'lines_covered': 0,
60 'lines_instrumented': 0,
61 'lines_executable': 0 }
62
55 def Add(self, coverage_stats): 63 def Add(self, coverage_stats):
56 """Adds a contribution from another coverage stats dict. 64 """Adds a contribution from another coverage stats dict.
57 65
58 Args: 66 Args:
59 coverage_stats: Statistics to add to this one. 67 coverage_stats: Statistics to add to this one.
60 """ 68 """
61 for k, v in coverage_stats.iteritems(): 69 for k, v in coverage_stats.iteritems():
62 if k in self: 70 if k in self:
63 self[k] += v 71 self[k] += v
64 else: 72 else:
65 self[k] = v 73 self[k] = v
66 74
75 def AddDefaults(self):
76 """Add some default stats which might be assumed present.
77
78 Do not clobber if already present. Adds resilience when evaling a
79 croc file which expects certain stats to exist."""
80 for k, v in self.DEFAULTS.iteritems():
81 if not k in self:
82 self[k] = v
83
67 #------------------------------------------------------------------------------ 84 #------------------------------------------------------------------------------
68 85
69 86
70 class CoveredFile(object): 87 class CoveredFile(object):
71 """Information about a single covered file.""" 88 """Information about a single covered file."""
72 89
73 def __init__(self, filename, **kwargs): 90 def __init__(self, filename, **kwargs):
74 """Constructor. 91 """Constructor.
75 92
76 Args: 93 Args:
(...skipping 315 matching lines...) Expand 10 before | Expand all | Expand 10 after
392 # print the stats from just that subdir 409 # print the stats from just that subdir
393 410
394 # Make sure the group exists 411 # Make sure the group exists
395 if group not in self.tree.stats_by_group: 412 if group not in self.tree.stats_by_group:
396 if default is None: 413 if default is None:
397 raise CrocStatError('Group %r not found.' % group) 414 raise CrocStatError('Group %r not found.' % group)
398 else: 415 else:
399 return default 416 return default
400 417
401 stats = self.tree.stats_by_group[group] 418 stats = self.tree.stats_by_group[group]
419 # Unit tests use real dicts, not CoverageStats objects,
420 # so we can't AddDefaults() on them.
421 if group == 'all' and hasattr(stats, 'AddDefaults'):
422 stats.AddDefaults()
402 try: 423 try:
403 return eval(stat, {'__builtins__': {'S': self.GetStat}}, stats) 424 return eval(stat, {'__builtins__': {'S': self.GetStat}}, stats)
404 except Exception, e: 425 except Exception, e:
405 if default is None: 426 if default is None:
406 raise CrocStatError('Error evaluating stat %r: %s' % (stat, e)) 427 raise CrocStatError('Error evaluating stat %r: %s' % (stat, e))
407 else: 428 else:
408 return default 429 return default
409 430
410 def PrintStat(self, stat, format=None, outfile=sys.stdout, **kwargs): 431 def PrintStat(self, stat, format=None, outfile=sys.stdout, **kwargs):
411 """Prints a statistic from the coverage object. 432 """Prints a statistic from the coverage object.
(...skipping 297 matching lines...) Expand 10 before | Expand all | Expand 10 after
709 html.Write() 730 html.Write()
710 731
711 # Normal exit 732 # Normal exit
712 return 0 733 return 0
713 734
714 735
715 #------------------------------------------------------------------------------ 736 #------------------------------------------------------------------------------
716 737
717 if __name__ == '__main__': 738 if __name__ == '__main__':
718 sys.exit(Main(sys.argv)) 739 sys.exit(Main(sys.argv))
OLDNEW
« no previous file with comments | « no previous file | tools/code_coverage/croc_test.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698