make: TESTING cleanup, more thorough and fine-grained test rules
new: warningstest hunittest doctest easytest watch-RULE renamed: allsnapshotstest -> allghcstest [ci skip]
This commit is contained in:
		
							parent
							
								
									d897bacdfe
								
							
						
					
					
						commit
						d1b9d9dfe6
					
				
							
								
								
									
										194
									
								
								Makefile
									
									
									
									
									
								
							
							
						
						
									
										194
									
								
								Makefile
									
									
									
									
									
								
							| @ -284,15 +284,6 @@ build: \ | ||||
| 	$(call def-help,build, download dependencies and build hledger executables (with stack)) | ||||
| 	$(STACK) build | ||||
| 
 | ||||
| # XXX currently always fails on hledger nonportable include path warning https://github.com/commercialhaskell/stack/issues/3918
 | ||||
| build-check-warnings: \ | ||||
| 	$(call def-help,build-check-warnings, repeatedly build all hledger executables quickly ensuring no warnings) | ||||
| 	stack build --fast --force-dirty --ghc-options=-fforce-recomp --ghc-options=-Werror --file-watch | ||||
| 
 | ||||
| addons: \ | ||||
| 	$(call def-help,addons, compile the experimental add-on commands, required for functional tests ) | ||||
| 	bin/compile.sh | ||||
| 
 | ||||
| # check-setup: \
 | ||||
| # 	$(call def-help,check-setup,\
 | ||||
| # 	run some tests to validate the development environment\
 | ||||
| @ -563,100 +554,39 @@ tools/generatejournal: tools/generatejournal.hs \ | ||||
| 		$(call def-help,tools/generatejournal, build the generatejournal tool ) | ||||
| 	$(GHC) tools/generatejournal.hs | ||||
| 
 | ||||
| 
 | ||||
| ###############################################################################
 | ||||
| $(call def-help-subheading,TESTING:) | ||||
| 
 | ||||
| # packdeps: \
 | ||||
| # 	$(call def-help,packdeps,\
 | ||||
| # 	run packdeps on each package to check for disallowed newer dependencies\
 | ||||
| # 	)
 | ||||
| # 	for p in $(PACKAGES); do packdeps $$p/$$p.cabal; done
 | ||||
| 
 | ||||
| test: pkgtest functest \ | ||||
| 	$(call def-help,test, run default tests ) | ||||
| 	$(call def-help,test, run default tests: package tests plus functional tests) | ||||
| 
 | ||||
| travistest: $(call def-help,travistest, run tests similar to the most thorough travis tests) | ||||
| 	stack clean | ||||
| 	stack build --ghc-options=-Werror --test --haddock --no-haddock-deps hledger-lib | ||||
| 	stack build --ghc-options=-Werror --test --haddock --no-haddock-deps hledger | ||||
| 	stack build --ghc-options=-Werror --test --haddock --no-haddock-deps hledger-ui | ||||
| 	stack build --ghc-options=-Werror --test --haddock --no-haddock-deps hledger-web | ||||
| 	stack build --ghc-options=-Werror --test --haddock --no-haddock-deps hledger-api | ||||
| 	sh -e bin/compile.sh | ||||
| 	make functest | ||||
| # When running code tests, also fail if we notice GHC warnings.
 | ||||
| # We don't force a rebuild of all files, so might not catch all warnings;
 | ||||
| # use make warningstest-watch or make allghcstest for a thorough warnings check.
 | ||||
| # For quieter tests add --silent. It may hide troubleshooting info.
 | ||||
| STACKTEST=$(STACK) test --ghc-options="$(WARNINGS) -Werror"  | ||||
| 
 | ||||
| # test-ghc-%: # bin/hledgerdev.ghc-$* \
 | ||||
| # 	$(call def-help,test-ghc-%,\
 | ||||
| # 	run default tests with a specific GHC version\
 | ||||
| # 	some functional tests (add, include, read-csv..) have bin/hledgerdev hard coded - might need to symlink it\
 | ||||
| # 	)
 | ||||
| # 	@echo; echo testing hledger built with ghc-$*
 | ||||
| # 	@(echo unit tests: \
 | ||||
