diff options
Diffstat (limited to 'test/feh-scr-i.t')
-rwxr-xr-x | test/feh-scr-i.t | 326 |
1 files changed, 326 insertions, 0 deletions
diff --git a/test/feh-scr-i.t b/test/feh-scr-i.t new file mode 100755 index 0000000..8f0cb09 --- /dev/null +++ b/test/feh-scr-i.t @@ -0,0 +1,326 @@ +#!/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 $win; +my ( $width, $height ); +my $pwd = getcwd(); +my $test_id = 0; +my $scr_dir = '/tmp/feh-test-scr'; + +$ENV{HOME} = 'test'; + +sub waitfor(&) { + my ($sub) = @_; + my $out; + for ( 1 .. 10 ) { + sleep(0.05); + $out = &{$sub}; + if ($out) { + return $out; + } + } + return 0; +} + +sub feh_start { + my ( $opts, $files ) = @_; + my $id; + + $opts //= q{}; + $files //= 'test/ok/png'; + + StartApp("feh ${opts} ${files}"); + ($id) = WaitWindowViewable(qr{^feh}); + + if ( not $id ) { + 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 ( $one, $two ) = @_; + + 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 0; + } + + 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' +); +test_scr('draw_all_multi'); +feh_stop(); + +feh_start( + "--draw-actions --draw-filename --info 'echo foo; echo bar' " + . '--action quux --action5 baz --action8 "nrm \'%f\'"', + 'test/bg/exact/in' +); +test_scr('draw_all_one'); +feh_stop(); + +feh_start( '--fullscreen', 'test/bg/large/w/in' ); +test_scr('feh_full_lwi'); +feh_stop(); + +feh_start( q{}, 'test/bg/large/w/in' ); +test_scr('feh_lwi'); + +SendKeys('^({RIG})'); +test_scr('feh_lwi_scroll_r'); + +SendKeys('^({DOW})'); +test_scr('feh_lwi_scroll_rd'); + +SendKeys('^({RIG})'); +test_scr('feh_lwi_scroll_rdr'); + +SendKeys('^({UP})'); +test_scr('feh_lwi_scroll_rdru'); + +SendKeys('^({LEF})'); +test_scr('feh_lwi_scroll_rdrul'); + +feh_stop(); + +feh_start( '--scale-down', 'test/bg/large/w/in' ); +test_scr('feh_scaledown_lwi'); +feh_stop(); + +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_stop(); + +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/bg/exact/in' ); +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'); + +SendKeys('{DOW}'); +test_scr('feh_lhi_iirrio'); + +feh_stop(); + +feh_start( q{}, 'test/bg/large/h/in' ); +test_scr('feh_lhi'); + +SendKeys('{DOW}'); +test_scr('feh_lhi_o'); + +SendKeys('{DOW}'); +test_scr('feh_lhi_oo'); + +SendKeys('{DOW}'); +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"); |