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 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160
|
require 'test/unit'
require 'tempfile'
require_relative 'ut_eof'
class TestFile < Test::Unit::TestCase
# I don't know Ruby's spec about "unlink-before-close" exactly.
# This test asserts current behaviour.
def test_unlink_before_close
Dir.mktmpdir('rubytest-file') {|tmpdir|
filename = tmpdir + '/' + File.basename(__FILE__) + ".#{$$}"
w = File.open(filename, "w")
w << "foo"
w.close
r = File.open(filename, "r")
begin
if /(mswin|bccwin|mingw|emx)/ =~ RUBY_PLATFORM
assert_raise(Errno::EACCES) {File.unlink(filename)}
else
assert_nothing_raised {File.unlink(filename)}
end
ensure
r.close
File.unlink(filename) if File.exist?(filename)
end
}
end
include TestEOF
def open_file(content)
f = Tempfile.new("test-eof")
f << content
f.rewind
yield f
end
alias open_file_rw open_file
include TestEOF::Seek
def test_truncate_wbuf
f = Tempfile.new("test-truncate")
f.print "abc"
f.truncate(0)
f.print "def"
f.flush
assert_equal("\0\0\0def", File.read(f.path), "[ruby-dev:24191]")
f.close
end
def test_truncate_rbuf
f = Tempfile.new("test-truncate")
f.puts "abc"
f.puts "def"
f.close
f.open
assert_equal("abc\n", f.gets)
f.truncate(3)
assert_equal(nil, f.gets, "[ruby-dev:24197]")
end
def test_truncate_beyond_eof
f = Tempfile.new("test-truncate")
f.print "abc"
f.truncate 10
assert_equal("\0" * 7, f.read(100), "[ruby-dev:24532]")
end
def test_read_all_extended_file
[nil, {:textmode=>true}, {:binmode=>true}].each do |mode|
f = Tempfile.new("test-extended-file", mode)
assert_nil(f.getc)
f.print "a"
f.rewind
assert_equal("a", f.read, "mode = <#{mode}>")
end
end
def test_gets_extended_file
[nil, {:textmode=>true}, {:binmode=>true}].each do |mode|
f = Tempfile.new("test-extended-file", mode)
assert_nil(f.getc)
f.print "a"
f.rewind
assert_equal("a", f.gets("a"), "mode = <#{mode}>")
end
end
def test_gets_para_extended_file
[nil, {:textmode=>true}, {:binmode=>true}].each do |mode|
f = Tempfile.new("test-extended-file", mode)
assert_nil(f.getc)
f.print "\na"
f.rewind
assert_equal("a", f.gets(""), "mode = <#{mode}>")
end
end
def test_each_char_extended_file
[nil, {:textmode=>true}, {:binmode=>true}].each do |mode|
f = Tempfile.new("test-extended-file", mode)
assert_nil(f.getc)
f.print "a"
f.rewind
result = []
f.each_char {|b| result << b }
assert_equal([?a], result, "mode = <#{mode}>")
end
end
def test_each_byte_extended_file
[nil, {:textmode=>true}, {:binmode=>true}].each do |mode|
f = Tempfile.new("test-extended-file", mode)
assert_nil(f.getc)
f.print "a"
f.rewind
result = []
f.each_byte {|b| result << b.chr }
assert_equal([?a], result, "mode = <#{mode}>")
end
end
def test_getc_extended_file
[nil, {:textmode=>true}, {:binmode=>true}].each do |mode|
f = Tempfile.new("test-extended-file", mode)
assert_nil(f.getc)
f.print "a"
f.rewind
assert_equal(?a, f.getc, "mode = <#{mode}>")
end
end
def test_getbyte_extended_file
[nil, {:textmode=>true}, {:binmode=>true}].each do |mode|
f = Tempfile.new("test-extended-file", mode)
assert_nil(f.getc)
f.print "a"
f.rewind
assert_equal(?a, f.getbyte.chr, "mode = <#{mode}>")
end
end
def test_s_chown
assert_nothing_raised { File.chown -1, -1 }
assert_nothing_raised { File.chown nil, nil }
end
def test_chown
assert_nothing_raised {
File.open(__FILE__) {|f| f.chown -1, -1 }
}
assert_nothing_raised("[ruby-dev:27140]") {
File.open(__FILE__) {|f| f.chown nil, nil }
}
end
def test_uninitialized
assert_raise(TypeError) { File::Stat.allocate.readable? }
assert_nothing_raised { File::Stat.allocate.inspect }
end
end
|