From 013b068c7650ab1ef92cab6a54da6abf39673eba Mon Sep 17 00:00:00 2001 From: Daniel Friesel Date: Thu, 26 Sep 2013 19:36:15 +0200 Subject: test re-organization and code cleanup --- test/feh-bg-i.t | 82 +++++++++ test/feh-bg.i | 79 --------- test/feh-i.t | 461 +++++++++++++++++++++++++++++++++++++++++++++++++++ test/feh-scr-i.t | 326 ++++++++++++++++++++++++++++++++++++ test/feh-scr.i | 371 ----------------------------------------- test/feh.i | 453 -------------------------------------------------- test/feh.t | 70 ++++---- test/mandoc.t | 8 +- test/run-interactive | 2 +- 9 files changed, 909 insertions(+), 943 deletions(-) create mode 100755 test/feh-bg-i.t delete mode 100755 test/feh-bg.i create mode 100755 test/feh-i.t create mode 100755 test/feh-scr-i.t delete mode 100755 test/feh-scr.i delete mode 100755 test/feh.i (limited to 'test') diff --git a/test/feh-bg-i.t b/test/feh-bg-i.t new file mode 100755 index 0000000..1f22c9d --- /dev/null +++ b/test/feh-bg-i.t @@ -0,0 +1,82 @@ +#!/usr/bin/env perl +use strict; +use warnings; +use 5.010; +use autodie qw/:all/; + +use GD qw/:DEFAULT :cmp/; +use Test::More tests => 70; +use Time::HiRes qw/sleep/; + +my $scr_dir = '/tmp/feh-test-scr'; +my ( $pid_xnest, $pid_twm ); + +$ENV{HOME} = 'test'; + +sub set_bg { + my ( $mode, $file ) = @_; + + ok( + system("feh --bg-${mode} test/bg/${file}") == 0, + "Ran feh --bg-${mode} test/bg/${file}" + ); +} + +sub same_files { + 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 ) ); +} + +sub check_bg { + my ($file) = @_; + + system("import -silent -window root ${scr_dir}/feh_${$}.png"); + + 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 ) { + exec(qw( Xephyr -screen 500x500 :7 )); +} + +sleep(0.5); + +$ENV{'DISPLAY'} = ':7'; + +if ( ( $pid_twm = fork() ) == 0 ) { + exec('twm'); +} + +sleep(0.5); + +for my $mode (qw( center fill max scale tile )) { + + 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" ); + check_bg("${type}/${orientation}/${mode}"); + + } + } +} + +kill( 15, $pid_twm ); +sleep(0.2); +kill( 15, $pid_xnest ); +sleep(0.2); + +unlink("${scr_dir}/feh_${$}.png"); +unlink('test/.fehbg'); diff --git a/test/feh-bg.i b/test/feh-bg.i deleted file mode 100755 index 0e3b546..0000000 --- a/test/feh-bg.i +++ /dev/null @@ -1,79 +0,0 @@ -#!/usr/bin/env perl -use strict; -use warnings; -use 5.010; -use autodie qw/:all/; - -use GD qw/:DEFAULT :cmp/; -use Test::More tests => 70; -use Time::HiRes qw/sleep/; - -my ($pid_xnest, $pid_twm); - -$ENV{HOME} = 'test'; - -sub set_bg { - my ($mode, $file) = @_; - - ok( - system("feh --bg-${mode} test/bg/${file}") == 0, - "Ran feh --bg-${mode} test/bg/${file}" - ); -} - -sub same_files { - 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)); -} - -sub check_bg { - my ($file) = @_; - - system("import -silent -window root /tmp/feh_${$}.png"); - - ok( - same_files("test/bg/${file}", "/tmp/feh_${$}.png"), - "Wallpaper is test/bg/${file}" - ); -} - -if (($pid_xnest = fork()) == 0) { - exec(qw( Xephyr -screen 500x500 :7 )); -} - -sleep(0.5); - -$ENV{'DISPLAY'} = ':7'; - -if (($pid_twm = fork()) == 0) { - exec('twm'); -} - -sleep(0.5); - -for my $mode (qw( center fill max scale tile )) { - - 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"); - check_bg("${type}/${orientation}/${mode}"); - - } - } -} - -kill(15, $pid_twm); -sleep(0.2); -kill(15, $pid_xnest); -sleep(0.2); - -unlink("/tmp/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.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"); diff --git a/test/feh-scr.i b/test/feh-scr.i deleted file mode 100755 index d6d55b1..0000000 --- a/test/feh-scr.i +++ /dev/null @@ -1,371 +0,0 @@ -#!/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; - -$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 /tmp/feh_${$}.png"); - - return same_files("test/scr/${file}", "/tmp/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("/tmp/feh_${$}.png", "/tmp/feh_${$}_${test_id}_${file}.png"); - } -} - -if (FindWindowLike(qr{^feh})) { - BAIL_OUT('It appears you have an open feh window. Please close it.'); -} - -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("/tmp/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(); diff --git a/test/feh.t b/test/feh.t index e530087..a9d2a04 100644 --- a/test/feh.t +++ b/test/feh.t @@ -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} -- cgit v1.2.3