diff --git a/buildroot/share/git/mftest b/buildroot/share/git/mftest index 866c9713e..5f418268f 100755 --- a/buildroot/share/git/mftest +++ b/buildroot/share/git/mftest @@ -14,8 +14,10 @@ TESTPATH=buildroot/share/tests shopt -s extglob nocasematch -# Get test, allowing shorthand -TESTENV=${1:-"mega"} +# Get test +TESTENV=${1:-'-'} + +# Allow shorthand for test name case $TESTENV in due) TESTENV='DUE' ;; esp) TESTENV='esp32' ;; @@ -26,6 +28,7 @@ case $TESTENV in stm) TESTENV='STM32F1' ;; t35) TESTENV='teensy35' ;; teensy) TESTENV='teensy35' ;; + -) ;; esac # Matching patterns @@ -34,7 +37,7 @@ ISCMD='^(restore|opt|exec|use|pins|env)_' ISEXEC='^exec_' # List available tests and ask for selection -if [[ $1 == '-' ]]; then +if [[ $TESTENV == '-' ]]; then IND=0 NAMES=() for FILE in $( ls -1 $TESTPATH/*-tests ) @@ -43,6 +46,7 @@ if [[ $1 == '-' ]]; then TNAME=${FILE/-tests/} TNAME=${TNAME/$TESTPATH\//} NAMES+=($TNAME) + (( IND < 10 )) && echo -n " " echo " $IND) $TNAME" done @@ -50,8 +54,8 @@ if [[ $1 == '-' ]]; then for (( ; ; )) do read -p "Select a test to apply (1-$IND) : " NAMEIND - [[ -z "$NAMEIND" ]] && { echo "Quitting." ; exit 1 ; } - [[ $NAMEIND =~ $ISNUM ]] && ((NAMEIND >= 1 && NAMEIND <= IND)) && { TESTENV=${NAMES[$NAMEIND-1]} ; break ; } + [[ -z "$NAMEIND" ]] && { echo '(canceled)' ; exit 1 ; } + [[ $NAMEIND =~ $ISNUM ]] && ((NAMEIND >= 1 && NAMEIND <= IND)) && { TESTENV=${NAMES[$NAMEIND-1]} ; echo ; break ; } echo "Invalid selection." done fi @@ -66,17 +70,33 @@ TESTCOUNT=$( awk "/$ISEXEC/{a++}END{print a}" <<<"$OUT" ) # Get the entered or interactive test index CHOICE=${2:-0} -if [[ $TESTCOUNT > 1 && ( $CHOICE == 0 || $1 == '-' ) ]]; then - for (( ; ; )) - do - read -p "Test '$TESTENV' index (1-$TESTCOUNT) : " CHOICE - [[ -z "$CHOICE" ]] && CHOICE=1 - [[ $CHOICE =~ $ISNUM ]] && ((CHOICE >= 1 && CHOICE <= TESTCOUNT)) && break - echo "Invalid test index '$CHOICE'." - done -else - # Confirm a manually-entered test index - ((CHOICE >= 1 && CHOICE <= TESTCOUNT)) || { echo "Invalid test index '$CHOICE' (1-$TESTCOUNT)." ; exit 1 ; } +# User entered a number? +(( CHOICE && CHOICE > TESTCOUNT )) && { echo "Invalid test index '$CHOICE' (1-$TESTCOUNT)." ; exit 1 ; } + +if [[ $CHOICE == 0 ]]; then + # List test descriptions with numbers + echo "Available '$TESTENV' tests:" ; echo "$OUT" | { + IND=0 + SED=$(which gsed || which sed) + while IFS= read -r LINE + do + if [[ $LINE =~ $ISEXEC ]]; then + DESC=$( "$SED" -E 's/^.+"(.*)".*$/\1/g' <<<"$LINE" ) + (( ++IND < 10 )) && echo -n " " + echo " $IND) $DESC" + fi + done + } + CHOICE=1 + if [[ $TESTCOUNT > 1 ]]; then + for (( ; ; )) + do + read -p "Select a '$TESTENV' test (1-$TESTCOUNT) : " CHOICE + [[ -z "$CHOICE" ]] && { echo '(canceled)' ; exit 1 ; } + [[ $CHOICE =~ $ISNUM ]] && ((CHOICE >= 1 && CHOICE <= TESTCOUNT)) && break + echo ">>> Invalid test index '$CHOICE'." + done + fi fi # Finally, run the specified test lines