Updated RubySpec source to 55122684.
[rbx.git] / spec / frozen / 1.8 / core / io / syswrite_spec.rb
bloba673f283159c021f5d614ada8c81b8135fdbf0e4
1 require File.dirname(__FILE__) + '/../../spec_helper'
2 require File.dirname(__FILE__) + '/fixtures/classes'
3 require File.dirname(__FILE__) + '/shared/write'
5 describe "IO#syswrite on a file" do
6   before :each do
7     @filename = tmp("IO_syswrite_file") + $$.to_s
8     File.open(@filename, "w") do |file|
9       file.syswrite("012345678901234567890123456789")
10     end
11     @file = File.open(@filename, "r+")
12     @readonly_file = File.open(@filename)
13   end
15   after :each do
16     @file.close
17     @readonly_file.close
18     File.delete(@filename)
19   end
21   it "writes all of the string's bytes but does not buffer them" do
22     written = @file.syswrite("abcde")
23     written.should == 5
24     File.open(@filename) do |file|
25       file.sysread(10).should == "abcde56789"
26       file.seek(0)
27       @file.fsync
28       file.sysread(10).should == "abcde56789"
29     end
30   end
32   not_compliant_on :rubinius do
33     it "warns if called immediately after a buffered IO#write" do
34       @file.write("abcde")
35       lambda { @file.syswrite("fghij") }.should complain(/syswrite/)
36     end
37   end
39   it "does not warn if called after IO#write with intervening IO#sysread" do
40     @file.syswrite("abcde")
41     @file.sysread(5)
42     lambda { @file.syswrite("fghij") }.should_not complain
43   end
45   it "writes to the actual file position when called after buffered IO#read" do
46     @file.read(5)
47     @file.syswrite("abcde")
48     File.open(@filename) do |file|
49       file.sysread(10).should == "01234abcde"
50     end
51   end
53   it_behaves_like(:io_write, :syswrite)
54 end