@ -21,6 +21,7 @@ TestLib - helper module for writing PostgreSQL's C<prove> tests.
# Miscellanea
# Miscellanea
print "on Windows" if $ TestLib:: windows_os ;
print "on Windows" if $ TestLib:: windows_os ;
print "IO::Pty is available" if $ TestLib:: have_io_pty ;
my $ path = TestLib:: perl2host ( $ backup_dir ) ;
my $ path = TestLib:: perl2host ( $ backup_dir ) ;
ok ( check_mode_recursive ( $ stream_dir , 0700 , 0600 ) ,
ok ( check_mode_recursive ( $ stream_dir , 0700 , 0600 ) ,
"check stream dir permissions" ) ;
"check stream dir permissions" ) ;
@ -83,9 +84,10 @@ our @EXPORT = qw(
command_checks_all
command_checks_all
$ windows_os
$ windows_os
$ have_io_pty
) ;
) ;
our ( $ windows_os , $ tmp_check , $ log_path , $ test_logfile ) ;
our ( $ windows_os , $ tmp_check , $ log_path , $ test_logfile , $ have_io_pty ) ;
my @ no_stdin ;
my @ no_stdin ;
@ -119,6 +121,9 @@ BEGIN
require Win32API::File ;
require Win32API::File ;
Win32API::File - > import ( qw( createFile OsFHandleOpen CloseHandle ) ) ;
Win32API::File - > import ( qw( createFile OsFHandleOpen CloseHandle ) ) ;
}
}
eval { require IO::Pty ; } ;
$ have_io_pty = 1 unless $@ ;
}
}
= pod
= pod
@ -133,6 +138,12 @@ Set to true when running under Windows, except on Cygwin.
= back
= back
= item C <$have_io_pty>
Set to true when IO:: Pty is available .
= back
= cut
= cut
INIT
INIT
@ -182,18 +193,17 @@ INIT
autoflush $ testlog 1 ;
autoflush $ testlog 1 ;
# Settings to close stdin for certain commands.
# Settings to close stdin for certain commands.
# On non-Windows, use a pseudo-terminal, so that libraries like openssl
# If IO::Pty is present, use a pseudo-terminal, so that libraries like
# which open the tty if they think stdin isn't one for a password
# openssl which open the tty if they think stdin isn't one for a password
# don't block. Windows doesn't have ptys, so just provide an empty
# don't block. Elsewhere just provide an empty string for stdin.
# string for stdin.
if ( $ have_io_pty )
if ( $ windows_os )
{
{
@ no_stdin = ( '<' , \ "" ) ;
use charnames ':full' ;
@ no_stdin = ( '<pty<' , \ "\N{END OF TRANSMISSION}" ) ;
}
}
else
else
{
{
use charnames ':full' ;
@ no_stdin = ( '<' , \ "" ) ;
@ no_stdin = ( '<pty<' , \ "\N{END OF TRANSMISSION}" ) ;
}
}
}
}