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 の仕様の違いが原因であった。詳しくは次のエントリで。