JezK
Edit File: test_file.rb
require 'common' class FileOperationsTest < Net::SFTP::TestCase def setup @sftp = mock("sftp") @file = Net::SFTP::Operations::File.new(@sftp, "handle") @save_dollar_fslash, $/ = $/, "\n" @save_dollar_bslash, $\ = $\, nil end def teardown $/ = @save_dollar_fslash $\ = @save_dollar_bslash end def test_pos_assignment_should_set_position @file.pos = 15 assert_equal 15, @file.pos end def test_pos_assignment_should_reset_eof @sftp.expects(:read!).with("handle", 0, 8192).returns(nil) assert !@file.eof? @file.read assert @file.eof? @file.pos = 0 assert !@file.eof? end def test_close_should_close_handle_and_set_handle_to_nil assert_equal "handle", @file.handle @sftp.expects(:close!).with("handle") @file.close assert_nil @file.handle end def test_eof_should_be_false_if_at_eof_but_data_remains_in_buffer @sftp.expects(:read!).returns("hello world", nil) @file.read(1) assert !@file.eof? end def test_eof_should_be_true_if_at_eof_and_no_data_in_buffer @sftp.expects(:read!).times(2).returns("hello world", nil) @file.read assert @file.eof? end def test_read_without_argument_should_read_and_return_remainder_of_file_and_set_pos @sftp.expects(:read!).times(2).returns("hello world", nil) assert_equal "hello world", @file.read assert_equal 11, @file.pos end def test_read_with_argument_should_read_and_return_n_bytes_and_set_pos @sftp.expects(:read!).returns("hello world") assert_equal "hello", @file.read(5) assert_equal 5, @file.pos end def test_read_after_pos_assignment_should_read_from_specified_position @sftp.expects(:read!).with("handle", 5, 8192).returns("hello world") @file.pos = 5 assert_equal "hello", @file.read(5) assert_equal 10, @file.pos end def test_gets_without_argument_should_read_until_first_dollar_fslash @sftp.expects(:read!).returns("hello world\ngoodbye world\n\nfarewell!\n") assert_equal "\n", $/ assert_equal "hello world\n", @file.gets assert_equal 12, @file.pos end def test_gets_with_empty_argument_should_read_until_double_dollar_fslash @sftp.expects(:read!).returns("hello world\ngoodbye world\n\nfarewell!\n") assert_equal "\n", $/ assert_equal "hello world\ngoodbye world\n\n", @file.gets("") assert_equal 27, @file.pos end def test_gets_with_argument_should_read_until_first_instance_of_argument @sftp.expects(:read!).returns("hello world\ngoodbye world\n\nfarewell!\n") assert_equal "hello w", @file.gets("w") assert_equal 7, @file.pos end def test_gets_when_no_such_delimiter_exists_in_stream_should_read_to_EOF @sftp.expects(:read!).times(2).returns("hello world\ngoodbye world\n\nfarewell!\n", nil) assert_equal "hello world\ngoodbye world\n\nfarewell!\n", @file.gets("X") assert @file.eof? end def test_gets_at_EOF_should_return_nil @sftp.expects(:read!).returns(nil) assert_nil @file.gets assert @file.eof? end def test_readline_should_raise_exception_on_EOF @sftp.expects(:read!).returns(nil) assert_raises(EOFError) { @file.readline } end def test_write_should_write_data_and_increment_pos_and_return_data_length @sftp.expects(:write!).with("handle", 0, "hello world") assert_equal 11, @file.write("hello world") assert_equal 11, @file.pos end def test_write_after_pos_assignment_should_write_at_position @sftp.expects(:write!).with("handle", 15, "hello world") @file.pos = 15 assert_equal 11, @file.write("hello world") assert_equal 26, @file.pos end def test_print_with_no_arguments_should_write_nothing_if_dollar_bslash_is_nil assert_nil $\ @sftp.expects(:write!).never @file.print end def test_print_with_no_arguments_should_write_dollar_bslash_if_dollar_bslash_is_not_nil $\ = "-" @sftp.expects(:write!).with("handle", 0, "-") @file.print end def test_print_with_arguments_should_write_all_arguments @sftp.expects(:write!).with("handle", 0, "hello") @sftp.expects(:write!).with("handle", 5, " ") @sftp.expects(:write!).with("handle", 6, "world") @file.print("hello", " ", "world") end def test_puts_should_recursively_puts_array_arguments 10.times do |i| @sftp.expects(:write!).with("handle", i*2, i.to_s) @sftp.expects(:write!).with("handle", i*2+1, "\n") end @file.puts 0, [1, [2, 3], 4, [5, [6, 7, 8]]], 9 end def test_puts_should_not_append_newline_if_argument_ends_in_newline @sftp.expects(:write!).with("handle", 0, "a") @sftp.expects(:write!).with("handle", 1, "\n") @sftp.expects(:write!).with("handle", 2, "b\n") @sftp.expects(:write!).with("handle", 4, "c") @sftp.expects(:write!).with("handle", 5, "\n") @file.puts "a", "b\n", "c" end def test_stat_should_return_attributes_object_for_handle stat = stub("stat") @sftp.expects(:fstat!).with("handle").returns(stat) assert_equal stat, @file.stat end end