| # 	&& bin/hledgerdev.ghc-$* test \
 | ||||
| # 	&& echo functional tests: \
 | ||||
| # 	&& $(SHELLTEST) tests -w bin/hledgerdev.ghc-$* \
 | ||||
| # 	&& echo $@ PASSED) || echo $@ FAILED
 | ||||
| warningstest: $(call def-help,warningstest-watch, build all hledger executables quickly from scratch ensuring no warnings with default snapshot) | ||||
| 	stack build --fast --force-dirty --ghc-options=-fforce-recomp --ghc-options=-Werror | ||||
| 
 | ||||
| # test-ghcall: bin/hledgerdev.ghcall \
 | ||||
| # 	test-ghc-7.6.1 \
 | ||||
| # 	test-ghc-7.4.1 \
 | ||||
| # 	test-ghc-7.2.2 \
 | ||||
| # 	test-ghc-7.0.4 \
 | ||||
| # 	$(call def-help,test-ghcall,\
 | ||||
| # 	run default tests with all supported GHC versions\
 | ||||
| # 	)
 | ||||
| pkgtest: $(call def-help,pkgtest, run the test suites in each package ) | ||||
| 	@($(STACKTEST) && echo $@ PASSED) || (echo $@ FAILED; false) | ||||
| 
 | ||||
| # codetest: unittest functest \
 | ||||
| # 	$(call def-help,codetest,\
 | ||||
| # 	quick code tests, to be run frequently\
 | ||||
| # 	)
 | ||||
| hunittest: $(call def-help,hunittest, run just the hunit tests in hledger-lib ) | ||||
| 	@($(STACKTEST) hledger-lib:test:hunittests && echo $@ PASSED) || (echo $@ FAILED; false) | ||||
| 
 | ||||
| # committest: hlinttest unittest doctest functest haddocktest warningstest quickcabaltest \
 | ||||
| # 	$(call def-help,committest,\
 | ||||
| # 	more thorough pre-commit/pre-push tests\
 | ||||
| # 	)
 | ||||
| # doctests don't run with ghc 8.4 on mac, see package.yaml
 | ||||
| doctest: $(call def-help,doctest, run just the doctest tests in hledger-lib ) | ||||
| 	@($(STACKTEST) --stack-yaml stack-ghc8.2.yaml hledger-lib:test:doctests && echo $@ PASSED) || (echo $@ FAILED; false) | ||||
| 
 | ||||
| # # releasetest: Clean unittest functest fullcabaltest haddocktest #warningstest doctest \
 | ||||
| # # 	$(call def-help,releasetest,\
 | ||||
| # # 	pre-release tests\
 | ||||
| # # 	)
 | ||||
| easytest: $(call def-help,easytest, run just the easytest tests in hledger-lib ) | ||||
| 	@($(STACKTEST) hledger-lib:test:easytests && echo $@ PASSED) || (echo $@ FAILED; false) | ||||
| 
 | ||||
| # hlinttest hlint: \
 | ||||
| # 	$(call def-help,hlinttest (or hlint),\
 | ||||
| # 	generate a hlint report\
 | ||||
| # 	)
 | ||||
| # 	hlint --hint=hlint --report=hlint.html $(SOURCEFILES)
 | ||||
| 
 | ||||
| #@echo package tests:
 | ||||
| pkgtest: \ | ||||
| 	$(call def-help,pkgtest, run the test suites for each package ) | ||||
| 	@($(STACK) test --silent \
 | ||||
| 		&& echo $@ PASSED) || (echo $@ FAILED; false) | ||||
| 
 | ||||
| # NB ensure hledger executable is current (eg do pkgtest first)
 | ||||
| #@echo "built-in tests (hledger cli unit tests)":
 | ||||
| builtintest: \ | ||||
| 	$(call def-help,builtintest, run tests built in to the hledger executable (these are also run by pkg tests) ) | ||||
| 	@($(STACK) exec hledger test \
 | ||||
| 		&& echo $@ PASSED) || (echo $@ FAILED; false) | ||||
| 
 | ||||
| # builtintestghc: bin/hledgerdev \
 | ||||
| # 	$(call def-help,builtintest, run built-in unit tests with ghc build )
 | ||||
