ruby-trunk-changes r34168 - r34175

今日は testunit の修正&リファクタリング、Object#send のテスト、SecureRandom のリファクタリングなど新年2日目にして活発にコミットがありました。

kazu:r34168 2012-01-02 14:56:55 +0900

testunit の並列実行のための Test::Unit::Runner#_run_parallel で Array#find の結果をそのまま dup しているところがあり、nil が返ってきた時に例外になるので返り値のチェックをしているところの後で dup するようにしています。

svn:r34169 2012-01-02 14:56:59 +0900

version.h の日付更新。

kazu:r34170 2012-01-02 15:08:29 +0900

同じく testunit の Test::Unit::Runner::Worker#run で File.basename で拡張子 .rb を取り除くために gsub を使っているところは File.basename の第2引数 suffix に指定することで除くようにしています。

kazu:r34171 2012-01-02 15:13:29 +0900

同じく testunit において pack("m") を使って base64 エンコーディングをしているところで改行を取り除くために gsub を使っているところは pack("m0") を利用することで改行を含まない base64 エンコード(RFC:4648)を行なうようにしています。

ktsj:r34172 2012-01-02 15:25:01 +0900

r34113 で追加した Object#send にブロック渡しした時の挙動のテストを bootstraptest/test_flow.rb から test/ruby/test_object.rb へ移動しています。

ktsj:r34173 2012-01-02 15:29:03 +0900

同じく Object#send にブロックを渡した時のテストに、send で呼ぶメソッドが実際にブロックを受け取るケースのテストを追加しています。

ktsj:r34174 2012-01-02 17:28:05 +0900

vm.c のコメントの ::VM -> ::RubyVM と定数名の変更に追随する修正をしています。

akr:r34175 2012-01-02 20:54:52 +0900

SecureRandom#random_bytes で /dev/urandom から読み込みしようとするところで IO#readpartial を使っていたのを IO#read にしています。IO#readpartial は IO オブジェクトの読み込みバッファか、その fd に読み込める入力があればそれを読めるだけ読んで返す(EOF なら nil を返す)のですが、読めるデータがないとブロックするというなんか微妙なメソッドなのですが、/dev/urandom は普通要求されたサイズを必ず読めるデバイスファイルなので特に readpartial を使っている意味はありません。多分 /dev/urandom が実は期待したデバイスファイルじゃなくて名前付きパイプだとかなんかそんなような罠があった時には意味があるのかもしれませんが、どのみち読めるデータがない時はブロックするので不完全です。