1
0
Fork 0
mirror of https://github.com/ruby/ruby.git synced 2022-11-09 12:17:21 -05:00
ruby--ruby/spec/ruby/core/io/flush_spec.rb
Takashi Kokubun e1fee7f949
Rename RubyVM::MJIT to RubyVM::JIT
because the name "MJIT" is an internal code name, it's inconsistent with
--jit while they are related to each other, and I want to discourage future
JIT implementation-specific (e.g. MJIT-specific) APIs by this rename.

[Feature #17490]
2021-01-13 22:46:51 -08:00

37 lines
1 KiB
Ruby

require_relative '../../spec_helper'
require_relative 'fixtures/classes'
describe "IO#flush" do
it "raises IOError on closed stream" do
-> { IOSpecs.closed_io.flush }.should raise_error(IOError)
end
describe "on a pipe" do
before :each do
@r, @w = IO.pipe
end
after :each do
@r.close
begin
@w.close
rescue Errno::EPIPE
end
end
# [ruby-core:90895] MJIT worker may leave fd open in a forked child.
# For instance, MJIT creates a worker before @r.close with fork(), @r.close happens,
# and the MJIT worker keeps the pipe open until the worker execve().
# TODO: consider acquiring GVL from MJIT worker.
guard_not -> { defined?(RubyVM::JIT) && RubyVM::JIT.enabled? } do
it "raises Errno::EPIPE if sync=false and the read end is closed" do
@w.sync = false
@w.write "foo"
@r.close
-> { @w.flush }.should raise_error(Errno::EPIPE, /Broken pipe/)
-> { @w.close }.should raise_error(Errno::EPIPE, /Broken pipe/)
end
end
end
end