;ui: test: cleanup, remove non-working test attempts
This commit is contained in:
		
							parent
							
								
									aa7a99a437
								
							
						
					
					
						commit
						76a6c5fe4f
					
				| @ -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. | ||||
| 
 | ||||
| @ -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 | ||||
| >= | ||||
| @ -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/' | ||||
| @ -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$$ | ||||
| @ -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 | ||||
| @ -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. | ||||
|  | ||||
| @ -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 | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user