Rubinis 用の spec ファイルを作成する

Rubinius では、Test::Unit ではなくて、RSpec でもなくて、独自に作った RSpec のサブセットを使ってテストをしている。しかも単なるサブセットではなく、Rubinius 用の拡張が入っている。

また Rubinius には、spec ファイルを生成するためのテンプレートが用意されている。

$ cd rubinius.code/
$ bin/mkspec -rerb -c ERB -b spec/ruby/1.8/library/


これで rubinius.code/spec/ruby/1.8/library/erb 以下に spec ファイルのスケルトンが生成される。あとはこれをガシガシ書き込んでいくみたい。


しかし spec ファイルの書き方が分からない。いちおうガイドラインがあったので読んでみて、それから他の spec ファイルを見ながら、spec/ruby/1.8/library/erb/util/html_escape_spec.rb を書いてみた。

require 'erb'
require File.dirname(__FILE__) + '/../../../spec_helper'

describe "ERB::Util::html_escape" do

  it "escape '& < > \"' to '&amp; &lt; &gt; &quot;" do
    input = '& < > "'
    expected = '&amp; &lt; &gt; &quot;'
    ERB::Util::html_escape(input).should == expected
  end

  it "not escape characters except '& < > \"'" do
    input = (0x20..0x7E).to_a.collect {|ch| ch.chr}.join('')
    expected = input.gsub(/&/,'&amp;').gsub(/</,'&lt;').gsub(/>/,'&gt;').gsub(/"/,'&quot;')
    ERB::Util::html_escape(input).should == expected
  end

end


spec のテスト実行は、全体を実行するなら rake spec:ci で行うけど、ある特定の spec だけを対象としたいなら bin/ci コマンドを使うようだ。

$ cd rubinius.code/
$ bin/ci spec/ruby/1.8/library/erb/util/html_escape_spec.rb 
Started
..

Finished in 0.041293 seconds

2 examples, 2 expectations, 0 failures, 0 errors


erb.rb の spec ファイルをすべてテストしたい場合は、ディレクトリ名を指定すればいい。

$ cd rubinius.code/
$ bin/ci spec/ruby/1.8/library/erb   # erb 以下のすべての spec ファイルをテスト
Started
..

Finished in 0.614440 seconds

2 examples, 2 expectations, 0 failures, 0 errors