Newer
Older
#!/usr/bin/env perl
use strict;
use warnings;
use 5.010;
use autodie qw/:all/;
use Cwd;
use GD qw/:DEFAULT :cmp/;
use Test::More tests => 54;
use Time::HiRes qw/sleep/;
use X11::GUITest qw/:ALL/;
my ( $pid_xnest, $pid_twm );
my ( $width, $height );
my $pwd = getcwd();
my $scr_dir = '/tmp/feh-test-scr';
Birte Kristina Friesel
committed
$ENV{HOME} = 'test';
sub waitfor(&) {
my ($sub) = @_;
my $out;
sleep(0.05);
$out = &{$sub};
if ($out) {
return $out;
}
}
return 0;
}
sub feh_start {
my ( $opts, $files ) = @_;
$files //= 'test/ok/png';
StartApp("feh ${opts} ${files}");
($id) = WaitWindowViewable(qr{^feh});
BAIL_OUT("Unable to start feh ${opts} ${files}");
}
if ( not SetInputFocus($id) ) {
BAIL_OUT("Unable to focus window");
}
return $id;
}
sub feh_stop {
SendKeys('{ESC}');
if ( not waitfor { not FindWindowLike(qr{^feh}) } ) {
BAIL_OUT("Unclosed feh window still open, cannot continue");
}
}
sub same_files {
my $img_one = GD::Image->new($one);
my $img_two = GD::Image->new($two);
if ( not defined $img_one or not defined $img_two ) {
return ( !( $img_one->compare($img_two) & GD_CMP_IMAGE ) );
}
sub check_scr {
my ($file) = @_;
system("import -silent -window root ${scr_dir}/feh_${$}.png");
return same_files( "test/scr/${file}", "${scr_dir}/feh_${$}.png" );
}
sub test_scr {
my ($file) = @_;
my $msg = "X root window is test/scr/${file}";
$test_id++;
if ( waitfor { check_scr($file) } ) {
pass($msg);
}
else {
fail($msg);
rename( "${scr_dir}/feh_${$}.png",
"${scr_dir}/feh_${$}_${test_id}_${file}.png" );
if ( FindWindowLike(qr{^feh}) ) {
BAIL_OUT('It appears you have an open feh window. Please close it.');
}
if ( not -d $scr_dir ) {
mkdir($scr_dir);
}
feh_start(
"--draw-actions --draw-filename --info 'echo foo; echo bar' "
. '--action quux --action5 baz --action8 "nrm \'%f\'"',
'test/bg/exact/in test/bg/large/w/in test/bg/large/h/in'
);
feh_stop();
feh_start(
"--draw-actions --draw-filename --info 'echo foo; echo bar' "
. '--action quux --action5 baz --action8 "nrm \'%f\'"',
feh_start( '--fullscreen', 'test/bg/large/w/in' );
feh_start( q{}, 'test/bg/large/w/in' );
test_scr('feh_lwi_scroll_rdru');
test_scr('feh_lwi_scroll_rdrul');
feh_start( '--scale-down', 'test/bg/large/w/in' );
feh_start( '--thumbnails', 'test/ok/gif test/ok/jpg test/ok/png test/ok/pnm' );
test_scr('thumbnail_default');
feh_stop();
feh_start( '--index --limit-width 400',
'test/ok/gif test/ok/jpg test/ok/png test/ok/pnm' );
test_scr('index_w400');
feh_stop();
feh_start( '--fullindex --limit-width 400',
'test/ok/gif test/ok/jpg test/ok/png test/ok/pnm' );
test_scr('index_full_w400');
feh_stop();
feh_start(
'--index --limit-width 400 --index-info "%n\n%S\n%wx%h"',
'test/ok/gif test/ok/jpg test/ok/png test/ok/pnm'
);
test_scr('index_full_w400');
feh_stop();
feh_start( '--index --limit-height 400',
'test/ok/gif test/ok/jpg test/ok/png test/ok/pnm' );
test_scr('index_h400');
feh_stop();
feh_start( '--fullindex --limit-height 400',
'test/ok/gif test/ok/jpg test/ok/png test/ok/pnm' );
test_scr('index_full_h400');
feh_stop();
feh_start( '--geometry +10+20', 'test/ok/png' );
test_scr('geometry_offset_only');
feh_stop();
feh_start( '--caption-path .tc', 'test/bg/exact/in' );
test_scr('caption_none');
SendKeys('c');
test_scr('caption_new');
SendKeys(
'Picknick im Zenit metaphysischen Wiederscheins der astralen Kuhglocke');
test_scr('caption_while');
SendKeys('~');
test_scr('caption_done');
SendKeys('c');
test_scr('caption_while');
SendKeys( '{BKS}' x 80 );
test_scr('caption_new');
SendKeys('~');
test_scr('caption_none');
SendKeys('cfoobar{ESC}');
test_scr('caption_none');
feh_start( '--info "echo \'%f\n%wx%h\'"', 'test/bg/exact/in' );
test_scr('draw_info');
feh_stop();
feh_start( '--info "echo \'%f\n%wx%h\'" --draw-tinted', 'test/bg/exact/in' );
test_scr('draw_info_tinted');
feh_stop();
feh_start( '--draw-actions --action8 "nrm \'%f\'"', 'test/bg/exact/in' );
test_scr('draw_action');
feh_stop();
feh_start( '--draw-actions --action8 "nrm \'%f\'" --draw-tinted',
'test/bg/exact/in' );
test_scr('draw_action_tinted');
feh_stop();
feh_start( '--draw-filename', 'test/bg/exact/in' );
test_scr('draw_filename');
feh_stop();
feh_start( '--draw-filename --draw-tinted', 'test/bg/exact/in' );
test_scr('draw_filename_tinted');
feh_stop();
feh_start( '--draw-filename --draw-actions --action8 "nrm \'%f\'"',
'test/bg/exact/in' );
test_scr('draw_filename_action');
feh_stop();
feh_start(
'--draw-filename --draw-actions --action8 "nrm \'%f\'" --draw-tinted',
test_scr('draw_filename_action_tinted');
feh_stop();
feh_start( '--action8 "nrm \'%f\'"', 'test/bg/exact/in' );
test_scr('draw_nothing');
SendKeys('d');
test_scr('draw_filename');
SendKeys('da');
test_scr('draw_action');
SendKeys('d');
test_scr('draw_filename_action');
SendKeys('da');
test_scr('draw_nothing');
feh_stop();
feh_start( '--draw-tinted', 'test/bg/exact/in' );
test_scr('draw_nothing');
feh_stop();
feh_start( q{}, 'test/bg/large/h/in' );
test_scr('feh_lhi');
SendKeys('{UP}');
test_scr('feh_lhi_i');
SendKeys('{UP}');
test_scr('feh_lhi_ii');
SendKeys('^({RIG})');
test_scr('feh_lhi_iir');
SendKeys('^({RIG})');
test_scr('feh_lhi_iirr');
SendKeys('{UP}');
test_scr('feh_lhi_iirri');
test_scr('feh_lhi_iirrio');
feh_stop();
feh_start( q{}, 'test/bg/large/h/in' );
test_scr('feh_lhi_ooo');
feh_stop();
feh_start( q{}, 'test/bg/transparency' );
test_scr('feh_ibg_default');
feh_stop();
feh_start( '--image-bg checks', 'test/bg/transparency' );
test_scr('feh_ibg_default');
feh_stop();
feh_start( '--image-bg black', 'test/bg/transparency' );
test_scr('feh_ibg_black');
feh_stop();
feh_start( '--image-bg white', 'test/bg/transparency' );
test_scr('feh_ibg_white');
feh_stop();
unlink('test/bg/exact/.tc/in.txt');
rmdir('test/bg/exact/.tc');
unlink("${scr_dir}/feh_${$}.png");