#!/usr/bin/env -S bats --report-formatter junit --formatter tap -j 7
# -*-sh-*-

source ./common/test_helper_functions.bash || exit 1
source ./common/functions || exit 1

if [ -s ./common/TEST_ENV ]; then
	source ./common/TEST_ENV
fi

PKG=HDF5

setup() {
	OUTPUT=$(mktemp)
	module=phdf5
	library=libhdf5
	header=hdf5.h
}

teardown() {
	rm -f "${OUTPUT}"
}

@test "[$PKG] Verify $PKG module is loaded and matches rpm version ($LMOD_FAMILY_COMPILER)" {
	module list "${module}" | grep "1) $module" >&"${OUTPUT}" || exit 1
	run grep "${module}" "${OUTPUT}"
	assert_success

	# check version against rpm
	local rpm
	rpm=$(get_rpm_name "${module}")
	local version
	version="$(rpm -q --queryformat='%{VERSION}\n' "${rpm}")"
	run cat "${OUTPUT}"
	assert_output "  1) $module/$version"
}

@test "[$PKG] Verify module ${PKG}_DIR is defined and exists ($LMOD_FAMILY_COMPILER)" {
	DIR=${PKG}_DIR
	if [ -z ${!DIR} ]; then
		flunk "${PKG}_DIR directory not defined"
	fi

	if [ ! -d ${!DIR} ] || [ -z "${!DIR}" ]; then
		flunk "directory ${!DIR} does not exist"
	fi
}

# ----------
# Lib Tests
# ----------

@test "[$PKG] Verify module ${PKG}_LIB is defined and exists ($LMOD_FAMILY_COMPILER)" {
	LIB=${PKG}_LIB

	if [ -z ${!LIB} ]; then
		flunk "${PKG}_LIB directory not defined"
	fi

	if [ ! -d ${!LIB} ]; then
		flunk "directory ${!LIB} does not exist"
	fi
}

@test "[$PKG] Verify dynamic library available in ${PKG}_LIB ($LMOD_FAMILY_COMPILER)" {
	LIB=${PKG}_LIB

	if [ -z ${!LIB} ]; then
		flunk "${PKG}_LIB directory not defined"
	fi

	if [ ! -s ${!LIB}/"${library}".so ]; then
		flunk "${library}.so does not exist"
	fi
}

@test "[$PKG] Verify static library is not present in ${PKG}_LIB ($LMOD_FAMILY_COMPILER)" {
	LIB=${PKG}_LIB

	if [ -z ${!LIB} ]; then
		flunk "${PKG}_LIB directory not defined"
	fi

	if [ -e ${!LIB}/"${library}".a ]; then
		flunk "${library}.a exists when not expecting it"
	fi
}

# --------------
# Include Tests
# --------------

@test "[$PKG] Verify module ${PKG}_INC is defined and exists ($LMOD_FAMILY_COMPILER)" {
	INC=${PKG}_INC

	if [ -z ${!INC} ]; then
		flunk "${PKG}_INC directory not defined"
	fi

	if [ ! -d ${!INC} ]; then
		flunk "directory ${!INC} does not exist"
	fi
}

@test "[$PKG] Verify header file is present in ${PKG}_INC ($LMOD_FAMILY_COMPILER)" {
	INC=${PKG}_INC

	if [ -z ${!INC} ]; then
		flunk "${PKG}_INC directory not defined"
	fi

	if [ ! -s ${!INC}/"${header}" ]; then
		flunk "directory $header file does not exist"
	fi
}
