spec ファイルを Rubinius 以外でテストする

Rubinius の spec ファイルは、なんと Rubinius 以外でも実行できるような仕掛けがすでに用意されていた。

実行はいたって簡単で、bin/ci コマンドのオプションに -t ruby とか -t jruby とかをつけるだけ。

$ cd rubinius.code
$ bin/ci -t ruby spec/ruby/1.8/library/eruby
.....EE.................................


1)
ERB#filename is reported when error raised ERROR
undefined method `file' for #<SyntaxError:0x7c5d8>: 
./spec/ruby/1.8/library/erb//filename_spec.rb:21
./mspec/runner/runner.rb:136:in `call'
./mspec/runner/runner.rb:136:in `describe'
./mspec/runner/runner.rb:130:in `each'
./mspec/runner/runner.rb:130:in `describe'
./mspec/runner/object.rb:11:in `describe'
./spec/ruby/1.8/library/erb//filename_spec.rb:4
tmp/last_mspec.rb:15:in `load'
tmp/last_mspec.rb:15
tmp/last_mspec.rb:10:in `each'
tmp/last_mspec.rb:10

2)
ERB#filename use '(erb)' as filename when filename is not set ERROR
undefined method `file' for #<SyntaxError:0x7b1d8>: 
./spec/ruby/1.8/library/erb//filename_spec.rb:38
./mspec/runner/runner.rb:136:in `call'
./mspec/runner/runner.rb:136:in `describe'
./mspec/runner/runner.rb:130:in `each'
./mspec/runner/runner.rb:130:in `describe'
./mspec/runner/object.rb:11:in `describe'
./spec/ruby/1.8/library/erb//filename_spec.rb:4
tmp/last_mspec.rb:15:in `load'
tmp/last_mspec.rb:15
tmp/last_mspec.rb:10:in `each'
tmp/last_mspec.rb:10

Finished in 0.044173 seconds

40 examples, 53 expectations, 0 failures, 2 errors


Oh, shit! エラーになりやがった。Rubinius では、spec ファイルによるテストが Rubinius だけでなく Ruby (MRI) でも通ることを求めている。つまりこのままでは、パッチは accept されないことになるので、原因を突き詰めて修正しないといけない。

今回のエラーは、Ruby (MRI) と Rubinius における SyntaxError の仕様の違いが原因であった。詳しくは次のエントリで。