From 76a6c5fe4fa56e890e6924a90d8514cae19d559a Mon Sep 17 00:00:00 2001 From: Simon Michael Date: Thu, 26 Aug 2021 19:16:07 -1000 Subject: [PATCH] ;ui: test: cleanup, remove non-working test attempts --- hledger-ui/test/README.md | 8 -- hledger-ui/test/_hledger-ui.test | 28 ------ hledger-ui/test/hledgerui2txt | 4 - hledger-ui/test/uitest.empty | 156 ------------------------------- hledger-ui/test/uitest.expect | 46 --------- hledger-ui/test/uitest.org | 13 ++- hledger-ui/test/uitest2.expect | 15 --- 7 files changed, 6 insertions(+), 264 deletions(-) delete mode 100644 hledger-ui/test/README.md delete mode 100644 hledger-ui/test/_hledger-ui.test delete mode 100755 hledger-ui/test/hledgerui2txt delete mode 100755 hledger-ui/test/uitest.empty delete mode 100755 hledger-ui/test/uitest.expect delete mode 100755 hledger-ui/test/uitest2.expect diff --git a/hledger-ui/test/README.md b/hledger-ui/test/README.md deleted file mode 100644 index 748c0c39f..000000000 --- a/hledger-ui/test/README.md +++ /dev/null @@ -1,8 +0,0 @@ -Some old attempts at making automated tests for hledger-ui, -using either of - -- empty: http://empty.sourceforge.net or (perhaps not tried) https://github.com/ierton/empty -- expect: https://en.wikipedia.org/wiki/Expect - -Needed, but not working yet. For now, use uitest.org instead. - diff --git a/hledger-ui/test/_hledger-ui.test b/hledger-ui/test/_hledger-ui.test deleted file mode 100644 index d6708a63b..000000000 --- a/hledger-ui/test/_hledger-ui.test +++ /dev/null @@ -1,28 +0,0 @@ -# 1. The accounts screen is shown on startup, with the top item selected. -$ ./uitest -f ../../examples/sample.journal ---- sample.journal account balances (1/8) - assets:bank:checking 0 - assets:bank:saving $1 - assets:cash $-2 - expenses:food $1 - expenses:supplies $1 - income:gifts $-1 - income:salary $-1 - liabilities:debts $1 - -# 2. It can be depth-limited at startup. -$ ./uitest -f ../../examples/sample.journal -1 ---- sample.journal account balances to depth 1 (1/4) - assets $-1 - expenses $2 - income $-2 - liabilities $1 - -# 3. When an account is depth clipped, register should show the transactions of it and its subs (#1208) -$ ./uitest -f ../../examples/sample.journal -1 --register assets:bank:checking ---- assets:bank:checking transactions (4/4) - 2008/01/01 income in:salary $1 $1 - 2008/06/01 gift in:gifts $1 $2 - 2008/06/02 save as:ba:saving $-1 $1 - 2008/12/31 * pay off li:debts $-1 0 ->= diff --git a/hledger-ui/test/hledgerui2txt b/hledger-ui/test/hledgerui2txt deleted file mode 100755 index 44fd5e3d6..000000000 --- a/hledger-ui/test/hledgerui2txt +++ /dev/null @@ -1,4 +0,0 @@ -#!/bin/sh -# Convert hledger-ui's output to plain text. Extracted from uitest.sh, see comments there. -exec perl -pe 's/\e\[\d+;1H/\n/g; s/\e\[?.*?[\@-~]//g; s/$/\n/;' | \ - perl -ne 's/(─)+/---/; s/(─)+//; s/ +$//; print unless /^$/' # or /\?:help/' diff --git a/hledger-ui/test/uitest.empty b/hledger-ui/test/uitest.empty deleted file mode 100755 index 2a055c5ea..000000000 --- a/hledger-ui/test/uitest.empty +++ /dev/null @@ -1,156 +0,0 @@ -#!/bin/sh - -# Run hledger-ui in the background without needing an interactive -# terminal, passing through any arguments, and dump its first screen* -# as cleaned up plain text. This allows scripts to run hledger-ui and -# capture its output. -# * Or, all output from inputs hard-coded below. -# -# Here's some sample output for "test/hledgeruicapture -f examples/sample.journal" -# showing the initial output (accounts screen) then the outputs from four inputs: -# RIGHT (draws register screen) -# UP (moves selection up one row; only the heading and old/new rows are redrawn) -# LEFT (draws accounts screen again) -# 1 (redraws accounts screen with depth limit 1). -# Note, -# - only lines which have been redrawn are shown (and perhaps redrawing parts of lines is also possible) -# - all inputs above cause the top line to be redrawn, which helps distinguish the outputs -# - the top line's border chars are converted to --- -# - empty lines and the bottom line (help & border) are omitted -# -# --- sample.journal account balances (1/8) -# assets:bank:checking 0 -# assets:bank:saving $1 -# assets:cash $-2 -# expenses:food $1 -# expenses:supplies $1 -# income:gifts $-1 -# income:salary $-1 -# liabilities:debts $1 -# --- assets:bank:checking transactions (4/4) -# 2008-01-01 income in:salary $1 $1 -# 2008-06-01 gift in:gifts $1 $2 -# 2008-06-02 save as:ba:saving $-1 $1 -# 2008-12-31 * pay off li:debts $-1 0 -# --- assets:bank:checking transactions (3/4) -# 2008-06-02 save as:ba:saving $-1 $1 -# 2008-12-31 * pay off li:debts $-1 0 -# --- sample.journal account balances (1/8) -# assets:bank:checking 0 -# assets:bank:saving $1 -# assets:cash $-2 -# expenses:food $1 -# expenses:supplies $1 -# income:gifts $-1 -# income:salary $-1 -# liabilities:debts $1 -# --- sample.journal account balances to depth 1 (1/4) -# assets $-1 -# expenses $2 -# income $-2 -# liabilities $1 -# -# -# Todo: -# - allow a sequence of inputs to be provided. Eg, first line of stdin -# is hledger-ui arguments, and each following line is an input. -# -# -# Requirements: -# - empty (http://empty.sourceforge.net) is used as a (complicated, -# delicate) way of running hledger-ui from a non-interactive script. -# It is included in tools/empty/ and should be installed in PATH. It -# seemed simpler than using expect (but maybe isn't). - -# For debugging: -# watch -n0.2 "pgrep -fl '(empty|hledger-ui)' | grep -v watch" -# https://www.linuxjournal.com/article/2156 - -# Convert a stream of hledger-ui ANSI output captured by empty -# to a plain text sequence of outputs, suitable for tests. -# Based on https://unix.stackexchange.com/a/4529/286158, Term::ANSIColor -# First regex: -# 1. convert "move to first column" escape sequences to newlines -# 2. strip remaining escape sequences -# 3. (replace empty's <<< delimiters with newlines - not any more, where have they gone ?) -# 4. add a final newline -# Second regex (because I couldn't fix newline matching in the first): -# 1. replace screen-width dash borders with short hyphen delimiters -# 2. strip trailing spaces on each line -# 3. hide empty lines -# 4. hide each screen's bottom help line -hledgerui2txt() -{ - perl -pe 's/\e\[\d+;1H/\n/g; s/\e\[?.*?[\@-~]//g; s/$/\n/;' | \ - perl -ne 's/(─)+/---/; s/(─)+//; s/ +$//; print unless /^$/ or /q:quit/' -} - -# Be sure not to leave empty and/or hledger-ui running if this script is killed. -# (Doesn't prevent occasional "Fatal open FIFO ... No such file or directory" errors.) -cleanup() { - (echo; echo "hledgeruicapture: interrupted, cleaning up") >&2 - if [[ -e p$$ ]]; then PID=$(cat p$$); kill $PID; rm -f c$$; fi -} -trap cleanup INT QUIT TERM - -# Start hledger-ui (and empty's monitor process) in the background, -# specifying input/output FIFOs (with process-specific names in case -# of concurrent testing). We don't use empty's default FIFOs because -# finding their paths in a script is a hassle. -empty -f -i i$$ -o o$$ -p p$$ hledger-ui "$@" - -# Wait for the first screen's final line (containing "q:quit"), then -# send 'q' causing hledger-ui to exit. -# Doesn't work if the line has already been displayed when this runs. -#empty -w -t 1 -i o$$ -o i$$ q:quit q - -# Wait long enough to ensure the first screen has rendered -# (assuming no crazy large data is being displayed). -sleep 0.1 - -# # Testing: send some other stuff -# U=$'\e[A' -# D=$'\e[B' -# R=$'\e[C' -# L=$'\e[D' -# empty -s -o i$$ $R; sleep 0.1 -# empty -s -o i$$ $U; sleep 0.1 -# empty -s -o i$$ $L; sleep 0.1 -# empty -s -o i$$ 1; sleep 0.1 -# empty -s -o i$$ 2; sleep 0.1 -# empty -s -o i$$ 3; sleep 0.1 -# empty -s -o i$$ 1; sleep 0.1 - -# capture the output FIFO's content in a file, before hledger-ui quits ? -# hangs until ctrl-c, why ? -#cat o$$ #> c$$ - -# Send 'q' on the input FIFO, causing hledger-ui to exit. -empty -s -o i$$ q -# But wait until after the pipe has been read, below ? Doesn't help. -# (sleep 1; empty -s -o i$$ q) & - -# drain the output FIFO one last time, allowing empty monitor to exit ? no -#cat o$$ - -# kill empty's monitor process deliberately ? no -#empty -k `cat p$$` - - -# Read all from the output FIFO, causing empty's monitor to exit and -# clean up the FIFOs. And convert it to plain text. - -# can never get empty -r to work right -##empty -r -b 10000 -t 10 -i o$$ | hledgerui2txt - -# cat works.. -# but only when running interactively. When non-interactive -# (eg echo | ./uitest), the FIFO returns nothing. Could be "If all -# file descriptors referring to the write end of a pipe have been -# closed, then an attempt to read(2) from the pipe will see -# end-of-file (read(2) will return 0)" -cat o$$ | hledgerui2txt - -# convert the captured output, and clean up -# cat c$$ | hledgerui2txt -# rm c$$ diff --git a/hledger-ui/test/uitest.expect b/hledger-ui/test/uitest.expect deleted file mode 100755 index 33071e76a..000000000 --- a/hledger-ui/test/uitest.expect +++ /dev/null @@ -1,46 +0,0 @@ -#!/usr/bin/env expect - -# Run hledger-ui in the background without needing an interactive -# shell, passing through any arguments, and dump its first screen* as -# cleaned up plain text. This allows hledger-ui's output to be tested. -# -# * Or multiple screens, from processing the inputs below. - - -set timeout 1 -log_user 0 -# we'll pipe what we capture through hledgerui2txt -set filter [open |./hledgerui2txt w] - -spawn hledger-ui $argv - -# warning: expect-ing output of a brick app is tricky. -# It draws parts of the screen, in layers, with embedded -# escape codes. - -# wait for the first screen to draw (to the bottom line) -# expect "account balances" -# expect timeout -# expect -re ":quit ─+" -#expect ":quit" -puts $filter $expect_out(buffer) - -# send 1 -# expect -re ":quit ─+" -# puts $expect_out(buffer) - -# send 2 -# expect -re ":quit ─+" -# # the last output must be handled differently -# set out $expect_out(buffer) - -# send q -# expect eof - -# # send 2 -# # expect -re ":quit" - -# puts $filter $out -close $filter - -# interact diff --git a/hledger-ui/test/uitest.org b/hledger-ui/test/uitest.org index c9c5306b1..8e604f15c 100644 --- a/hledger-ui/test/uitest.org +++ b/hledger-ui/test/uitest.org @@ -1,14 +1,13 @@ * Human-powered tests for hledger-ui When you want to check that hledger-ui is working correctly, -try some or all of these things. Additions welcome. -Expected output, at least the first few lines of it, -as copied from an 80x25 terminal, is shown below each step. +run through the following tests, by hand, in an 80x25 terminal. +Each test gives a command to run in this directory, and the first +few lines of expected output (and any notes as a # comment). -This is an org outline. When you're familiar with these tests, -you can view it in Emacs org mode with all body text hidden, -showing just the test steps and brief expected result - makes -it quicker to run through them. +Once you're familiar with the tests, you can view this file in Emacs +org mode (eg) with all body text folded, showing just the test steps +and brief expected result. Another source of tests is the tutorial at https://hledger.org/ui.html, which has nice screenshots, but might be less up to date. diff --git a/hledger-ui/test/uitest2.expect b/hledger-ui/test/uitest2.expect deleted file mode 100755 index 06e6ce99c..000000000 --- a/hledger-ui/test/uitest2.expect +++ /dev/null @@ -1,15 +0,0 @@ -#!/usr/bin/env expect - -# Run uitest.empty-ui in the background without needing an interactive -# shell, passing through any arguments. It's pretty stupid to be using -# both expect AND empty, but so far this is the only way I've got it -# to work. The empty script is reasonably reliable at producing the -# output, but can't itself run in a non-interactive script; expect is -# able to make it do that. - - -# TODO: kill (our) empty process if this script is interrupted -trap {puts {open "|ls"}} {INT TERM} - -spawn ./uitest.empty $argv -expect eof