在Windows上构建TAP :: Formatter :: HTML时出现问题

时间:2013-01-15 18:29:11

标签: perl cpan tap tap-harness

我的cpan TAP::Formatter::HTML安装在01_basic.t处挂起,我不确定原因:

  CPAN.pm: Going to build S/SP/SPURKIS/TAP-Formatter-HTML-0.09.tar.gz

# running Build.PL --installdirs site
Set up gcc environment - 3.4.5 (mingw-vista special r3)
Set up gcc environment - 3.4.5 (mingw-vista special r3)
Set up gcc environment - 3.4.5 (mingw-vista special r3)
Set up gcc environment - 3.4.5 (mingw-vista special r3)
Created MYMETA.yml and MYMETA.json
Creating new 'Build' script for 'TAP-Formatter-HTML' version '0.09'
C:\Perl\bin\perl.exe Build --makefile_env_macros 1
Set up gcc environment - 3.4.5 (mingw-vista special r3)
Set up gcc environment - 3.4.5 (mingw-vista special r3)
Set up gcc environment - 3.4.5 (mingw-vista special r3)
Building TAP-Formatter-HTML
  SPURKIS/TAP-Formatter-HTML-0.09.tar.gz
  C:\Perl\site\bin\dmake.exe -- OK
CPAN: YAML::XS loaded ok (v0.35)
Running make test
C:\Perl\bin\perl.exe Build --makefile_env_macros 1 test
Set up gcc environment - 3.4.5 (mingw-vista special r3)
Set up gcc environment - 3.4.5 (mingw-vista special r3)
Set up gcc environment - 3.4.5 (mingw-vista special r3)
t\01_basic.t ............... 1/? Caught SIGINT. Trying to quit ...
Terminating on signal SIGINT(2)
Terminating on signal SIGINT(2)
Terminate batch job (Y/N)? Y

为了更好地理解这个的根本原因,我修改了测试以包含一些print并独立运行:

use strict;
use warnings;

$|++;

use lib 'lib';
use lib 't/lib';
use feature 'say';

use Test::More 'no_plan';
use FileTempTFH;
use File::Basename qw( basename );

use TAP::Harness;
use_ok( 'TAP::Formatter::HTML' );

my $stdout_fh      = FileTempTFH->new;
say "Defined FileTempTFH object";

my $stdout_orig_fh = IO::File->new_from_fd( fileno(STDOUT), 'w' )
  or die "Error opening STDOUT for writing: $!";
say "Defined IO::File object";

STDOUT->fdopen( fileno($stdout_fh), 'w' )
  or die "Error redirecting STDOUT: $!";
say "Opened STDOUT";

my @tests = glob( 't/data/*.pl' );
say "Tests defined : @tests";

my $h = TAP::Harness->new({ merge => 1,
                            formatter_class => 'TAP::Formatter::HTML' });
$h->runtests(@tests);
say "Tests run";

STDOUT->fdopen( fileno($stdout_orig_fh), 'w' )
  or die "Error resetting STDOUT: $!";

my $stdout = $stdout_fh->get_all_output || '';
isnt( $stdout, '', 'captured test output to stdout' );

foreach my $file (@tests) {
    my $test = basename( $file );
    $test    =~ s/\.pl$//;
    ok( $stdout =~ qr|$test|, "output contains test '$test'" );
}

这也挂起了:

C:\Perl\cpan\sources\authors\id\S\SP\SPURKIS\TAP-Formatter-HTML-0.09>perl t\01_basic.t
ok 1 - use TAP::Formatter::HTML;
Defined FileTempTFH object
Defined IO::File object

似乎挂起的声明是STDOUT->fdopen( fileno($stdout_fh), 'w' )

为什么会发生这种情况,如何在我的设置中安装模块?


PS FileTempTFH

的内容
package FileTempTFH;

use strict;
use warnings;

use Fcntl qw( SEEK_SET );

use base qw( File::Temp );

sub get_all_output {
    my $self = shift;
    $self->seek( 0, SEEK_SET );
    my $html;
    {
    local $/ = undef;
    $html = <$self>;
    }
    return $html;
}

