#!/usr/bin/env bash set -eu exe=${1:?First argument must be the executable to test} root="$(cd "${0%/*}" && pwd)" exe="$root/../$exe" # shellcheck disable=1090 source "$root/utilities.sh" snapshot="$root/snapshots" fixtures="$root/fixtures" SUCCESSFULLY=0 WITH_FAILURE=1 (with "a sample directory" (sandbox cp -R "$fixtures/sample-01/" . (with "no arguments" (with "no given path" (with "no subcommand" it "produces a human-readable (metric) aggregate of everything within the current directory, with total" && { WITH_SNAPSHOT="$snapshot/success-no-arguments" \ expect_run ${SUCCESSFULLY} "$exe" } ) (with "the aggregate sub-command" (with "no sorting option" it "produces a human-readable (metric) aggregate of everything within the current directory, with total" && { WITH_SNAPSHOT="$snapshot/success-no-arguments" \ expect_run ${SUCCESSFULLY} "$exe" aggregate } ) (with "a single file argument" it "produces a human-readable (metric) size display of that file" && { WITH_SNAPSHOT="$snapshot/success-single-file" \ expect_run ${SUCCESSFULLY} "$exe" aggregate a } ) (with "sorting disabled" it "produces a human-readable (metric) aggregate of everything within the current directory, alphabetically sorted, with total" && { WITH_SNAPSHOT="$snapshot/success-no-arguments-no-sort" \ expect_run ${SUCCESSFULLY} "$exe" aggregate --no-sort } ) ) ) (with "multiple given paths" (when "specifying the 'aggregate' subcommand" (with "no option to adjust the total" it "produces a human-readable aggregate, with total" && { WITH_SNAPSHOT="$snapshot/success-no-arguments-multiple-input-paths" \ expect_run ${SUCCESSFULLY} "$exe" a . . dir ./dir/ ./dir/sub } ) (with "the --no-total option set" it "produces a human-readable aggregate, without total" && { WITH_SNAPSHOT="$snapshot/success-no-arguments-multiple-input-paths-no-total" \ expect_run ${SUCCESSFULLY} "$exe" aggregate --no-total . . dir ./dir/ ./dir/sub } ) (with "the --no-sort option set" it "produces a human-readable aggregate, sorted in order specified on the command-line" && { WITH_SNAPSHOT="$snapshot/success-no-arguments-multiple-input-paths-no-sort" \ expect_run ${SUCCESSFULLY} "$exe" aggregate --no-sort . . dir ./dir/ ./dir/sub } ) (with "the --stats option set" it "produces a human-readable aggregate, and statistics about the iteration in RON" && { WITH_SNAPSHOT="$snapshot/success-no-arguments-multiple-input-paths-statistics" \ expect_run ${SUCCESSFULLY} "$exe" aggregate --stats . . dir ./dir/ ./dir/sub } ) (with "a broken link in multiple roots" ln -s not-present broken-link it "fails but lists valid paths" && { WITH_SNAPSHOT="$snapshot/success-no-arguments-multiple-input-paths-one-broken-link" \ expect_run ${WITH_FAILURE} "$exe" aggregate --stats . dir broken-link ./dir/sub } rm broken-link ) ) (when "specifying no subcommand" it "produces a human-readable aggregate" && { WITH_SNAPSHOT="$snapshot/success-no-arguments-multiple-input-paths" \ expect_run ${SUCCESSFULLY} "$exe" . . dir ./dir/ ./dir/sub } ) (when "specifying no subcommand and some of the directories don't exist" it "produces a human-readable aggregate, with the number of errors per root" && { WITH_SNAPSHOT="$snapshot/failure-no-arguments-multiple-input-paths-some-not-existing" \ expect_run ${WITH_FAILURE} "$exe" . . foo bar baz } ) ) ) (with "the byte format set" for format in binary bytes metric gb gib mb mib; do (with $format it "produces a human-readable aggregate of the current directory, without total" && { WITH_SNAPSHOT="$snapshot/success-bytes-$format" \ expect_run ${SUCCESSFULLY} "$exe" --format $format } ) done ) ) (with "interactive mode" it "fails as there is no TTY connected" && { WITH_SNAPSHOT="$snapshot/failure-interactive-without-tty" \ expect_run ${WITH_FAILURE} "$exe" i } ) )