blob: e9410f925c3b3ad0fb89dd50ac80f1aea6e7639f (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
|
# frozen_string_literal: true
require 'test/unit'
require_relative 'scheduler'
class TestFiberEnumerator < Test::Unit::TestCase
MESSAGE = "Hello World"
def test_read_characters
omit "UNIXSocket is not defined!" unless defined?(UNIXSocket)
i, o = UNIXSocket.pair
message = String.new
thread = Thread.new do
scheduler = Scheduler.new
Fiber.set_scheduler scheduler
e = i.to_enum(:each_char)
Fiber.schedule do
o.write("Hello World")
o.close
end
Fiber.schedule do
begin
while c = e.next
message << c
end
rescue StopIteration
# Ignore.
end
i.close
end
end
thread.join
assert_equal(MESSAGE, message)
assert_predicate(i, :closed?)
assert_predicate(o, :closed?)
end
def enumerator_fiber_is_nonblocking
enumerator = Enumerator.new do |yielder|
yielder << Fiber.current.blocking?
end
assert_equal(false, enumerator.next)
end
end
|