[Toybox] hexdump tests.
Rob Landley
rob at landley.net
Wed Mar 27 06:31:44 PDT 2024
On 3/25/24 10:42, enh wrote:
> On Sun, Mar 24, 2024 at 1:40 AM Rob Landley <rob at landley.net> wrote:
>>
>> On 3/22/24 15:02, enh wrote:
>> >> > CANONICALIZE_SPACE_IF_RUNNING_HOST_VERSION=1? so we trust ourselves but no-one
>> >> > else? :-)
>> >>
>> >> I _don't_ trust myself, and I'm not special. (That's policy.)
>> >
>> > yeah, but that's why i suggested
>> > CANONICALIZE_SPACE_IF_RUNNING_HOST_VERSION --- that way we can say "we
>> > can't make hard assertions about the _host's_ whitespace, but we can
>> > still make hard assertions about _ours_". if we just canonicalize all
>> > the whitespace all the time, we can't (say) ensure that columns line
>> > up or whatever.
>>
>> Or we could just "NOSPACE=1 TEST_HOST=1 make tests" if that's the test we want
>> to run...?
>
> it's not though. that's my point. there are several cases:
>
> 1. testing toybox --- we know what whitespace we're expecting to
> produce, and want tests to protect against regressions.
>
> 2. testing host tools --- we _don't_ have control over what whitespace
> the host produces.
> a) in some cases we manually mark individual tests to show "we don't
> care about host whitespace for this test case".
> b) sometimes this applies to _all_ the tests for a toy.
>
> we're talking about case 2b here, which is currently the
> least-well-supported variant.
You can NOSPACE=1 in an individual tests/command.test and it should last until
the end of the file? That's why scripts/test.sh does:
# Run command.test in a subshell
(. "$1"; cd "$TESTDIR"; echo "$FAILCOUNT" > continue)
So the variables and functions and so on defined in one test don't leak into
others. I spent like 3 commits getting that to work properly, the last of which
was commit 07bbc1f61280 and mentions the previous 2.
> i think we're talking at cross purposes because _i'm_ talking about
> variables set _within the tests, by the tests themselves_ and you're
> talking about variables set on the command-line, which i don't think
> make any sense here, because we're talking about properties of the
> individual tests/commands.
There are three scopes:
1) Variables exported into all tests
POTATO=1 make tests
2) Variables set for a single test:
POTATO=1 testcmd "thingy" "-x woo" "expected\n" "file" "stdin"
3) Variables set for the current test file.
[ -n "$TEST_HOST" ] && NOSPACE=1
Which is just a normal assignment (or export) in a tests/file.test, they go away
at the end of the current file (because of the above parenthetical subshell
calling it), and which was the new thing I added in 2022.
I remember my first attempt at this years ago ctrl-c didn't work reliably, but
the fix to that was just a trap at the top of scripts/test.sh:
# Kill child processes when we exit
trap 'kill $(jobs -p) 2>/dev/null; exit 1' INT
> (unless you really do want to say "there's absolutely nothing we can
> do about host whitespace, so give up completely", which i think has
> yet to be proven that it's _that_ bad. but there are commands where
> having a test that says "this whitespace -- that toybox produces -- is
> reasonable [but as long as the non-whitespace matches, and there's
> _some_ whitespace everywhere we have whitespace, we'll accept any
> whitespace from the host tool]".)
I think per-command [ -n "$TEST_HOST" ] && NOSPACE=1 might be reasonable. I'd
rather not blanket do it for all commands.
Rob
More information about the Toybox
mailing list