hledger/tests
Simon Michael b1f3880c3d lib: drop the file format auto-detection feature
For a long time hledger has auto-detected the file format when it's
not known, eg when reading from a file with unusual extension (like
.dat or .txt), or from standard input (-f-), or when using the include
directive (which currently ignores file extensions).

Auto-detecting has been done by trying all readers until one succeeds.
This could guess wrong in some cases, but it was so rare that it has
been working fine.

Recently, more conveniences have been added to timedot format,
increasing its overlap with journal format, which makes this kind of
auto-detection unreliable.

Auto-detection and auto-detection failures are (probably) still pretty
rare in practice. But when it does happen it's confusing, giving
misleading errors or false successes (eg printing timedot entries
instead of a journal error).

For predictability and to minimise confusion, hledger no longer tries
to guess; when there's no file extension or reader prefix, it assumes
journal format. To specify one of the other formats, you must use a
standard file extension (.timeclock, .timedot, .csv, .ssv, .tsv), or a
reader prefix (-f csv:foo.txt, -f timedot:-).

For now, the include directive still tries to autodetect
(journal/timeclock/timedot), and this can't be overridden; it will be
fixed later.

Experimental; testing and feedback welcome.
2020-03-01 14:06:29 -08:00
..
addons ;tests: fix some func tests broken by c6da152e 2019-12-28 21:08:27 -08:00
balance Get "make functest" working again 2020-01-07 15:58:54 -08:00
cli Get "make functest" working again 2020-01-07 15:58:54 -08:00
i18n Get "make functest" (mostly) working again 2020-01-07 15:58:54 -08:00
journal lib: drop the file format auto-detection feature 2020-03-01 14:06:29 -08:00
print Get "make functest" (mostly) working again 2020-01-07 15:58:54 -08:00
register Get "make functest" working again 2020-01-07 15:58:54 -08:00
0unittests.test ;tests: move 0unittests up, delete unused examples symlink 2019-07-08 08:02:54 +01:00
account-aliases.test Get "make functest" (mostly) working again 2020-01-07 15:58:54 -08:00
accounts-sorting.test ;tests: flatten functional test files a bit 2019-07-08 08:28:03 +01:00
accounts.test ;tests: flatten functional test files a bit 2019-07-08 08:28:03 +01:00
add.test ;tests: flatten functional test files a bit 2019-07-08 08:28:03 +01:00
amount-rendering.test Get "make functest" (mostly) working again 2020-01-07 15:58:54 -08:00
balancesheet.test Get "make functest" working again 2020-01-07 15:58:54 -08:00
cashflow.test Get "make functest" working again 2020-01-07 15:58:54 -08:00
close.test ; close: update flag names in tests 2020-01-22 15:25:10 -08:00
csv.test csv: refine unknown accounts more thoroughly, a better fix for #1192 2020-02-26 22:45:49 -08:00
descriptions.test payees: Split command into descriptions, payees, and notes 2019-07-15 08:22:16 +01:00
forecast.test Get "make functest" working again 2020-01-07 15:58:54 -08:00
hledger-csv test: updated csv parser tests to nicer format 2019-11-05 21:16:42 +00:00
incomestatement.test Get "make functest" working again 2020-01-07 15:58:54 -08:00
notes.test payees: Split command into descriptions, payees, and notes 2019-07-15 08:22:16 +01:00
payees.test payees: Split command into descriptions, payees, and notes 2019-07-15 08:22:16 +01:00
pivot.test Get "make functest" working again 2020-01-07 15:58:54 -08:00
prices.test prices: style price amounts; always show full precision 2019-10-20 07:09:34 -07:00
query-desc.test Get "make functest" (mostly) working again 2020-01-07 15:58:54 -08:00
query-tag.test Get "make functest" (mostly) working again 2020-01-07 15:58:54 -08:00
README.md doc: add a README for the functional tests, linked from contrib guide 2019-04-19 09:56:33 -07:00
rewrite.test Get "make functest" (mostly) working again 2020-01-07 15:58:54 -08:00
roi.test Get "make functest" (mostly) working again 2020-01-07 15:58:54 -08:00
sample.journal ;tests: flatten functional test files a bit 2019-07-08 08:28:03 +01:00
stats.test ;tests: flatten functional test files a bit 2019-07-08 08:28:03 +01:00
tags.test tags: add --values flag 2019-07-26 23:18:21 +01:00
timeclock.test lib: drop the file format auto-detection feature 2020-03-01 14:06:29 -08:00
timedot.test lib: drop the file format auto-detection feature 2020-03-01 14:06:29 -08:00

hledger's functional tests. See also Contributor Guide: Tests.

These mainly test the hledger CLI and (indirectly) hledger-lib. They are organised roughly by component.

Running these requires shelltestrunner. Older test files are in format 1; newer ones use format 3 (preferred). Some tests invoke unix commands so will not run in a Windows CMD shell.

Run them all (also builds hledger):

make functest

See how the Makefile is invoking shelltestrunner:

$ make functest -n
stack build --fast hledger
(COLUMNS=80 stack exec -- shelltest --execdir -j16 --hide-successes --exclude=/_ -w `stack exec -- which hledger` tests \
        && echo functest PASSED) || (echo functest FAILED; false)

These are the most important:

  • COLUMNS=80 makes output independent of your terminal width.
  • --execdir runs each test within its own directory.
  • -w `stack exec -- which hledger` ensures you are testing the hledger executable that was just built.
  • -j16 runs tests in parallel which is much faster.

Run only the tests matching a regular expression:

$ COLUMNS=80 shelltest --execdir -w `stack exec -- which hledger` tests -i balance-assertions.*19
:tests/journal/balance-assertions.test:19: [OK]

         Test Cases  Total      
 Passed  1           1          
 Failed  0           0          
 Total   1           1          

Run only the tests in one file:

$ COLUMNS=80 shelltest --execdir -w `stack exec -- which hledger` tests/cli/query-args.test
:tests/cli/query-args.test:1: [OK]
:tests/cli/query-args.test:2: [OK]
:tests/cli/query-args.test:3: [OK]

         Test Cases  Total      
 Passed  3           3          
 Failed  0           0          
 Total   3           3          

Run a test repeatedly as its file is changed:

$ ls tests/cli/query-args.test | entr bash -c "COLUMNS=80 shelltest --execdir -w `stack exec -- which hledger` tests/cli/query-args.test -i1"
:tests/cli/query-args.test:1: [OK]

         Test Cases  Total      
 Passed  1           1          
 Failed  0           0          
 Total   1           1          
:tests/cli/query-args.test:1: [OK]

         Test Cases  Total      
 Passed  1           1          
 Failed  0           0          
 Total   1           1          
  C-c C-c

More shelltestrunner options:

$ shelltest --help