clipmenu

Simple clipboard management using dmenu
git clone https://git.sinitax.com/cdown/clipmenu
Log | Files | Refs | README | LICENSE | sfeed.txt

commit e85c7691e2b47a9f8dd916666f9966c561fb6c99
parent e8b4d83e2e0633755e42663bfb022036df90d763
Author: Chris Down <chris@chrisdown.name>
Date:   Sun, 15 Jan 2017 09:48:04 +0000

tests: Add clipmenu test

Diffstat:
M.travis.yml | 1+
Atests/test-clipmenu | 76++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Rtest/test-perf -> tests/test-perf | 0
3 files changed, 77 insertions(+), 0 deletions(-)

diff --git a/.travis.yml b/.travis.yml @@ -8,6 +8,7 @@ before_script: script: - shellcheck -s bash clipmenu clipmenud + - tests/test-clipmenu matrix: fast_finish: true diff --git a/tests/test-clipmenu b/tests/test-clipmenu @@ -0,0 +1,76 @@ +#!/bin/bash + +set -e +set -o pipefail + +dir=/tmp/clipmenu.$USER +cache_file=$dir/line_cache + +if [[ $0 == /* ]]; then + location=${0%/*} +else + location=$PWD/${0#./} + location=${location%/*} +fi + +cat - "$location/../clipmenu" > /tmp/clipmenu << 'EOF' +#!/bin/bash + +shopt -s expand_aliases + +shim() { + printf '%s args:' "$1" >&2 + printf ' %q' "${@:2}" >&2 + printf '\n' >&2 + + i=0 + + while IFS= read -r line; do + let i++ + printf '%s line %d stdin: %s\n' "$1" "$i" "$line" >&2 + done + + if [[ -v SHIM_STDOUT ]]; then + printf '%s\n' "$SHIM_STDOUT" + fi +} + +alias dmenu='SHIM_STDOUT="Selected text. (2 lines)" shim dmenu' +alias xsel='shim xsel' +alias xclip='shim xclip' +EOF + +chmod a+x /tmp/clipmenu + +rm -rf "$dir" +mkdir -p "$dir" + +cat > "$cache_file" << 'EOF' +Selected text. (2 lines) +Selected text 2. (2 lines) +EOF + +cat > "$dir/$(cksum <<< 'Selected text. (2 lines)')" << 'EOF' +Selected text. +Yes, it's selected text. +EOF + +### TESTS ### + +output=$(/tmp/clipmenu --foo bar 2>&1) + +printf '%s\n' "$output" > /tmp/qq + +# Arguments are transparently passed to dmenu +grep -Fxq 'dmenu args: -l 8 --foo bar' <<< "$output" + +# Output from cache file should get to dmenu, reversed +grep -Fxq 'dmenu line 1 stdin: Selected text 2. (2 lines)' <<< "$output" +grep -Fxq 'dmenu line 2 stdin: Selected text. (2 lines)' <<< "$output" + +# xsel should copy both to clipboard *and* primary +grep -Fxq 'xsel args: --logfile /dev/null -i --clipboard' <<< "$output" +grep -Fxq 'xsel args: --logfile /dev/null -i --primary' <<< "$output" + +grep -Fxq 'xsel line 1 stdin: Selected text.' <<< "$output" +grep -Fxq "xsel line 2 stdin: Yes, it's selected text." <<< "$output" diff --git a/test/test-perf b/tests/test-perf