From: Tanaka Akira Date: 2003-12-05T11:13:38+09:00 Subject: [ruby-dev:22143] Re: IO#read In article <200311252047.hAPKl0gR004704@sharui.nakada.kanuma.tochigi.jp>, nobu.nakada@nifty.ne.jp writes: > lseek()がエラーになるかならないかの差のようですが、どっちかに合 > わせたいですねぇ。 StringIO とは違うほうに合ったようですね。 require 'test/unit' require 'stringio' require 'tempfile' module TestEOF def test_eof_0 open_file("") {|f| assert_equal("", f.read(0)) assert_equal("", f.read(0)) assert_equal("", f.read) assert_equal(nil, f.read(0)) assert_equal(nil, f.read(0)) } open_file("") {|f| assert_equal(nil, f.read(1)) assert_equal(nil, f.read) assert_equal(nil, f.read(1)) } end def test_eof_1 open_file("a") {|f| assert_equal("", f.read(0)) assert_equal("a", f.read(1)) assert_equal("" , f.read(0)) assert_equal("" , f.read(0)) assert_equal("", f.read) assert_equal(nil, f.read(0)) assert_equal(nil, f.read(0)) } open_file("a") {|f| assert_equal("a", f.read(1)) assert_equal(nil, f.read(1)) } open_file("a") {|f| assert_equal("a", f.read(2)) assert_equal(nil, f.read(1)) assert_equal(nil, f.read) assert_equal(nil, f.read(1)) } open_file("a") {|f| assert_equal("a", f.read) assert_equal(nil, f.read(1)) assert_equal(nil, f.read) assert_equal(nil, f.read(1)) } end end class TestStringIOEOF < Test::Unit::TestCase include TestEOF def open_file(content) f = StringIO.new(content) yield f end end class TestFileEOF < Test::Unit::TestCase include TestEOF def open_file(content) f = Tempfile.new("test-eof") f << content f.rewind yield f end end class TestPipeEOF < Test::Unit::TestCase include TestEOF def open_file(content) f = IO.popen("echo -n #{content}") yield f end end -- [田中 哲][たなか あきら][Tanaka Akira]