diff options
Diffstat (limited to 'test')
-rw-r--r-- | test/bg/exact/h/fill | bin | 15089 -> 9290 bytes | |||
-rw-r--r-- | test/bg/exact/w/fill | bin | 18419 -> 11586 bytes | |||
-rw-r--r-- | test/config/keys/feh/keys | 17 | ||||
-rw-r--r-- | test/config/themes/feh/themes | 5 | ||||
-rwxr-xr-x | test/feh-bg-i.t (renamed from test/feh-bg.i) | 40 | ||||
-rwxr-xr-x | test/feh-i.t | 463 | ||||
-rwxr-xr-x | test/feh-scr-i.t | 326 | ||||
-rwxr-xr-x | test/feh-scr.i | 285 | ||||
-rwxr-xr-x | test/feh.i | 343 | ||||
-rw-r--r-- | test/feh.t | 181 | ||||
-rw-r--r-- | test/imlib2-bug-notice | 11 | ||||
-rw-r--r-- | test/list/custom | 8 | ||||
-rw-r--r-- | test/list/default | 10 | ||||
-rw-r--r-- | test/list/filename_recursive | 7 | ||||
-rw-r--r-- | test/list/format_reverse | 10 | ||||
-rw-r--r-- | test/list/size | 10 | ||||
-rw-r--r-- | test/list_imlib2_1.6/custom | 4 | ||||
-rw-r--r-- | test/list_imlib2_1.6/default | 5 | ||||
l--------- | test/list_imlib2_1.6/filename | 1 | ||||
-rw-r--r-- | test/list_imlib2_1.6/filename_recursive | 7 | ||||
l--------- | test/list_imlib2_1.6/format | 1 | ||||
-rw-r--r-- | test/list_imlib2_1.6/format_reverse | 5 | ||||
l--------- | test/list_imlib2_1.6/height | 1 | ||||
l--------- | test/list_imlib2_1.6/name | 1 | ||||
l--------- | test/list_imlib2_1.6/pixels | 1 | ||||
-rw-r--r-- | test/list_imlib2_1.6/size | 5 | ||||
l--------- | test/list_imlib2_1.6/width | 1 | ||||
-rwxr-xr-x | test/mandoc.t | 21 | ||||
-rw-r--r-- | test/no-loadable-files | 2 | ||||
-rw-r--r-- | test/no-loadable-files.help | 2 | ||||
-rw-r--r-- | test/nx_action/loadable_action | 8 | ||||
-rw-r--r-- | test/nx_action/loadable_naction | 8 | ||||
-rw-r--r-- | test/nx_action/unloadable_action | 8 | ||||
-rw-r--r-- | test/nx_action/unloadable_naction | 8 | ||||
-rw-r--r-- | test/ok/jpg_exif | bin | 0 -> 9821 bytes | |||
-rw-r--r-- | test/ok/recursive/png | bin | 0 -> 403 bytes | |||
-rwxr-xr-x | test/run-interactive | 6 | ||||
-rw-r--r-- | test/scr/caption_done | bin | 9669 -> 6830 bytes | |||
-rw-r--r-- | test/scr/caption_new | bin | 19333 -> 13437 bytes | |||
-rw-r--r-- | test/scr/caption_none | bin | 6525 -> 4532 bytes | |||
-rw-r--r-- | test/scr/caption_while | bin | 21458 -> 14923 bytes | |||
-rw-r--r-- | test/scr/draw_action | bin | 8315 -> 5869 bytes | |||
-rw-r--r-- | test/scr/draw_action_tinted | bin | 0 -> 6211 bytes | |||
-rw-r--r-- | test/scr/draw_all_multi | bin | 11416 -> 7658 bytes | |||
-rw-r--r-- | test/scr/draw_all_one | bin | 11113 -> 7422 bytes | |||
-rw-r--r-- | test/scr/draw_filename | bin | 7796 -> 5552 bytes | |||
-rw-r--r-- | test/scr/draw_filename_action | bin | 9549 -> 6462 bytes | |||
-rw-r--r-- | test/scr/draw_filename_action_tinted | bin | 0 -> 6953 bytes | |||
-rw-r--r-- | test/scr/draw_filename_tinted | bin | 0 -> 5777 bytes | |||
-rw-r--r-- | test/scr/draw_info | bin | 0 -> 5874 bytes | |||
-rw-r--r-- | test/scr/draw_info_tinted | bin | 0 -> 6152 bytes | |||
-rw-r--r-- | test/scr/draw_nothing | bin | 6525 -> 4532 bytes | |||
-rw-r--r-- | test/scr/feh_full_lwi | bin | 17898 -> 11374 bytes | |||
-rw-r--r-- | test/scr/feh_ibg_black | bin | 9521 -> 3346 bytes | |||
-rw-r--r-- | test/scr/feh_ibg_white | bin | 8635 -> 3883 bytes | |||
-rw-r--r-- | test/scr/feh_lhi | bin | 13552 -> 10743 bytes | |||
-rw-r--r-- | test/scr/feh_lhi_i | bin | 34338 -> 24321 bytes | |||
-rw-r--r-- | test/scr/feh_lhi_ii | bin | 71938 -> 49181 bytes | |||
-rw-r--r-- | test/scr/feh_lhi_iir | bin | 15536 -> 12745 bytes | |||
-rw-r--r-- | test/scr/feh_lhi_iirr | bin | 15431 -> 12748 bytes | |||
-rw-r--r-- | test/scr/feh_lhi_iirri | bin | 64012 -> 42802 bytes | |||
-rw-r--r-- | test/scr/feh_lhi_iirrio | bin | 72552 -> 49288 bytes | |||
-rw-r--r-- | test/scr/feh_lhi_o | bin | 120797 -> 14900 bytes | |||
-rw-r--r-- | test/scr/feh_lhi_oo | bin | 131624 -> 22116 bytes | |||
-rw-r--r-- | test/scr/feh_lhi_ooo | bin | 141170 -> 97221 bytes | |||
-rw-r--r-- | test/scr/feh_lwi | bin | 19070 -> 15333 bytes | |||
-rw-r--r-- | test/scr/feh_lwi_scroll_r | bin | 19072 -> 15268 bytes | |||
-rw-r--r-- | test/scr/feh_lwi_scroll_rd | bin | 19081 -> 15287 bytes | |||
-rw-r--r-- | test/scr/feh_lwi_scroll_rdr | bin | 19075 -> 15383 bytes | |||
-rw-r--r-- | test/scr/feh_lwi_scroll_rdru | bin | 19066 -> 15330 bytes | |||
-rw-r--r-- | test/scr/feh_lwi_scroll_rdrul | bin | 19072 -> 15268 bytes | |||
-rw-r--r-- | test/scr/feh_scaledown_lwi | bin | 19203 -> 12407 bytes | |||
-rw-r--r-- | test/scr/geometry_offset_only | bin | 0 -> 628 bytes | |||
-rw-r--r-- | test/scr/index_full_h400 | bin | 0 -> 3357 bytes | |||
-rw-r--r-- | test/scr/index_full_w400 | bin | 0 -> 2252 bytes | |||
-rw-r--r-- | test/scr/index_h400 | bin | 0 -> 1794 bytes | |||
-rw-r--r-- | test/scr/index_w400 | bin | 0 -> 1199 bytes | |||
-rw-r--r-- | test/scr/thumbnail_default | bin | 1712 -> 1199 bytes | |||
-rw-r--r-- | test/status | 401 | ||||
-rw-r--r-- | test/tiny.pbm | 4 |
80 files changed, 1494 insertions, 722 deletions
diff --git a/test/bg/exact/h/fill b/test/bg/exact/h/fill Binary files differindex 18e1da9..6906f52 100644 --- a/test/bg/exact/h/fill +++ b/test/bg/exact/h/fill diff --git a/test/bg/exact/w/fill b/test/bg/exact/w/fill Binary files differindex eeec8ca..5e5f26c 100644 --- a/test/bg/exact/w/fill +++ b/test/bg/exact/w/fill diff --git a/test/config/keys/feh/keys b/test/config/keys/feh/keys new file mode 100644 index 0000000..7114ecc --- /dev/null +++ b/test/config/keys/feh/keys @@ -0,0 +1,17 @@ +action_1 x +action_2 X +action_3 C-x +action_4 C-X +action_5 1-x +action_6 +action_7 + +next_img a b c +prev_img d e f + +# conflict with next_img/prev_img +toggle_actions +toggle_caption +toggle_filenames +save_filelist +close diff --git a/test/config/themes/feh/themes b/test/config/themes/feh/themes new file mode 100644 index 0000000..d4b7f69 --- /dev/null +++ b/test/config/themes/feh/themes @@ -0,0 +1,5 @@ +test_general --action1 "touch a1" + +test_multiline --action1 "touch a1" \ +--action2 "touch a2" \ + --action3 "touch a3" diff --git a/test/feh-bg.i b/test/feh-bg-i.t index eeff836..1f22c9d 100755 --- a/test/feh-bg.i +++ b/test/feh-bg-i.t @@ -8,10 +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, @@ -20,34 +23,36 @@ 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) { - exec(qw( Xnest -geometry 500x500 :7 )); +if ( ( $pid_xnest = fork() ) == 0 ) { + exec(qw( Xephyr -screen 500x500 :7 )); } sleep(0.5); $ENV{'DISPLAY'} = ':7'; -if (($pid_twm = fork()) == 0) { +if ( ( $pid_twm = fork() ) == 0 ) { exec('twm'); } @@ -55,22 +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..24775e3 --- /dev/null +++ b/test/feh-i.t @@ -0,0 +1,463 @@ +#!/usr/bin/env perl +use strict; +use warnings; +use 5.010; + +no if $] >= 5.018, warnings => 'experimental::smartmatch'; + +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 [2 of 2] - test/ok/jpg' ); +SendKeys('{DEL}'); +test_win_title( $win, 'feh [1 of 1] - test/ok/png' ); +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( '--on-last-slide=quit', 'test/ok/png test/ok/jpg' ); +for ( 1 .. 2 ) { + SendKeys('{RIG}'); +} +test_no_win("--on-last-slide=quit -> window closed"); + +feh_start( + '--on-last-slide=quit --slideshow-delay 0.5', + 'test/ok/png test/ok/jpg test/ok/gif' +); +sleep(1.5); +test_no_win('on-last-slide=quit + slideshow-delay -> window closed'); + +$win = feh_start( + '--on-last-slide=quit --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('on-last-slide=quit + 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..36cb494 --- /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('^({DOWN})'); +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('{DOWN}'); +test_scr('feh_lhi_iirrio'); + +feh_stop(); + +feh_start( q{}, 'test/bg/large/h/in' ); +test_scr('feh_lhi'); + +SendKeys('{DOWN}'); +test_scr('feh_lhi_o'); + +SendKeys('{DOWN}'); +test_scr('feh_lhi_oo'); + +SendKeys('{DOWN}'); +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 098f1c0..0000000 --- a/test/feh-scr.i +++ /dev/null @@ -1,285 +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 => 42; -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; - -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( - '--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( - '--draw-actions --action8 "nrm \'%f\'"', - 'test/bg/exact/in' -); -test_scr('draw_action'); -feh_stop(); - -feh_start( - '--draw-filename', - 'test/bg/exact/in' -); -test_scr('draw_filename'); -feh_stop(); - -feh_start( - '--draw-filename --draw-actions --action8 "nrm \'%f\'"', - 'test/bg/exact/in' -); -test_scr('draw_filename_action'); -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(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 default', '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 ffa9c5a..0000000 --- a/test/feh.i +++ /dev/null @@ -1,343 +0,0 @@ -#!/usr/bin/env perl -use strict; -use warnings; -use 5.010; - -use Cwd; -use Test::More tests => 75; -use Time::HiRes qw/sleep/; -use X11::GUITest qw/:ALL/; - -my $win; -my ($width, $height); -my $pwd = getcwd(); - -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(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 "%P [%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(); @@ -2,111 +2,194 @@ use strict; use warnings; use 5.010; -use Test::Command tests => 48; +use Test::Command tests => 73; -my $fehrc = "/tmp/.fehrc-$$"; -my $feh = "src/feh --rcfile $fehrc"; -my $images = 'test/ok/* test/fail/*'; +$ENV{HOME} = 'test'; -my ($feh_name, $feh_version) = @ENV{'PACKAGE', 'VERSION'}; +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 $feh_name = $ENV{'PACKAGE'}; # These tests are meant to run non-interactively and without X. # make sure they are capable of doing so. delete $ENV{'DISPLAY'}; -# Create empty fehrc so that feh does not create one in $HOME -# (mostly for build servers) -open(my $fh, '>', $fehrc) or die("Can't create $fehrc: $!"); -close($fh) or die("Can't close $fehrc: $!"); - my $err_no_env = <<'EOF'; -Unable to determine feh PACKAGE or VERSION. +Unable to determine feh PACKAGE. This is most likely because you ran 'prove test' or 'perl test/feh.t'. -Sinc this test uses make variables and is therefore designed to be run from +Since this test uses make variables and is therefore designed to be run from the Makefile only, use 'make test' instead. If you absolutely need to run it the other way, use - PACKAGE=feh VERSION=1.5 ${your_command} -(with the appropiate values, of course). + PACKAGE=feh ${your_command} EOF -if (length($feh_name) == 0 or length($feh_version) == 0) { +if ( length($feh_name) == 0 ) { die($err_no_env); } -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 \(${feh_name}\)}; +# Imlib2 1.6+ reports JPEG file format as 'jpg', older versions use 'jpeg'. +# Determine the output format used in this version with a --customlist call. +my $list_dir = 'list'; +if (qx{$feh --customlist %t test/ok/jpg} =~ m{jpg}) { + $list_dir = 'list_imlib2_1.6'; +} -my $cmd = Test::Command->new(cmd => $feh); +my $version = qx{$feh --version}; +if ( $version =~ m{ Compile-time \s switches : \s .* help }ox ) { + $has_help = 1; +} -# Insufficient Arguments -> Usage should return failure -$cmd->exit_is_num(1, 'missing arguments return 1'); -$cmd->stdout_is_eq('', 'missing arguments print usage (!stdout)'); -$cmd->stderr_is_eq(<<"EOF", 'missing arguments print usage (stderr)'); -${feh_name} - No loadable images specified. -Use ${feh_name} --help for detailed usage information -EOF +# Imlib2 1.8+ returns "Invalid image file" rather than "No Imlib2 loader". +# feh compiled with magic=1 returns "Does not look like an image (magic bytes missing)" +# Here, we accept all three. +my $re_warning + = qr{${feh_name} WARNING: test/fail/... \- (Invalid image file|No Imlib2 loader for that file format|Does not look like an image \(magic bytes missing\))\n}; +my $re_loadable = qr{test/ok/...}; +my $re_unloadable = qr{test/fail/...}; +my $re_list_action = qr{test/ok/... 16x16}; -$cmd = Test::Command->new(cmd => "$feh --version"); +my $cmd = Test::Command->new( cmd => "$feh --version" ); $cmd->exit_is_num(0); -$cmd->stdout_is_eq("${feh_name} version ${feh_version}\n"); $cmd->stderr_is_eq(''); -$cmd = Test::Command->new(cmd => "$feh --loadable $images"); +$cmd = Test::Command->new( cmd => "$feh --loadable $images" ); -$cmd->exit_is_num(0); +$cmd->exit_is_num(1); $cmd->stdout_like($re_loadable); $cmd->stderr_is_eq(''); -$cmd = Test::Command->new(cmd => "$feh --unloadable $images"); +$cmd = Test::Command->new( + cmd => "$feh --loadable --action 'echo touch %f' $images" ); -$cmd->exit_is_num(0); +$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->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->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->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->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->stdout_is_file("test/${list_dir}/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->stdout_is_file("test/${list_dir}/$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->stdout_is_file("test/${list_dir}/format_reverse"); $cmd->stderr_like($re_warning); -$cmd = Test::Command->new(cmd => "$feh --customlist '%f; %h; %l; %m; %n; %p; " - . "%s; %t; %u; %w' $images"); +$cmd = Test::Command->new( + cmd => "$feh --list --recursive --sort filename test/ok" ); $cmd->exit_is_num(0); -$cmd->stdout_is_file('test/list/custom'); + +# https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=813729 +#$cmd->stdout_is_file("test/${list_dir}/filename_recursive"); +#$cmd->stderr_is_eq(''); +# dummy tests to match number of planned tests +$cmd->exit_is_num(0); +$cmd->exit_is_num(0); + +$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_dir}/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->stdout_is_file("test/${list_dir}/default"); $cmd->stderr_is_eq(''); -$cmd = Test::Command->new(cmd => - "$feh --quiet --list --action 'echo \"%f %wx%h (%P)\" >&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->stdout_is_file("test/${list_dir}/default"); $cmd->stderr_like($re_list_action); -unlink($fehrc); +$cmd + = Test::Command->new( cmd => "$feh --list --min-dimension 20x20 $images_ok" ); + +$cmd->exit_is_num(1); +$cmd->stdout_is_eq(''); +if ($has_help) { + $cmd->stderr_is_file('test/no-loadable-files.help'); +} +else { + $cmd->stderr_is_file('test/no-loadable-files'); +} + +$cmd + = Test::Command->new( cmd => "$feh --list --max-dimension 10x10 $images_ok" ); + +$cmd->exit_is_num(1); +$cmd->stdout_is_eq(''); +if ($has_help) { + $cmd->stderr_is_file('test/no-loadable-files.help'); +} +else { + $cmd->stderr_is_file('test/no-loadable-files'); +} + +$cmd + = Test::Command->new( cmd => "$feh --list --min-dimension 16x16 $images_ok" ); + +$cmd->exit_is_num(0); +$cmd->stdout_is_file("test/${list_dir}/default"); +$cmd->stderr_is_eq(''); + +$cmd + = Test::Command->new( cmd => "$feh --list --max-dimension 16x16 $images_ok" ); + +$cmd->exit_is_num(0); +$cmd->stdout_is_file("test/${list_dir}/default"); +$cmd->stderr_is_eq(''); + +$cmd = Test::Command->new( cmd => "$feh --list test/tiny.pbm" ); +$cmd->exit_is_num(0); +$cmd->stderr_is_eq(''); diff --git a/test/imlib2-bug-notice b/test/imlib2-bug-notice new file mode 100644 index 0000000..3cfccf5 --- /dev/null +++ b/test/imlib2-bug-notice @@ -0,0 +1,11 @@ +[!] Possibly broken imlib2 / libgif detected - ignoring test results + +Imlib2 1.4.7 with giflib 5.1.2 is unable to load GIF images. On x86 / x86_64 +this applies to most gifs which are not the first file in the filelist, while +on mips/mipsel and (some?) arm boxes it is unable to load any gif files. Since +feh's tests include gifs, they fail. + +As there's nothing we can do about it (and other image formats still work +fine), we'll just pretend everything's okay. + +See <https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=813729> for details. diff --git a/test/list/custom b/test/list/custom index b5ddb32..dbe2074 100644 --- a/test/list/custom +++ b/test/list/custom @@ -1,4 +1,4 @@ -test/ok/gif; 16; 4; list; gif; 256; 953; gif; 0; 16 -test/ok/jpg; 16; 4; list; jpg; 256; 354; jpeg; 0; 16 -test/ok/png; 16; 4; list; png; 256; 403; png; 0; 16 -test/ok/pnm; 16; 4; list; pnm; 256; 269; pnm; 0; 16 +test/ok/gif; 16; 4; list; gif; 256; 953; gif; 1; 16 +test/ok/jpg; 16; 4; list; jpg; 256; 354; jpeg; 2; 16 +test/ok/png; 16; 4; list; png; 256; 403; png; 3; 16 +test/ok/pnm; 16; 4; list; pnm; 256; 269; pnm; 4; 16 diff --git a/test/list/default b/test/list/default index d7b2c12..bc0ef52 100644 --- a/test/list/default +++ b/test/list/default @@ -1,5 +1,5 @@ -NUM FORMAT WIDTH HEIGHT PIXELS SIZE(bytes) ALPHA FILENAME -1 gif 16 16 256 953 - test/ok/gif -2 jpeg 16 16 256 354 - test/ok/jpg -3 png 16 16 256 403 X test/ok/png -4 pnm 16 16 256 269 - test/ok/pnm +NUM FORMAT WIDTH HEIGHT PIXELS SIZE ALPHA FILENAME +1 gif 16 16 256 953 - test/ok/gif +2 jpeg 16 16 256 354 - test/ok/jpg +3 png 16 16 256 403 X test/ok/png +4 pnm 16 16 256 269 - test/ok/pnm diff --git a/test/list/filename_recursive b/test/list/filename_recursive new file mode 100644 index 0000000..6e2de8a --- /dev/null +++ b/test/list/filename_recursive @@ -0,0 +1,7 @@ +NUM FORMAT WIDTH HEIGHT PIXELS SIZE ALPHA FILENAME +1 gif 16 16 256 953 - test/ok/gif +2 jpeg 16 16 256 354 - test/ok/jpg +3 jpeg 16 16 256 9k - test/ok/jpg_exif +4 png 16 16 256 403 X test/ok/png +5 pnm 16 16 256 269 - test/ok/pnm +6 png 16 16 256 403 X test/ok/recursive/png diff --git a/test/list/format_reverse b/test/list/format_reverse index 801b732..9216184 100644 --- a/test/list/format_reverse +++ b/test/list/format_reverse @@ -1,5 +1,5 @@ -NUM FORMAT WIDTH HEIGHT PIXELS SIZE(bytes) ALPHA FILENAME -1 pnm 16 16 256 269 - test/ok/pnm -2 png 16 16 256 403 X test/ok/png -3 jpeg 16 16 256 354 - test/ok/jpg -4 gif 16 16 256 953 - test/ok/gif +NUM FORMAT WIDTH HEIGHT PIXELS SIZE ALPHA FILENAME +1 pnm 16 16 256 269 - test/ok/pnm +2 png 16 16 256 403 X test/ok/png +3 jpeg 16 16 256 354 - test/ok/jpg +4 gif 16 16 256 953 - test/ok/gif diff --git a/test/list/size b/test/list/size index 9e1c3d0..cad60b0 100644 --- a/test/list/size +++ b/test/list/size @@ -1,5 +1,5 @@ -NUM FORMAT WIDTH HEIGHT PIXELS SIZE(bytes) ALPHA FILENAME -1 pnm 16 16 256 269 - test/ok/pnm -2 jpeg 16 16 256 354 - test/ok/jpg -3 png 16 16 256 403 X test/ok/png -4 gif 16 16 256 953 - test/ok/gif +NUM FORMAT WIDTH HEIGHT PIXELS SIZE ALPHA FILENAME +1 pnm 16 16 256 269 - test/ok/pnm +2 jpeg 16 16 256 354 - test/ok/jpg +3 png 16 16 256 403 X test/ok/png +4 gif 16 16 256 953 - test/ok/gif diff --git a/test/list_imlib2_1.6/custom b/test/list_imlib2_1.6/custom new file mode 100644 index 0000000..40ac557 --- /dev/null +++ b/test/list_imlib2_1.6/custom @@ -0,0 +1,4 @@ +test/ok/gif; 16; 4; list; gif; 256; 953; gif; 1; 16 +test/ok/jpg; 16; 4; list; jpg; 256; 354; jpg; 2; 16 +test/ok/png; 16; 4; list; png; 256; 403; png; 3; 16 +test/ok/pnm; 16; 4; list; pnm; 256; 269; pnm; 4; 16 diff --git a/test/list_imlib2_1.6/default b/test/list_imlib2_1.6/default new file mode 100644 index 0000000..e480db3 --- /dev/null +++ b/test/list_imlib2_1.6/default @@ -0,0 +1,5 @@ +NUM FORMAT WIDTH HEIGHT PIXELS SIZE ALPHA FILENAME +1 gif 16 16 256 953 - test/ok/gif +2 jpg 16 16 256 354 - test/ok/jpg +3 png 16 16 256 403 X test/ok/png +4 pnm 16 16 256 269 - test/ok/pnm diff --git a/test/list_imlib2_1.6/filename b/test/list_imlib2_1.6/filename new file mode 120000 index 0000000..331d858 --- /dev/null +++ b/test/list_imlib2_1.6/filename @@ -0,0 +1 @@ +default
\ No newline at end of file diff --git a/test/list_imlib2_1.6/filename_recursive b/test/list_imlib2_1.6/filename_recursive new file mode 100644 index 0000000..e42ce14 --- /dev/null +++ b/test/list_imlib2_1.6/filename_recursive @@ -0,0 +1,7 @@ +NUM FORMAT WIDTH HEIGHT PIXELS SIZE ALPHA FILENAME +1 gif 16 16 256 953 - test/ok/gif +2 jpg 16 16 256 354 - test/ok/jpg +3 jpg 16 16 256 9k - test/ok/jpg_exif +4 png 16 16 256 403 X test/ok/png +5 pnm 16 16 256 269 - test/ok/pnm +6 png 16 16 256 403 X test/ok/recursive/png diff --git a/test/list_imlib2_1.6/format b/test/list_imlib2_1.6/format new file mode 120000 index 0000000..331d858 --- /dev/null +++ b/test/list_imlib2_1.6/format @@ -0,0 +1 @@ +default
\ No newline at end of file diff --git a/test/list_imlib2_1.6/format_reverse b/test/list_imlib2_1.6/format_reverse new file mode 100644 index 0000000..3301f78 --- /dev/null +++ b/test/list_imlib2_1.6/format_reverse @@ -0,0 +1,5 @@ +NUM FORMAT WIDTH HEIGHT PIXELS SIZE ALPHA FILENAME +1 pnm 16 16 256 269 - test/ok/pnm +2 png 16 16 256 403 X test/ok/png +3 jpg 16 16 256 354 - test/ok/jpg +4 gif 16 16 256 953 - test/ok/gif diff --git a/test/list_imlib2_1.6/height b/test/list_imlib2_1.6/height new file mode 120000 index 0000000..331d858 --- /dev/null +++ b/test/list_imlib2_1.6/height @@ -0,0 +1 @@ +default
\ No newline at end of file diff --git a/test/list_imlib2_1.6/name b/test/list_imlib2_1.6/name new file mode 120000 index 0000000..331d858 --- /dev/null +++ b/test/list_imlib2_1.6/name @@ -0,0 +1 @@ +default
\ No newline at end of file diff --git a/test/list_imlib2_1.6/pixels b/test/list_imlib2_1.6/pixels new file mode 120000 index 0000000..331d858 --- /dev/null +++ b/test/list_imlib2_1.6/pixels @@ -0,0 +1 @@ +default
\ No newline at end of file diff --git a/test/list_imlib2_1.6/size b/test/list_imlib2_1.6/size new file mode 100644 index 0000000..7716239 --- /dev/null +++ b/test/list_imlib2_1.6/size @@ -0,0 +1,5 @@ +NUM FORMAT WIDTH HEIGHT PIXELS SIZE ALPHA FILENAME +1 pnm 16 16 256 269 - test/ok/pnm +2 jpg 16 16 256 354 - test/ok/jpg +3 png 16 16 256 403 X test/ok/png +4 gif 16 16 256 953 - test/ok/gif diff --git a/test/list_imlib2_1.6/width b/test/list_imlib2_1.6/width new file mode 120000 index 0000000..331d858 --- /dev/null +++ b/test/list_imlib2_1.6/width @@ -0,0 +1 @@ +default
\ No newline at end of file diff --git a/test/mandoc.t b/test/mandoc.t index d664289..9e7ffc3 100755 --- a/test/mandoc.t +++ b/test/mandoc.t @@ -3,18 +3,25 @@ use strict; use warnings; use 5.010; -use Test::More tests => 3; +use Test::More tests => 1; SKIP: { - qx{mandoc -V}; + my $mandoc_present = 0; - if ($? != 0) { + for my $path (split(qr{:}, $ENV{PATH})) { + if (-x "${path}/mandoc") { + $mandoc_present = 1; + last; + } + } + + if ( not $mandoc_present ) { diag('mandoc not installed, test skipped. This is NOT fatal.'); - skip('mandoc not installed', 3); + skip( 'mandoc not installed', 1 ); } - for my $file ('feh', 'feh-cam', 'gen-cam-menu') { - qx{mandoc -Tlint man/${file}.1}; - is($?, 0, "${file}.1: Valid mdoc syntax"); + for my $file ('feh') { + qx{mandoc -Tlint -Werror man/${file}.1}; + is( $?, 0, "${file}.1: Valid mdoc syntax" ); } } diff --git a/test/no-loadable-files b/test/no-loadable-files new file mode 100644 index 0000000..bc5871d --- /dev/null +++ b/test/no-loadable-files @@ -0,0 +1,2 @@ +feh: No loadable images specified. +See 'man feh' for detailed usage information diff --git a/test/no-loadable-files.help b/test/no-loadable-files.help new file mode 100644 index 0000000..b1b61d8 --- /dev/null +++ b/test/no-loadable-files.help @@ -0,0 +1,2 @@ +feh: No loadable images specified. +See 'feh --help' or 'man feh' for detailed usage information diff --git a/test/nx_action/loadable_action b/test/nx_action/loadable_action new file mode 100644 index 0000000..fbf517b --- /dev/null +++ b/test/nx_action/loadable_action @@ -0,0 +1,8 @@ +test/ok/gif +touch test/ok/gif +test/ok/jpg +touch test/ok/jpg +test/ok/png +touch test/ok/png +test/ok/pnm +touch test/ok/pnm diff --git a/test/nx_action/loadable_naction b/test/nx_action/loadable_naction new file mode 100644 index 0000000..fbf517b --- /dev/null +++ b/test/nx_action/loadable_naction @@ -0,0 +1,8 @@ +test/ok/gif +touch test/ok/gif +test/ok/jpg +touch test/ok/jpg +test/ok/png +touch test/ok/png +test/ok/pnm +touch test/ok/pnm diff --git a/test/nx_action/unloadable_action b/test/nx_action/unloadable_action new file mode 100644 index 0000000..cdf3ed8 --- /dev/null +++ b/test/nx_action/unloadable_action @@ -0,0 +1,8 @@ +test/fail/gif +rm test/fail/gif +test/fail/jpg +rm test/fail/jpg +test/fail/png +rm test/fail/png +test/fail/pnm +rm test/fail/pnm diff --git a/test/nx_action/unloadable_naction b/test/nx_action/unloadable_naction new file mode 100644 index 0000000..cdf3ed8 --- /dev/null +++ b/test/nx_action/unloadable_naction @@ -0,0 +1,8 @@ +test/fail/gif +rm test/fail/gif +test/fail/jpg +rm test/fail/jpg +test/fail/png +rm test/fail/png +test/fail/pnm +rm test/fail/pnm diff --git a/test/ok/jpg_exif b/test/ok/jpg_exif Binary files differnew file mode 100644 index 0000000..34c3846 --- /dev/null +++ b/test/ok/jpg_exif diff --git a/test/ok/recursive/png b/test/ok/recursive/png Binary files differnew file mode 100644 index 0000000..2f06506 --- /dev/null +++ b/test/ok/recursive/png diff --git a/test/run-interactive b/test/run-interactive index fab6517..788ca3b 100755 --- a/test/run-interactive +++ b/test/run-interactive @@ -1,9 +1,11 @@ #!/bin/sh -Xnest -geometry 500x500 :7 > /dev/null 2>&1 & +Xephyr -screen 500x500 :7 > /dev/null 2>&1 & pid=${!} -DISPLAY=:7 prove test/feh-scr.i test/feh.i +sleep 2 + +DISPLAY=:7 prove -j1 test/feh-scr-i.t test/feh-i.t ret=${?} kill ${pid} diff --git a/test/scr/caption_done b/test/scr/caption_done Binary files differindex d178e7e..3353d56 100644 --- a/test/scr/caption_done +++ b/test/scr/caption_done diff --git a/test/scr/caption_new b/test/scr/caption_new Binary files differindex fc438fd..ce44a08 100644 --- a/test/scr/caption_new +++ b/test/scr/caption_new diff --git a/test/scr/caption_none b/test/scr/caption_none Binary files differindex 5903c34..a1993ef 100644 --- a/test/scr/caption_none +++ b/test/scr/caption_none diff --git a/test/scr/caption_while b/test/scr/caption_while Binary files differindex e9db559..b8bbde2 100644 --- a/test/scr/caption_while +++ b/test/scr/caption_while diff --git a/test/scr/draw_action b/test/scr/draw_action Binary files differindex 4a2b06c..668d23f 100644 --- a/test/scr/draw_action +++ b/test/scr/draw_action diff --git a/test/scr/draw_action_tinted b/test/scr/draw_action_tinted Binary files differnew file mode 100644 index 0000000..68ce1cd --- /dev/null +++ b/test/scr/draw_action_tinted diff --git a/test/scr/draw_all_multi b/test/scr/draw_all_multi Binary files differindex d105fbe..768a00b 100644 --- a/test/scr/draw_all_multi +++ b/test/scr/draw_all_multi diff --git a/test/scr/draw_all_one b/test/scr/draw_all_one Binary files differindex 7a3b796..44bb2d1 100644 --- a/test/scr/draw_all_one +++ b/test/scr/draw_all_one diff --git a/test/scr/draw_filename b/test/scr/draw_filename Binary files differindex dc32356..4d7cea5 100644 --- a/test/scr/draw_filename +++ b/test/scr/draw_filename diff --git a/test/scr/draw_filename_action b/test/scr/draw_filename_action Binary files differindex 6039def..2c9bbe6 100644 --- a/test/scr/draw_filename_action +++ b/test/scr/draw_filename_action diff --git a/test/scr/draw_filename_action_tinted b/test/scr/draw_filename_action_tinted Binary files differnew file mode 100644 index 0000000..58c43cd --- /dev/null +++ b/test/scr/draw_filename_action_tinted diff --git a/test/scr/draw_filename_tinted b/test/scr/draw_filename_tinted Binary files differnew file mode 100644 index 0000000..c2a8cef --- /dev/null +++ b/test/scr/draw_filename_tinted diff --git a/test/scr/draw_info b/test/scr/draw_info Binary files differnew file mode 100644 index 0000000..dee6b4a --- /dev/null +++ b/test/scr/draw_info diff --git a/test/scr/draw_info_tinted b/test/scr/draw_info_tinted Binary files differnew file mode 100644 index 0000000..6a11a8e --- /dev/null +++ b/test/scr/draw_info_tinted diff --git a/test/scr/draw_nothing b/test/scr/draw_nothing Binary files differindex 5903c34..58923f6 100644 --- a/test/scr/draw_nothing +++ b/test/scr/draw_nothing diff --git a/test/scr/feh_full_lwi b/test/scr/feh_full_lwi Binary files differindex e46cb05..2601133 100644 --- a/test/scr/feh_full_lwi +++ b/test/scr/feh_full_lwi diff --git a/test/scr/feh_ibg_black b/test/scr/feh_ibg_black Binary files differindex 04f1364..90a666b 100644 --- a/test/scr/feh_ibg_black +++ b/test/scr/feh_ibg_black diff --git a/test/scr/feh_ibg_white b/test/scr/feh_ibg_white Binary files differindex 70138ff..53c084f 100644 --- a/test/scr/feh_ibg_white +++ b/test/scr/feh_ibg_white diff --git a/test/scr/feh_lhi b/test/scr/feh_lhi Binary files differindex f16d150..8ba9a22 100644 --- a/test/scr/feh_lhi +++ b/test/scr/feh_lhi diff --git a/test/scr/feh_lhi_i b/test/scr/feh_lhi_i Binary files differindex 108dfb6..5d2febb 100644 --- a/test/scr/feh_lhi_i +++ b/test/scr/feh_lhi_i diff --git a/test/scr/feh_lhi_ii b/test/scr/feh_lhi_ii Binary files differindex 1fb695f..3d7c2fd 100644 --- a/test/scr/feh_lhi_ii +++ b/test/scr/feh_lhi_ii diff --git a/test/scr/feh_lhi_iir b/test/scr/feh_lhi_iir Binary files differindex 396ee99..a0d4f5e 100644 --- a/test/scr/feh_lhi_iir +++ b/test/scr/feh_lhi_iir diff --git a/test/scr/feh_lhi_iirr b/test/scr/feh_lhi_iirr Binary files differindex 81748a3..c3ac6d5 100644 --- a/test/scr/feh_lhi_iirr +++ b/test/scr/feh_lhi_iirr diff --git a/test/scr/feh_lhi_iirri b/test/scr/feh_lhi_iirri Binary files differindex 43b8fa1..310a238 100644 --- a/test/scr/feh_lhi_iirri +++ b/test/scr/feh_lhi_iirri diff --git a/test/scr/feh_lhi_iirrio b/test/scr/feh_lhi_iirrio Binary files differindex c9e287b..4d064ed 100644 --- a/test/scr/feh_lhi_iirrio +++ b/test/scr/feh_lhi_iirrio diff --git a/test/scr/feh_lhi_o b/test/scr/feh_lhi_o Binary files differindex ec48c01..bdef5db 100644 --- a/test/scr/feh_lhi_o +++ b/test/scr/feh_lhi_o diff --git a/test/scr/feh_lhi_oo b/test/scr/feh_lhi_oo Binary files differindex 784d7d7..9499dfd 100644 --- a/test/scr/feh_lhi_oo +++ b/test/scr/feh_lhi_oo diff --git a/test/scr/feh_lhi_ooo b/test/scr/feh_lhi_ooo Binary files differindex ad14384..ec3eab6 100644 --- a/test/scr/feh_lhi_ooo +++ b/test/scr/feh_lhi_ooo diff --git a/test/scr/feh_lwi b/test/scr/feh_lwi Binary files differindex 16855f7..37fa6c1 100644 --- a/test/scr/feh_lwi +++ b/test/scr/feh_lwi diff --git a/test/scr/feh_lwi_scroll_r b/test/scr/feh_lwi_scroll_r Binary files differindex 5003a88..0baa70d 100644 --- a/test/scr/feh_lwi_scroll_r +++ b/test/scr/feh_lwi_scroll_r diff --git a/test/scr/feh_lwi_scroll_rd b/test/scr/feh_lwi_scroll_rd Binary files differindex 333b9e3..ce3271d 100644 --- a/test/scr/feh_lwi_scroll_rd +++ b/test/scr/feh_lwi_scroll_rd diff --git a/test/scr/feh_lwi_scroll_rdr b/test/scr/feh_lwi_scroll_rdr Binary files differindex 1e921f1..52f6b6f 100644 --- a/test/scr/feh_lwi_scroll_rdr +++ b/test/scr/feh_lwi_scroll_rdr diff --git a/test/scr/feh_lwi_scroll_rdru b/test/scr/feh_lwi_scroll_rdru Binary files differindex 455a2c2..afad9de 100644 --- a/test/scr/feh_lwi_scroll_rdru +++ b/test/scr/feh_lwi_scroll_rdru diff --git a/test/scr/feh_lwi_scroll_rdrul b/test/scr/feh_lwi_scroll_rdrul Binary files differindex 5003a88..7b5196a 100644 --- a/test/scr/feh_lwi_scroll_rdrul +++ b/test/scr/feh_lwi_scroll_rdrul diff --git a/test/scr/feh_scaledown_lwi b/test/scr/feh_scaledown_lwi Binary files differindex a842471..623d63d 100644 --- a/test/scr/feh_scaledown_lwi +++ b/test/scr/feh_scaledown_lwi diff --git a/test/scr/geometry_offset_only b/test/scr/geometry_offset_only Binary files differnew file mode 100644 index 0000000..b1618ec --- /dev/null +++ b/test/scr/geometry_offset_only diff --git a/test/scr/index_full_h400 b/test/scr/index_full_h400 Binary files differnew file mode 100644 index 0000000..50c3c36 --- /dev/null +++ b/test/scr/index_full_h400 diff --git a/test/scr/index_full_w400 b/test/scr/index_full_w400 Binary files differnew file mode 100644 index 0000000..a86b2af --- /dev/null +++ b/test/scr/index_full_w400 diff --git a/test/scr/index_h400 b/test/scr/index_h400 Binary files differnew file mode 100644 index 0000000..bcae91d --- /dev/null +++ b/test/scr/index_h400 diff --git a/test/scr/index_w400 b/test/scr/index_w400 Binary files differnew file mode 100644 index 0000000..1038e59 --- /dev/null +++ b/test/scr/index_w400 diff --git a/test/scr/thumbnail_default b/test/scr/thumbnail_default Binary files differindex 2c52059..8d70a5b 100644 --- a/test/scr/thumbnail_default +++ b/test/scr/thumbnail_default diff --git a/test/status b/test/status new file mode 100644 index 0000000..6db362e --- /dev/null +++ b/test/status @@ -0,0 +1,401 @@ +Overall test status, what's covered / missing + +# Features + +# Options + +--action +--action1 +--action2 +--action3 +--action4 +--action5 +--action6 +--action7 +--action8 +--action9 + + [x] correct command execution + [x] hold-action flag + [x] supports format specifiers + [x] with --list + [x] with --loadable + [x] with --unloadable + +--alpha +--auto-zoom + + [ ] zooms to fullscreen + [ ] with --stretch + [ ] with --ignore-aspect + + +--bg +--bg-center + + [x] sets centered wallpaper + + +--bg-fill + + [x] Sets wallpaper zoomed to fill + + +--bg-max + + [x] Sets wallpaper zoomed to max + + +--bg-scale + + [x] sets scaled wallpaper, ignoring aspect ratio + + +--bg-tile + + [x] sets tiled wallpaper + + +--blur-button +--borderless + + [ ] create borderless window (need test WM with borders first...) + + +--cache-thumbnails + + [ ] ./thumbnails/normal + [ ] ./thumbnails/large + + +--caption-path + + [x] loads/saves captions + [x] autocreates caption dir + [x] caption newline support + [x] correct caption display + + +--customlist + + [x] correct output + [x] format specifiers + + +--on-last-slide=quit + + [x] closes feh window at end of slideshow + [x] combination with --slideshow-delay + + +--draw-actions + + [x] lists correct actions + [x] Alignment with/without --draw-filename + + +--draw-filename + + [x] shows filename + [ ] shows filename and position in fullscreen + + +--filelist + + [x] saves filelist + [x] loads filelist + + +--font + + [ ] Sets different font + + +--fontpath + + [ ] Adds font path + + +--fullindex + + [ ] Shows correct image size + [ ] Shows correct image dimensions + [ ] With --cache-thumbnails + + +--fullscreen + + [x] uses full screen size + + +--geometry + + [x] correct window dimensions + + +--hide-pointer + + [ ] Hides pointer visibility + + +--ignore-aspect +--image-bg + + [x] black + [x] white + [x] default + + +--index +--index-dim +--index-name +--index-size + +--info + + [x] executes commands + [x] correct output + [x] format specifiers + + +--keep-http + + [ ] keeps local file copies + + +--limit-height + + [x] sets correct thumbnail window height + + +--limit-width + + [x] sets correct thumbnail window width + + +--list + + [x] correct output + + +--loadable + + [x] lists loadable images + + +--menu-button +--menu-ctrl-mask +--menu-font + + [ ] changes menu font + + +--montage +--multiwindow + + [x] opens one window per image + + +--next-button +--no-blur-ctrl-mask +--no-jump-on-resort +--no-menus + + [ ] disables menu + + +--no-rotate-ctrl-mask +--no-screen-clip + + [x] creates huge window + + +--no-xinerama + + [ ] disables xinerama support + + +--output +--output-dir + + to be deprecated + + +--output-only +--pan-button +--preload + + [ ] weeds out unloadable images + + +--prev-button +--quiet + + [x] quiet output + + +--randomize + + [ ] random filelist order + + +--recursive + + [x] recurses into subdirectories + + +--reload + + [ ] automatically reloads image + + +--reload-button +--reverse + + [x] reverse sort order + + +--rotate-button +--scale-down + + [x] correct window size + [x] correct zoom level + [ ] correct zoom behaviour + + +--slideshow-delay + + [x] positive delay -> automatic window change + [x] negative delay -> starts paused + + +--sort + + [x] name + [x] filename + [x] width + [x] height + [x] pixels + [x] size + [x] format + + +--start-at + + [x] starts at correct image + + +--stretch +--theme + + [x] loads correct options + [x] commandline overrides theme + [x] multiline theme specifications + + +--thumb-height + + [ ] sets correct thumbnail height + + +--thumbnails + + [x] starts thumbnail mode + [ ] shows correct thumbnail dimensions (GH-29) + + +--thumb-redraw +--thumb-title + + [ ] sets title for windows opened from thumbnail mode + + +--thumb-width + + [ ] sets correct thumbnail width + + +--title + + [x] Sets correct window title + [x] Supports format specifiers + + +--title-font +--unloadable + + [x] lists unloadable images + + +--verbose + + [ ] outputs progress bars etc. + + +--version + + [x] correct output + + +--zoom + + [ ] percent + [ ] max + [ ] fill + + +--zoom-button + +# Keys + +action_0 +action_1 +action_2 +action_3 +action_4 +action_5 +action_6 +action_7 +action_8 +action_9 +[x] close +delete +[x] jump_back +[x] jump_first +[x] jump_fwd +[x] jump_last +jump_random +menu_child +menu_close +menu_down +menu_parent +menu_select +menu_up +[x] next_img +orient_1 +orient_3 +[x] prev_img +[x] quit +reload_image +reload_minus +reload_plus +[x] remove +render +save_filelist +save_image +[x] scroll_down +[x] scroll_left +[x] scroll_right +[x] scroll_up +[x] size_to_image +[x] toggle_actions +[x] toggle_caption +[x] toggle_filenames +toggle_fullscreen +toggle_menu +[x] toggle_pause +toggle_pointer +zoom_default +zoom_fit +[x] zoom_in +[x] zoom_out diff --git a/test/tiny.pbm b/test/tiny.pbm new file mode 100644 index 0000000..3fb3e4e --- /dev/null +++ b/test/tiny.pbm @@ -0,0 +1,4 @@ +P4 +1 1 + + |