| # 	@(bin/hledgerdev test \
 | ||||
| # 		&& echo $@ PASSED) || echo $@ FAILED
 | ||||
| 
 | ||||
| # builtintestghc-%: bin/hledgerdev \
 | ||||
| # 	$(call def-help,builtintest-PAT, run built-in unit tests whose name contains PAT )
 | ||||
| # 	@(bin/hledgerdev test $* \
 | ||||
| # 		&& echo $@ PASSED) || echo $@ FAILED
 | ||||
| 
 | ||||
| # builtintestghc-interpreted: \
 | ||||
| # 	$(call def-help,builtintest-interpreted,\
 | ||||
| # 	run built-in unit tests without waiting for compilation\
 | ||||
| # 	)
 | ||||
| # 	@echo "builtin tests (interpreted)":
 | ||||
| # 	@(run$(GHC) $(MAIN) test \
 | ||||
| # 		&& echo $@ PASSED) || echo $@ FAILED
 | ||||
| # NB ensure an up to date hledger executable is built (eg make hunittest).
 | ||||
| # I think we don't do it automatically to minimise unnecessary rebuilding.
 | ||||
| builtintest: $(call def-help,builtintest, run hledgers built in test command) | ||||
| 	@($(STACK) exec hledger test && echo $@ PASSED) || (echo $@ FAILED; false) | ||||
| 
 | ||||
| # assumes hledger is built and uses whatever build is there, avoiding excessive rebuilding
 | ||||
| #functest: addons tests/addons/hledger-addon 
 | ||||
| @ -679,64 +609,43 @@ tests/addons/hledger-addon: \ | ||||
| 	mkdir tests/addons/hledger-addondir | ||||
| 	chmod +x tests/addons/hledger-* | ||||
| 
 | ||||
| # DOCTESTFILES=\
 | ||||
| # 	hledger/Hledger/Cli/Tests.hs
 | ||||
| # doctest: tools/doctest \
 | ||||
| # 	$(call def-help,doctest,\
 | ||||
| # 	run doc tests\
 | ||||
| # 	)
 | ||||
| # 	@for f in $(DOCTESTFILES); do \
 | ||||
| # 		(tools/doctest $$f && echo $@ PASSED) || echo $@ FAILED ; done
 | ||||
| # hlinttest hlint: $(call def-help,hlinttest (or hlint),generate a hlint report)
 | ||||
| # 	hlint --hint=hlint --report=hlint.html $(SOURCEFILES)
 | ||||
| 
 | ||||
| haddocktest: \ | ||||
| 	$(call def-help,haddocktest, run haddock and make sure it succeeds ) | ||||
| 	@(make --quiet haddock \
 | ||||
| 		&& echo $@ PASSED) || (echo $@ FAILED; false) | ||||
| haddocktest: $(call def-help,haddocktest, run haddock and make sure it succeeds ) | ||||
| 	@(make --quiet haddock && echo $@ PASSED) || (echo $@ FAILED; false) | ||||
| 
 | ||||
| # warningstest: \
 | ||||
| # 	$(call def-help,warningstest,\
 | ||||
| # 	make sure the normal build has no warnings XXX needs updating\
 | ||||
| # 	)
 | ||||
| # 	@(make -s clean \
 | ||||
| # 		&& make --no-print-directory -s hledgernowarnings \
 | ||||
| # 		&& echo $@ PASSED) || echo $@ FAILED
 | ||||
| cabalfiletest: $(call def-help,cabalfiletest, run cabal check to test cabal file syntax ) | ||||
| 	@(make --no-print-directory cabalcheck && echo $@ PASSED) || (echo $@ FAILED; false) | ||||
| 
 | ||||
| cabalfiletest: \ | ||||
| 	$(call def-help,cabalfiletest, run cabal check to test cabal file syntax ) | ||||
| 	@(make --no-print-directory cabalcheck \
 | ||||
| 		&& echo $@ PASSED) || (echo $@ FAILED; false) | ||||
| 
 | ||||
| # quickcabaltest: \
 | ||||
| # 	$(call def-help,quickcabaltest,\
 | ||||
| # 	make sure cabal is reasonably happy\
 | ||||
