Waiter.t 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. use strict;
  2. use warnings;
  3. use Test::More;
  4. use Test::Warn;
  5. use Test::Fatal;
  6. use Test::Time;
  7. use Selenium::Waiter;
  8. SIMPLE_WAIT: {
  9. my $ret;
  10. waits_ok( sub { $ret = wait_until { 1 } }, '<', 2, 'immediately true returns quickly' );
  11. ok($ret == 1, 'return value for a true wait_until is passed up');
  12. waits_ok( sub { $ret = wait_until { 0 } }, '==', 30, 'never true expires the timeout' );
  13. ok($ret eq '', 'return value for a false wait is an empty string');
  14. }
  15. EVENTUALLY: {
  16. my $ret = 0;
  17. waits_ok( sub { wait_until { $ret++ > 2 } }, '>', 2, 'eventually true takes time');
  18. $ret = 0;
  19. my %opts = ( interval => 2, timeout => 5 );
  20. waits_ok(
  21. sub { wait_until { $ret++; 0 } %opts }, '>', 4,
  22. 'timeout is respected'
  23. );
  24. ok(1 <= $ret && $ret <= 3, 'interval option changes iteration speed');
  25. }
  26. EXCEPTIONS: {
  27. my %opts = ( timeout => 2 );
  28. warning_is { wait_until { die 'caught!' } %opts } 'caught!',
  29. 'exceptions usually only warn once';
  30. }
  31. NO_FINALLY_WAIT: {
  32. waits_ok( sub { wait_until { 1 }, interval => 10 }, '<', 1,
  33. 'does not do interval wait on success')
  34. }
  35. sub waits_ok {
  36. my ($sub, $cmp, $expected_duration, $test_desc) = @_;
  37. my $start = time;
  38. $sub->();
  39. my $elapsed = time - $start;
  40. cmp_ok($elapsed, $cmp, $expected_duration, $test_desc);
  41. }
  42. done_testing;