Test-More / test-more

Test2, Test::More, Test::Simple and Test::Builder Perl modules for writing tests
Other
140 stars 88 forks source link

Report line number in active file handle for test failures #901

Open dboehmer opened 2 years ago

dboehmer commented 2 years ago

I often use the DATA block for storing test data and process that in a loop. I just realized that warn() and die() report the line number of the current file handle but tests don’t. But that would be very handy for test statements repeated in a loop.

I think it should be possible to do so. Do you agree it’s desirable?

use Test2::V0;

is <DATA> => 'foo';
warn 'warns';
die 'dies';

__DATA__
bar
$ perl test.t
# Seeded srand with seed '20221020' from local date.
not ok 1
# Failed test at test.t line 3.
# +-------+----+-------+
# | GOT   | OP | CHECK |
# +-------+----+-------+
# | bar\n | eq | foo   |
# +-------+----+-------+
warns at test.t line 4, <DATA> line 1.
dies at test.t line 5, <DATA> line 1.
# Tests were run but no plan was declared and done_testing() was not seen.
# Looks like your test exited with 255 after test #1.

I suggest the output should look like:

not ok 1
# Failed test at test.t line 3, <DATA> line 1.
exodist commented 1 year ago

This might be possible via a plugin. But I do not think it makes sense as a default. If the necessary hook does not yet exist I can probably add it. I do think it should be made easy to implement something like this, if I have not already made it easy.

exodist commented 1 year ago

@dboehmer please see https://github.com/Test-More/Test2-Suite/pull/265 if this is sufficient for your needs we can either merge it here, or put it into its own dist.