| # 	)
 | ||||
| # 	@(make --no-print-directory cabalclean cabalcheck cabalconfigure \
 | ||||
| # 		&& echo $@ PASSED) || echo $@ FAILED
 | ||||
| 
 | ||||
| # fullcabaltest: \
 | ||||
| # 	$(call def-help,fullcabaltest,\
 | ||||
| # 	make sure cabal is happy in all possible ways\
 | ||||
| # 	)
 | ||||
| # 	(for p in $(PACKAGES); do ( \
 | ||||
| # 		printf "\ntesting $$p package\n" \
 | ||||
| # 		&& cd $$p \
 | ||||
| # 		&& cabal clean \
 | ||||
| # 		&& cabal check \
 | ||||
| # 		&& $(CABALINSTALL) \
 | ||||
| # 		&& cabal sdist \
 | ||||
| # 		); done \
 | ||||
| # 		&& echo $@ PASSED) || echo $@ FAILED
 | ||||
| # #		&& cabal upload dist/$$p-$(VERSION).tar.gz --check -v3 \
 | ||||
| 
 | ||||
| allsnapshotstest: $(call def-help,allsnapshotstest, try a build/test/bench with each supported stackage snapshot/GHC version) \ | ||||
| allghcstest: $(call def-help,allghcstest, build/test/benchmark with all supported GHC versions/stackage snapshots and warning-free) \ | ||||
| 	test-stack-ghc7.10.yaml \
 | ||||
| 	test-stack-ghc8.0.yaml \
 | ||||
| 	test-stack-ghc8.2.yaml \
 | ||||
| 	test-stack.yaml \
 | ||||
| 
 | ||||
| test-stack%yaml: | ||||
| 	stack --stack-yaml stack$*yaml clean | ||||
| 	stack --stack-yaml stack$*yaml --install-ghc build --test --bench --haddock --no-haddock-deps | ||||
| 	$(STACK) --stack-yaml stack$*yaml clean | ||||
| 	$(STACK) --stack-yaml stack$*yaml build --ghc-options="$(WARNINGS) -Werror" --test --bench --haddock --no-haddock-deps | ||||
| 
 | ||||
| travistest: $(call def-help,travistest, run tests similar to our travis CI tests) | ||||
| 	stack clean | ||||
| 	stack build --ghc-options=-Werror --test --haddock --no-haddock-deps hledger-lib | ||||
| 	stack build --ghc-options=-Werror --test --haddock --no-haddock-deps hledger | ||||
| 	stack build --ghc-options=-Werror --test --haddock --no-haddock-deps hledger-ui | ||||
| 	stack build --ghc-options=-Werror --test --haddock --no-haddock-deps hledger-web | ||||
| 	stack build --ghc-options=-Werror --test --haddock --no-haddock-deps hledger-api | ||||
| 	make functest | ||||
| 
 | ||||
| # committest: hlinttest unittest doctest functest haddocktest warningstest quickcabaltest \
 | ||||
| # 	$(call def-help,committest,more thorough pre-commit/pre-push tests)
 | ||||
| 
 | ||||
| # releasetest: Clean unittest functest fullcabaltest haddocktest #warningstest doctest \
 | ||||
| # 	$(call def-help,releasetest,pre-release tests)
 | ||||
| 
 | ||||
| 
 | ||||
| ###############################################################################
 | ||||
| $(call def-help-subheading,BENCHMARKING:) | ||||
| 
 | ||||
| BENCHEXES=hledger | ||||
| # or, eg: BENCHEXES=ledger,hledger-1.4,hledger  
 | ||||
| @ -1552,6 +1461,9 @@ cloc: $(call def-help,cloc, count lines of source code ) | ||||
| ###############################################################################
 | ||||
| $(call def-help-subheading,MISCELLANEOUS:) | ||||
| 
 | ||||
| watch-%: $(call def-help,watchRULE, run make RULE repeatedly when any committed file changes eg: make watch-warningstest) | ||||
| 	 @git ls | entr -r make $* | ||||
| 
 | ||||
| Shake: Shake.hs $(call def-help,Shake, ensure the Shake script is compiled ) | ||||
| 	./Shake.hs | ||||
| 
 | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user