From c9de6bf56f7873e2a1e1367522d524820c61646c Mon Sep 17 00:00:00 2001
From: Armin Luntzer <armin.luntzer@univie.ac.at>
Date: Tue, 6 Dec 2016 14:28:16 +0100
Subject: [PATCH] unit tests: add coverage targets

---
 tools/testing/unittest/Makefile | 22 ++++++++++++++++------
 tools/testing/unittest/lib.mk   | 21 ++++++++++++++++-----
 2 files changed, 32 insertions(+), 11 deletions(-)

diff --git a/tools/testing/unittest/Makefile b/tools/testing/unittest/Makefile
index c923ae5..e55df8e 100644
--- a/tools/testing/unittest/Makefile
+++ b/tools/testing/unittest/Makefile
@@ -6,14 +6,13 @@ TARGETS += sysctl
 # Makefile to avoid test build failures when test
 # Makefile doesn't have explicit build rules.
 
-CFLAGS += -fprofile-arcs -ftest-coverage
+
+export CFLAGS = -fprofile-arcs -ftest-coverage
+export LDFLAGS = -lgcov --coverage
 
 ifeq (1,$(MAKELEVEL))
-override LDFLAGS =
 override MAKEFLAGS =
 else
-export CFLAGS
-export LDFLAGS = -lgcov --coverage
 endif
 
 
@@ -26,9 +25,20 @@ run_tests: all
 	for TARGET in $(TARGETS); do \
 		make -C $$TARGET run_tests; \
 	done;
-clean:
+
+coverage_tests: all
+	for TARGET in $(TARGETS); do \
+		make -C $$TARGET coverage_tests; \
+	done;
+
+clean_coverage:
+	for TARGET in $(TARGETS); do \
+		make -C $$TARGET clean_coverage; \
+	done;
+
+clean: clean_coverage
 	for TARGET in $(TARGETS); do \
 		make -C $$TARGET clean; \
 	done;
 
-.PHONY: install
+.PHONY: 
diff --git a/tools/testing/unittest/lib.mk b/tools/testing/unittest/lib.mk
index 479fc11..f0fffdb 100644
--- a/tools/testing/unittest/lib.mk
+++ b/tools/testing/unittest/lib.mk
@@ -16,13 +16,24 @@ endef
 run_tests: all
 	$(RUN_TESTS)
 
-define EMIT_TESTS
+define COVERAGE_TESTS
 	@for TEST in $(TEST_PROGS); do \
-		echo "(./$$TEST && echo \"selftests: $$TEST [PASS]\") || echo \"selftests: $$TEST [FAIL]\""; \
+		lcov --rc lcov_branch_coverage=1 --capture --directory ./ --output-file coverage.info; \
+		genhtml --branch-coverage coverage.info --output-directory out; \
 	done;
 endef
 
-emit_tests:
-	$(EMIT_TESTS)
+coverage_tests: run_tests
+	$(COVERAGE_TESTS)
 
-.PHONY: run_tests all clean emit_tests
+
+define CLEAN_COVERAGE
+	@for TEST in $(TEST_PROGS); do \
+		$(RM) -r $$TEST $$TEST.gcno $$TEST.gcda coverage.info out/; \
+	done;
+endef
+
+clean_coverage:
+	$(CLEAN_COVERAGE)
+
+.PHONY: run_tests all clean coverage_tests clean_coverage
-- 
GitLab