#!/usr/bin/env sh # This very basic script simulate user inputs for the CI # Feel free to update, improve or remove it if proper # intergration tests and/or unit tests are added. set -e BOLD="\033[1m" RESET="\033[0m" LIGHT_RED="\033[91m" LIGHT_GREEN="\033[92m" LIGHT_CYAN="\033[96m" logging(){ local type=$1; shift printf "${LIGHT_CYAN}${BOLD}run_tests${RESET} [%b] : %b\n" "$type" "$*" } log_info(){ logging "${LIGHT_GREEN}info${RESET}" "$@" } log_error(){ logging "${LIGHT_RED}error${RESET}" "$@" >&2 exit 1 } PID="" # to properly kill child process executed in background on exit at_exit() { status=$? [ $status -eq 0 ] && log_info "Seem all went well" && exit 0 # Code for non-zero exit: if ! kill -s TERM "$PID" 2>/dev/null || ! wait "$PID" ; then log_error "Pid [$PID] died with status $status " fi log_error "Something went wrong. Pid [$PID] has been killed. Status code $status" } # to properly quit from ctrl+c (SIGINT Signal) sigint_handler(){ kill -s TERM "$PID" wait log_info "Tests abort" exit 1 } # look at test/main.c and run ./mlx-test to understand what this function does test_default_main(){ ${MAKE} -f Makefile.gen all ./mlx-test & PID="$!" log_info "./mlx-test running in background, pid:" $PID i=25 # waiting 25s mlx-test to be ready for inputs. while [ $i -gt 0 ]; do if ! ps -p $PID > /dev/null ; then wait $PID fi log_info "countdown" $i sleep 1 i=$((i - 1)) done log_info "Ready to \"just play\" using xdotool" wid1=$(xdotool search --name Title1) wid2=$(xdotool search --name Title2) wid3=$(xdotool search --name Title3) xdotool windowfocus $wid3 log_info "Focus Win3: Testing move mouse 100 100" xdotool mousemove 100 100 log_info "Focus Win3: Testing move mouse 200 200" xdotool mousemove 200 200 log_info "Focus Win3: Pressing escape to destroy window \"Win3\"" xdotool key Escape log_info "Focus Win2: Pressing escape to stop program" xdotool windowfocus $wid2 xdotool key Escape } main(){ case $(uname) in FreeBSD) MAKE=gmake ;; *) MAKE=make ;; esac cd $(dirname $0) trap at_exit EXIT trap sigint_handler INT test_default_main } main "$@"