diff --git a/lib/fakefs/file.rb b/lib/fakefs/file.rb index 64a5ed0..1939340 100644 --- a/lib/fakefs/file.rb +++ b/lib/fakefs/file.rb @@ -216,7 +216,9 @@ module FakeFS true end - alias_method :tell=, :pos= + alias_method :tell=, :pos= + alias_method :sysread, :read + alias_method :syswrite, :write undef_method :closed_read? undef_method :closed_write? diff --git a/test/fake/file/syswrite_test.rb b/test/fake/file/syswrite_test.rb new file mode 100644 index 0000000..499ac2f --- /dev/null +++ b/test/fake/file/syswrite_test.rb @@ -0,0 +1,62 @@ +require "test_helper" + +class FileSysWriteTest < Test::Unit::TestCase + def setup + FakeFS.activate! + FakeFS::FileSystem.clear + end + + def teardown + FakeFS.deactivate! + end + + def test_returns_one_byte_when_written + f = File.open "foo", "w" + result = f.syswrite "a" + assert_equal 1, result + end + + def test_returns_two_bytes_when_two_written + f = File.open "foo", "w" + result = f.syswrite "ab" + assert_equal 2, result + end + + def test_syswrite_writes_file + f = File.open "foo", "w" + f.syswrite "abcdef" + f.close + + assert_equal "abcdef", File.read("foo") + end + + def test_writes_to_the_actual_position_when_called_after_buffered_io_read + File.open("foo", "w") do |file| + file.syswrite("012345678901234567890123456789") + end + + file = File.open("foo", "r+") + file.read(5) + file.syswrite("abcde") + + File.open("foo") do |file| + assert_equal "01234abcde", file.sysread(10) + end + end + + def test_writes_all_of_the_strings_bytes_but_does_not_buffer_them + File.open("foo", "w") do |file| + file.syswrite("012345678901234567890123456789") + end + + file = File.open("foo", "r+") + written = file.syswrite("abcde") + + File.open("foo") do |file| + assert_equal "abcde56789", file.sysread(10) + file.seek(0) + file.fsync + assert_equal "abcde56789", file.sysread(10) + end + end +end \ No newline at end of file