aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authornevar <[email protected]>2017-09-07 21:52:30 +0700
committerLoïc Hoguin <[email protected]>2017-09-13 18:45:15 +0200
commit6a764de5ff077a566b7865d0a7a8f3c4c9b0c042 (patch)
treedc040ded9a96d0bb5ee969892f9a063da15d1464
parentd9a9158ccbb94dbb66772a7ef437f30d3e5f652c (diff)
downloaderlang.mk-6a764de5ff077a566b7865d0a7a8f3c4c9b0c042.tar.gz
erlang.mk-6a764de5ff077a566b7865d0a7a8f3c4c9b0c042.tar.bz2
erlang.mk-6a764de5ff077a566b7865d0a7a8f3c4c9b0c042.zip
COVER_DATA_DIR for *.coverdata
Also make COVER_REPORT_DIR not override user value (if set before include erlang.mk). Use incl_app in CT cover spec.
-rw-r--r--plugins/cover.mk30
-rw-r--r--plugins/eunit.mk8
-rw-r--r--test/plugin_cover.mk52
3 files changed, 72 insertions, 18 deletions
diff --git a/plugins/cover.mk b/plugins/cover.mk
index 63fd2d7..b57458a 100644
--- a/plugins/cover.mk
+++ b/plugins/cover.mk
@@ -2,23 +2,20 @@
# Copyright (c) 2015, Viktor Söderqvist <[email protected]>
# This file is part of erlang.mk and subject to the terms of the ISC License.
-COVER_REPORT_DIR = cover
+COVER_REPORT_DIR ?= cover
+COVER_DATA_DIR ?= $(CURDIR)
# Hook in coverage to ct
ifdef COVER
ifdef CT_RUN
ifneq ($(wildcard $(TEST_DIR)),)
-# All modules in 'ebin'
-COVER_MODS = $(notdir $(basename $(call core_ls,ebin/*.beam)))
-
test-build:: $(TEST_DIR)/ct.cover.spec
-$(TEST_DIR)/ct.cover.spec:
- $(verbose) echo Cover mods: $(COVER_MODS)
+$(TEST_DIR)/ct.cover.spec: cover-data-dir
$(gen_verbose) printf "%s\n" \
- '{incl_mods,[$(subst $(space),$(comma),$(COVER_MODS))]}.' \
- '{export,"$(CURDIR)/ct.coverdata"}.' > $@
+ "{incl_app, '$(PROJECT)', details}." \
+ '{export,"$(abspath $(COVER_DATA_DIR))/ct.coverdata"}.' > $@
CT_RUN += -cover $(TEST_DIR)/ct.cover.spec
endif
@@ -32,6 +29,13 @@ ifneq ($(COVER_REPORT_DIR),)
tests::
$(verbose) $(MAKE) --no-print-directory cover-report
endif
+
+cover-data-dir: | $(COVER_DATA_DIR)
+
+$(COVER_DATA_DIR):
+ $(verbose) mkdir -p $(COVER_DATA_DIR)
+else
+cover-data-dir:
endif
clean:: coverdata-clean
@@ -54,19 +58,19 @@ help::
# Plugin specific targets
-COVERDATA = $(filter-out all.coverdata,$(wildcard *.coverdata))
+COVERDATA = $(filter-out $(COVER_DATA_DIR)/all.coverdata,$(wildcard $(COVER_DATA_DIR)/*.coverdata))
.PHONY: coverdata-clean
coverdata-clean:
- $(gen_verbose) rm -f *.coverdata $(TEST_DIR)/ct.cover.spec
+ $(gen_verbose) rm -f $(COVER_DATA_DIR)/*.coverdata $(TEST_DIR)/ct.cover.spec
# Merge all coverdata files into one.
define cover_export.erl
$(foreach f,$(COVERDATA),cover:import("$(f)") == ok orelse halt(1),)
- cover:export("$@"), halt(0).
+ cover:export("$(COVER_DATA_DIR)/$@"), halt(0).
endef
-all.coverdata: $(COVERDATA)
+all.coverdata: $(COVERDATA) cover-data-dir
$(gen_verbose) $(call erlang,$(cover_export.erl))
# These are only defined if COVER_REPORT_DIR is non-empty. Set COVER_REPORT_DIR to
@@ -76,7 +80,7 @@ ifneq ($(COVER_REPORT_DIR),)
.PHONY: cover-report-clean cover-report
cover-report-clean:
- $(gen_verbose) rm -rf $(COVER_REPORT_DIR)
+ $(gen_verbose) rm -rf $(COVER_REPORT_DIR) $(COVER_DATA_DIR)
ifeq ($(COVERDATA),)
cover-report:
diff --git a/plugins/eunit.mk b/plugins/eunit.mk
index 9739e0e..af614f6 100644
--- a/plugins/eunit.mk
+++ b/plugins/eunit.mk
@@ -36,7 +36,7 @@ define eunit.erl
case "$(COVER)" of
"" -> ok;
_ ->
- cover:export("eunit.coverdata")
+ cover:export("$(COVER_DATA_DIR)/eunit.coverdata")
end,
halt()
endef
@@ -45,10 +45,10 @@ EUNIT_ERL_OPTS += -pa $(TEST_DIR) $(DEPS_DIR)/*/ebin $(APPS_DIR)/*/ebin $(CURDIR
ifdef t
ifeq (,$(findstring :,$(t)))
-eunit: test-build
+eunit: test-build cover-data-dir
$(gen_verbose) $(call erlang,$(call eunit.erl,['$(t)']),$(EUNIT_ERL_OPTS))
else
-eunit: test-build
+eunit: test-build cover-data-dir
$(gen_verbose) $(call erlang,$(call eunit.erl,fun $(t)/0),$(EUNIT_ERL_OPTS))
endif
else
@@ -58,7 +58,7 @@ EUNIT_TEST_MODS = $(notdir $(basename $(call core_find,$(TEST_DIR)/,*.erl)))
EUNIT_MODS = $(foreach mod,$(EUNIT_EBIN_MODS) $(filter-out \
$(patsubst %,%_tests,$(EUNIT_EBIN_MODS)),$(EUNIT_TEST_MODS)),'$(mod)')
-eunit: test-build $(if $(IS_APP),,apps-eunit)
+eunit: test-build $(if $(IS_APP),,apps-eunit) cover-data-dir
$(gen_verbose) $(call erlang,$(call eunit.erl,[$(call comma_list,$(EUNIT_MODS))]),$(EUNIT_ERL_OPTS))
ifneq ($(ALL_APPS_DIRS),)
diff --git a/test/plugin_cover.mk b/test/plugin_cover.mk
index 11fec5c..905e6d2 100644
--- a/test/plugin_cover.mk
+++ b/test/plugin_cover.mk
@@ -1,6 +1,6 @@
# Common Test plugin.
-COVER_CASES = ct eunit report-and-merge
+COVER_CASES = ct custom-dir eunit report-and-merge
COVER_TARGETS = $(addprefix cover-,$(COVER_CASES))
.PHONY: cover $(COVER_TARGETS)
@@ -34,6 +34,56 @@ cover-ct: build clean
$t test ! -e $(APP)/ct.coverdata
$t test ! -e $(APP)/test/ct.cover.spec
+cover-custom-dir: build clean
+
+ $i "Bootstrap a new OTP application named $(APP)"
+ $t mkdir $(APP)/
+ $t cp ../erlang.mk $(APP)/
+ $t $(MAKE) -C $(APP) -f erlang.mk bootstrap-lib $v
+
+ $i "Set COVER_DATA_DIR in the Makefile"
+ $t perl -ni.bak -e 'print;if ($$.==1) {print "COVER_DATA_DIR = custom_dir\n"}' $(APP)/Makefile
+
+ $i "Generate a module containing EUnit tests"
+ $t printf "%s\n" \
+ "-module($(APP))." \
+ "-ifdef(TEST)." \
+ "-include_lib(\"eunit/include/eunit.hrl\")." \
+ "ok_test() -> ok." \
+ "-endif." > $(APP)/src/$(APP).erl
+
+ $i "Generate a Common Test suite"
+ $t mkdir $(APP)/test
+ $t printf "%s\n" \
+ "-module($(APP)_SUITE)." \
+ "-export([all/0, ok/1])." \
+ "all() -> [ok]." \
+ "ok(_) -> ok." > $(APP)/test/$(APP)_SUITE.erl
+
+ $i "Run Common Test with code coverage enabled"
+ $t $(MAKE) -C $(APP) ct COVER=1 $v
+
+ $i "Run EUnit with code coverage enabled"
+ $t $(MAKE) -C $(APP) eunit COVER=1 $v
+
+ $i "Check that the generated file exists"
+ $t test -f $(APP)/custom_dir/ct.coverdata
+ $t test -f $(APP)/custom_dir/eunit.coverdata
+
+ $i "Merge coverdata files into all.coverdata"
+ $t $(MAKE) -C $(APP) all.coverdata $v
+ $t test -f $(APP)/custom_dir/all.coverdata
+
+ $i "Check that the generated file is removed on clean"
+ $t $(MAKE) -C $(APP) clean $v
+ $t test ! -e $(APP)/custom_dir/eunit.coverdata
+ $t test ! -e $(APP)/custom_dir/ct.coverdata
+ $t test ! -e $(APP)/custom_dir/all.coverdata
+
+ $i "Check that the custom dir is removed on distclean"
+ $t $(MAKE) -C $(APP) distclean $v
+ $t test ! -e $(APP)/custom_dir/
+
cover-eunit: build clean
$i "Bootstrap a new OTP application named $(APP)"