Sat Jun 27 10:51:12 2020 UTC ()
regress/infra-unittests: add very basic tests for mk/haskell.mk


(rillig)
diff -r0 -r1.1 pkgsrc/regress/infra-unittests/haskell.sh

File Added: pkgsrc/regress/infra-unittests/Attic/haskell.sh
#! /bin/sh
# $NetBSD: haskell.sh,v 1.1 2020/06/27 10:51:12 rillig Exp $
#
# Tests for mk/haskell.mk.
#

set -eu

. './test.subr'

link_from_pkgsrc() {
	for f in "$@"; do
		mkdir -p "$mocked_pkgsrcdir/$(dirname "$f")"
		rm -f "$mocked_pkgsrcdir/$f"
		ln -s "$pkgsrcdir/$f" "$mocked_pkgsrcdir/$f"
	done
}

test_case_set_up() {

	destdir="$PWD/destdir"
	prefix="$PWD/prefix"
	pkgdir="$mocked_pkgsrcdir/category/package"

	mock_ghc=$(mock_cmd ghc \
		--when-args '-V' --then-output 'The Glorious Glasgow Haskell Compilation System, version 8.8.1'
	)

	mkdir -p "$prefix/bin"
	mv "$mock_ghc" "$prefix/bin/"

	rm -rf "$mocked_pkgsrcdir"
	mkdir -p "$pkgdir"
	cd "$mocked_pkgsrcdir"

	create_file 'mk/bsd.fast.prefs.mk' <<-EOF
		OPSYS=			Opsys
		HASKELL_COMPILER=	ghc
		SHLIB_TYPE=		ELF

		AWK=			awk
		CAT=			cat
		CUT=			cut
		ECHO=			echo
		FIND=			find
		GREP=			grep
		MKDIR=			mkdir -p
		PKGSRC_SETENV=		env
		SORT=			sort
		TRUE=			true
	EOF
	create_file 'lang/ghc88/buildlink3.mk' <<-EOF
		# Nothing essential
	EOF
	create_file 'main.mk' <<EOF
.include "mk/bsd.fast.prefs.mk"

PKGDIR=			\${.:L:tA}
WRKDIR=			$PWD/work
PLIST=			\${WRKDIR}/.PLIST
PREFIX=			$prefix
DESTDIR=		$destdir
PKGSRCDIR=		$pkgsrcdir
RUN=			@set -eu;
ALL_ENV=		ALL_ENV_VAR=value

.include "mk/haskell.mk"
.include "mk/plist/bsd.plist.mk"
.include "mk/misc/show.mk"

show-plist-status: .PHONY
	@echo "PLIST status: "\${_HS_PLIST_STATUS:Q}
EOF

	link_from_pkgsrc 'mk/haskell.mk'
	link_from_pkgsrc 'mk/plist'
	link_from_pkgsrc 'mk/misc'

	cd "$pkgdir"
}


if test_case_begin 'PLIST status: missing'; then

	create_file 'Makefile' <<-EOF
		DISTNAME=	package-1.0

		.include "../../main.mk"
	EOF

	"$make" 'show-plist-status' 1> "$tmpdir/output" 2>&1 \
	&& exitcode=0 || exitcode=$?

	assert_that "$tmpdir/output" --file-is-lines \
		'PLIST status: missing'

	test_case_end
fi


if test_case_begin 'PLIST status: plain'; then

	# See textproc/hs-cgrep/PLIST, r1.4.

	create_file 'Makefile' <<-EOF
		DISTNAME=	cgrep-6.6.30

		.include "../../main.mk"
	EOF
	create_file 'PLIST' <<-EOF
		bin/cgrep
		share/doc/x86_64-ghc-8.8.1/cgrep-\${PKGVERSION}/LICENSE
		@pkgdir lib/cgrep-\${PKGVERSION}/ghc-8.8.1
	EOF

	"$make" 'show-plist-status' 1> "$tmpdir/output" 2>&1 \
	&& exitcode=0 || exitcode=$?

	assert_that "$tmpdir/output" --file-is-lines \
		'PLIST status: plain'

	test_case_end
fi


if test_case_begin 'PLIST status: outdated'; then

	# See devel/hs-hashable/PLIST, r1.1.

	create_file 'Makefile' <<-EOF
		DISTNAME=	hashable-1.3.0.0

		.include "../../main.mk"
	EOF
	create_file 'PLIST' <<-EOF
		lib/hashable-\${PKGVERSION}/\${HASKELL_VERSION}/Data/Hashable.hi
		lib/hashable-\${PKGVERSION}/\${HASKELL_VERSION}/package-description
		share/doc/hashable-\${PKGVERSION}/LICENSE
		\${PLIST.doc}share/doc/hashable-\${PKGVERSION}/html/Data-Hashable.html
	EOF

	"$make" 'show-plist-status' 1> "$tmpdir/output" 2>&1 \
	&& exitcode=0 || exitcode=$?

	# TODO: should be 'outdated' because of 'package-description'
	assert_that "$tmpdir/output" --file-is-lines \
		'PLIST status: plain'

	test_case_end
fi


if test_case_begin 'PLIST status: lib-ok'; then

	# See devel/hs-hashable/PLIST, r1.3.

	create_file 'Makefile' <<-EOF
		DISTNAME=	hashable-1.3.0.0

		.include "../../main.mk"
	EOF
	create_file 'PLIST' <<-'EOF'
		${HS_INTF}/package-description
		${HS_INTF}/package-id
		${HS_IMPL}/Data/Hashable.dyn_hi
		lib/${HS_PLATFORM}/libHS${HS_PKGID}-${HS_VER}.so
		${HS_DOCS}/LICENSE
	EOF

	"$make" 'show-plist-status' 1> "$tmpdir/output" 2>&1 \
	&& exitcode=0 || exitcode=$?

	assert_that "$tmpdir/output" --file-is-lines \
		'PLIST status: lib-ok'

	test_case_end
fi