Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 #!/usr/bin/env python | 1 #!/usr/bin/env python |
| 2 # Copyright (c) 2012 The Chromium Authors. All rights reserved. | 2 # Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| 3 # Use of this source code is governed by a BSD-style license that can be | 3 # Use of this source code is governed by a BSD-style license that can be |
| 4 # found in the LICENSE file. | 4 # found in the LICENSE file. |
| 5 | 5 |
| 6 """Generate and process code coverage. | 6 """Generate and process code coverage. |
| 7 | 7 |
| 8 TODO(jrg): rename this from coverage_posix.py to coverage_all.py! | 8 TODO(jrg): rename this from coverage_posix.py to coverage_all.py! |
| 9 | 9 |
| 10 Written for and tested on Mac, Linux, and Windows. To use this script | 10 Written for and tested on Mac, Linux, and Windows. To use this script |
| (...skipping 744 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 755 print 'Clearing of coverage data NOT performed.' | 755 print 'Clearing of coverage data NOT performed.' |
| 756 return | 756 return |
| 757 print 'Clearing coverage data from previous runs.' | 757 print 'Clearing coverage data from previous runs.' |
| 758 if os.path.exists(self.coverage_info_file): | 758 if os.path.exists(self.coverage_info_file): |
| 759 os.remove(self.coverage_info_file) | 759 os.remove(self.coverage_info_file) |
| 760 if self.IsPosix(): | 760 if self.IsPosix(): |
| 761 subprocess.call([self.lcov, | 761 subprocess.call([self.lcov, |
| 762 '--directory', self.directory_parent, | 762 '--directory', self.directory_parent, |
| 763 '--zerocounters']) | 763 '--zerocounters']) |
| 764 shutil.rmtree(os.path.join(self.directory, 'coverage')) | 764 shutil.rmtree(os.path.join(self.directory, 'coverage')) |
| 765 if self.options.all_unittests: | |
|
John Grabowski
2012/10/30 21:29:05
consider an unconditional delete. It is unclear w
pshenoy
2012/10/30 22:11:13
coverage_posix.py is run twice now. First time run
John Grabowski
2012/10/30 22:17:11
ok
| |
| 766 if os.path.exists(os.path.join(self.directory, 'unittests_coverage')): | |
| 767 shutil.rmtree(os.path.join(self.directory, 'unittests_coverage')) | |
| 768 else: | |
| 769 if os.path.exists(os.path.join(self.directory, 'total_coverage')): | |
| 770 shutil.rmtree(os.path.join(self.directory, 'total_coverage')) | |
| 765 | 771 |
| 766 def BeforeRunOneTest(self, testname): | 772 def BeforeRunOneTest(self, testname): |
| 767 """Do things before running each test.""" | 773 """Do things before running each test.""" |
| 768 if not self.IsWindows(): | 774 if not self.IsWindows(): |
| 769 return | 775 return |
| 770 # Stop old counters if needed | 776 # Stop old counters if needed |
| 771 cmdlist = [self.perf, '-shutdown'] | 777 cmdlist = [self.perf, '-shutdown'] |
| 772 self.Run(cmdlist, ignore_error=True) | 778 self.Run(cmdlist, ignore_error=True) |
| 773 # Instrument binaries | 779 # Instrument binaries |
| 774 for fulltest in self.tests: | 780 for fulltest in self.tests: |
| (...skipping 209 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 984 os.path.join(start_dir, self.coverage_info_file)] | 990 os.path.join(start_dir, self.coverage_info_file)] |
| 985 logging.info('Assembly command: ' + ' '.join(command)) | 991 logging.info('Assembly command: ' + ' '.join(command)) |
| 986 retcode = subprocess.call(command) | 992 retcode = subprocess.call(command) |
| 987 if retcode: | 993 if retcode: |
| 988 logging.fatal('COVERAGE: %s failed; return code: %d' % | 994 logging.fatal('COVERAGE: %s failed; return code: %d' % |
| 989 (command[0], retcode)) | 995 (command[0], retcode)) |
| 990 if self.options.strict: | 996 if self.options.strict: |
| 991 sys.exit(retcode) | 997 sys.exit(retcode) |
| 992 if self.IsLinux(): | 998 if self.IsLinux(): |
| 993 os.chdir(start_dir) | 999 os.chdir(start_dir) |
| 1000 | |
| 1001 # Copy the unittests coverage information to a different folder. | |
| 1002 if self.options.all_unittests: | |
|
John Grabowski
2012/10/30 21:29:05
make the conditional set a var called filename (ei
pshenoy
2012/11/05 17:59:31
I think this is related to the other comment above
John Grabowski
2012/11/06 18:04:05
Sort of, but it would be nice to be pithy. For ex
pshenoy
2012/11/06 19:05:41
Done.
| |
| 1003 unittests_dir = os.path.join(self.directory, 'unittests_coverage') | |
| 1004 if not os.path.exists(unittests_dir): | |
| 1005 os.makedirs(unittests_dir) | |
| 1006 shutil.copyfile(self.coverage_info_file, os.path.join(unittests_dir, | |
| 1007 'coverage.info')) | |
| 1008 else: | |
| 1009 # Save the overall coverage information. | |
| 1010 overall_dir = os.path.join(self.directory, 'total_coverage') | |
| 1011 if not os.path.exists(overall_dir): | |
| 1012 os.makedirs(overall_dir) | |
| 1013 shutil.copyfile(self.coverage_info_file, os.path.join(overall_dir, | |
| 1014 'coverage.info')) | |
| 1015 | |
| 994 if not os.path.exists(self.coverage_info_file): | 1016 if not os.path.exists(self.coverage_info_file): |
| 995 logging.fatal('%s was not created. Coverage run failed.' % | 1017 logging.fatal('%s was not created. Coverage run failed.' % |
| 996 self.coverage_info_file) | 1018 self.coverage_info_file) |
| 997 sys.exit(1) | 1019 sys.exit(1) |
| 998 | 1020 |
| 999 def GenerateLcovWindows(self, testname=None): | 1021 def GenerateLcovWindows(self, testname=None): |
| 1000 """Convert VSTS format to lcov. Appends coverage data to sum file.""" | 1022 """Convert VSTS format to lcov. Appends coverage data to sum file.""" |
| 1001 lcov_file = self.vsts_output + '.lcov' | 1023 lcov_file = self.vsts_output + '.lcov' |
| 1002 if os.path.exists(lcov_file): | 1024 if os.path.exists(lcov_file): |
| 1003 os.remove(lcov_file) | 1025 os.remove(lcov_file) |
| (...skipping 138 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1142 if options.trim: | 1164 if options.trim: |
| 1143 coverage.TrimTests() | 1165 coverage.TrimTests() |
| 1144 coverage.RunTests() | 1166 coverage.RunTests() |
| 1145 if options.genhtml: | 1167 if options.genhtml: |
| 1146 coverage.GenerateHtml() | 1168 coverage.GenerateHtml() |
| 1147 return 0 | 1169 return 0 |
| 1148 | 1170 |
| 1149 | 1171 |
| 1150 if __name__ == '__main__': | 1172 if __name__ == '__main__': |
| 1151 sys.exit(main()) | 1173 sys.exit(main()) |
| OLD | NEW |