4

我正在尝试在 Windows 7 上使用带有活动状态 Perl 的证明 / TAP::Harness 获取颜色(颜色)输出。

实际测试运行良好,只是没有颜色输出。

我在使用 Strawberry Perl 和 WinXP 时遇到了类似的问题。

我无法使用 *nix 和 cygwin 或其他第三方 xterm,它们都会为输出着色。

我知道它有点挑剔,但我想我已经对“绿色”上瘾了:-)

有简单的解决方法吗?- 在激活状态网站上看不到任何东西 - 我正在考虑提出一个错误。有关调试或检查什么的任何指导?

是否值得编写我自己的格式化程序?

在此先感谢您的帮助。

有关已安装模块和尝试的方法的更多详细信息...

这些已安装并且据我所知正在工作

   Win32::Console::ANSI;
   Term::ANSIColor;

该测试脚本有效:

   #!/usr/bin/perl
   use strict;
   use warnings;
   use Win32::Console::ANSI;
   use Term::ANSIColor;

   print "One fish\n";
   print "Two fish\n";
   print color("red"), "Red Fish\n", color("reset");
   print color("blue"), "Blue Fish\n", color("reset");

我试过了:

prove
prove -c

并使用以下带有和不带有格式化程序的测试工具程序,但我假设默认情况下颜色是打开的。

#!/usr/bin/perl
use strict;
use warnings;
use TAP::Harness;

my @tests = glob( 't/*.t' );
my $harness = TAP::Harness->new();
$harness->runtests( @tests );

我还安装了 HTML 格式化程序,它似乎正在工作。

 prove  --formatter=TAP::Formatter::HTML

跑步:

prove  --formatter=TAP::Formatter::Color

在 x:/Perl/site/lib/TAP/Harness.pm 第 679 行通过包“TAP::Formatter::Color”给出无法定位对象方法“详细程度”。

谢谢迈克

4

1 回答 1

5

它似乎是 TAP::Formatter::Color 中的错误1。它附加到控制台的 STDOUT 句柄,但应该着色的消息在 STDERR 上。

这:

my $console = Win32::Console->new( STD_OUTPUT_HANDLE() );

应该是这样的:

my $console = Win32::Console->new( STD_ERROR_HANDLE() );

此外,尽管文档说了什么,但这--color并不是 Windows 上的默认设置。App::Prove (这是“证明”可执行文件背后的内容)显式将 Windows 的默认设置为 false:

sub _color_default {
    my $self = shift;
    return -t STDOUT && !$ENV{HARNESS_NOTTY} && !IS_WIN32;
}


1. 在Test::Harness v3.41中修复了该BUG

于 2014-02-10T16:33:36.377 回答