Marty Oehme
d44cbf5b74
All checks were successful
ci/woodpecker/push/woodpecker Pipeline was successful
So far we could only add single-letter (POSIX) options: `-e`, `-n` and so forth. Since we will run out of alphabet at some point, this commit introduces parsing of multi-letter long-form (gnu) options (plus any modern application should really support it anyways): `--echo`, `--noline`. Additionally, we support supplying long-form options that supply a value both in the spaced (`--hist-limit 0`) and the equals (`--hist-limit=0`) forms. Short, long, spaced, equals can be mixed and matched between freely. Lastly, we retain the ability to concatenate short options as before (`-ne` is valid, as is `-P0` for the respective options above). This should cover all bases and does not complicate the code too much to keep a coherent overview. Changed several code samples in the documentation to make use of short- or long-form options to point out possibility.
113 lines
3.2 KiB
Bash
113 lines
3.2 KiB
Bash
#!/usr/bin/env bash
|
|
|
|
setup_file() {
|
|
# make bemoji executable from anywhere relative to current testfile
|
|
TEST_DIR="$( cd "$( dirname "$BATS_TEST_FILENAME" )" >/dev/null 2>&1 && pwd )"
|
|
PATH="$TEST_DIR/..:$PATH"
|
|
}
|
|
|
|
setup() {
|
|
load 'test_helper/bats-support/load'
|
|
load 'test_helper/bats-assert/load'
|
|
|
|
# mock out interactive picker for static emoji return
|
|
export BEMOJI_PICKER_CMD="echo ❤️"
|
|
|
|
# set up small default set of test emoji for each test
|
|
export BEMOJI_DB_LOCATION="$BATS_TEST_TMPDIR/database"
|
|
export BEMOJI_HISTORY_LOCATION="$BATS_TEST_TMPDIR/history"
|
|
mkdir -p "$BEMOJI_DB_LOCATION" "$BEMOJI_HISTORY_LOCATION"
|
|
cat "$BATS_TEST_DIRNAME/resources/test_emoji.txt" > "$BEMOJI_DB_LOCATION/emoji.txt"
|
|
}
|
|
|
|
@test "-v prints correct version number" {
|
|
the_version=$(grep 'bm_version=' "$(which bemoji)")
|
|
|
|
run bemoji -v
|
|
assert_output --partial "v${the_version#bm_version=}"
|
|
}
|
|
|
|
@test "Runs clipping command by default" {
|
|
BEMOJI_CLIP_CMD="echo clipping default" run bemoji 3>&-
|
|
assert_output "clipping default"
|
|
}
|
|
|
|
@test "Runs echo command on -e option" {
|
|
run bemoji -e 3>&-
|
|
assert_output "❤️"
|
|
}
|
|
|
|
@test "Runs clipping command on -c option" {
|
|
BEMOJI_CLIP_CMD="echo clipping result" run bemoji -c 3>&-
|
|
assert_output "clipping result"
|
|
}
|
|
|
|
@test "Runs typing command on -t option" {
|
|
BEMOJI_TYPE_CMD="echo typing result" run bemoji -t 3>&-
|
|
assert_output "typing result"
|
|
}
|
|
|
|
@test "Runs typing and clipping on -ct options" {
|
|
BEMOJI_CLIP_CMD="echo clipping result" BEMOJI_TYPE_CMD="echo typing result" run bemoji -ct 3>&-
|
|
assert_output \
|
|
"clipping result
|
|
typing result"
|
|
}
|
|
|
|
@test "Passes selection to custom typer tool through stdin" {
|
|
BEMOJI_TYPE_CMD="cat -" run bemoji -t 3>&-
|
|
assert_output "❤️"
|
|
}
|
|
|
|
@test "Runs custom default command" {
|
|
BEMOJI_DEFAULT_CMD="echo my custom command" run bemoji 3>&-
|
|
assert_output "my custom command"
|
|
}
|
|
|
|
@test "Using command option overrides custom default command" {
|
|
BEMOJI_DEFAULT_CMD="echo my custom command" BEMOJI_CLIP_CMD="echo my clipping" run bemoji -c 3>&-
|
|
assert_output "my clipping"
|
|
}
|
|
|
|
@test "Returns status code 1 on picker status code 1" {
|
|
BEMOJI_PICKER_CMD="return 1" run bemoji -e 3>&-
|
|
assert_failure 1
|
|
}
|
|
|
|
@test "Prints output with newline by default" {
|
|
bats_require_minimum_version 1.5.0
|
|
BEMOJI_PICKER_CMD="echo heart" run --keep-empty-lines -- bemoji -e
|
|
assert_output --regexp '^heart\n$'
|
|
}
|
|
|
|
@test "Prints output without newline on -n option" {
|
|
bats_require_minimum_version 1.5.0
|
|
BEMOJI_PICKER_CMD="echo heart" run --keep-empty-lines -- bemoji -ne
|
|
assert_output --regexp '^heart$'
|
|
}
|
|
|
|
@test "Understands long-form options" {
|
|
run bemoji --help
|
|
assert_success
|
|
assert_output --partial "A simple emoji picker."
|
|
}
|
|
|
|
@test "Understands long-form equals values" {
|
|
BEMOJI_CLIP_CMD="echo heart" run bemoji --hist-limit=0
|
|
assert_success
|
|
}
|
|
|
|
@test "Understands long-form spaced values" {
|
|
BEMOJI_CLIP_CMD="echo heart" run bemoji --hist-limit 0
|
|
assert_success
|
|
}
|
|
|
|
@test "Understands short-form spaced values" {
|
|
BEMOJI_CLIP_CMD="echo heart" run bemoji -P 0
|
|
assert_success
|
|
}
|
|
|
|
@test "Can concatenate short-form options and values" {
|
|
BEMOJI_CLIP_CMD="echo heart" run bemoji -neP0
|
|
assert_success
|
|
}
|