3 # Copyright 2013 The Chromium Authors. All rights reserved.
4 # Use of this source code is governed by a BSD-style license that can be
5 # found in the LICENSE file.
7 """Aggregates EMMA coverage files to produce html output."""
15 from devil
.utils
import cmd_helper
16 from pylib
import constants
19 def _GetFilesWithExt(root_dir
, ext
):
20 """Gets all files with a given extension.
23 root_dir: Directory in which to search for files.
24 ext: Extension to look for (including dot)
27 A list of absolute paths to files that match.
30 for root
, _
, filenames
in os
.walk(root_dir
):
31 basenames
= fnmatch
.filter(filenames
, '*.' + ext
)
32 files
.extend([os
.path
.join(root
, basename
)
33 for basename
in basenames
])
39 option_parser
= optparse
.OptionParser()
40 option_parser
.add_option('--output', help='HTML output filename.')
41 option_parser
.add_option('--coverage-dir', default
=None,
42 help=('Root of the directory in which to search for '
43 'coverage data (.ec) files.'))
44 option_parser
.add_option('--metadata-dir', default
=None,
45 help=('Root of the directory in which to search for '
46 'coverage metadata (.em) files.'))
47 option_parser
.add_option('--cleanup', action
='store_true',
48 help=('If set, removes coverage files generated at '
50 options
, _
= option_parser
.parse_args()
52 if not (options
.coverage_dir
and options
.metadata_dir
and options
.output
):
53 option_parser
.error('One or more mandatory options are missing.')
55 coverage_files
= _GetFilesWithExt(options
.coverage_dir
, 'ec')
56 metadata_files
= _GetFilesWithExt(options
.metadata_dir
, 'em')
57 print 'Found coverage files: %s' % str(coverage_files
)
58 print 'Found metadata files: %s' % str(metadata_files
)
61 for f
in metadata_files
:
62 sources_file
= os
.path
.splitext(f
)[0] + '_sources.txt'
63 with
open(sources_file
, 'r') as sf
:
64 sources
.extend(json
.load(sf
))
65 sources
= [os
.path
.join(constants
.DIR_SOURCE_ROOT
, s
) for s
in sources
]
66 print 'Sources: %s' % sources
69 for f
in coverage_files
+ metadata_files
:
70 input_args
.append('-in')
73 output_args
= ['-Dreport.html.out.file', options
.output
]
74 source_args
= ['-sp', ','.join(sources
)]
76 exit_code
= cmd_helper
.RunCmd(
78 os
.path
.join(constants
.ANDROID_SDK_ROOT
, 'tools', 'lib', 'emma.jar'),
79 'emma', 'report', '-r', 'html']
80 + input_args
+ output_args
+ source_args
)
83 for f
in coverage_files
:
89 if __name__
== '__main__':