⛏️ index : haiku.git

# unit test pseudo target
NotFile unittests ;

rule UnitTestDependency
{
	Depends unittests : $(1) ;
}


rule UnitTestLib
{
	# UnitTestLib <lib> : <sources> : <libraries> ;
	#
	local lib = $(1) ;
	local sources = $(2) ;
	local libraries = $(3) ;

	# if TEST_DEBUG is defined, we turn on debugging
	if $(TEST_DEBUG) {
		DEBUG on $(lib) [ FGristFiles $(sources:S=$(SUFOBJ)) ] ?= 1 ;
	}

	# define TEST_R5/TEST_HAIKU depending on the platform we build for
	if $(TARGET_PLATFORM) = libbe_test {
		ObjectDefines $(2) : TEST_HAIKU TEST_OBOS ;

		# make the target depend on the installed libbe libraries
		Depends $(lib) :
			<tests!unittests>libbe_test.so ;
	} else {
		ObjectDefines $(2) : TEST_HAIKU TEST_OBOS ;
	}

	UseCppUnitObjectHeaders $(sources) ;

	MakeLocate $(lib) : $(TARGET_UNIT_TEST_LIB_DIR) ;
	SharedLibrary $(lib) : $(sources) : $(libraries) libcppunit.so ;

	UnitTestDependency $(lib) ;
}


rule UnitTest
{
	# UnitTest <target> : <sources> : <libraries> : <resources> ;
	#
	local target = $(1) ;
	local sources = $(2) ;
	local libraries = $(3) ;
	local resources = $(4) ;

	# define TEST_R5/TEST_HAIKU depending on the platform we build for
	if $(TARGET_PLATFORM) = libbe_test {
		ObjectDefines $(2) : TEST_HAIKU TEST_OBOS ;

		# make the target depend on the installed libbe libraries
		Depends $(target) :
			<tests!unittests>libbe_test.so ;
	} else {
		ObjectDefines $(2) : TEST_HAIKU TEST_OBOS ;
	}

	UseCppUnitObjectHeaders $(sources) ;

	MakeLocate $(target) : $(TARGET_UNIT_TEST_DIR) ;
	SimpleTest $(target) : $(sources) : $(libraries) libcppunit.so
		: $(resources) ;

	UnitTestDependency $(target) ;
}


rule TestObjects
{
	# TestObjects <sources> ;
	#
	local sources = $(1) ;

	# define TEST_R5/TEST_HAIKU depending on the platform we build for
	if $(TARGET_PLATFORM) = libbe_test {
		ObjectDefines $(2) : TEST_HAIKU TEST_OBOS ;
	} else {
		ObjectDefines $(2) : TEST_HAIKU TEST_OBOS ;
	}

	UseCppUnitObjectHeaders $(sources) ;

	Objects $(sources) ;
}


rule SimpleTest
{
	# SimpleTest <target> : <sources> : [ <libraries> ] : [ <resources> ] ;

	# if TEST_DEBUG is defined, we turn on debugging
	if $(TEST_DEBUG) {
		DEBUG on $(1) [ FGristFiles $(2:S=$(SUFOBJ)) ] ?= 1 ;
	}

	Application $(1) : $(2) : $(3) : $(4) ;
}


rule BuildPlatformTest
{
	# Usage BuildPlatformTest <target> : <sources> ;
	local target = $(1) ;
	local sources = $(2) ;

	local relPath ;
	if [ FIsPrefix src tests : $(SUBDIR_TOKENS) ] {
		relPath = $(SUBDIR_TOKENS[3-]) ;
	} else {
		relPath = $(SUBDIR_TOKENS[2-]) ;
	}
	MakeLocate $(target) : [ FDirName $(HAIKU_TEST_DIR) $(relPath) ] ;

	BuildPlatformMain $(target) : $(sources) ;
}