Updated RubySpec source to 55122684.
[rbx.git] / spec / frozen / 1.8 / core / io / close_spec.rb
bloba66d5721863d5f4af3df4e8613e3aa9fddb5a089
1 require File.dirname(__FILE__) + '/../../spec_helper'
3 describe "IO#close" do
4   before :each do
5     @io = File.open tmp('io.close.txt'), 'w'
6   end
8   after :each do
9     @io.close unless @io.closed?
10   end
12   it "closes the stream" do
13     lambda { @io.close }.should_not raise_error
14     @io.closed?.should == true
15   end
17   it "returns nil" do
18     @io.close.should == nil
19   end
21   it "makes the stream unavailable for any further data operations" do
22     @io.close
24     lambda { @io.write "attempt to write" }.should raise_error(IOError)
25     lambda { @io.read }.should raise_error(IOError)
26   end
28   it "raises an IOError on subsequent invocations" do
29     @io.close
31     lambda { @io.close }.should raise_error(IOError)
32   end
34   it "raises when a file descriptor is closed twice" do
35     io2 = IO.new @io.fileno
36     @io.close
38     lambda { io2.close }.should raise_error(Errno::EBADF)
39   end
41 end
43 describe "IO#close on an IO.popen stream" do
45   it "clears #pid" do
46     io = IO.popen 'yes', 'r'
48     io.pid.should_not == 0
50     io.close
52     lambda { io.pid }.should raise_error(IOError, 'closed stream')
53   end
55   it "sets $?" do
56     io = IO.popen 'true', 'r'
57     io.close
59     $?.exitstatus.should == 0
61     io = IO.popen 'false', 'r'
62     io.close
64     $?.exitstatus.should == 1
65   end
67   it "waits for the child to exit" do
68     io = IO.popen 'yes', 'r'
69     io.close
71     $?.exitstatus.should_not == 0 # SIGPIPE/EPIPE
72   end
74 end