summaryrefslogtreecommitdiff
path: root/vendor/bundle/ruby/3.4.0/gems/eventmachine-1.2.7/tests/test_completion.rb
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/bundle/ruby/3.4.0/gems/eventmachine-1.2.7/tests/test_completion.rb')
-rw-r--r--vendor/bundle/ruby/3.4.0/gems/eventmachine-1.2.7/tests/test_completion.rb178
1 files changed, 178 insertions, 0 deletions
diff --git a/vendor/bundle/ruby/3.4.0/gems/eventmachine-1.2.7/tests/test_completion.rb b/vendor/bundle/ruby/3.4.0/gems/eventmachine-1.2.7/tests/test_completion.rb
new file mode 100644
index 0000000..1bd9a8f
--- /dev/null
+++ b/vendor/bundle/ruby/3.4.0/gems/eventmachine-1.2.7/tests/test_completion.rb
@@ -0,0 +1,178 @@
+require 'em_test_helper'
+require 'em/completion'
+
+class TestCompletion < Test::Unit::TestCase
+ def completion
+ @completion ||= EM::Completion.new
+ end
+
+ def crank
+ # This is a slow solution, but this just executes the next tick queue
+ # once. It's the easiest way for now.
+ EM.run { EM.stop }
+ end
+
+ def results
+ @results ||= []
+ end
+
+ def test_state
+ assert_equal :unknown, completion.state
+ end
+
+ def test_succeed
+ completion.callback { |val| results << val }
+ completion.succeed :object
+ crank
+ assert_equal :succeeded, completion.state
+ assert_equal [:object], results
+ end
+
+ def test_fail
+ completion.errback { |val| results << val }
+ completion.fail :object
+ crank
+ assert_equal :failed, completion.state
+ assert_equal [:object], results
+ end
+
+ def test_callback
+ completion.callback { results << :callback }
+ completion.errback { results << :errback }
+ completion.succeed
+ crank
+ assert_equal [:callback], results
+ end
+
+ def test_errback
+ completion.callback { results << :callback }
+ completion.errback { results << :errback }
+ completion.fail
+ crank
+ assert_equal [:errback], results
+ end
+
+ def test_stateback
+ completion.stateback(:magic) { results << :stateback }
+ completion.change_state(:magic)
+ crank
+ assert_equal [:stateback], results
+ end
+
+ def test_does_not_enqueue_when_completed
+ completion.callback { results << :callback }
+ completion.succeed
+ completion.errback { results << :errback }
+ completion.fail
+ crank
+ assert_equal [:callback], results
+ end
+
+ def test_completed
+ assert_equal false, completion.completed?
+ completion.succeed
+ assert_equal true, completion.completed?
+ completion.fail
+ assert_equal true, completion.completed?
+ completion.change_state :magic
+ assert_equal false, completion.completed?
+ end
+
+ def test_recursive_callbacks
+ completion.callback do |val|
+ results << val
+ completion.succeed :two
+ end
+ completion.callback do |val|
+ results << val
+ completion.succeed :three
+ end
+ completion.callback do |val|
+ results << val
+ end
+ completion.succeed :one
+ crank
+ assert_equal [:one, :two, :three], results
+ end
+
+ def test_late_defined_callbacks
+ completion.callback { results << :one }
+ completion.succeed
+ crank
+ assert_equal [:one], results
+ completion.callback { results << :two }
+ crank
+ assert_equal [:one, :two], results
+ end
+
+ def test_cleared_completions
+ completion.callback { results << :callback }
+ completion.errback { results << :errback }
+
+ completion.succeed
+ crank
+ completion.fail
+ crank
+ completion.succeed
+ crank
+
+ assert_equal [:callback], results
+ end
+
+ def test_skip_completed_callbacks
+ completion.callback { results << :callback }
+ completion.succeed
+ crank
+
+ completion.errback { results << :errback }
+ completion.fail
+ crank
+
+ assert_equal [:callback], results
+ end
+
+ def test_completions
+ completion.completion { results << :completion }
+ completion.succeed
+ crank
+ assert_equal [:completion], results
+
+ completion.change_state(:unknown)
+ results.clear
+
+ completion.completion { results << :completion }
+ completion.fail
+ crank
+ assert_equal [:completion], results
+ end
+
+ def test_latent_completion
+ completion.completion { results << :completion }
+ completion.succeed
+ crank
+ completion.completion { results << :completion }
+ crank
+ assert_equal [:completion, :completion], results
+ end
+
+ def test_timeout
+ args = [1, 2, 3]
+ EM.run do
+ completion.timeout(0.0001, *args)
+ completion.errback { |*errargs| results << errargs }
+ completion.completion { EM.stop }
+ EM.add_timer(0.1) { flunk 'test timed out' }
+ end
+ assert_equal [[1,2,3]], results
+ end
+
+ def test_timeout_gets_cancelled
+ EM.run do
+ completion.timeout(0.0001, :timeout)
+ completion.errback { results << :errback }
+ completion.succeed
+ EM.add_timer(0.0002) { EM.stop }
+ end
+ assert_equal [], results
+ end
+end