From 7f29ad2b866171f70d289c71bf3d31f93925187a Mon Sep 17 00:00:00 2001 From: enskylin Date: Tue, 17 Mar 2020 17:30:34 +0800 Subject: [PATCH] Fix: incorrect path for header can still generate Fixes #271 --- gcovr/html_generator.py | 17 +- gcovr/tests/subfolder-includes/Makefile | 27 ++ gcovr/tests/subfolder-includes/README | 1 + gcovr/tests/subfolder-includes/include/lib.h | 4 + .../reference/coverage.html | 375 ++++++++++++++++++ .../coverage.subfolder_subfolder_lib.cpp.html | 349 ++++++++++++++++ .../coverage.subfolder_subfolder_lib.h.html | 314 +++++++++++++++ ...coverage.subfolder_subfolder_main.cpp.html | 363 +++++++++++++++++ .../subfolder-includes/reference/coverage.txt | 12 + .../subfolder-includes/reference/coverage.xml | 3 + .../reference/sonarqube.xml | 2 + .../subfolder-includes/subfolder/Makefile | 12 + .../subfolder/subfolder/lib.cpp | 5 + .../subfolder/subfolder/main.cpp | 7 + 14 files changed, 1485 insertions(+), 6 deletions(-) create mode 100644 gcovr/tests/subfolder-includes/Makefile create mode 100644 gcovr/tests/subfolder-includes/README create mode 100644 gcovr/tests/subfolder-includes/include/lib.h create mode 100644 gcovr/tests/subfolder-includes/reference/coverage.html create mode 100644 gcovr/tests/subfolder-includes/reference/coverage.subfolder_subfolder_lib.cpp.html create mode 100644 gcovr/tests/subfolder-includes/reference/coverage.subfolder_subfolder_lib.h.html create mode 100644 gcovr/tests/subfolder-includes/reference/coverage.subfolder_subfolder_main.cpp.html create mode 100644 gcovr/tests/subfolder-includes/reference/coverage.txt create mode 100644 gcovr/tests/subfolder-includes/reference/coverage.xml create mode 100644 gcovr/tests/subfolder-includes/reference/sonarqube.xml create mode 100644 gcovr/tests/subfolder-includes/subfolder/Makefile create mode 100644 gcovr/tests/subfolder-includes/subfolder/subfolder/lib.cpp create mode 100644 gcovr/tests/subfolder-includes/subfolder/subfolder/main.cpp diff --git a/gcovr/html_generator.py b/gcovr/html_generator.py index a94c7bd1d..e7db9ca9b 100644 --- a/gcovr/html_generator.py +++ b/gcovr/html_generator.py @@ -16,6 +16,7 @@ from .version import __version__ from .utils import commonpath, sort_coverage from .coverage import FileCoverage +from .utils import Logger class lazy(object): @@ -87,6 +88,8 @@ def coverage_to_color(coverage, medium_threshold, high_threshold): # Produce an HTML report # def print_html_report(covdata, output_file, options): + logger = Logger(options.verbose) + medium_threshold = options.html_medium_threshold high_threshold = options.html_high_threshold details = options.html_details @@ -245,12 +248,14 @@ def print_html_report(covdata, output_file, options): data['ROWS'] = [] currdir = os.getcwd() os.chdir(options.root_dir) - with io.open(data['FILENAME'], 'r', encoding=options.source_encoding, - errors='replace') as INPUT: - for ctr, line in enumerate(INPUT, 1): - data['ROWS'].append( - source_row(ctr, line.rstrip(), cdata.lines.get(ctr)) - ) + try: + with io.open(data['FILENAME'], 'r', encoding=options.source_encoding, errors='replace') as INPUT: + for ctr, line in enumerate(INPUT, 1): + data['ROWS'].append( + source_row(ctr, line.rstrip(), cdata.lines.get(ctr)) + ) + except IOError as e: + logger.warn('File Generation failed: {filename}, reason={reason}', filename=data['FILENAME'], reason=repr(e)) os.chdir(currdir) htmlString = templates().get_template('source_page.html').render(**data) diff --git a/gcovr/tests/subfolder-includes/Makefile b/gcovr/tests/subfolder-includes/Makefile new file mode 100644 index 000000000..4a75a9a17 --- /dev/null +++ b/gcovr/tests/subfolder-includes/Makefile @@ -0,0 +1,27 @@ +all: + make -C subfolder + +run: txt xml html sonarqube json + +txt: + ./subfolder/subfolder/testcase + $(GCOVR) -d -o coverage.txt + +xml: + ./subfolder/subfolder/testcase + $(GCOVR) -d -x -o coverage.xml + +html: + ./subfolder/subfolder/testcase + $(GCOVR) -d --html-details -o coverage.html + +sonarqube: + ./subfolder/subfolder/testcase + $(GCOVR) -d --sonarqube sonarqube.xml + +json: + # pass + +clean: + make -C subfolder clean + rm -f coverage.txt coverage.xml coverage*.html sonarqube.xml diff --git a/gcovr/tests/subfolder-includes/README b/gcovr/tests/subfolder-includes/README new file mode 100644 index 000000000..e6dc5c2fe --- /dev/null +++ b/gcovr/tests/subfolder-includes/README @@ -0,0 +1 @@ +A subfolder includes pattern that causes include header file has a incorrect relative path in .gcov file. \ No newline at end of file diff --git a/gcovr/tests/subfolder-includes/include/lib.h b/gcovr/tests/subfolder-includes/include/lib.h new file mode 100644 index 000000000..94a4c672f --- /dev/null +++ b/gcovr/tests/subfolder-includes/include/lib.h @@ -0,0 +1,4 @@ +int foo(); +inline int bar() { + return 1; +} \ No newline at end of file diff --git a/gcovr/tests/subfolder-includes/reference/coverage.html b/gcovr/tests/subfolder-includes/reference/coverage.html new file mode 100644 index 000000000..5022af540 --- /dev/null +++ b/gcovr/tests/subfolder-includes/reference/coverage.html @@ -0,0 +1,375 @@ + + + + + + Head + + + + + + + + + + + + + + +
GCC Code Coverage Report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Directory:subfolder/subfolder/ExecTotalCoverage
Date:2020-03-17 17:20:05Lines:88100.0 %
Legend: + low: < 75.0 % + medium: >= 75.0 % + high: >= 90.0 % + Branches:2450.0 %
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

