Browse Source

Implement coercion subs for timeout arguments

Daniel Gempesaw 10 years ago
parent
commit
61568c7a27
2 changed files with 42 additions and 0 deletions
  1. 24 0
      lib/Selenium/Remote/Driver.pm
  2. 18 0
      t/01-driver.t

+ 24 - 0
lib/Selenium/Remote/Driver.pm

@@ -2748,6 +2748,30 @@ sub delete_local_storage_item {
     return $self->_execute_command($res, $params);
 }
 
+sub _coerce_timeout_ms {
+    my ($ms) = @_;
+
+    if ( not defined $ms ) {
+        my @caller = caller(1);
+        my $subroutine_name = $caller[3];
+
+        croak 'Expecting a timeout in ms';
+    }
+
+    return _coerce_number( $ms );
+}
+
+sub _coerce_number {
+    my ($maybe_number) = @_;
+
+    if ( Scalar::Util::looks_like_number( $maybe_number )) {
+        return $maybe_number + 0;
+    }
+    else {
+        croak "Expecting a number, not: $maybe_number";
+    }
+}
+
 
 1;
 

+ 18 - 0
t/01-driver.t

@@ -554,4 +554,22 @@ QUIT: {
     ok((not defined $driver->{'session_id'}), 'Killed the remote session');
 }
 
+COERCION: {
+    my $string = 'string';
+    like( exception { Selenium::Remote::Driver::_coerce_number( $string ) },
+          qr/Expecting a number/,
+          'Can coerce numbers'
+      );
+
+    like( exception { Selenium::Remote::Driver::_coerce_timeout_ms() },
+          qr/Expecting a timeout/,
+          'Can coerce missing timeouts'
+      );
+
+    like( exception { Selenium::Remote::Driver::_coerce_timeout_ms( $string ) },
+          qr/Expecting a number/,
+          'Can coerce non-numeric timeouts'
+      );
+}
+
 done_testing;