App::Yath::Converting - Things you may need to change in your tests before you can use yath.
By default yath tells any Test2 or Test::Builder tests to use Test2::Formatter::Stream instead of Test2::Formatter::TAP. This is done in order to make sure as much data as possible makes it to yath, TAP is a lossy formater by comparison. A consequence of this is that STDOUT and STDERR are redirected to files, and the ':utf8' encoding is set.
If your test uses syswrite on STDERR/STDOUT you will be hit by a warning in some perl versions, and it will be fatal in 5.30+. This is because syswrite on utf8 filehandle is a bad thing.
syswrite
If you print non-utf8 characters to STDERR/STDOUT you will get wide character in print warnings under yath.
wide character in print
If you compare non-utf8 strings in testing tools like is` they will report diagnostics which include the non-utf8 characters, which will result in wide character warnings.
is`
Update your test to use UTF8. In many cases this is as simple as importing Test2::Plugin::UTF8.
Test2::Plugin::UTF8
#!/usr/bin/perl use Test2::Plugin::UTF8; ...
This sets all output handles (STDERR/STDOUT) including those of any Test2::Formatter subclasses to use utf8. This will also import the utf8 pragma for you to read your test fiel source as utf8.
You can add a harness directive to the top of offending tests that tell the harness those specific tests should still use the TAP formatter.
#!/usr/bin/perl # HARNESS-NO-STREAM ...
This directive can come after the #! line, and after use statements, but must come BEFORE any empty lines or runtime statements.
#!
You can run yath with the --no-stream option, which will have tests default to TAP. This is not recommended as TAP is lossy.
--no-stream
The default mode for yath is to preload a few things, then fork to spawn each test. This is a complicated procedure, and it uses goto::file under the hood. Sometimes you have tests that simply will not work this way, or tests that verify specific libraries are not already loaded.
You can use this harness directive inside your tests to tell yath not to fork, but to instead launch a new perl process to run the test.
#!/usr/bin/perl # HARNESS-NO-PRELOAD ...
Both these options tell yath not to preload+fork, but to run ALL tests in new processes. This is slow, it is better to mark specific tests that have issues in preload mode.
The source code repository for Test2-Harness can be found at http://github.com/Test-More/Test2-Harness/.
Copyright 2020 Chad Granum <exodist7@gmail.com>.
This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.
See http://dev.perl.org/licenses/
To install Test2::Harness, copy and paste the appropriate command in to your terminal.
cpanm
cpanm Test2::Harness
CPAN shell
perl -MCPAN -e shell install Test2::Harness
For more information on module installation, please visit the detailed CPAN module installation guide.