FileLinesBranches
lib.cpp +
+
+
+
100.0 %2 / 2- %0 / 0
lib.h +
+
+
+
100.0 %2 / 2- %0 / 0
main.cpp +
+
+
+
100.0 %4 / 450.0 %2 / 4

+
+ + + + +
+
+ + + + + diff --git a/gcovr/tests/subfolder-includes/reference/coverage.subfolder_subfolder_lib.cpp.html b/gcovr/tests/subfolder-includes/reference/coverage.subfolder_subfolder_lib.cpp.html new file mode 100644 index 000000000..1662f9f0e --- /dev/null +++ b/gcovr/tests/subfolder-includes/reference/coverage.subfolder_subfolder_lib.cpp.html @@ -0,0 +1,349 @@ + + + + + + Head + + + + + + + + + + + + + + +
GCC Code Coverage Report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Directory:subfolder/subfolder/ExecTotalCoverage
File:subfolder/subfolder/lib.cppLines:22100.0 %
Date:2020-03-17 17:20:05Branches:00- %
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
LineBranchExecSource
1
#include "lib.h"
2
3
1
int foo() {
4
1
	return bar();
5
}
+
+ + + + +
+
+ + + + + diff --git a/gcovr/tests/subfolder-includes/reference/coverage.subfolder_subfolder_lib.h.html b/gcovr/tests/subfolder-includes/reference/coverage.subfolder_subfolder_lib.h.html new file mode 100644 index 000000000..d65f791db --- /dev/null +++ b/gcovr/tests/subfolder-includes/reference/coverage.subfolder_subfolder_lib.h.html @@ -0,0 +1,314 @@ + + + + + + Head + + + + + + + + + + + + + + +
GCC Code Coverage Report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Directory:subfolder/subfolder/ExecTotalCoverage
File:subfolder/subfolder/lib.hLines:22100.0 %
Date:2020-03-17 17:20:05Branches:00- %
+
+ +
+ + + + + + + + + +
LineBranchExecSource
+
+ + + + +
+
+ + + + + diff --git a/gcovr/tests/subfolder-includes/reference/coverage.subfolder_subfolder_main.cpp.html b/gcovr/tests/subfolder-includes/reference/coverage.subfolder_subfolder_main.cpp.html new file mode 100644 index 000000000..48f4ae22c --- /dev/null +++ b/gcovr/tests/subfolder-includes/reference/coverage.subfolder_subfolder_main.cpp.html @@ -0,0 +1,363 @@ + + + + + + Head + + + + + + + + + + + + + + +
GCC Code Coverage Report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Directory:subfolder/subfolder/ExecTotalCoverage
File:subfolder/subfolder/main.cppLines:44100.0 %
Date:2020-03-17 17:20:05Branches:2450.0 %
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
LineBranchExecSource
1
#include <iostream>
2
#include "lib.h"
3
4
1
int main(int argc, char* argv[]) {
5
1
  std::cout << foo();
6
1
  return 0;
7

3
}
+
+ + + + +
+
+ + + + + diff --git a/gcovr/tests/subfolder-includes/reference/coverage.txt b/gcovr/tests/subfolder-includes/reference/coverage.txt new file mode 100644 index 000000000..c6efb9f40 --- /dev/null +++ b/gcovr/tests/subfolder-includes/reference/coverage.txt @@ -0,0 +1,12 @@ +------------------------------------------------------------------------------ + GCC Code Coverage Report +Directory: . +------------------------------------------------------------------------------ +File Lines Exec Cover Missing +------------------------------------------------------------------------------ +subfolder/subfolder/lib.cpp 2 2 100% +subfolder/subfolder/lib.h 2 2 100% +subfolder/subfolder/main.cpp 4 4 100% +------------------------------------------------------------------------------ +TOTAL 8 8 100% +------------------------------------------------------------------------------ diff --git a/gcovr/tests/subfolder-includes/reference/coverage.xml b/gcovr/tests/subfolder-includes/reference/coverage.xml new file mode 100644 index 000000000..4a6a95bdf --- /dev/null +++ b/gcovr/tests/subfolder-includes/reference/coverage.xml @@ -0,0 +1,3 @@ + + +. \ No newline at end of file diff --git a/gcovr/tests/subfolder-includes/reference/sonarqube.xml b/gcovr/tests/subfolder-includes/reference/sonarqube.xml new file mode 100644 index 000000000..e46a75b0d --- /dev/null +++ b/gcovr/tests/subfolder-includes/reference/sonarqube.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/gcovr/tests/subfolder-includes/subfolder/Makefile b/gcovr/tests/subfolder-includes/subfolder/Makefile new file mode 100644 index 000000000..83dc0b40b --- /dev/null +++ b/gcovr/tests/subfolder-includes/subfolder/Makefile @@ -0,0 +1,12 @@ +all: subfolder/testcase + +subfolder/testcase:subfolder/main.o subfolder/lib.o + $(CXX) -fprofile-arcs -ftest-coverage -o $@ $^ + +.cpp.o: + $(CXX) -fprofile-arcs -ftest-coverage -fPIC -c -I../include -o $@ $^ + +clean: + rm -f subfolder/testcase + rm -f subfolder/*.gc* + rm -f subfolder/*.o \ No newline at end of file diff --git a/gcovr/tests/subfolder-includes/subfolder/subfolder/lib.cpp b/gcovr/tests/subfolder-includes/subfolder/subfolder/lib.cpp new file mode 100644 index 000000000..a84fa9865 --- /dev/null +++ b/gcovr/tests/subfolder-includes/subfolder/subfolder/lib.cpp @@ -0,0 +1,5 @@ +#include "lib.h" + +int foo() { + return bar(); +} diff --git a/gcovr/tests/subfolder-includes/subfolder/subfolder/main.cpp b/gcovr/tests/subfolder-includes/subfolder/subfolder/main.cpp new file mode 100644 index 000000000..e2b8622be --- /dev/null +++ b/gcovr/tests/subfolder-includes/subfolder/subfolder/main.cpp @@ -0,0 +1,7 @@ +#include +#include "lib.h" + +int main(int argc, char* argv[]) { + std::cout << foo(); + return 0; +}