summaryrefslogtreecommitdiff
path: root/test/feh-scr-i.t
diff options
context:
space:
mode:
Diffstat (limited to 'test/feh-scr-i.t')
-rwxr-xr-xtest/feh-scr-i.t326
1 files changed, 326 insertions, 0 deletions
diff --git a/test/feh-scr-i.t b/test/feh-scr-i.t
new file mode 100755
index 0000000..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");