1;

我的perl -V详细信息:

Set up gcc environment - 3.4.5 (mingw-vista special r3) Summary of my perl5 (revision 5 version 14 subversion 2) configuration:

  Platform:
    osname=MSWin32, osvers=5.2, archname=MSWin32-x86-multi-thread
    uname=''
    config_args='undef'
    hint=recommended, useposix=true, d_sigaction=undef
    useithreads=define, usemultiplicity=define
    useperlio=define, d_sfio=undef, uselargefiles=define, usesocks=undef
    use64bitint=undef, use64bitall=undef, uselongdouble=undef
    usemymalloc=n, bincompat5005=undef   Compiler:
    cc='C:/Perl/site/bin/gcc.exe', ccflags ='-DNDEBUG -DWIN32 -D_CONSOLE -DNO_STRICT -DPERL_TEXTMODE_SCRIPTS -DUSE_SITECUSTOMIZE -DPERL_IMPLICIT_CONTE XT -DPERL_IMPLICIT_SYS -DUSE_PERLIO -D_USE_32BIT_TIME_T -DHASATTRIBUTE -fno-strict-aliasing -mms-bitfields',
    optimize='-O2',
    cppflags='-DWIN32'
    ccversion='', gccversion='3.4.5 (mingw-vista special r3)', gccosandvers=''
    intsize=4, longsize=4, ptrsize=4, doublesize=8, byteorder=1234
    d_longlong=undef, longlongsize=8, d_longdbl=define, longdblsize=8
    ivtype='long', ivsize=4, nvtype='double', nvsize=8, Off_t='__int64', lseeksize=8
    alignbytes=8, prototype=define   Linker and Libraries:
    ld='C:\Perl\site\bin\g++.exe', ldflags ='-L"C:\Perl\lib\CORE"'
    libpth=\lib
    libs=-lkernel32 -luser32 -lgdi32 -lwinspool -lcomdlg32 -ladvapi32 -lshell32 -lole32 -loleaut32 -lnetapi32 -luuid -lws2_32 -lmpr -lwinmm -lversion
-lodbc32 -lodbccp32 -lcomctl32 -lmsvcrt
    perllibs=-lkernel32 -luser32 -lgdi32 -lwinspool -lcomdlg32 -ladvapi32 -lshell32 -lole32 -loleaut32 -lnetapi32 -luuid -lws2_32 -lmpr -lwinmm -lvers ion -lodbc32 -lodbccp32 -lcomctl32 -lmsvcrt
    libc=msvcrt.lib, so=dll, useshrplib=true, libperl=perl514.lib
    gnulibc_version=''   Dynamic Linking:
    dlsrc=dl_win32.xs, dlext=dll, d_dlsymun=undef, ccdlflags=' '
    cccdlflags=' ', lddlflags='-mdll -L"C:\Perl\lib\CORE"'


Characteristics of this binary (from libperl):   Compile-time options: MULTIPLICITY PERL_DONT_CREATE_GVSV
                        PERL_IMPLICIT_CONTEXT PERL_IMPLICIT_SYS
                        PERL_MALLOC_WRAP PERL_PRESERVE_IVUV PL_OP_SLAB_ALLOC
                        USE_ITHREADS USE_LARGE_FILES USE_PERLIO USE_PERL_ATOF
                        USE_SITECUSTOMIZE   Locally applied patches:
        ActivePerl Build 1402 [295342]   Built under MSWin32   Compiled at Oct  7 2011 15:49:44   @INC:
    C:/Perl/site/lib
    C:/Perl/lib
    .

1 个答案:

答案 0 :(得分:2)

尝试更新一个,从RT票证看似在当前版本中解决:

“我在v0.11中解决了这个问题。”

因为只有测试失败,你可以强制安装它。测试:

http://howto.eyeoncomputers.com/programming/cpan-force-install/

fforce install TAP::Formatter::HTML 

或者使用cpanm

cpanm --notest TAP::Formatter::HTML 

此致