summaryrefslogtreecommitdiff
path: root/test/feh-bg-i.t
diff options
context:
space:
mode:
Diffstat (limited to 'test/feh-bg-i.t')
-rwxr-xr-xtest/feh-bg-i.t82
1 files changed, 82 insertions, 0 deletions
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');