diff options
-rw-r--r-- | Makefile | 3 | ||||
-rwxr-xr-x | test/feh.i | 59 |
2 files changed, 31 insertions, 31 deletions
@@ -7,9 +7,6 @@ test: all @PACKAGE=${PACKAGE} VERSION=${VERSION} prove test test-interactive: all - @echo 'Note: X Testing sucks, and Xnest is also prone to weird behaviour.' - @echo 'If the test fails, try rerunning it one or two times.' - @echo 'If it works then, everything is fine.' @test/run-interactive install: install-man install-doc install-bin install-font install-img @@ -4,11 +4,25 @@ use warnings; use 5.010; use Test::More tests => 34; +use Time::HiRes qw/sleep/; use X11::GUITest qw/:ALL/; my $win; my ($width, $height); +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; @@ -32,44 +46,36 @@ sub feh_start { sub feh_stop { SendKeys('{ESC}'); - for (1 .. 10) { - sleep(0.1); - if (FindWindowLike(qr{^feh}) == 0) { - return; - } + if (not waitfor { not FindWindowLike(qr{^feh}) }) { + BAIL_OUT("Unclosed feh window still open, cannot continue"); } - BAIL_OUT("Unclosed feh window still open, cannot continue"); } sub test_no_win { my ($reason) = @_; - for (1 .. 10) { - sleep(0.1); - if (FindWindowLike(qr{^feh}) == 0) { - pass("Window closed ($reason)"); - return; - } + if (waitfor { not FindWindowLike(qr{^feh}) }) { + pass("Window closed ($reason)"); + } + else { + fail("Window closed ($reason)"); + BAIL_OUT("unclosed window still open, cannot continue"); } - fail("Window closed ($reason)"); - BAIL_OUT("unclosed window still open, cannot continue"); } sub test_win_title { my ($win, $wtitle) = @_; my $rtitle; - for (1 .. 10) { - sleep(0.1); + if (waitfor { GetWindowName($win) eq $wtitle }) { + pass("Window has title: $wtitle"); + } + else { $rtitle = GetWindowName($win); - if ($rtitle eq $wtitle) { - pass("Window has title: $wtitle"); - return; - } + fail("Window has title: $wtitle"); + diag("expected: $wtitle"); + diag(" got: $rtitle"); } - fail("Window has title: $wtitle"); - diag("expected: $wtitle"); - diag(" got: $rtitle"); } if (FindWindowLike(qr{^feh})) { @@ -117,15 +123,13 @@ 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); +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'); -sleep(0.1); test_win_title($win, 'feh [1 of 3] - test/ok.png'); SendKeys('h'); -sleep(1); test_no_win('cycle-once + negative delay + [h]'); $win = feh_start(q{}, 'test/ok.png test/ok.gif test/ok.gif test/ok.jpg'); @@ -167,6 +171,5 @@ ClickMouseButton(M_BTN1); ok($win, 'Thumbnail mode: Window opened'); SetInputFocus($win); SendKeys('x'); -sleep(0.2); -is(FindWindowLike(qr{^ok\.png$}), 0, 'Thumbnail mode: Window closed (x)'); +ok(waitfor { not FindWindowLike(qr{^ok\.png$}) }, 'Thumbnail mode: closed'); feh_stop(); |