aboutsummaryrefslogtreecommitdiffstats
path: root/plugins/proper.mk
diff options
context:
space:
mode:
authorLoïc Hoguin <[email protected]>2017-07-10 12:07:12 +0200
committerLoïc Hoguin <[email protected]>2017-07-10 12:11:51 +0200
commitff271594f58dc7425483fe3ccc649defc552a04c (patch)
tree745f11680e61bd1c74920923fc6d7e2b36c225eb /plugins/proper.mk
parent70b86284812e46c4a3a607aacaec67af2453fff0 (diff)
downloaderlang.mk-ff271594f58dc7425483fe3ccc649defc552a04c.tar.gz
erlang.mk-ff271594f58dc7425483fe3ccc649defc552a04c.tar.bz2
erlang.mk-ff271594f58dc7425483fe3ccc649defc552a04c.zip
Add initial plugin for proper
Should act the same way as the Triq plugin, making switching mostly painless, excluding the differences between the two libraries.
Diffstat (limited to 'plugins/proper.mk')
-rw-r--r--plugins/proper.mk53
1 files changed, 53 insertions, 0 deletions
diff --git a/plugins/proper.mk b/plugins/proper.mk
new file mode 100644
index 0000000..d6ae48e
--- /dev/null
+++ b/plugins/proper.mk
@@ -0,0 +1,53 @@
+# Copyright (c) 2015-2017, Loïc Hoguin <[email protected]>
+# This file is part of erlang.mk and subject to the terms of the ISC License.
+
+ifeq ($(filter proper,$(DEPS) $(TEST_DEPS)),proper)
+.PHONY: proper
+
+# Targets.
+
+tests:: proper
+
+define proper_check.erl
+ code:add_pathsa(["$(call core_native_path,$(CURDIR)/ebin)", "$(call core_native_path,$(DEPS_DIR)/*/ebin)"]),
+ Module = fun(M) ->
+ [true] =:= lists:usort([
+ case atom_to_list(F) of
+ "prop_" ++ _ ->
+ io:format("Testing ~p:~p/0~n", [M, F]),
+ proper:quickcheck(M:F());
+ _ ->
+ true
+ end
+ || {F, 0} <- M:module_info(exports)])
+ end,
+ try
+ case $(1) of
+ all -> [true] =:= lists:usort([Module(M) || M <- [$(call comma_list,$(3))]]);
+ module -> Module($(2));
+ function -> proper:quickcheck($(2))
+ end
+ of
+ true -> halt(0);
+ _ -> halt(1)
+ catch error:undef ->
+ io:format("Undefined property or module?~n~p~n", [erlang:get_stacktrace()]),
+ halt(0)
+ end.
+endef
+
+ifdef t
+ifeq (,$(findstring :,$(t)))
+proper: test-build
+ $(verbose) $(call erlang,$(call proper_check.erl,module,$(t)))
+else
+proper: test-build
+ $(verbose) echo Testing $(t)/0
+ $(verbose) $(call erlang,$(call proper_check.erl,function,$(t)()))
+endif
+else
+proper: test-build
+ $(eval MODULES := $(patsubst %,'%',$(sort $(notdir $(basename $(wildcard ebin/*.beam))))))
+ $(gen_verbose) $(call erlang,$(call proper_check.erl,all,undefined,$(MODULES)))
+endif
+endif