#!/bin/sh
# Run a subset of the upstream tests which work in an unbuilt tree against the
# system installed package; these have been selected with
#
#   for t in tests/*/*; do if env LANG= LANGUAGE= LC_ALL=C CONFIG_HEADER=/dev/null $t >/dev/null 2>&1; then echo ${t#tests/}; fi; done

# plus remove all tests depending on test binaries (getlimits, ginstall).
#set -e

# ensure that we do not stumble over translations
unset LANG
unset LANGUAGE
export LC_ALL=C
fails=0

for test in \
    chgrp/basic.sh \
    chgrp/default-no-deref.sh \
    chgrp/deref.sh \
    chgrp/no-x.sh \
    chgrp/posix-H.sh \
    chgrp/recurse.sh \
    chmod/c-option.sh \
    chmod/equal-x.sh \
    chmod/equals.sh \
    chmod/inaccessible.sh \
    chmod/no-x.sh \
    chmod/octal.sh \
    chmod/setgid.sh \
    chmod/silent.sh \
    chmod/thru-dangling.sh \
    chmod/umask-x.sh \
    chmod/usage.sh \
    chown/deref.sh \
    chown/preserve-root.sh \
    cp/abuse.sh \
    cp/attr-existing.sh \
    cp/backup-1.sh \
    cp/backup-dir.sh \
    cp/backup-is-src.sh \
    cp/cp-HL.sh \
    cp/cp-deref.sh \
    cp/cp-i.sh \
    cp/cp-mv-backup.sh \
    cp/cp-parents.sh \
    cp/deref-slink.sh \
    cp/dir-rm-dest.sh \
    cp/dir-slash.sh \
    cp/dir-vs-file.sh \
    cp/existing-perm-dir.sh \
    cp/fail-perm.sh \
    cp/into-self.sh \
    cp/link-deref.sh \
    cp/link-no-deref.sh \
    cp/link-preserve.sh \
    cp/link-symlink.sh \
    cp/link.sh \
    cp/no-deref-link1.sh \
    cp/no-deref-link2.sh \
    cp/no-deref-link3.sh \
    cp/preserve-link.sh \
    cp/preserve-mode.sh \
    cp/proc-short-read.sh \
    cp/proc-zero-len.sh \
    cp/r-vs-symlink.sh \
    cp/reflink-perm.sh \
    cp/same-file.sh \
    cp/slink-2-slink.sh \
    cp/sparse-to-pipe.sh \
    cp/sparse.sh \
    cp/special-f.sh \
    cp/src-base-dot.sh \
    cp/symlink-slash.sh \
    cp/thru-dangling.sh \
    dd/ascii.sh \
    dd/bytes.sh \
    dd/direct.sh \
    dd/misc.sh \
    dd/no-allocate.sh \
    dd/nocache.sh \
    dd/not-rewound.sh \
    dd/reblock.sh \
    dd/skip-seek2.sh \
    dd/sparse.sh \
    dd/stderr.sh \
    dd/unblock-sync.sh \
    df/df-P.sh \
    df/df-output.sh \
    df/header.sh \
    df/unreadable.sh \
    du/8gb.sh \
    du/basic.sh \
    du/bigtime.sh \
    du/deref-args.sh \
    du/deref.sh \
    du/exclude.sh \
    du/files0-from-dir.sh \
    du/hard-link.sh \
    du/inacc-dest.sh \
    du/inacc-dir.sh \
    du/inodes.sh \
    du/long-from-unreadable.sh \
    du/long-sloop.sh \
    du/max-depth.sh \
    du/no-deref.sh \
    du/no-x.sh \
    du/restore-wd.sh \
    du/slash.sh \
    du/threshold.sh \
    du/trailing-slash.sh \
    du/two-args.sh \
    fmt/goal-option.sh \
    fmt/long-line.sh \
    id/uid.sh \
    id/zero.sh \
    install/trap.sh \
    ln/backup-1.sh \
    ln/hard-backup.sh \
    ln/hard-to-sym.sh \
    ln/relative.sh \
    ln/sf-1.sh \
    ln/slash-decorated-nonexistent-dest.sh \
    ln/target-1.sh \
    ls/abmon-align.sh \
    ls/block-size.sh \
    ls/color-clear-to-eol.sh \
    ls/color-dtype-dir.sh \
    ls/color-norm.sh \
    ls/color-term.sh \
    ls/dangle.sh \
    ls/dired.sh \
    ls/file-type.sh \
    ls/follow-slink.sh \
    ls/infloop.sh \
    ls/inode.sh \
    ls/m-option.sh \
    ls/multihardlink.sh \
    ls/no-arg.sh \
    ls/selinux-segfault.sh \
    ls/recursive.sh \
    ls/root-rel-symlink-color.sh \
    ls/rt-1.sh \
    ls/slink-acl.sh \
    ls/stat-dtype.sh \
    ls/stat-failed.sh \
    ls/stat-free-symlinks.sh \
    ls/stat-vs-dirent.sh \
    ls/symlink-slash.sh \
    ls/time-style-diag.sh \
    ls/x-option.sh \
    cat/cat-proc.sh \
    chcon/chcon-fail.sh \
    csplit/csplit-1000.sh \
    csplit/csplit-heap.sh \
    csplit/csplit.sh \
    date/date-sec.sh \
    env/env-null.sh \
    misc/false-status.sh \
    head/head-pos.sh \
    head/head-write-error.sh \
    misc/invalid-opt.pl \
    ls/ls-time.sh \
    cksum/md5sum-bsd.sh \
    cksum/md5sum-parallel.sh \
    misc/mknod.sh \
    nice/nice-fail.sh \
    nice/nice.sh \
    misc/nl.sh \
    misc/nohup.sh \
    nproc/nproc-avail.sh \
    nproc/nproc-positive.sh \
    od/od-N.sh \
    od/od-endian.sh \
    od/od-float.sh \
    od/od-multiple-t.sh \
    od/od-x8.sh \
    misc/pathchk.sh \
    misc/printenv.sh \
    printf/printf-hex.sh \
    printf/printf-surprise.sh \
    ptx/ptx-overrun.sh \
    pwd/pwd-option.sh \
    readlink/readlink-fp-loop.sh \
    readlink/readlink-root.sh \
    misc/realpath.sh \
    runcon/runcon-no-reorder.sh \
    shred/shred-exact.sh \
    shred/shred-passes.sh \
    shred/shred-remove.sh \
    sort/sort-NaN-infloop.sh \
    sort/sort-compress.sh \
    sort/sort-debug-keys.sh \
    sort/sort-debug-warn.sh \
    sort/sort-exit-early.sh \
    sort/sort-merge-fdlimit.sh \
    sort/sort-month.sh \
    sort/sort-rand.sh \
    sort/sort-unique.sh \
    sort/sort-version.sh \
    stat/stat-fmt.sh \
    stat/stat-hyphen.sh \
    stat/stat-mount.sh \
    stat/stat-nanoseconds.sh \
    stat/stat-slash.sh \
    stty/stty-invalid.sh \
    stty/stty-row-col.sh \
    cksum/sum-sysv.sh \
    tac/tac-2-nonseekable.sh \
    misc/tee.sh \
    timeout/timeout-group.sh \
    timeout/timeout.sh \
    tr/tr-case-class.sh \
    truncate/truncate-dangling-symlink.sh \
    truncate/truncate-dir-fail.sh \
    truncate/truncate-fail-diag.sh \
    truncate/truncate-fifo.sh \
    truncate/truncate-no-create-missing.sh \
    truncate/truncate-parameters.sh \
    truncate/truncate-relative.sh \
    uniq/uniq-perf.sh \
    wc/wc-files0.sh \
    wc/wc-parallel.sh \
    mkdir/p-1.sh \
    mkdir/p-2.sh \
    mkdir/p-3.sh \
    mkdir/p-acl.sh \
    mkdir/p-slashdot.sh \
    mkdir/p-thru-slink.sh \
    mkdir/p-v.sh \
    mkdir/parents.sh \
    mkdir/perm.sh \
    mkdir/special-1.sh \
    mkdir/t-slash.sh \
    mv/atomic.sh \
    mv/atomic2.sh \
    mv/backup-dir.sh \
    mv/childproof.sh \
    mv/diag.sh \
    mv/dir-file.sh \
    mv/dir2dir.sh \
    mv/dup-source.sh \
    mv/force.sh \
    mv/hard-2.sh \
    mv/hard-3.sh \
    mv/hard-4.sh \
    mv/i-2.sh \
    mv/i-3.sh \
    mv/i-4.sh \
    mv/i-5.sh \
    mv/i-link-no.sh \
    mv/into-self-3.sh \
    mv/into-self-4.sh \
    mv/into-self.sh \
    mv/mv-n.sh \
    mv/no-target-dir.sh \
    mv/perm-1.sh \
    mv/symlink-onto-hardlink-to-self.sh \
    mv/symlink-onto-hardlink.sh \
    mv/trailing-slash.sh \
    mv/update.sh \
    readlink/can-e.sh \
    readlink/can-f.sh \
    readlink/can-m.sh \
    readlink/multi.sh \
    readlink/rl-1.sh \
    rm/cycle.sh \
    rm/d-1.sh \
    rm/d-2.sh \
    rm/d-3.sh \
    rm/dangling-symlink.sh \
    rm/deep-1.sh \
    rm/deep-2.sh \
    rm/dir-no-w.sh \
    rm/dir-nonrecur.sh \
    rm/dot-rel.sh \
    rm/empty-inacc.sh \
    rm/f-1.sh \
    rm/fail-eacces.sh \
    rm/i-1.sh \
    rm/i-never.sh \
    rm/i-no-r.sh \
    rm/ignorable.sh \
    rm/interactive-always.sh \
    rm/interactive-once.sh \
    rm/ir-1.sh \
    rm/isatty.sh \
    rm/one-file-system2.sh \
    rm/r-1.sh \
    rm/r-2.sh \
    rm/r-3.sh \
    rm/r-4.sh \
    rm/readdir-bug.sh \
    rm/rm1.sh \
    rm/rm2.sh \
    rm/rm3.sh \
    rm/rm4.sh \
    rm/rm5.sh \
    rm/sunos-1.sh \
    rm/unread2.sh \
    rm/unread3.sh \
    rm/v-slash.sh \
    rmdir/fail-perm.sh \
    rmdir/ignore.sh \
    rmdir/t-slash.sh \
    split/additional-suffix.sh \
    split/b-chunk.sh \
    split/filter.sh \
    split/guard-input.sh \
    split/l-chunk.sh \
    split/line-bytes.sh \
    split/lines.sh \
    split/numeric.sh \
    split/r-chunk.sh \
    split/suffix-auto-length.sh \
    split/suffix-length.sh \
    tail/F-vs-rename.sh \
    tail/flush-initial.sh \
    tail/follow-name.sh \
    tail/follow-stdin.sh \
    tail/inotify-hash-abuse.sh \
    tail/inotify-hash-abuse2.sh \
    tail/pipe-f.sh \
    tail/pipe-f2.sh \
    tail/proc-ksyms.sh \
    tail/start-middle.sh \
    tail/tail-n0f.sh \
    tail/wait.sh \
    touch/60-seconds.sh \
    touch/dangling-symlink.sh \
    touch/dir-1.sh \
    touch/empty-file.sh \
    touch/fail-diag.sh \
    touch/fifo.sh \
    touch/no-create-missing.sh \
    touch/no-rights.sh \
    touch/not-owner.sh \
    touch/obsolescent.sh \
    touch/read-only.sh \
    touch/relative.sh \
    touch/trailing-slash.sh \
; do
    echo "$test"
    chmod a+x "tests/$test"
    OUT=$(tests/$test 2>&1 9>&1) || [ $? = 77 ] || { fails=$((fails+1)); echo "FAIL:"; echo "$OUT"; }
done

echo $fails tests failed
exit $fails
