* Add named profile sections to .mlrrc, selected via --profile / -P (#358) .mlrrc files may now contain INI-style named sections ("profiles"): # Global settings, applied always: icsv [j] ojson jvstack [tsvout] otsv Lines before any section header are global settings, applied always, so existing .mlrrc files behave exactly as before. The new main flag --profile {name} (alias -P {name}) applies the settings from the [name] section after the global settings; without it, sections are ignored entirely (their lines aren't even parsed). It's a fatal error if a requested profile has no matching section in any .mlrrc file processed, if no .mlrrc file was found at all, or if --profile is combined with --norc or MLRRC=__none__. Also fixes the regression-tester to restore per-case environment variables to their prior values after each case, rather than setting them to the empty string -- needed so cases pointing MLRRC at a test file don't clobber the suite-wide MLRRC=__none__ guard. Includes unit tests, regression-test cases, and doc/man-page updates. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> * Reject --profile / -P within .mlrrc files (#358) Per maintainer feedback on the PR: profiles are selected on the mlr command line, not from within a .mlrrc file, so --profile / -P inside a .mlrrc file is now a parse error -- the same way --prepipe is rejected there -- rather than being silently ignored. Adds a unit test, a should-fail regression case, and a docs bullet. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> --------- Co-authored-by: Claude Fable 5 <noreply@anthropic.com> |
||
|---|---|---|
| .. | ||
| cases | ||
| cases-not-suitable-for-ci | ||
| expected | ||
| input | ||
| stdlib | ||
| README.md | ||
Miller regression tests
There are a few files unit-tested with Go's testing package -- a few dozen cases total.
The vast majority of Miller tests, though -- thousands of cases -- are tested by running scripted invocations of mlr with various flags and inputs, comparing against expected output, and checking the exit code back to the shell.
How to run the regression tests, in brief
Note: while this README.md file is within the test/ subdirectory, all paths in this file are written from the perspective of the user being cd'ed into the repository base directory, i.e. this directory's parent directory.
-
mlr regtest --help -
go test github.com/johnkerl/miller/v6/pkg/...— runs the Go unit tests (a few dozen cases).
Items for the duration of the Go port
mlr regtest -c ...runs the C version of Miller from the local checkout
More details
You can alias mr='mlr regtest' for convenience. With no arguments, mr runs all cases under test/cases/. Pass one or more paths to run only those directories or specific .cmd files.
mr— run all regression cases (default path istest/cases/).mr test/cases/foo— run only cases under that directory.mr -v test/cases/foo— same, plus per-command pass/fail; use-vvor-vvvfor more detail.mr -j test/cases/foo/0003— show the Miller command, any script, and actual output for that case (handy for debugging).mr -p test/cases/foo/0003— populate: write or overwriteexpoutandexperrfrom the current run (use when adding or updating expected output).mr -c ...— use the C build of Miller (e.g.-c→../c/mlr) instead of the current executable.
To review populated files before committing, run mr -p on the desired path, then git diff to inspect changes and git reset --hard to discard them.
Creating new cases
- Create a case directory under
test/cases/, e.g.test/cases/my-feature/0001. - Add a
cmdfile containing the Miller command line (one line), e.g.mlr cat test/input/simple.dkvp. - Use shared input under
test/input/, or add a localinputfile in the case directory; incmdyou can use${CASEDIR}so the command refers to the case directory (e.g.mlr cat ${CASEDIR}/input). - Run
mlr regtest -p test/cases/my-feature/0001to generateexpout(andexperrif the command produces stderr). If the command is expected to exit non-zero, add an emptyshould-failfile. - Run
mlr regtest test/cases/my-feature/0001(without-p) to confirm the case passes.
Optional: mlr — DSL script file when the test uses -f/put/filter; env — environment variables to set for the case (unset after).