diff options
Diffstat (limited to '')
-rwxr-xr-x | tests/ts/libsmartcols/filter | 217 |
1 files changed, 217 insertions, 0 deletions
diff --git a/tests/ts/libsmartcols/filter b/tests/ts/libsmartcols/filter new file mode 100755 index 0000000..2025ef5 --- /dev/null +++ b/tests/ts/libsmartcols/filter @@ -0,0 +1,217 @@ +#!/bin/bash +# +# This file is part of util-linux. +# +# This file is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This file is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# + +TS_TOPDIR="${0%/*}/../.." +TS_DESC="fromfile" + +. "$TS_TOPDIR"/functions.sh +ts_init "$*" + +TESTPROG="$TS_HELPER_LIBSMARTCOLS_FROMFILE" +ts_check_test_command "$TESTPROG" + +### Number +# +prefix="number" +declare -A FILTERS + +FILTERS["is"]='NUM' +FILTERS["neg"]='!NUM' +FILTERS["and"]='NUM && NAME' +FILTERS["or"]='NUM || NAME' + +FILTERS["eq"]='NUM == 100' +FILTERS["ne"]='NUM != 100' + +FILTERS["gt"]='NUM > 8000' +FILTERS["ge"]='NUM >= 100' +FILTERS["lt"]='NUM < 100' +FILTERS["le"]='NUM <= 100' + +FILTERS["expr-and-expr"]='NUM > 10 && NUM < 8000' +FILTERS["expr-or-expr"]='NUM == 3 || NUM == 100' +FILTERS["and-or"]='(NUM >= 3 && NUM <= 100) || NUM == 0' + +FILTERS["as-string"]='NUM == "100"' + +printf '%s\n' "${!FILTERS[@]}" | sort | while read name; do + ts_init_subtest "$prefix-$name" + echo "expr: ${FILTERS[$name]}" >> $TS_OUTPUT + echo >> $TS_OUTPUT + ts_run $TESTPROG --nlines 10 --width 80 \ + --filter "${FILTERS[$name]}" \ + --column $TS_SELF/files/col-name \ + --column $TS_SELF/files/col-number \ + $TS_SELF/files/data-string \ + $TS_SELF/files/data-number \ + >> $TS_OUTPUT 2> /dev/null + ts_finalize_subtest +done +FILTERS=() + + +### Float +# +prefix="float" +declare -A FILTERS + +FILTERS["is"]='NUM' +FILTERS["neg"]='!NUM' +FILTERS["and"]='NUM && NAME' +FILTERS["or"]='NUM || NAME' + +FILTERS["eq"]='NUM == 100' +FILTERS["eq2"]='NUM == 100.5' + +FILTERS["ne"]='NUM != 100' +FILTERS["ne2"]='NUM != 100.5' + +FILTERS["gt"]='NUM > 8000' +FILTERS["gt2"]='NUM > 8000.5' + +FILTERS["ge"]='NUM >= 100' +FILTERS["ge2"]='NUM >= 100.5' + +FILTERS["lt"]='NUM < 100' +FILTERS["lt2"]='NUM < 100.5' + +FILTERS["le"]='NUM <= 100' +FILTERS["le2"]='NUM <= 100.5' + +FILTERS["as-string"]='NUM == "100"' +FILTERS["as-string2"]='NUM == "100.5"' + +printf '%s\n' "${!FILTERS[@]}" | sort | while read name; do + ts_init_subtest "$prefix-$name" + echo "expr: ${FILTERS[$name]}" >> $TS_OUTPUT + echo >> $TS_OUTPUT + ts_run $TESTPROG --nlines 10 --width 80 \ + --filter "${FILTERS[$name]}" \ + --column $TS_SELF/files/col-name \ + --column $TS_SELF/files/col-float \ + $TS_SELF/files/data-string \ + $TS_SELF/files/data-float \ + >> $TS_OUTPUT 2> /dev/null + ts_finalize_subtest +done +FILTERS=() + +### Boolean +# +prefix="bool" +declare -A FILTERS + +FILTERS["is"]='BOOL' +FILTERS["neg"]='!BOOL' +FILTERS["and"]='BOOL && NAME' +FILTERS["or"]='BOOL || NAME' + +FILTERS["eq-true"]='BOOL == TRUE' +FILTERS["eq-true2"]='BOOL == true' +FILTERS["eq-true3"]='BOOL == 1' + +FILTERS["eq-false"]='BOOL == FALSE' +FILTERS["eq-false2"]='BOOL == false' +FILTERS["eq-false3"]='BOOL == 0' + +FILTERS["ne"]='BOOL != false' +FILTERS["ne2"]='BOOL != true' + +FILTERS["as-string"]='BOOL == "0"' +FILTERS["as-string2"]='BOOL == "1"' + +printf '%s\n' "${!FILTERS[@]}" | sort | while read name; do + ts_init_subtest "$prefix-$name" + echo "expr: ${FILTERS[$name]}" >> $TS_OUTPUT + echo >> $TS_OUTPUT + ts_run $TESTPROG --nlines 10 --width 80 \ + --filter "${FILTERS[$name]}" \ + --column $TS_SELF/files/col-name \ + --column $TS_SELF/files/col-bool \ + $TS_SELF/files/data-string \ + $TS_SELF/files/data-bool \ + >> $TS_OUTPUT 2> /dev/null + ts_finalize_subtest +done +FILTERS=() + + +### Strings +# +prefix="string" +declare -A FILTERS + +FILTERS["is"]='NAME' +FILTERS["neg"]='!NAME' + +FILTERS["eq"]='NAME == "bbb"' +FILTERS["ne"]='NAME != "bbb"' + +FILTERS["gt"]='NAME > "bbb"' +FILTERS["ge"]='NAME >= "bbb"' +FILTERS["lt"]='NAME < "bbb"' +FILTERS["le"]='NAME <= "bbb"' + +FILTERS["reg"]='NAME =~ "aaa.*"' +FILTERS["nreg"]='NAME !~ "aaa.*"' + +printf '%s\n' "${!FILTERS[@]}" | sort | while read name; do + ts_init_subtest "$prefix-$name" + echo "expr: ${FILTERS[$name]}" >> $TS_OUTPUT + echo >> $TS_OUTPUT + ts_run $TESTPROG --nlines 10 --width 80 \ + --filter "${FILTERS[$name]}" \ + --column $TS_SELF/files/col-name \ + $TS_SELF/files/data-string \ + >> $TS_OUTPUT 2> /dev/null + ts_finalize_subtest +done +FILTERS=() + + +### Broken +# +prefix="broken" +declare -A FILTERS + +FILTERS["no-start"]='NUM == 100)' +FILTERS["no-close"]='(NUM == 100' +FILTERS["no-column"]=' == 100' +FILTERS["no-param"]='NUM == ' +FILTERS["bad-oper"]='NUM ** 100' +FILTERS["bad-oper2"]='NUM = 100' +FILTERS["bad-column"]='XXX == 100' +FILTERS["bad-number"]='NUM == 1y0' +FILTERS["bad-float"]='NUM == 100 . 5' + +printf '%s\n' "${!FILTERS[@]}" | sort | while read name; do + ts_init_subtest "$prefix-$name" + echo "expr: ${FILTERS[$name]}" >> $TS_OUTPUT + echo >> $TS_OUTPUT + ts_run $TESTPROG --nlines 10 --width 80 \ + --filter "${FILTERS[$name]}" \ + --column $TS_SELF/files/col-number \ + $TS_SELF/files/data-number \ + 2>> $TS_OUTPUT 1> /dev/null + + sed -i -e 's/syntax error.*/<bison syntax error message removed>/g' $TS_OUTPUT + ts_finalize_subtest +done +FILTERS=() + + +ts_log "...done." +ts_finalize |