diff options
-rw-r--r-- | Makefile | 4 | ||||
-rwxr-xr-x | test/feh-bg-i.t (renamed from test/feh-bg.i) | 35 | ||||
-rwxr-xr-x | test/feh-i.t | 461 | ||||
-rwxr-xr-x | test/feh-scr-i.t (renamed from test/feh-scr.i) | 167 | ||||
-rwxr-xr-x | test/feh.i | 453 | ||||
-rw-r--r-- | test/feh.t | 70 | ||||
-rwxr-xr-x | test/mandoc.t | 8 | ||||
-rwxr-xr-x | test/run-interactive | 2 |
8 files changed, 583 insertions, 617 deletions
@@ -12,11 +12,11 @@ build-applications: @${MAKE} -C share/applications test: all - @PACKAGE=${PACKAGE} prove test + @PACKAGE=${PACKAGE} prove test/feh.t test/mandoc.t test-x11: all test/run-interactive - prove test/feh-bg.i + prove test/feh-bg-i.t install: install-man install-doc install-bin install-font install-img install: install-examples install-applications diff --git a/test/feh-bg.i b/test/feh-bg-i.t index 0e3b546..1f22c9d 100755 --- a/test/feh-bg.i +++ b/test/feh-bg-i.t @@ -8,12 +8,13 @@ use GD qw/:DEFAULT :cmp/; use Test::More tests => 70; use Time::HiRes qw/sleep/; -my ($pid_xnest, $pid_twm); +my $scr_dir = '/tmp/feh-test-scr'; +my ( $pid_xnest, $pid_twm ); $ENV{HOME} = 'test'; sub set_bg { - my ($mode, $file) = @_; + my ( $mode, $file ) = @_; ok( system("feh --bg-${mode} test/bg/${file}") == 0, @@ -22,26 +23,28 @@ sub set_bg { } sub same_files { - my ($one, $two) = @_; + my ( $one, $two ) = @_; my $img_one = GD::Image->new($one); my $img_two = GD::Image->new($two); - return( ! ($img_one->compare($img_two) & GD_CMP_IMAGE)); + return ( !( $img_one->compare($img_two) & GD_CMP_IMAGE ) ); } sub check_bg { my ($file) = @_; - system("import -silent -window root /tmp/feh_${$}.png"); + system("import -silent -window root ${scr_dir}/feh_${$}.png"); - ok( - same_files("test/bg/${file}", "/tmp/feh_${$}.png"), - "Wallpaper is test/bg/${file}" - ); + ok( same_files( "test/bg/${file}", "${scr_dir}/feh_${$}.png" ), + "Wallpaper is test/bg/${file}" ); +} + +if ( not -d $scr_dir ) { + mkdir($scr_dir); } -if (($pid_xnest = fork()) == 0) { +if ( ( $pid_xnest = fork() ) == 0 ) { exec(qw( Xephyr -screen 500x500 :7 )); } @@ -49,7 +52,7 @@ sleep(0.5); $ENV{'DISPLAY'} = ':7'; -if (($pid_twm = fork()) == 0) { +if ( ( $pid_twm = fork() ) == 0 ) { exec('twm'); } @@ -57,23 +60,23 @@ sleep(0.5); for my $mode (qw( center fill max scale tile )) { - set_bg($mode, 'exact/in'); + set_bg( $mode, 'exact/in' ); check_bg('exact/out'); for my $type (qw( exact small large )) { for my $orientation (qw( w h )) { - set_bg($mode, "${type}/${orientation}/in"); + set_bg( $mode, "${type}/${orientation}/in" ); check_bg("${type}/${orientation}/${mode}"); } } } -kill(15, $pid_twm); +kill( 15, $pid_twm ); sleep(0.2); -kill(15, $pid_xnest); +kill( 15, $pid_xnest ); sleep(0.2); -unlink("/tmp/feh_${$}.png"); +unlink("${scr_dir}/feh_${$}.png"); unlink('test/.fehbg'); diff --git a/test/feh-i.t b/test/feh-i.t new file mode 100755 index 0000000..dd47ff6 --- /dev/null +++ b/test/feh-i.t @@ -0,0 +1,461 @@ +#!/usr/bin/env perl +use strict; +use warnings; +use 5.010; + +use Cwd; +use Test::More tests => 103; +use Time::HiRes qw/sleep/; +use X11::GUITest qw/:ALL/; + +my $win; +my ( $width, $height ); +my $pwd = getcwd(); + +$ENV{HOME} = 'test'; + +sub waitfor(&) { + my ($sub) = @_; + my $out; + for ( 1 .. 40 ) { + 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 test_no_win { + my ($reason) = @_; + + if ( waitfor { not FindWindowLike(qr{^feh}) } ) { + pass("Window closed ($reason)"); + } + else { + fail("Window closed ($reason)"); + BAIL_OUT("unclosed window still open, cannot continue"); + } +} + +sub test_win_title { + my ( $win, $wtitle ) = @_; + my $rtitle; + + if ( waitfor { GetWindowName($win) eq $wtitle } ) { + pass("Window has title: $wtitle"); + } + else { + $rtitle = GetWindowName($win); + fail("Window has title: $wtitle"); + diag("expected: $wtitle"); + diag(" got: $rtitle"); + } +} + +sub slurp { + my ($file) = @_; + my $ret; + local $/ = undef; + open( my $fh, '<', $file ) or die("Can't open $file: $!"); + $ret = <$fh>; + close($fh) or die("Can't close $file: $!"); + return ($ret); +} + +if ( FindWindowLike(qr{^feh}) ) { + BAIL_OUT('It appears you have an open feh window. Please close it.'); +} + +for my $key (qw/q x {ESC}/) { + feh_start(); + SendKeys($key); + test_no_win("$key pressed"); +} + +$win = feh_start( q{}, 'test/ok/png' ); +test_win_title( $win, 'feh [1 of 1] - test/ok/png' ); +feh_stop(); + +$win = feh_start( q{}, 'test/ok/png test/ok/jpg test/ok/gif' ); +test_win_title( $win, 'feh [1 of 3] - test/ok/png' ); +SendKeys('{RIG}'); +test_win_title( $win, 'feh [2 of 3] - test/ok/jpg' ); +SendKeys('n'); +test_win_title( $win, 'feh [3 of 3] - test/ok/gif' ); +SendKeys('{SPA}'); +test_win_title( $win, 'feh [1 of 3] - test/ok/png' ); +SendKeys('{LEF}'); +test_win_title( $win, 'feh [3 of 3] - test/ok/gif' ); +SendKeys('p'); +test_win_title( $win, 'feh [2 of 3] - test/ok/jpg' ); +SendKeys('{BAC}'); +test_win_title( $win, 'feh [1 of 3] - test/ok/png' ); +SendKeys('p'); +test_win_title( $win, 'feh [3 of 3] - test/ok/gif' ); +SendKeys('{DEL}'); +test_win_title( $win, 'feh [1 of 2] - test/ok/png' ); +SendKeys('{DEL}'); +test_win_title( $win, 'feh [1 of 1] - test/ok/jpg' ); +SendKeys('{DEL}'); +test_no_win("Removed all images from slideshow"); + +$win = feh_start( '--title \'feh %m %u/%l %n\'', + 'test/ok/png test/ok/jpg test/ok/gif' ); +test_win_title( $win, 'feh slideshow 1/3 png' ); +SendKeys('{RIG}'); +test_win_title( $win, 'feh slideshow 2/3 jpg' ); +feh_stop(); + +feh_start( '--cycle-once', 'test/ok/png test/ok/jpg' ); +for ( 1 .. 2 ) { + SendKeys('{RIG}'); +} +test_no_win("--cycle-once -> window closed"); + +feh_start( + '--cycle-once --slideshow-delay 0.5', + 'test/ok/png test/ok/jpg test/ok/gif' +); +sleep(1.5); +test_no_win('cycle-once + slideshow-delay -> window closed'); + +$win = feh_start( + '--cycle-once --slideshow-delay -0.01', + 'test/ok/png test/ok/jpg test/ok/gif' +); + +test_win_title( $win, 'feh [1 of 3] - test/ok/png [Paused]' ); + +SendKeys('h'); +test_no_win('cycle-once + negative delay + [h]'); + +$win = feh_start( q{}, 'test/ok/png test/ok/gif test/ok/gif test/ok/jpg' ); +for ( 1 .. 2 ) { + SendKeys('{END}'); + test_win_title( $win, 'feh [4 of 4] - test/ok/jpg' ); +} +for ( 1 .. 2 ) { + SendKeys('{HOM}'); + test_win_title( $win, 'feh [1 of 4] - test/ok/png' ); +} + +SendKeys('{PGU}'); +test_win_title( $win, 'feh [4 of 4] - test/ok/jpg' ); +SendKeys('{PGD}'); +test_win_title( $win, 'feh [1 of 4] - test/ok/png' ); +SendKeys('{PGD}'); +test_win_title( $win, 'feh [2 of 4] - test/ok/gif' ); + +feh_stop(); + +$win + = feh_start( '--slideshow-delay 1', 'test/ok/png test/ok/gif test/ok/jpg' ); +sleep(1.7); +test_win_title( $win, 'feh [3 of 3] - test/ok/jpg' ); +SendKeys('h'); +test_win_title( $win, 'feh [3 of 3] - test/ok/jpg [Paused]' ); +SendKeys('{RIG}'); +test_win_title( $win, 'feh [1 of 3] - test/ok/png [Paused]' ); +SendKeys('h'); +test_win_title( $win, 'feh [1 of 3] - test/ok/png' ); +sleep(0.8); +test_win_title( $win, 'feh [2 of 3] - test/ok/gif' ); +feh_stop(); + +$win = feh_start( + '--action3 ";echo foo" --action7 "echo foo" ' + . '--action8 ";touch feh_test_%u_%l" --action9 "rm feh_test_%u_%l"', + 'test/ok/png test/ok/gif test/ok/jpg' +); +test_win_title( $win, 'feh [1 of 3] - test/ok/png' ); +SendKeys('3'); +test_win_title( $win, 'feh [1 of 3] - test/ok/png' ); +SendKeys('7'); +test_win_title( $win, 'feh [2 of 3] - test/ok/gif' ); +SendKeys('8'); +test_win_title( $win, 'feh [2 of 3] - test/ok/gif' ); +ok( -e 'feh_test_2_3', + 'feh action created file with correct format specifiers' ); +SendKeys('9'); +ok( waitfor { not -e 'feh_test_2_3' }, 'feh action removed file' ); +test_win_title( $win, 'feh [3 of 3] - test/ok/jpg' ); +feh_stop(); + +# .config/feh/keys +# Action Unbinding + non-conflicting none/shift/control/meta modifiers + +$ENV{XDG_CONFIG_HOME} = 'test/config/keys'; + +$win = feh_start( + '--action1 "touch a1" --action2 "touch a2" ' + . '--action3 "touch a3" --action4 "touch a4" ' + . '--action5 "touch a5" --action6 "touch a6" ', + 'test/ok/png test/ok/jpg test/ok/pnm' +); +test_win_title( $win, 'feh [1 of 3] - test/ok/png' ); +SendKeys('6'); +test_win_title( $win, 'feh [1 of 3] - test/ok/png' ); +SendKeys('{RIG}'); +test_win_title( $win, 'feh [1 of 3] - test/ok/png' ); +SendKeys('a'); +test_win_title( $win, 'feh [2 of 3] - test/ok/jpg' ); +SendKeys('b'); +test_win_title( $win, 'feh [3 of 3] - test/ok/pnm' ); +SendKeys('c'); +test_win_title( $win, 'feh [1 of 3] - test/ok/png' ); +SendKeys('d'); +test_win_title( $win, 'feh [3 of 3] - test/ok/pnm' ); +SendKeys('e'); +test_win_title( $win, 'feh [2 of 3] - test/ok/jpg' ); +SendKeys('f'); +test_win_title( $win, 'feh [1 of 3] - test/ok/png' ); +SendKeys('1'); +test_win_title( $win, 'feh [1 of 3] - test/ok/png' ); +SendKeys('x'); +ok( waitfor { -e 'a1' }, 'action 1 = X ok' ); +SendKeys('X'); +ok( waitfor { -e 'a2' }, 'action 2 = Shift+X ok' ); +SendKeys('^(x)'); +ok( waitfor { -e 'a3' }, 'action 3 = Ctrl+X ok' ); +SendKeys('^(X)'); +ok( waitfor { -e 'a4' }, 'action 4 = Ctrl+Shift+X ok' ); +SendKeys('%(x)'); +ok( waitfor { -e 'a5' }, 'action 5 = Alt+X ok' ); + +for my $f (qw(a1 a2 a3 a4 a5)) { + unlink($f); +} +feh_stop(); + +$ENV{XDG_CONFIG_HOME} = 'test/config/themes'; + +$win = feh_start( '-Ttest_general', 'test/ok/png test/ok/jpg' ); +SendKeys('1'); +ok( waitfor { -e 'a1' }, 'theme: action 1 okay' ); +unlink('a1'); +feh_stop(); + +$win = feh_start( '-Ttest_general --action1 "touch c1"', + 'test/ok/png test/ok/jpg' ); +SendKeys('1'); +ok( waitfor { -e 'c1' }, 'theme: commandline overrides theme' ); +unlink('c1'); +feh_stop(); + +$win = feh_start( '-Ttest_multiline', 'test/ok/png test/ok/jpg' ); +SendKeys('1'); +ok( waitfor { -e 'a1' }, 'multiline theme: first line ok' ); +SendKeys('2'); +ok( waitfor { -e 'a2' }, 'multiline theme: second line ok' ); +SendKeys('3'); +ok( waitfor { -e 'a3' }, 'multiline theme: last line ok' ); +for my $f (qw(a1 a2 a3)) { + unlink($f); +} +feh_stop(); + +delete $ENV{XDG_CONFIG_HOME}; + +$win = feh_start( q{}, 'test/ok/png ' x 100 ); +test_win_title( $win, 'feh [1 of 100] - test/ok/png' ); +SendKeys('{PGD}'); +test_win_title( $win, 'feh [6 of 100] - test/ok/png' ); +SendKeys('{PGD}'); +test_win_title( $win, 'feh [11 of 100] - test/ok/png' ); +SendKeys('{HOM PGU}'); +test_win_title( $win, 'feh [96 of 100] - test/ok/png' ); +feh_stop(); + +$win = feh_start( '--thumbnails -H 300 -W 310 --thumb-title "feh [%l] %f"', + 'test/ok/png test/ok/gif test/ok/jpg' ); +test_win_title( $win, 'feh [thumbnail mode]' ); +( $width, $height ) = ( GetWindowPos($win) )[ 2, 3 ]; +is( $width, 310, 'thumbnail win: Set correct width' ); +is( $height, 300, 'thumbnail win: Set correct height' ); +MoveMouseAbs( 30, 30 ); +ClickMouseButton(M_BTN1); +($win) = WaitWindowViewable(qr{test/ok/png$}); +ok( $win, 'Thumbnail mode: Window opened' ); +test_win_title( $win, 'feh [3] test/ok/png' ); +SetInputFocus($win); +SendKeys('x'); +ok( waitfor { not FindWindowLike(qr{^ok/png$}) }, 'Thumbnail mode: closed' ); + +MoveMouseAbs( 90, 30 ); +ClickMouseButton(M_BTN1); +($win) = WaitWindowViewable(qr{test/ok/gif$}); +ok( $win, 'Thumbnail mode: Window opened' ); +test_win_title( $win, 'feh [3] test/ok/gif' ); + +MoveMouseAbs( 150, 30 ); +ClickMouseButton(M_BTN1); +($win) = WaitWindowViewable(qr{test/ok/jpg$}); +ok( $win, 'Thumbnail mode: Other window opened' ); +test_win_title( $win, 'feh [3] test/ok/jpg' ); + +feh_stop(); + +feh_start( '--multiwindow', 'test/ok/png test/ok/gif test/ok/jpg' ); +ok( waitfor { FindWindowLike(qr{^feh - test/ok/png$}) }, 'multiwindow 1/3' ); +ok( waitfor { FindWindowLike(qr{^feh - test/ok/gif$}) }, 'multiwindow 2/3' ); +ok( waitfor { FindWindowLike(qr{^feh - test/ok/jpg$}) }, 'multiwindow 3/3' ); + +($win) = FindWindowLike(qr{^feh - test/ok/gif$}); +SetInputFocus($win); +SendKeys('x'); +ok( waitfor { not FindWindowLike(qr{^feh - test/ok/gif$}) }, 'win 1 closed' ); +ok( FindWindowLike(qr{^feh - test/ok/png$}), 'multiwindow 1/2' ); +ok( FindWindowLike(qr{^feh - test/ok/jpg$}), 'multiwindow 2/2' ); + +($win) = FindWindowLike(qr{^feh - test/ok/jpg$}); +SetInputFocus($win); +SendKeys('x'); +ok( waitfor { not FindWindowLike(qr{^feh - test/ok/jpg$}) }, 'win 2 closed' ); + +($win) = FindWindowLike(qr{^feh - test/ok/png$}); +SetInputFocus($win); +SendKeys('x'); +test_no_win('all multiwindows closed'); + +$win = feh_start( '--start-at test/ok/jpg', + 'test/ok/png test/ok/gif test/ok/jpg' ); +test_win_title( $win, 'feh [3 of 3] - test/ok/jpg' ); +SendKeys('{RIG}'); +test_win_title( $win, 'feh [1 of 3] - test/ok/png' ); +feh_stop(); + +feh_start( '--caption-path .captions', 'test/ok/png' ); +SendKeys('cFoo Bar Quux Moep~'); +feh_stop(); +ok( -d 'test/ok/.captions', 'autocreated captions directory' ); +is( + slurp('test/ok/.captions/png.txt'), + 'Foo Bar Quux Moep', + 'Correct caption saved' +); + +feh_start( '--caption-path .captions', 'test/ok/png' ); +SendKeys('c'); +SendKeys( '{BKS}' x length('Foo Bar Quux Moep') ); +SendKeys('Foo Bar^(~)miep~'); +feh_stop(); +is( + slurp('test/ok/.captions/png.txt'), + "Foo Bar\nmiep", + 'Caption with newline + correct backspace' +); + +unlink('test/ok/.captions/png.txt'); +rmdir('test/ok/.captions'); + +$win = feh_start( '--filelist test/filelist', + 'test/ok/png test/ok/gif test/ok/png test/ok/jpg' ); +SendKeys('{DEL}'); +test_win_title( $win, "feh [1 of 3] - ${pwd}/test/ok/gif" ); +feh_stop(); + +is( slurp('test/filelist'), <<"EOF", 'Filelist saved' ); +${pwd}/test/ok/gif +${pwd}/test/ok/png +${pwd}/test/ok/jpg +EOF + +$win = feh_start( '--filelist test/filelist', q{} ); +test_win_title( $win, "feh [1 of 3] - ${pwd}/test/ok/gif" ); +feh_stop(); +unlink('test/filelist'); + +$win = feh_start('--geometry 423x232'); +( undef, undef, $width, $height ) = GetWindowPos($win); +is( $width, 423, '--geometry: correct width' ); +is( $height, 232, '--geometry: correct height' ); +feh_stop(); + +$win = feh_start('--fullscreen'); +( undef, undef, $width, $height ) = GetWindowPos($win); +ok( [ ( GetWindowPos($win) )[ 2, 3 ] ] ~~ [ GetScreenRes() ], + 'fullscreen uses full screen size' ); +feh_stop(); + +$win = feh_start( q{}, 'test/ok/png ' . 'test/fail/png ' x 7 . 'test/ok/gif' ); +test_win_title( $win, 'feh [1 of 9] - test/ok/png' ); +SendKeys('{RIG}'); +test_win_title( $win, 'feh [2 of 2] - test/ok/gif' ); +SendKeys('{LEF}'); +test_win_title( $win, 'feh [1 of 2] - test/ok/png' ); +SendKeys('{LEF}'); +test_win_title( $win, 'feh [2 of 2] - test/ok/gif' ); +feh_stop(); + +$win = feh_start(); +( undef, undef, $width, $height ) = GetWindowPos($win); +is( $width, 16, 'correct default window width' ); +is( $height, 16, 'correct default window height' ); + +ResizeWindow( $win, 25, 30 ); +( undef, undef, $width, $height ) = GetWindowPos($win); + +SKIP: { + if ( not( [ $width, $height ] ~~ [ 25, 30 ] ) ) { + skip( 'ResizeWindow failed', 2 ); + } + PressKey('w'); + ok( waitfor { [ ( GetWindowPos($win) )[ 2, 3 ] ] ~~ [ 16, 16 ] }, + 'w key resizes correctly' ); +} +feh_stop(); + +$win = feh_start( q{}, 'test/huge.png' ); +ok( + waitfor { + ( GetWindowPos($win) )[2] == ( GetScreenRes() )[0] + || ( GetWindowPos($win) )[3] == ( GetScreenRes() )[1]; + }, + 'Large window limited to screen size' +); +feh_stop(); + +$win = feh_start( '--no-screen-clip', 'test/huge.png' ); +ok( + waitfor { + [ ( GetWindowPos($win) )[ 2, 3 ] ] ~~ [ 4000, 3000 ]; + }, + 'disabled screen clip' +); +feh_stop(); + +# GH-35 "Custom window title crashes feh on unloadable files" +$win = feh_start( '--title "feh %h"', 'test/ok/png test/fail/png test/ok/jpg' ); +SendKeys('{RIG}'); +test_win_title( $win, 'feh 16' ); +feh_stop(); diff --git a/test/feh-scr.i b/test/feh-scr-i.t index d6d55b1..8f0cb09 100755 --- a/test/feh-scr.i +++ b/test/feh-scr-i.t @@ -10,18 +10,19 @@ use Test::More tests => 54; use Time::HiRes qw/sleep/; use X11::GUITest qw/:ALL/; -my ($pid_xnest, $pid_twm); +my ( $pid_xnest, $pid_twm ); my $win; -my ($width, $height); -my $pwd = getcwd(); +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) { + for ( 1 .. 10 ) { sleep(0.05); $out = &{$sub}; if ($out) { @@ -32,20 +33,20 @@ sub waitfor(&) { } sub feh_start { - my ($opts, $files) = @_; + my ( $opts, $files ) = @_; my $id; - $opts //= q{}; + $opts //= q{}; $files //= 'test/ok/png'; StartApp("feh ${opts} ${files}"); ($id) = WaitWindowViewable(qr{^feh}); - if (not $id) { + if ( not $id ) { BAIL_OUT("Unable to start feh ${opts} ${files}"); } - if (not SetInputFocus($id)) { + if ( not SetInputFocus($id) ) { BAIL_OUT("Unable to focus window"); } @@ -54,30 +55,30 @@ sub feh_start { sub feh_stop { SendKeys('{ESC}'); - if (not waitfor { not FindWindowLike(qr{^feh}) }) { + if ( not waitfor { not FindWindowLike(qr{^feh}) } ) { BAIL_OUT("Unclosed feh window still open, cannot continue"); } } sub same_files { - my ($one, $two) = @_; + 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) { + if ( not defined $img_one or not defined $img_two ) { return 0; } - return( ! ($img_one->compare($img_two) & GD_CMP_IMAGE)); + return ( !( $img_one->compare($img_two) & GD_CMP_IMAGE ) ); } sub check_scr { my ($file) = @_; - system("import -silent -window root /tmp/feh_${$}.png"); + system("import -silent -window root ${scr_dir}/feh_${$}.png"); - return same_files("test/scr/${file}", "/tmp/feh_${$}.png"); + return same_files( "test/scr/${file}", "${scr_dir}/feh_${$}.png" ); } sub test_scr { @@ -86,22 +87,27 @@ sub test_scr { $test_id++; - if (waitfor { check_scr($file) }) { + if ( waitfor { check_scr($file) } ) { pass($msg); } else { fail($msg); - rename("/tmp/feh_${$}.png", "/tmp/feh_${$}_${test_id}_${file}.png"); + rename( "${scr_dir}/feh_${$}.png", + "${scr_dir}/feh_${$}_${test_id}_${file}.png" ); } } -if (FindWindowLike(qr{^feh})) { +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\'"', + . '--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'); @@ -109,23 +115,17 @@ feh_stop(); feh_start( "--draw-actions --draw-filename --info 'echo foo; echo bar' " - . '--action quux --action5 baz --action8 "nrm \'%f\'"', + . '--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' -); +feh_start( '--fullscreen', 'test/bg/large/w/in' ); test_scr('feh_full_lwi'); feh_stop(); -feh_start( - q{}, - 'test/bg/large/w/in' -); +feh_start( q{}, 'test/bg/large/w/in' ); test_scr('feh_lwi'); SendKeys('^({RIG})'); @@ -145,31 +145,21 @@ test_scr('feh_lwi_scroll_rdrul'); feh_stop(); -feh_start( - '--scale-down', - 'test/bg/large/w/in' -); +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' -); +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' -); +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' -); +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(); @@ -180,37 +170,28 @@ feh_start( 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' -); +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' -); +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' -); +feh_start( '--geometry +10+20', 'test/ok/png' ); test_scr('geometry_offset_only'); feh_stop(); -feh_start( - '--caption-path .tc', - 'test/bg/exact/in' -); +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'); +SendKeys( + 'Picknick im Zenit metaphysischen Wiederscheins der astralen Kuhglocke'); test_scr('caption_while'); SendKeys('~'); @@ -219,7 +200,7 @@ test_scr('caption_done'); SendKeys('c'); test_scr('caption_while'); -SendKeys('{BKS}' x 80); +SendKeys( '{BKS}' x 80 ); test_scr('caption_new'); SendKeys('~'); @@ -230,66 +211,43 @@ test_scr('caption_none'); feh_stop(); -feh_start( - '--info "echo \'%f\n%wx%h\'"', - 'test/bg/exact/in' -); +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' -); +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' -); +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' -); +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' -); +feh_start( '--draw-filename', 'test/bg/exact/in' ); test_scr('draw_filename'); feh_stop(); -feh_start( - '--draw-filename --draw-tinted', - 'test/bg/exact/in' -); +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' -); +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/bg/exact/in' ); test_scr('draw_filename_action_tinted'); feh_stop(); -feh_start( - '--action8 "nrm \'%f\'"', - 'test/bg/exact/in' -); +feh_start( '--action8 "nrm \'%f\'"', 'test/bg/exact/in' ); test_scr('draw_nothing'); SendKeys('d'); @@ -306,14 +264,11 @@ test_scr('draw_nothing'); feh_stop(); -feh_start( - '--draw-tinted', - 'test/bg/exact/in' -); +feh_start( '--draw-tinted', 'test/bg/exact/in' ); test_scr('draw_nothing'); feh_stop(); -feh_start(q{}, 'test/bg/large/h/in'); +feh_start( q{}, 'test/bg/large/h/in' ); test_scr('feh_lhi'); SendKeys('{UP}'); @@ -336,7 +291,7 @@ test_scr('feh_lhi_iirrio'); feh_stop(); -feh_start(q{}, 'test/bg/large/h/in'); +feh_start( q{}, 'test/bg/large/h/in' ); test_scr('feh_lhi'); SendKeys('{DOW}'); @@ -350,22 +305,22 @@ test_scr('feh_lhi_ooo'); feh_stop(); -feh_start(q{}, 'test/bg/transparency'); +feh_start( q{}, 'test/bg/transparency' ); test_scr('feh_ibg_default'); feh_stop(); -feh_start('--image-bg checks', 'test/bg/transparency'); +feh_start( '--image-bg checks', 'test/bg/transparency' ); test_scr('feh_ibg_default'); feh_stop(); -feh_start('--image-bg black', 'test/bg/transparency'); +feh_start( '--image-bg black', 'test/bg/transparency' ); test_scr('feh_ibg_black'); feh_stop(); -feh_start('--image-bg white', 'test/bg/transparency'); +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("/tmp/feh_${$}.png"); +unlink("${scr_dir}/feh_${$}.png"); diff --git a/test/feh.i b/test/feh.i deleted file mode 100755 index f9dddfb..0000000 --- a/test/feh.i +++ /dev/null @@ -1,453 +0,0 @@ -#!/usr/bin/env perl -use strict; -use warnings; -use 5.010; - -use Cwd; -use Test::More tests => 103; -use Time::HiRes qw/sleep/; -use X11::GUITest qw/:ALL/; - -my $win; -my ($width, $height); -my $pwd = getcwd(); - -$ENV{HOME} = 'test'; - -sub waitfor(&) { - my ($sub) = @_; - my $out; - for (1 .. 40) { - 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 test_no_win { - my ($reason) = @_; - - if (waitfor { not FindWindowLike(qr{^feh}) }) { - pass("Window closed ($reason)"); - } - else { - fail("Window closed ($reason)"); - BAIL_OUT("unclosed window still open, cannot continue"); - } -} - -sub test_win_title { - my ($win, $wtitle) = @_; - my $rtitle; - - if (waitfor { GetWindowName($win) eq $wtitle }) { - pass("Window has title: $wtitle"); - } - else { - $rtitle = GetWindowName($win); - fail("Window has title: $wtitle"); - diag("expected: $wtitle"); - diag(" got: $rtitle"); - } -} - -sub slurp { - my ($file) = @_; - my $ret; - local $/ = undef; - open(my $fh, '<', $file) or die("Can't open $file: $!"); - $ret = <$fh>; - close($fh) or die("Can't close $file: $!"); - return($ret); -} - -if (FindWindowLike(qr{^feh})) { - BAIL_OUT('It appears you have an open feh window. Please close it.'); -} - -for my $key (qw/q x {ESC}/) { - feh_start(); - SendKeys($key); - test_no_win("$key pressed"); -} - -$win = feh_start(q{}, 'test/ok/png'); -test_win_title($win, 'feh [1 of 1] - test/ok/png'); -feh_stop(); - -$win = feh_start(q{}, 'test/ok/png test/ok/jpg test/ok/gif'); -test_win_title($win, 'feh [1 of 3] - test/ok/png'); -SendKeys('{RIG}'); -test_win_title($win, 'feh [2 of 3] - test/ok/jpg'); -SendKeys('n'); -test_win_title($win, 'feh [3 of 3] - test/ok/gif'); -SendKeys('{SPA}'); -test_win_title($win, 'feh [1 of 3] - test/ok/png'); -SendKeys('{LEF}'); -test_win_title($win, 'feh [3 of 3] - test/ok/gif'); -SendKeys('p'); -test_win_title($win, 'feh [2 of 3] - test/ok/jpg'); -SendKeys('{BAC}'); -test_win_title($win, 'feh [1 of 3] - test/ok/png'); -SendKeys('p'); -test_win_title($win, 'feh [3 of 3] - test/ok/gif'); -SendKeys('{DEL}'); -test_win_title($win, 'feh [1 of 2] - test/ok/png'); -SendKeys('{DEL}'); -test_win_title($win, 'feh [1 of 1] - test/ok/jpg'); -SendKeys('{DEL}'); -test_no_win("Removed all images from slideshow"); - -$win = feh_start('--title \'feh %m %u/%l %n\'', - 'test/ok/png test/ok/jpg test/ok/gif'); -test_win_title($win, 'feh slideshow 1/3 png'); -SendKeys('{RIG}'); -test_win_title($win, 'feh slideshow 2/3 jpg'); -feh_stop(); - -feh_start('--cycle-once', 'test/ok/png test/ok/jpg'); -for (1 .. 2) { - SendKeys('{RIG}'); -} -test_no_win("--cycle-once -> window closed"); - -feh_start('--cycle-once --slideshow-delay 0.5', - 'test/ok/png test/ok/jpg test/ok/gif'); -sleep(1.5); -test_no_win('cycle-once + slideshow-delay -> window closed'); - -$win = feh_start('--cycle-once --slideshow-delay -0.01', - 'test/ok/png test/ok/jpg test/ok/gif'); - -test_win_title($win, 'feh [1 of 3] - test/ok/png [Paused]'); - -SendKeys('h'); -test_no_win('cycle-once + negative delay + [h]'); - -$win = feh_start(q{}, 'test/ok/png test/ok/gif test/ok/gif test/ok/jpg'); -for (1 .. 2) { - SendKeys('{END}'); - test_win_title($win, 'feh [4 of 4] - test/ok/jpg'); -} -for (1 .. 2) { - SendKeys('{HOM}'); - test_win_title($win, 'feh [1 of 4] - test/ok/png'); -} - -SendKeys('{PGU}'); -test_win_title($win, 'feh [4 of 4] - test/ok/jpg'); -SendKeys('{PGD}'); -test_win_title($win, 'feh [1 of 4] - test/ok/png'); -SendKeys('{PGD}'); -test_win_title($win, 'feh [2 of 4] - test/ok/gif'); - -feh_stop(); - -$win = feh_start('--slideshow-delay 1', 'test/ok/png test/ok/gif test/ok/jpg'); -sleep(1.7); -test_win_title($win, 'feh [3 of 3] - test/ok/jpg'); -SendKeys('h'); -test_win_title($win, 'feh [3 of 3] - test/ok/jpg [Paused]'); -SendKeys('{RIG}'); -test_win_title($win, 'feh [1 of 3] - test/ok/png [Paused]'); -SendKeys('h'); -test_win_title($win, 'feh [1 of 3] - test/ok/png'); -sleep(0.8); -test_win_title($win, 'feh [2 of 3] - test/ok/gif'); -feh_stop(); - -$win = feh_start( - '--action3 ";echo foo" --action7 "echo foo" ' . - '--action8 ";touch feh_test_%u_%l" --action9 "rm feh_test_%u_%l"', - 'test/ok/png test/ok/gif test/ok/jpg' -); -test_win_title($win, 'feh [1 of 3] - test/ok/png'); -SendKeys('3'); -test_win_title($win, 'feh [1 of 3] - test/ok/png'); -SendKeys('7'); -test_win_title($win, 'feh [2 of 3] - test/ok/gif'); -SendKeys('8'); -test_win_title($win, 'feh [2 of 3] - test/ok/gif'); -ok(-e 'feh_test_2_3', 'feh action created file with correct format specifiers'); -SendKeys('9'); -ok(waitfor { not -e 'feh_test_2_3' }, 'feh action removed file'); -test_win_title($win, 'feh [3 of 3] - test/ok/jpg'); -feh_stop(); - - -# .config/feh/keys -# Action Unbinding + non-conflicting none/shift/control/meta modifiers - -$ENV{XDG_CONFIG_HOME} = 'test/config/keys'; - -$win = feh_start( - '--action1 "touch a1" --action2 "touch a2" ' . - '--action3 "touch a3" --action4 "touch a4" ' . - '--action5 "touch a5" --action6 "touch a6" ', - 'test/ok/png test/ok/jpg test/ok/pnm' -); -test_win_title($win, 'feh [1 of 3] - test/ok/png'); -SendKeys('6'); -test_win_title($win, 'feh [1 of 3] - test/ok/png'); -SendKeys('{RIG}'); -test_win_title($win, 'feh [1 of 3] - test/ok/png'); -SendKeys('a'); -test_win_title($win, 'feh [2 of 3] - test/ok/jpg'); -SendKeys('b'); -test_win_title($win, 'feh [3 of 3] - test/ok/pnm'); -SendKeys('c'); -test_win_title($win, 'feh [1 of 3] - test/ok/png'); -SendKeys('d'); -test_win_title($win, 'feh [3 of 3] - test/ok/pnm'); -SendKeys('e'); -test_win_title($win, 'feh [2 of 3] - test/ok/jpg'); -SendKeys('f'); -test_win_title($win, 'feh [1 of 3] - test/ok/png'); -SendKeys('1'); -test_win_title($win, 'feh [1 of 3] - test/ok/png'); -SendKeys('x'); -ok(waitfor { -e 'a1' }, 'action 1 = X ok'); -SendKeys('X'); -ok(waitfor { -e 'a2' }, 'action 2 = Shift+X ok'); -SendKeys('^(x)'); -ok(waitfor { -e 'a3' }, 'action 3 = Ctrl+X ok'); -SendKeys('^(X)'); -ok(waitfor { -e 'a4' }, 'action 4 = Ctrl+Shift+X ok'); -SendKeys('%(x)'); -ok(waitfor { -e 'a5' }, 'action 5 = Alt+X ok'); -for my $f (qw(a1 a2 a3 a4 a5)) { - unlink($f); -} -feh_stop(); - -$ENV{XDG_CONFIG_HOME} = 'test/config/themes'; - -$win = feh_start( - '-Ttest_general', - 'test/ok/png test/ok/jpg' -); -SendKeys('1'); -ok(waitfor { -e 'a1' }, 'theme: action 1 okay'); -unlink('a1'); -feh_stop(); - -$win = feh_start( - '-Ttest_general --action1 "touch c1"', - 'test/ok/png test/ok/jpg' -); -SendKeys('1'); -ok(waitfor { -e 'c1' }, 'theme: commandline overrides theme'); -unlink('c1'); -feh_stop(); - -$win = feh_start( - '-Ttest_multiline', - 'test/ok/png test/ok/jpg' -); -SendKeys('1'); -ok(waitfor { -e 'a1' }, 'multiline theme: first line ok'); -SendKeys('2'); -ok(waitfor { -e 'a2' }, 'multiline theme: second line ok'); -SendKeys('3'); -ok(waitfor { -e 'a3' }, 'multiline theme: last line ok'); -for my $f (qw(a1 a2 a3)) { - unlink($f); -} -feh_stop(); - -delete $ENV{XDG_CONFIG_HOME}; - - -$win = feh_start(q{}, 'test/ok/png ' x 100); -test_win_title($win, 'feh [1 of 100] - test/ok/png'); -SendKeys('{PGD}'); -test_win_title($win, 'feh [6 of 100] - test/ok/png'); -SendKeys('{PGD}'); -test_win_title($win, 'feh [11 of 100] - test/ok/png'); -SendKeys('{HOM PGU}'); -test_win_title($win, 'feh [96 of 100] - test/ok/png'); -feh_stop(); - -$win = feh_start('--thumbnails -H 300 -W 310 --thumb-title "feh [%l] %f"', - 'test/ok/png test/ok/gif test/ok/jpg'); -test_win_title($win, 'feh [thumbnail mode]'); -($width, $height) = (GetWindowPos($win))[2,3]; -is($width, 310, 'thumbnail win: Set correct width'); -is($height, 300, 'thumbnail win: Set correct height'); -MoveMouseAbs(30, 30); -ClickMouseButton(M_BTN1); -($win) = WaitWindowViewable(qr{test/ok/png$}); -ok($win, 'Thumbnail mode: Window opened'); -test_win_title($win, 'feh [3] test/ok/png'); -SetInputFocus($win); -SendKeys('x'); -ok(waitfor { not FindWindowLike(qr{^ok/png$}) }, 'Thumbnail mode: closed'); - -MoveMouseAbs(90, 30); -ClickMouseButton(M_BTN1); -($win) = WaitWindowViewable(qr{test/ok/gif$}); -ok($win, 'Thumbnail mode: Window opened'); -test_win_title($win, 'feh [3] test/ok/gif'); - -MoveMouseAbs(150,30); -ClickMouseButton(M_BTN1); -($win) = WaitWindowViewable(qr{test/ok/jpg$}); -ok($win, 'Thumbnail mode: Other window opened'); -test_win_title($win, 'feh [3] test/ok/jpg'); - -feh_stop(); - -feh_start('--multiwindow', 'test/ok/png test/ok/gif test/ok/jpg'); -ok(waitfor { FindWindowLike(qr{^feh - test/ok/png$}) }, 'multiwindow 1/3'); -ok(waitfor { FindWindowLike(qr{^feh - test/ok/gif$}) }, 'multiwindow 2/3'); -ok(waitfor { FindWindowLike(qr{^feh - test/ok/jpg$}) }, 'multiwindow 3/3'); - -($win) = FindWindowLike(qr{^feh - test/ok/gif$}); -SetInputFocus($win); -SendKeys('x'); -ok(waitfor { not FindWindowLike(qr{^feh - test/ok/gif$}) }, 'win 1 closed'); -ok(FindWindowLike(qr{^feh - test/ok/png$}), 'multiwindow 1/2'); -ok(FindWindowLike(qr{^feh - test/ok/jpg$}), 'multiwindow 2/2'); - -($win) = FindWindowLike(qr{^feh - test/ok/jpg$}); -SetInputFocus($win); -SendKeys('x'); -ok(waitfor { not FindWindowLike(qr{^feh - test/ok/jpg$}) }, 'win 2 closed'); - -($win) = FindWindowLike(qr{^feh - test/ok/png$}); -SetInputFocus($win); -SendKeys('x'); -test_no_win('all multiwindows closed'); - -$win = feh_start('--start-at test/ok/jpg', 'test/ok/png test/ok/gif test/ok/jpg'); -test_win_title($win, 'feh [3 of 3] - test/ok/jpg'); -SendKeys('{RIG}'); -test_win_title($win, 'feh [1 of 3] - test/ok/png'); -feh_stop(); - -feh_start('--caption-path .captions', 'test/ok/png'); -SendKeys('cFoo Bar Quux Moep~'); -feh_stop(); -ok(-d 'test/ok/.captions', 'autocreated captions directory'); -is(slurp('test/ok/.captions/png.txt'), 'Foo Bar Quux Moep', - 'Correct caption saved'); - -feh_start('--caption-path .captions', 'test/ok/png'); -SendKeys('c'); -SendKeys('{BKS}' x length('Foo Bar Quux Moep')); -SendKeys('Foo Bar^(~)miep~'); -feh_stop(); -is(slurp('test/ok/.captions/png.txt'), "Foo Bar\nmiep", - 'Caption with newline + correct backspace'); - -unlink('test/ok/.captions/png.txt'); -rmdir('test/ok/.captions'); - -$win = feh_start('--filelist test/filelist', - 'test/ok/png test/ok/gif test/ok/png test/ok/jpg'); -SendKeys('{DEL}'); -test_win_title($win, "feh [1 of 3] - ${pwd}/test/ok/gif"); -feh_stop(); - -is(slurp('test/filelist'), <<"EOF", 'Filelist saved'); -${pwd}/test/ok/gif -${pwd}/test/ok/png -${pwd}/test/ok/jpg -EOF - -$win = feh_start('--filelist test/filelist', q{}); -test_win_title($win, "feh [1 of 3] - ${pwd}/test/ok/gif"); -feh_stop(); -unlink('test/filelist'); - -$win = feh_start('--geometry 423x232'); -(undef, undef, $width, $height) = GetWindowPos($win); -is($width, 423, '--geometry: correct width'); -is($height, 232, '--geometry: correct height'); -feh_stop(); - -$win = feh_start('--fullscreen'); -(undef, undef, $width, $height) = GetWindowPos($win); -ok([(GetWindowPos($win))[2, 3]] ~~ [GetScreenRes()], - 'fullscreen uses full screen size'); -feh_stop(); - -$win = feh_start(q{}, 'test/ok/png ' . 'test/fail/png ' x 7 . 'test/ok/gif'); -test_win_title($win, 'feh [1 of 9] - test/ok/png'); -SendKeys('{RIG}'); -test_win_title($win, 'feh [2 of 2] - test/ok/gif'); -SendKeys('{LEF}'); -test_win_title($win, 'feh [1 of 2] - test/ok/png'); -SendKeys('{LEF}'); -test_win_title($win, 'feh [2 of 2] - test/ok/gif'); -feh_stop(); - -$win = feh_start(); -(undef, undef, $width, $height) = GetWindowPos($win); -is($width, 16, 'correct default window width'); -is($height, 16, 'correct default window height'); - -ResizeWindow($win, 25, 30); -(undef, undef, $width, $height) = GetWindowPos($win); - -SKIP: { - if (not ([$width, $height] ~~ [25, 30])) { - skip('ResizeWindow failed', 2) - } - PressKey('w'); - ok(waitfor { [(GetWindowPos($win))[2, 3]] ~~ [16, 16] }, - 'w key resizes correctly'); -} -feh_stop(); - -$win = feh_start(q{}, 'test/huge.png'); -ok(waitfor { - (GetWindowPos($win))[2] == (GetScreenRes())[0] - || (GetWindowPos($win))[3] == (GetScreenRes())[1] - }, - 'Large window limited to screen size'); -feh_stop(); - -$win = feh_start('--no-screen-clip', 'test/huge.png'); -ok(waitfor { - [(GetWindowPos($win))[2, 3]] ~~ [4000, 3000] - }, - 'disabled screen clip'); -feh_stop(); - -# GH-35 "Custom window title crashes feh on unloadable files" -$win = feh_start('--title "feh %h"', 'test/ok/png test/fail/png test/ok/jpg'); -SendKeys('{RIG}'); -test_win_title($win, 'feh 16'); -feh_stop(); @@ -6,11 +6,11 @@ use Test::Command tests => 71; $ENV{HOME} = 'test'; -my $feh = "src/feh"; -my $images_ok = 'test/ok/gif test/ok/jpg test/ok/png test/ok/pnm'; +my $feh = "src/feh"; +my $images_ok = 'test/ok/gif test/ok/jpg test/ok/png test/ok/pnm'; my $images_fail = 'test/fail/gif test/fail/jpg test/fail/png test/fail/pnm'; -my $images = "${images_ok} ${images_fail}"; -my $has_help = 0; +my $images = "${images_ok} ${images_fail}"; +my $has_help = 0; my $feh_name = $ENV{'PACKAGE'}; @@ -30,118 +30,115 @@ If you absolutely need to run it the other way, use EOF -if (length($feh_name) == 0) { +if ( length($feh_name) == 0 ) { die($err_no_env); } my $version = qx{$feh --version}; -if ($version =~ m{ Compile-time \s switches : \s .* help }ox) { +if ( $version =~ m{ Compile-time \s switches : \s .* help }ox ) { $has_help = 1; } -my $re_warning = - qr{${feh_name} WARNING: test/fail/... \- No Imlib2 loader for that file format\n}; -my $re_loadable = qr{test/ok/...}; -my $re_unloadable = qr{test/fail/...}; +my $re_warning + = qr{${feh_name} WARNING: test/fail/... \- No Imlib2 loader for that file format\n}; +my $re_loadable = qr{test/ok/...}; +my $re_unloadable = qr{test/fail/...}; my $re_list_action = qr{test/ok/... 16x16}; -my $cmd = Test::Command->new(cmd => "$feh --version"); +my $cmd = Test::Command->new( cmd => "$feh --version" ); $cmd->exit_is_num(0); $cmd->stderr_is_eq(''); -$cmd = Test::Command->new(cmd => "$feh --loadable $images"); +$cmd = Test::Command->new( cmd => "$feh --loadable $images" ); $cmd->exit_is_num(1); $cmd->stdout_like($re_loadable); $cmd->stderr_is_eq(''); $cmd = Test::Command->new( - cmd => "$feh --loadable --action 'echo touch %f' $images" -); + cmd => "$feh --loadable --action 'echo touch %f' $images" ); $cmd->exit_is_num(1); $cmd->stdout_is_file('test/nx_action/loadable_action'); $cmd->stderr_is_eq(''); $cmd = Test::Command->new( - cmd => "$feh --loadable --action ';echo touch %f' $images" -); + cmd => "$feh --loadable --action ';echo touch %f' $images" ); $cmd->exit_is_num(1); $cmd->stdout_is_file('test/nx_action/loadable_naction'); $cmd->stderr_is_eq(''); $cmd = Test::Command->new( - cmd => "$feh --unloadable --action 'echo rm %f' $images" -); + cmd => "$feh --unloadable --action 'echo rm %f' $images" ); $cmd->exit_is_num(1); $cmd->stdout_is_file('test/nx_action/unloadable_action'); $cmd->stderr_is_eq(''); $cmd = Test::Command->new( - cmd => "$feh --unloadable --action ';echo rm %f' $images" -); + cmd => "$feh --unloadable --action ';echo rm %f' $images" ); $cmd->exit_is_num(1); $cmd->stdout_is_file('test/nx_action/unloadable_naction'); $cmd->stderr_is_eq(''); -$cmd = Test::Command->new(cmd => "$feh --unloadable $images"); +$cmd = Test::Command->new( cmd => "$feh --unloadable $images" ); $cmd->exit_is_num(1); $cmd->stdout_like($re_unloadable); $cmd->stderr_is_eq(''); -$cmd = Test::Command->new(cmd => "$feh --list $images"); +$cmd = Test::Command->new( cmd => "$feh --list $images" ); $cmd->exit_is_num(0); $cmd->stdout_is_file('test/list/default'); $cmd->stderr_like($re_warning); for my $sort (qw/name filename width height pixels size format/) { - $cmd = Test::Command->new(cmd => "$feh --list $images --sort $sort"); + $cmd = Test::Command->new( cmd => "$feh --list $images --sort $sort" ); $cmd->exit_is_num(0); $cmd->stdout_is_file("test/list/$sort"); $cmd->stderr_like($re_warning); } -$cmd = Test::Command->new(cmd => "$feh --list $images --sort format --reverse"); +$cmd + = Test::Command->new( cmd => "$feh --list $images --sort format --reverse" ); $cmd->exit_is_num(0); $cmd->stdout_is_file('test/list/format_reverse'); $cmd->stderr_like($re_warning); $cmd = Test::Command->new( - cmd => "$feh --list --recursive --sort filename test/ok" -); + cmd => "$feh --list --recursive --sort filename test/ok" ); $cmd->exit_is_num(0); $cmd->stdout_is_file('test/list/filename_recursive'); $cmd->stderr_is_eq(''); -$cmd = Test::Command->new(cmd => "$feh --customlist '%f; %h; %l; %m; %n; %p; " - . "%s; %t; %u; %w' $images"); +$cmd = Test::Command->new( cmd => "$feh --customlist '%f; %h; %l; %m; %n; %p; " + . "%s; %t; %u; %w' $images" ); $cmd->exit_is_num(0); $cmd->stdout_is_file('test/list/custom'); $cmd->stderr_like($re_warning); -$cmd = Test::Command->new(cmd => "$feh --list --quiet $images"); +$cmd = Test::Command->new( cmd => "$feh --list --quiet $images" ); $cmd->exit_is_num(0); $cmd->stdout_is_file('test/list/default'); $cmd->stderr_is_eq(''); -$cmd = Test::Command->new(cmd => - "$feh --quiet --list --action 'echo \"%f %wx%h\" >&2' $images"); +$cmd = Test::Command->new( + cmd => "$feh --quiet --list --action 'echo \"%f %wx%h\" >&2' $images" ); $cmd->exit_is_num(0); $cmd->stdout_is_file('test/list/default'); $cmd->stderr_like($re_list_action); -$cmd = Test::Command->new(cmd => "$feh --list --min-dimension 20x20 $images_ok"); +$cmd + = Test::Command->new( cmd => "$feh --list --min-dimension 20x20 $images_ok" ); $cmd->exit_is_num(1); $cmd->stdout_is_eq(''); @@ -152,7 +149,8 @@ else { $cmd->stderr_is_file('test/no-loadable-files'); } -$cmd = Test::Command->new(cmd => "$feh --list --max-dimension 10x10 $images_ok"); +$cmd + = Test::Command->new( cmd => "$feh --list --max-dimension 10x10 $images_ok" ); $cmd->exit_is_num(1); $cmd->stdout_is_eq(''); @@ -163,13 +161,15 @@ else { $cmd->stderr_is_file('test/no-loadable-files'); } -$cmd = Test::Command->new(cmd => "$feh --list --min-dimension 16x16 $images_ok"); +$cmd + = Test::Command->new( cmd => "$feh --list --min-dimension 16x16 $images_ok" ); $cmd->exit_is_num(0); $cmd->stdout_is_file('test/list/default'); $cmd->stderr_is_eq(''); -$cmd = Test::Command->new(cmd => "$feh --list --max-dimension 16x16 $images_ok"); +$cmd + = Test::Command->new( cmd => "$feh --list --max-dimension 16x16 $images_ok" ); $cmd->exit_is_num(0); $cmd->stdout_is_file('test/list/default'); diff --git a/test/mandoc.t b/test/mandoc.t index d664289..3740809 100755 --- a/test/mandoc.t +++ b/test/mandoc.t @@ -8,13 +8,13 @@ use Test::More tests => 3; SKIP: { qx{mandoc -V}; - if ($? != 0) { + if ( $? != 0 ) { diag('mandoc not installed, test skipped. This is NOT fatal.'); - skip('mandoc not installed', 3); + skip( 'mandoc not installed', 3 ); } - for my $file ('feh', 'feh-cam', 'gen-cam-menu') { + for my $file ( 'feh', 'feh-cam', 'gen-cam-menu' ) { qx{mandoc -Tlint man/${file}.1}; - is($?, 0, "${file}.1: Valid mdoc syntax"); + is( $?, 0, "${file}.1: Valid mdoc syntax" ); } } diff --git a/test/run-interactive b/test/run-interactive index d801ac6..a342c22 100755 --- a/test/run-interactive +++ b/test/run-interactive @@ -3,7 +3,7 @@ Xephyr -screen 500x500 :7 > /dev/null 2>&1 & pid=${!} -DISPLAY=:7 prove test/feh-scr.i test/feh.i +DISPLAY=:7 prove test/feh-scr-i.t test/feh-i.t ret=${?} kill ${pid} |