From: GOTOU Yuuzou Date: 2004-12-17T11:47:41+09:00 Subject: [ruby-dev:25232] Re: test_readline.rb blocks on BSD In message <41C236BB.7030105@ruby-lang.org>, `Shugo Maeda ' wrote: > GOTOU Yuuzou wrote: > > ということらしいので、強引に調整したことにすると通るようにな > > りましたがどうでしょう。 > > > > --- test/readline/test_readline.rb 3 Dec 2004 18:36:23 -0000 1.3.2.1 > > +++ test/readline/test_readline.rb 16 Dec 2004 08:10:03 -0000 > > @@ -57,2 +57,3 @@ def test_completion_append_character > > def replace_stdio(stdin_path, stdout_path) > > + STDIN.seek(0, File::SEEK_SET) rescue nil # workaround for *BSD > > orig_stdin = STDIN.dup > > BSDな方がこの対応で幸せ(あるいは妥協できる)とおっしゃるならcommitします。 その後、以下のようにしても動くことがわかりました。 これなら受け入れられやすそうに思います。 -- ごとうゆうぞう --- test/readline/test_readline.rb 3 Dec 2004 18:36:23 -0000 1.3.2.1 +++ test/readline/test_readline.rb 17 Dec 2004 02:14:15 -0000 @@ -57,14 +57,18 @@ def test_completion_append_character def replace_stdio(stdin_path, stdout_path) - orig_stdin = STDIN.dup - orig_stdout = STDOUT.dup - STDIN.reopen(stdin_path, "r") - STDOUT.reopen(stdout_path, "w") - begin - yield - ensure - STDIN.reopen(orig_stdin) - STDOUT.reopen(orig_stdout) - orig_stdin.close - orig_stdout.close - end + open(stdin_path, "r"){|stdin| + open(stdout_path, "w"){|stdout| + orig_stdin = STDIN.dup + orig_stdout = STDOUT.dup + STDIN.reopen(stdin) + STDOUT.reopen(stdout) + begin + yield + ensure + STDIN.reopen(orig_stdin) + STDOUT.reopen(orig_stdout) + orig_stdin.close + orig_stdout.close + end + } + } end