![]() System : Linux absol.cf 5.4.0-198-generic #218-Ubuntu SMP Fri Sep 27 20:18:53 UTC 2024 x86_64 User : www-data ( 33) PHP Version : 7.4.33 Disable Function : pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals,pcntl_unshare, Directory : /var/lib/gems/2.5.0/gems/tins-1.28.0/tests/ |
Upload File : |
require 'test_helper' require 'tins/xt' module Tins class AttemptTest < Test::Unit::TestCase class MyError < StandardError; end class MyException < Exception; end def test_attempt_with_invalid_arguments assert_raise(ArgumentError) { attempt(attempts: 0) { } } end def test_attempt_block_condition assert attempt(attempts: 1, exception_class: nil) { |c| c == 1 } assert attempt(attempts: 3, exception_class: nil) { |c| c == 1 } assert_equal false, attempt(attempts: 3, exception_class: nil) { |c| c == 4 } assert_raise(MyException) { attempt(attempts: 3, exception_class: nil) { raise MyException } } end def test_attempt_default_exception assert attempt(1) { |c| c != 1 and raise MyError } assert attempt(3) { |c| c != 1 and raise MyError } assert_equal false, attempt(3) { |c| c != 4 and raise MyError } assert_raise(Exception) { attempt(3) { raise Exception } } end def test_attempt_exception assert_equal false, attempt(attempts: 3, exception_class: MyException) { raise MyException } assert_equal true, attempt(attempts: 3, exception_class: MyException) { |c| c == 1 and raise MyException } end def test_reraise_exception tries = 0 assert_raise(MyException) do attempt(attempts: 3, exception_class: MyException, reraise: true) do |c| tries = c; raise MyException end end assert_equal 3, tries end def test_reraise_exception_with_positive_sleep tries = 0 singleton_class.class_eval do define_method(:sleep_duration) do |duration, count| assert_equal 10, duration tries = count super 0, count # Let's not really sleep that long… end end assert_raise(MyException) do attempt(attempts: 3, exception_class: MyException, reraise: true, sleep: 10) do |c| raise MyException end end assert_equal 2, tries ensure singleton_class.class_eval do method_defined?(:sleep_duration) and remove_method :sleep_duration end end def test_reraise_exception_with_proc_sleep tries = 0 singleton_class.class_eval do define_method(:sleep_duration) do |duration, count| assert_kind_of Proc, duration tries = count super duration, count end end assert_raise(MyException) do attempt(attempts: 3, exception_class: MyException, reraise: true, sleep: -> x { 0 }) do |c| raise MyException end end assert_equal 2, tries ensure singleton_class.class_eval do method_defined?(:sleep_duration) and remove_method :sleep_duration end end def test_reraise_exception_with_negative_sleep tries = 0 sleeps = [ 2.701, 7.298 ] singleton_class.class_eval do define_method(:sleep_duration) do |duration, count| assert_in_delta sleeps[tries], duration.call(count), 1E-3 tries = count super 0, count # Let's not really sleep that long… end end assert_raise(MyException) do attempt(attempts: 3, exception_class: MyException, reraise: true, sleep: -10) do |c| raise MyException end end assert_equal 2, tries ensure singleton_class.class_eval do method_defined?(:sleep_duration) and remove_method :sleep_duration end end end end