diff options
author | Loïc Hoguin <[email protected]> | 2015-12-24 14:15:35 +0100 |
---|---|---|
committer | Loïc Hoguin <[email protected]> | 2015-12-24 14:15:35 +0100 |
commit | 769427de5f28751134ef9684398b1ad780113515 (patch) | |
tree | 13f3b296feeaa835ae43937ed454f594ea3b3bfd /test | |
parent | 671bf97ca91f82bfccf199a1a25f17527f708a39 (diff) | |
download | erlang.mk-769427de5f28751134ef9684398b1ad780113515.tar.gz erlang.mk-769427de5f28751134ef9684398b1ad780113515.tar.bz2 erlang.mk-769427de5f28751134ef9684398b1ad780113515.zip |
Add EUnit tests and documentation
Also includes a fix for multi-application repositories.
Diffstat (limited to 'test')
-rw-r--r-- | test/Makefile | 47 | ||||
-rw-r--r-- | test/plugin_eunit.mk | 195 |
2 files changed, 197 insertions, 45 deletions
diff --git a/test/Makefile b/test/Makefile index d5a3a61..94dad9f 100644 --- a/test/Makefile +++ b/test/Makefile @@ -310,9 +310,9 @@ endef # The following tests are slowly being converted. # Do NOT use -j with legacy tests. -.PHONY: legacy clean-legacy ct eunit tests-cover docs +.PHONY: legacy clean-legacy ct tests-cover docs -legacy: clean-legacy ct eunit tests-cover docs pkgs +legacy: clean-legacy ct tests-cover docs pkgs clean-legacy: $t rm -rf app1 @@ -353,49 +353,6 @@ ct: app1 $t rm -rf app1/test $i "Test 'ct' passed." -eunit: app1 - $i "eunit: Testing the 'eunit' target." - $i "Running eunit test case inside module src/t.erl" - $t $(call create-module-t) - $t $(MAKE) -C app1 distclean $v - $t $(MAKE) -C app1 eunit $v - $i "Checking that the eunit test in module t." - $t echo t | cmp app1/test-eunit.log - - $t rm app1/test-eunit.log - $i "Running eunit tests in a separate directory." - $t mkdir -p app1/eunit - $t printf '%s\n' \ - '-module(t_tests).' \ - '-include_lib("eunit/include/eunit.hrl").' \ - 'succ_test() ->' \ - ' ?assertEqual(2, t:succ(1)),' \ - ' os:cmd("echo t_tests >> test-eunit.log").' \ - > app1/eunit/t_tests.erl - $t printf '%s\n' \ - '-module(x_tests).' \ - '-include_lib("eunit/include/eunit.hrl").' \ - 'succ_test() ->' \ - ' ?assertEqual(2, t:succ(1)),' \ - ' os:cmd("echo x_tests >> test-eunit.log").' \ - > app1/eunit/x_tests.erl - $t $(MAKE) -C app1 distclean TEST_DIR=eunit $v - $t $(MAKE) -C app1 eunit TEST_DIR=eunit $v - $i "Checking that '$(MAKE) eunit' didn't run the tests in t_tests twice, etc." - $t printf "%s\n" t t_tests x_tests | cmp app1/test-eunit.log - - $t rm app1/test-eunit.log - $i "Checking that '$(MAKE) eunit' returns non-zero for a failing test." - $t rm -f app1/eunit/* - $t printf "%s\n" \ - "-module(t_tests)." \ - '-include_lib("eunit/include/eunit.hrl").' \ - "succ_test() ->" \ - " ?assertEqual(42, t:succ(1))." \ - > app1/eunit/t_tests.erl - $t $(MAKE) -C app1 distclean TEST_DIR=eunit $v - $t ! $(MAKE) -C app1 eunit TEST_DIR=eunit $v - $t rm -rf app1/eunit app1/src/t.erl app1/test-eunit.log - $i "Test 'eunit' passed." - # TODO: do coverage for 'tests' instead of 'eunit ct' when triq is fixed tests-cover: app1 $i "tests-cover: Testing 'eunit' and 'ct' with COVER=1" diff --git a/test/plugin_eunit.mk b/test/plugin_eunit.mk new file mode 100644 index 0000000..26c0997 --- /dev/null +++ b/test/plugin_eunit.mk @@ -0,0 +1,195 @@ +# EUnit plugin. + +EUNIT_CASES = all apps-only check fun mod test-dir tests +EUNIT_TARGETS = $(addprefix eunit-,$(EUNIT_CASES)) +EUNIT_CLEAN_TARGETS = $(addprefix clean-,$(EUNIT_TARGETS)) + +.PHONY: eunit $(EUNIT_TARGETS) clean-eunit $(EUNIT_CLEAN_TARGETS) + +clean-eunit: $(EUNIT_CLEAN_TARGETS) + +$(EUNIT_CLEAN_TARGETS): + $t rm -rf $(APP_TO_CLEAN) + +eunit: $(EUNIT_TARGETS) + +eunit-all: build clean-eunit-all + + $i "Bootstrap a new OTP application named $(APP)" + $t mkdir $(APP)/ + $t cp ../erlang.mk $(APP)/ + $t $(MAKE) -C $(APP) -f erlang.mk bootstrap $v + + $i "Check that EUnit detects no tests" + $t $(MAKE) -C $(APP) eunit | grep -q "There were no tests to run." + + $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 "Build the project cleanly" + $t $(MAKE) -C $(APP) clean $v + $t $(MAKE) -C $(APP) $v + + $i "Check that no EUnit test cases were exported" + $t $(ERL) -pa $(APP)/ebin -eval 'code:load_file($(APP)), false = erlang:function_exported($(APP), ok_test, 0), halt()' + + $i "Check that EUnit runs tests" + $t $(MAKE) -C $(APP) eunit | grep -q "Test passed." + + $i "Add a failing test to the module" + $t printf "%s\n" \ + "-ifdef(TEST)." \ + "bad_test() -> throw(fail)." \ + "-endif." >> $(APP)/src/$(APP).erl + + $i "Check that EUnit errors out" + $t ! $(MAKE) -C $(APP) eunit $v + +eunit-apps-only: build clean-eunit-apps-only + + $i "Create a multi application repository with no root application" + $t mkdir $(APP)/ + $t cp ../erlang.mk $(APP)/ + $t echo "include erlang.mk" > $(APP)/Makefile + + $i "Create a new application named my_app" + $t $(MAKE) -C $(APP) new-app in=my_app $v + + $i "Create a new library named my_lib" + $t $(MAKE) -C $(APP) new-lib in=my_lib $v + + $i "Check that EUnit detects no tests" + $t $(MAKE) -C $(APP) eunit | grep -q "There were no tests to run." + + $i "Generate a module containing EUnit tests in my_app" + $t printf "%s\n" \ + "-module(my_app)." \ + "-ifdef(TEST)." \ + "-include_lib(\"eunit/include/eunit.hrl\")." \ + "ok_test() -> ok." \ + "-endif." > $(APP)/apps/my_app/src/my_app.erl + + $i "Generate a module containing EUnit tests in my_lib" + $t printf "%s\n" \ + "-module(my_lib)." \ + "-ifdef(TEST)." \ + "-include_lib(\"eunit/include/eunit.hrl\")." \ + "ok_test() -> ok." \ + "-endif." > $(APP)/apps/my_lib/src/my_lib.erl + + $i "Check that EUnit runs tests" + $t $(MAKE) -C $(APP) eunit | grep -q "Test passed." + +eunit-check: build clean-eunit-check + + $i "Bootstrap a new OTP application named $(APP)" + $t mkdir $(APP)/ + $t cp ../erlang.mk $(APP)/ + $t $(MAKE) -C $(APP) -f erlang.mk bootstrap $v + + $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 "Check that EUnit runs on 'make check'" + $t $(MAKE) -C $(APP) check | grep -q "Test passed." + +eunit-fun: build clean-eunit-fun + + $i "Bootstrap a new OTP application named $(APP)" + $t mkdir $(APP)/ + $t cp ../erlang.mk $(APP)/ + $t $(MAKE) -C $(APP) -f erlang.mk bootstrap $v + + $i "Generate a module containing EUnit tests" + $t printf "%s\n" \ + "-module($(APP))." \ + "-ifdef(TEST)." \ + "-include_lib(\"eunit/include/eunit.hrl\")." \ + "ok_test() -> ok." \ + "bad_test() -> throw(fail)." \ + "-endif." > $(APP)/src/$(APP).erl + + $i "Check that we can run EUnit on a specific test" + $t $(MAKE) -C $(APP) eunit t=$(APP):ok_test $v + +eunit-mod: build clean-eunit-mod + + $i "Bootstrap a new OTP application named $(APP)" + $t mkdir $(APP)/ + $t cp ../erlang.mk $(APP)/ + $t $(MAKE) -C $(APP) -f erlang.mk bootstrap $v + + $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 module containing failing EUnit tests" + $t printf "%s\n" \ + "-module($(APP)_fail)." \ + "-ifdef(TEST)." \ + "-include_lib(\"eunit/include/eunit.hrl\")." \ + "bad_test() -> throw(fail)." \ + "-endif." > $(APP)/src/$(APP)_fail.erl + + $i "Check that we can run EUnit on a specific module" + $t $(MAKE) -C $(APP) eunit t=$(APP) $v + +eunit-test-dir: build clean-eunit-test-dir + + $i "Bootstrap a new OTP application named $(APP)" + $t mkdir $(APP)/ + $t cp ../erlang.mk $(APP)/ + $t $(MAKE) -C $(APP) -f erlang.mk bootstrap $v + + $i "Generate a module containing EUnit tests" + $t printf "%s\n" \ + "-module($(APP))." \ + "-ifdef(TEST)." \ + "-include_lib(\"eunit/include/eunit.hrl\")." \ + "log_test() -> os:cmd(\"echo $(APP) >> eunit.log\")." \ + "-endif." > $(APP)/src/$(APP).erl + + $i "Generate a module containing EUnit tests in TEST_DIR" + $t mkdir $(APP)/test + $t printf "%s\n" \ + "-module($(APP)_tests)." \ + "-include_lib(\"eunit/include/eunit.hrl\")." \ + "log_test() -> os:cmd(\"echo $(APP)_tests >> eunit.log\")." > $(APP)/test/$(APP)_tests.erl + + $i "Check that EUnit runs both tests" + $t $(MAKE) -C $(APP) eunit | grep -q "2 tests passed." + + $i "Check that tests were both run only once" + $t printf "%s\n" $(APP) $(APP)_tests | cmp $(APP)/eunit.log - + +eunit-tests: build clean-eunit-tests + + $i "Bootstrap a new OTP application named $(APP)" + $t mkdir $(APP)/ + $t cp ../erlang.mk $(APP)/ + $t $(MAKE) -C $(APP) -f erlang.mk bootstrap $v + + $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 "Check that EUnit runs on 'make tests'" + $t $(MAKE) -C $(APP) tests | grep -q "Test passed." |