On Sat, 17 Dec 2016 11:55:38 +0100 Jérémy Zurcher <[email protected]> said:
yeah - this below is getitng close. i have to say i kind of agree with cedric
and ks that maybe instead of an init/shutdown we can have a "template.c"
perhaps like the below. this allows for test to declare callback funcs too as
long as FUNC is always there - consider it the main for a test... and macros.h
is just all our test macros for tests to use and main.c is the template that
sets up the test with includes, inits and calls FUNCCALL(); to do the test then
shuts down and exits cleanly (any failures should exit before here). we come up
with a new dir with a main.c in it per style/type of test that has a common
init/shutdown etc. scenario.
test_x.c:
FUNC {
Eina_List *list = NULL;
list = eina_list_append(list, (void *)123L);
FAIL_IF(eina_list_data_find_list(list, (void *)123L) != list);
}
test_y.c:
FUNC {
Eina_List *list = NULL;
list = eina_list_prepend(list, (void *)123L);
FAIL_IF(eina_list_data_find_list(list, (void *)123L) != list);
}
macros.h:
#define FAIL_IF(_x) if ((_x)) { fprintf(stderr, "fail\n"); exit(1); }
#define STR(x) #x
main.c:
#include "macros.h"
#include "eina_config.h"
#include "Eina.h"
#include "Efl_Config.h"
#include STR(TESTFILE)
int main(int argc, char **argv) {
eina_init();
FUNCCALL();
eina_shutdown();
return 0;
}
then to build the test:
#/bin/sh -e
TESTSRCDIR=/path/to/tests
TESTBINDIR=/tmp
for TEST in `/bin/ls $SRCDIR/test_*.c | sort`; do
TEST=`basename $TEST .c`
$CC $TESTSRCDIR/main.c \
-o $TESTSRCDIR/$TEST \
-DTESTFILE=$TEST.c \
-DFUNC='static void '$TEST'(void)' \
-DFUNCCALL=$TEST \
-I/somthing -I/something2 \
-L/link/dir -lsomething -lsomething2 ...
echo "TESTING $TEST.c ... "
if $TESTBINDIR/$TEST; then
echo OK;
else
echo FAIL
exit 42 # should we exit on first fail or keep going?
fi
fi
i like that you handled build_dir stuff etc. too (out of tree builds) and so
on. so definitely keep a lot of that and maybe something like above?
> <snip snip>
>
> Hi,
> I wrote a quick and dirty POC ...
> comments welcome
>
> <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
> #! /bin/sh
>
> SRC_D=src
> BUILD_D=src
> CONFIG_SH=config.sh
> INIT_C=init.c
> SHUTDOWN_C=shutdown.c
> C_FILE=/tmp/__efl_test.c
> O_FILE=/tmp/__efl_test.o
> DEBUG=0
>
> SCRIPT_DIR=${0%/*}
> SCRIPT_FILE=${0##*/}
>
> CC=${CC:-"clang"}
> LD=""
> INCLUDE=""
>
> function fatal {
> echo "FATAL $1"
> exit 1
> }
>
> while [ $# -ge 1 ]; do
> case "$1" in
> -s*|--src*)
> shift
> [ $# -lt 1 ] && fatal "option -s is missing directory argument"
> SRC_D=$1
> shift
> ;;
> -b*|--build*)
> shift
> [ $# -lt 1 ] && fatal "option -b is missing directory argument"
> BUILD_D=$1
> shift
> ;;
>
> -h|--help)
> echo "Usage: $SCRIPT_FILE [options]"
> echo
> echo "Options:"
> echo " -s, --src directory Directory to search tests into"
> echo " -b, --build directory Directory to search built files
> into" echo " -h, --help This message."
> exit 0
> ;;
>
> *)
> break
> esac
> done
>
> SRC_D=$(readlink -f $SRC_D)
> BUILD_D=$(readlink -f $BUILD_D)
>
> [ -d "$SRC_D" -a -r "$SRC_D" ] || fatal "$SRC_D is not a valid directory"
> [ -d "$BUILD_D" -a -r "$BUILD_D" ] || fatal "$BUILD_D is not a valid
> directory"
>
> function load_cfg {
> unset LDS
> unset INCLUDES
> LDF=""
> LDP=""
> INCLUDE="-I .."
> if [ -f $CONFIG_SH -a -r $CONFIG_SH ]
> then
> echo " load $CONFIG_SH"
> source ./$CONFIG_SH
> for include in $INCLUDES
> do
> F=$(find $SRC_D -name $include)
> if [ -z "$F" ]
> then
> F=$(find $BUILD_D -name $include)
> [ ! -z "$F" ] || fatal "can't find $include in $SRC_D or $BUILD_D"
> fi
> INCLUDE="$INCLUDE -I ${F%/*}"
> done
> for ld in $LDS
> do
> F=$(find $BUILD_D -name $ld)
> [ ! -z "$F" ] || fatal "can't find $ld in $BUILD_D"
> F=$(readlink -f $F)
> LDP="$LDP -L ${F%/*}"
> lib=${F##*/lib}
> lib=${lib%.so*}
> LDF="$LDF -l$lib"
> done
> fi
> }
>
> echo "search for tests into $SRC_D"
> for dir in $(find $SRC_D -type d -name tests)
> do
> echo " enter $dir"
> pushd $dir > /dev/null || fatal "cannot enter $dir"
> [ -f $INIT_C -a -r $INIT_C ] || fatal "missing mandatory file $INIT_C"
> [ -f $SHUTDOWN_C -a -r $SHUTDOWN_C ] || fatal "missing mandatory file
> $SHUTDOWN_C" load_cfg
> for test_c in $(ls -1 test_*.c)
> do
> echo -n " compile and run $test_c"
> cat $INIT_C $test_c $SHUTDOWN_C > $C_FILE
> CMD="$CC $INCLUDE $LDP $LDF -o $C_FILE.o $O_FILE"
> [ $DEBUG -eq 1 ] && echo "$CMD"
> $CMD || fatal "compilation failed"
> $O_FILE.o && echo " PASS" || fatal "test run failed"
> done
> echo " leave"
> popd > /dev/null
> done
> echo "done"
> <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
>
>
> this is what I've got in src/lib/eina/tests
>
> jeyzu@bigdaddy: tests (master) $ cat config.sh
> INCLUDES="eina_config.h Eina.h Efl_Config.h"
> LDS="libeina.so"
>
> jeyzu@bigdaddy: tests (master) $ cat init.c
> #include <Eina.h>
>
> #define FAIL_IF(_x) if ((_x)) { fprintf(stderr, "fail\n"); exit(1); }
>
> int main(int argc, char *argv[])
> {
> eina_init();
>
> jeyzu@bigdaddy: tests (master) $ cat shutdown.c
> eina_shutdown();
> return 0;
> }
>
> jeyzu@bigdaddy: tests (master) $ cat test_list_append.c
> Eina_List *list = NULL;
> list = eina_list_append(list, (void *)123L);
> FAIL_IF(eina_list_data_find_list(list, (void *)123L) != list);
>
>
> run from topdir
> jeyzu@bigdaddy: efl (master) $ ./tests.sh -s src/lib/eina -b build
> search for tests into /home/jeyzu/usr/git/efl/core/efl/src/lib/eina
> enter /home/jeyzu/usr/git/efl/core/efl/src/lib/eina/tests
> load config.sh
> compile and run test_list_append.c PASS
> leave
> done
>
>
> --- Hell'O from Yverdoom
>
> Jérémy (jeyzu)
>
> ------------------------------------------------------------------------------
> Check out the vibrant tech community on one of the world's most
> engaging tech sites, SlashDot.org! http://sdm.link/slashdot
> _______________________________________________
> enlightenment-devel mailing list
> [email protected]
> https://lists.sourceforge.net/lists/listinfo/enlightenment-devel
--
------------- Codito, ergo sum - "I code, therefore I am" --------------
The Rasterman (Carsten Haitzler) [email protected]
------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, SlashDot.org! http://sdm.link/slashdot
_______________________________________________
enlightenment-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/enlightenment-devel