2012-05-19 20 views
0
#!/usr/bin/env perl 
use warnings; 
no warnings 'redefine'; 
use 5.10.1; 
use Term::ReadKey; 
use lib 'lib'; 
use Term::Choose qw(choose); 

my @test_keys = ( 
    Term::Choose::KEY_SPACE, Term::Choose::KEY_RIGHT, Term::Choose::KEY_RIGHT, Term::Choose::KEY_RIGHT,  
    Term::Choose::KEY_RIGHT, Term::Choose::KEY_SPACE, Term::Choose::KEY_DOWN, Term::Choose::KEY_DOWN, 
    Term::Choose::KEY_DOWN, Term::Choose::KEY_DOWN, Term::Choose::KEY_SPACE, Term::Choose::KEY_BTAB, 
    Term::Choose::KEY_SPACE, Term::Choose::KEY_LEFT, Term::Choose::KEY_UP, Term::Choose::KEY_SPACE, 
    Term::Choose::KEY_DOWN, Term::Choose::KEY_DOWN, Term::Choose::KEY_TAB, Term::Choose::KEY_TAB, 
    Term::Choose::KEY_TAB, Term::Choose::KEY_TAB, Term::Choose::KEY_TAB, Term::Choose::KEY_TAB, 
    Term::Choose::KEY_TAB, Term::Choose::KEY_TAB, Term::Choose::KEY_TAB, Term::Choose::KEY_TAB, 
    Term::Choose::KEY_TAB, Term::Choose::KEY_SPACE, Term::Choose::KEY_BSPACE,Term::Choose::KEY_BSPACE, 
    Term::Choose::KEY_BSPACE,Term::Choose::KEY_BSPACE,Term::Choose::KEY_ENTER 
); 

SetTerminalSize(80, 25 ,0 , 0, \*STDOUT); 

sub Term::Choose::_getch { return shift @test_keys }; 

my @expected = (1, 23, 26, 33, 38, 42, 88); 
my @result = choose([ 1 .. 100 ]); 

say "expected: <@expected>"; 
say "result : <@result>"; 

回報爲什麼`Term :: ReadKey :: SetTerminalSize`在測試中表現不同?

expected: <1 23 26 33 38 42 88> 
result : <1 23 26 33 38 42 88> 

爲什麼SetTerminalSizeTerm::ReadKey沒有在本次測試工作:

#!/usr/bin/env perl 
use warnings; 
no warnings 'redefine'; 
use strict; 
use 5.10.1; 
use Term::ReadKey; 
use Term::Choose qw(choose); 
use Test::More tests => 1; 

my @test_keys = ( 
    Term::Choose::KEY_SPACE, Term::Choose::KEY_RIGHT, Term::Choose::KEY_RIGHT, Term::Choose::KEY_RIGHT,  
    Term::Choose::KEY_RIGHT, Term::Choose::KEY_SPACE, Term::Choose::KEY_DOWN, Term::Choose::KEY_DOWN, 
    Term::Choose::KEY_DOWN, Term::Choose::KEY_DOWN, Term::Choose::KEY_SPACE, Term::Choose::KEY_BTAB, 
    Term::Choose::KEY_SPACE, Term::Choose::KEY_LEFT, Term::Choose::KEY_UP, Term::Choose::KEY_SPACE, 
    Term::Choose::KEY_DOWN, Term::Choose::KEY_DOWN, Term::Choose::KEY_TAB, Term::Choose::KEY_TAB, 
    Term::Choose::KEY_TAB, Term::Choose::KEY_TAB, Term::Choose::KEY_TAB, Term::Choose::KEY_TAB, 
    Term::Choose::KEY_TAB, Term::Choose::KEY_TAB, Term::Choose::KEY_TAB, Term::Choose::KEY_TAB, 
    Term::Choose::KEY_TAB, Term::Choose::KEY_SPACE, Term::Choose::KEY_BSPACE,Term::Choose::KEY_BSPACE, 
    Term::Choose::KEY_BSPACE,Term::Choose::KEY_BSPACE,Term::Choose::KEY_ENTER 
); 

SetTerminalSize(80, 25 ,0 , 0, \*STDOUT); 

sub Term::Choose::_getch { return shift @test_keys }; 

my @expected = (1, 23, 26, 33, 38, 42, 88); 
my @result = choose([ 1 .. 100 ]); 

is("@result", "@expected", 'returnvalues "choose"'); 

輸出:

t/choose.t .. TIOCSWINSZ ioctl call to set terminal size failed: The argument is invalid at t/choose.t line 22, <DATA> line 261. 
# Looks like your test exited with 22 before it could output anything. 
t/choose.t .. Dubious, test returned 22 (wstat 5632, 0x1600) 
Failed 1/1 subtests 

Test Summary Report 
------------------- 
t/choose.t (Wstat: 5632 Tests: 0 Failed: 0) 
    Non-zero exit status: 22 
    Parse errors: Bad plan. You planned 1 tests but ran 0. 
Files=1, Tests=0, 0 wallclock secs (0.02 usr 0.00 sys + 0.04 cusr 0.01 csys = 0.07 CPU) 
Result: FAIL 
Failed 1/1 test programs. 0/0 subtests failed. 

回答

1

可能的,這是因爲腳本試圖調用TIOCSWINSZSTDOUT句柄上爲,在通過單元測試運行的情況下,腳本的STDOUT未附加到終端,而是附加到prove的管道。作爲管道而不是TTY,它不響應此ioctl()併產生顯示的錯誤。

相關問題