Test_process.rb

高野です。

テストの意図がわからなかったのですが、これはバグかしら。

Index: test/ruby/test_process.rb

— test/ruby/test_process.rb (revision 19709)
+++ test/ruby/test_process.rb (working copy)
@@ -453,7 +453,6 @@
IO.popen("-") {|io|
if !io
puts “fooo”

  • else
    assert_equal(“fooo\n”, io.read)
    end
    }

e$B$^$D$b$He(B e$B$f$-$R$m$G$9e(B

In message “Re: [ruby-dev:36678] test_process.rb”
on Wed, 8 Oct 2008 08:13:12 +0900, TAKANO Mitsuhiro
[email protected] writes:

|e$B%F%9%H$N0U?^$,$o$+$i$J$+$C$?$N$G$9$,!"$3$l$O%P%0$+$7$i!#e(B

e$B$3$l$O$3$l$G$$$$$s$8$c$J$$$G$9$+$M!#e(Bpopene$B$Ge(B"-“e$B$r;XDj$9$k$H;Re(B
e$B%W%m%;%9$G$Oe(Bioe$B$Ke(Bnile$B$,EO$k$N$Ge(Bfoooe$B$r=PNO$7!”?F%W%m%;%9$G$Oe(Bio
e$B$,EO$k$N$G!"FI$_=P$7$?7k2L$,;R%W%m%;%9$+$i$N=PNO$H0lCW$9$k$+e(B
e$B$I$&$+3NG’$9$k$H$$$&$3$H$G!#e(B

高野です。

Yukihiro M. さんは書きました:

|テストの意図がわからなかったのですが、これはバグかしら。

これはこれでいいんじゃないですかね。popenで"-"を指定すると子
プロセスではioにnilが渡るのでfoooを出力し、親プロセスではio
が渡るので、読み出した結果が子プロセスからの出力と一致するか
どうか確認するということで。
うお。お恥ずかしいことにメソッド名から挙動を予想してませんでした。
"-"とはcatみたいな動作しそうだな、と局所的に読んでいました。

ドキュメントを見るとこの使い方が正しいようです。→(ぱっち
テストも通ることを確認しました。

getsがSTDINを明示的に指定しないと読んでくれませんでした。

åŽŸå› ã¯ãƒœã‚¯ã«ã¯ã‚ã‹ã‚Šã¾ã›ã‚“ã€‚

In article [email protected],
TAKANO Mitsuhiro [email protected] writes:

e$B%I%-%e%a%s%H$r8+$k$H$3$N;H$$J}$,@5$7$$$h$&$G$9!#"*!J$Q$C$Ae(B
e$B%F%9%H$bDL$k$3$H$r3NG’$7$^$7$?!#e(B

e$B$b$H$N%F%9%H$O$I$N$h$&$K@5$7$/$J$$$s$G$7$g$&$+e(B?

getse$B$,e(BSTDINe$B$rL@<(E*$K;XDj$7$J$$$HFI$s$G$/$l$^$;$s$G$7$?!#e(B

e$B860x$O%%/$K$O$o$+$j$^$;$s!#e(B

e$B$=$&$$$&LdBj$,$“$k$J$i!”%F%9%H$O<:GT$9$k$N$,@5$7$$$N$G$Oe(B?

e$B$J$+$@$G$9!#e(B

At Wed, 8 Oct 2008 11:54:45 +0900,
TAKANO Mitsuhiro wrote in [ruby-dev:36680]:

e$B%I%-%e%a%s%H$r8+$k$H$3$N;H$$J}$,@5$7$$$h$&$G$9!#"*!J$Q$C$Ae(B
e$B%F%9%H$bDL$k$3$H$r3NG’$7$^$7$?!#e(B

r+e$B$G$N%F%9%H$b$=$l$O$=$l$G$"$C$F$$$$$H;W$$$^$9$,!"8=>u$N%F%9%H$,e(B
e$BDL$i$J$$$H$$$&$N$O%P%0$G$9!#e(B

getse$B$,e(BSTDINe$B$rL@<(E*$K;XDj$7$J$$$HFI$s$G$/$l$^$;$s$G$7$?!#e(B

e$B860x$O%%/$K$O$o$+$j$^$;$s!#e(B

ARGVe$B$,;D$C$F$?$j$H$+!#e(B

高野です。

r+でのテストもそれはそれであっていいと思いますが、現状のテストが
通らないというのはバグです。

なるほど。確かにそうでした。現状のテストをテストから切り離して実行しても
期待通りに動きました。最初にテストの環境ではなくコードを疑ってしまったため、
ドキュメントを読んでぐしゃぐしゃいじってしまいました。

ごめんなさい。

getsがSTDINを明示的に指定しないと読んでくれませんでした。

åŽŸå› ã¯ãƒœã‚¯ã«ã¯ã‚ã‹ã‚Šã¾ã›ã‚“ã€‚

ARGVが残ってたりとか
起動直後の環境では gets がSTDINã‚’ç´ ç›´ã«èª­ã¿å‡ºã—ã¦ã„ã‚‹ã‚ˆã†ãªã®ã§ã™ãŒã€
テストの環境では最後まで到達したARGFから読み出しているのかもしれません。
nilが返却されてました。

元のコードでSTDINにputsã—ãŸå ´åˆã‚‚ãƒ‘ã‚¹ã—ã¦ã„ã¾ã™ã€‚
putsやgetsが標準とか異なるものに繋がるような仕組みがあるのかしら?
と思っているのですが、よくわかりません。

e$B9bLn$G$9!#e(B

e$B%I%-%e%a%s%H$r8+$k$H$3$N;H$$J}$,@5$7$$$h$&$G$9!#"*!J$Q$C$Ae(B
e$B%F%9%H$bDL$k$3$H$r3NG’$7$^$7$?!#e(B

e$B$b$H$N%F%9%H$O$I$N$h$&$K@5$7$/$J$$$s$G$7$g$&$+e(B?

ioe$B$N%$%s%9%?%s%9$Ne(Bputse$B$r8F$s$G$J$$ItJ,$G$9!#e(B

e$B%I%-%e%a%s%H$r$_$F!"AH$9~$$Ne(Bputse$B$G$O$J$/!"e(Bioe$B$Ne(Bputse$B$r;H$&$3$H$Ge(B
e$B?F$N%W%m%;%9$GI8=`F~=PNO$r07$($k$H;W$$$^$7$?!#e(B
http://www.ruby-lang.org/ja/man/html/IO.html

getse$B$,e(BSTDINe$B$rL@<(E*$K;XDj$7$J$$$HFI$s$G$/$l$^$;$s$G$7$?!#e(B

e$B860x$O%%/$K$O$o$+$j$^$;$s!#e(B

e$B$=$&$$$&LdBj$,$“$k$J$i!”%F%9%H$O<:GT$9$k$N$,@5$7$$$N$G$Oe(B?

e$B3N$+$K!"%F%9%H4D6-$+$i@Z$jN%$7$?$H$-$K$Oe(BSTDINe$B$r;XDj$;$:$H$b;R%W%m%;%9$Ne(B
e$BCM$r$-$A$s$H=&$C$F$/$k$N$G!“e(BSTDINe$B$N5-=R$O9T$o$J$o$:!”<:GT$9$k$N$,e(B
e$B@5$7$$$N$+$b$7$l$^$;$s!#e(B

e$B%F%9%H4D6-$N%P%0$H$$$&$3$H$K$J$k$s$G$7$g$&$+!#$o$+$j$^$;$s$G$7$?!#e(B

e$B9bLn$G$9!#e(B

e$B5/F0D>8e$N4D6-$G$Oe(B gets e$B$,e(BSTDINe$B$rAGD>$KFI$=P$7$F$$$k$h$&$J$N$G$9$,!"e(B
e$B%F%9%H$N4D6-$G$O:G8e$^$GE~C#$7$?e(BARGFe$B$+$iFI$
=P$7$F$$$k$N$+$b$7$l$^$;$s!#e(B
nile$B$,JV5Q$5$l$F$^$7$?!#e(B

e$B$=$N%F%9%H$Ke(B gets e$B$O;H$C$F$J$$$H;W$&$s$G$9$,!"$J$s$NOC$r$7$Fe(B
e$B$$$^$9$+e(B?

e$B%j%U%!%l%s%9$K:$C$F$$$?%3!<%I$r%F%9%H4D6-$KF~$l$F$$?e(B
[ruby-dev:36680]
e$B$HOC$,:.$6$C$F$7$^$$$^$7$?!#$9$
$^$;$s!#e(B

e$B$&$&!<$`!#e(B
e$B$H$J$k$H!"e(Bputse$B$N%G%U%)%k%H$N=PNO@he(B $> e$B$,e(B
STDOUTe$B$G$J$$$H$3$m$K$J$C$F$$$ke(B
e$B$N$+$J!)e(B

e$B$D$$$G$K@h$[$I$NJ8>O$K4V0c$$$,$"$j$^$7$?$N$G!"D{@5$5$;$F$/$@$5$$!#e(B

  • e$B85$N%3!<%I$Ge(BSTDINe$B$Ke(Bputse$B$7$?>l9g$b%Q%9$7$F$$$^$9!#e(B
  • e$B85$N%3!<%I$Ge(BSTDOUTe$B$Ke(Bputse$B$7$?>l9g$b%Q%9$7$F$$$^$9!#e(B

In article [email protected],
TAKANO Mitsuhiro [email protected] writes:

e$B5/F0D>8e$N4D6-$G$Oe(B gets e$B$,e(BSTDINe$B$rAGD>$KFI$=P$7$F$$$k$h$&$J$N$G$9$,!"e(B
e$B%F%9%H$N4D6-$G$O:G8e$^$GE~C#$7$?e(BARGFe$B$+$iFI$
=P$7$F$$$k$N$+$b$7$l$^$;$s!#e(B
nile$B$,JV5Q$5$l$F$^$7$?!#e(B

e$B$=$N%F%9%H$Ke(B gets e$B$O;H$C$F$J$$$H;W$&$s$G$9$,!"$J$s$NOC$r$7$Fe(B
e$B$$$^$9$+e(B?

こんばんはー!!1!
高野です。

起動直後の環境では gets がSTDINã‚’ç´ ç›´ã«èª­ã¿å‡ºã—ã¦ã„ã‚‹ã‚ˆã†ãªã®ã§ã™ãŒã€
テストの環境では最後まで到達したARGFから読み出しているのかもしれません。
nilが返却されてました。

元のコードでSTDINにputsã—ãŸå ´åˆã‚‚ãƒ‘ã‚¹ã—ã¦ã„ã¾ã™ã€‚
putsやgetsが標準とか異なるものに繋がるような仕組みがあるのかしら?
と思っているのですが、よくわかりません。
test-allのときのインタプリンタの環境がよくわからないので、別のプロセスで
さらにforkするパッチを書いてみました。
どうやら意図どおりの挙動を示しているようです。

テスト環境のバグはとれていないけど、テストケースとしてのバグはなくなっ

た、かしら?

e$B$^$D$b$He(B e$B$f$-$R$m$G$9e(B

In message “Re: [ruby-dev:36879] Re: test_process.rb”
on Thu, 23 Oct 2008 17:09:54 +0900, TAKANO Mitsuhiro
[email protected] writes:

|test-alle$B$N$H$-$N%$%s%?%W%j%s%?$N4D6-$,$h$/$o$+$i$J$$$N$G!“JL$N%W%m%;%9$Ge(B
|e$B$5$i$Ke(Bforke$B$9$k%Q%C%A$r=q$$$F$_$^$7$?!#e(B
|e$B$I$&$d$i0U?^$I$*$j$N5sF0$r<($7$F$$$k$h$&$G$9!#e(B
|
|# e$B%F%9%H4D6-$N%P%0$O$H$l$F$$$J$$$1$I!”%F%9%H%1!<%9$H$7$F$N%P%0$O$J$/$J$Ce(B
|e$B$?!"$+$7$i!)e(B

e$BMW$9$k$K$3$N%Q%C%A$rEv$F$l$Pe(BOKe$B$H$$$&$3$H$G$7$g$&$+!#e(B

e$B@>;3OB9-$G$9!#e(B

At Thu, 23 Oct 2008 17:24:33 +0900,
Yukihiro M. wrote:

|test-alle$B$N$H$-$N%$%s%?%W%j%s%?$N4D6-$,$h$/$o$+$i$J$$$N$G!“JL$N%W%m%;%9$Ge(B
|e$B$5$i$Ke(Bforke$B$9$k%Q%C%A$r=q$$$F$_$^$7$?!#e(B
|e$B$I$&$d$i0U?^$I$*$j$N5sF0$r<($7$F$$$k$h$&$G$9!#e(B
|
|# e$B%F%9%H4D6-$N%P%0$O$H$l$F$$$J$$$1$I!”%F%9%H%1!<%9$H$7$F$N%P%0$O$J$/$J$Ce(B
|e$B$?!"$+$7$i!)e(B

e$BMW$9$k$K$3$N%Q%C%A$rEv$F$l$Pe(BOKe$B$H$$$&$3$H$G$7$g$&$+!#e(B

e$B0JA0e(BIRCe$B$Ge(B[ruby-core:19373]e$B$GD>$k$H$$$&$h$&$JOC$,$"$C$?$H;W$&$N$G$9$,!"e(B
e$B$I$&$G$7$g$&$+!#e(B

e$B$*$O$h$&$4$6$$$^$9!*e(B
e$B9bLn$G$9!#e(B

Kazuhiro NISHIYAMA e$B$5$s$O=q$-$^$7$?e(B:

e$B0JA0e(BIRCe$B$Ge(B[ruby-core:19373]e$B$GD>$k$H$$$&$h$&$JOC$,$"$C$?$H;W$&$N$G$9$,!"e(B
e$B$I$&$G$7$g$&$+!#e(B
e$B$?$7$+$Ke(B[ruby-core:19373]e$B$GD>$k$3$H$r3NG’$7$^$7$?!<!#e(B
e$BB>$KF1MM$NLdBj$,5/$3$j$&$k$3$H$b9M$(!"e(B[ruby-core:19373]e$B$r<h$j9~$s$@J}$,e(B
e$B$h$$$N$+$b$7$l$^$;$s!#e(B