Rubyの試行錯誤支援・テスト支援ツール。
「# =>」という注釈記号を入れた行に式の値を注釈したり、Test::UnitのassertionやRSpecのexpectationを自動で入れてくれる便利なツール。
rcodetoolsパッケージに入っていて、RubyGemsパッケージがあるので、「gem install rcodetools」でインストールできる。
READMEより…
a, b = "foo", "baz" a + b # => a.size # =>
これを「xmpfilter」にかけると、
a, b = "foo", "baz" a + b # => "foobaz" a.size # => 3
こうなる。
Test::Unitでは、
def test_insertion @o.insert "bar" @o.insert "baz" @o.size # => @o.last # => @o.first # => @o.complex_computation # => @o.last(2) # => end
これを「xmpfilter -t」にかけると、
def test_insertion @o.insert "bar" @o.insert "baz" assert_equal(2, @o.size) assert_equal("baz", @o.last) assert_equal("bar", @o.first) assert_in_delta(3.14159265358979, @o.complex_computation, 0.0001) assert_equal(["baz", "bar"], @o.last(2)) end
こんな感じになる。
RSpecでは、
class X Y = Struct.new(:a) def foo(b); b ? Y.new(2) : 2 end def bar; raise "No good" end def baz; nil end def fubar(x); x ** 2.0 + 1 end def babar; [1,2] end A = 1 A = 1 end context "Testing xmpfilter's expectation expansion" do setup do @o = X.new end specify "Should expand should_equal expectations" do @o.foo(true) # => @o.foo(true).a # => @o.foo(false) # => end specify "Should expand should_raise expectations" do @o.bar # => end specify "Should expand should_be_nil expectations" do @o.baz # => end specify "Should expand correct expectations for complex values" do @o.babar # => end specify "Should expand should_be_close expectations" do @o.fubar(10) # => end end
これを「xmpfilter -s」にかけると、
class X Y = Struct.new(:a) def foo(b); b ? Y.new(2) : 2 end def bar; raise "No good" end def baz; nil end def fubar(x); x ** 2.0 + 1 end def babar; [1,2] end A = 1 A = 1 # !> already initialized constant A end context "Testing xmpfilter's expectation expansion" do setup do @o = X.new end specify "Should expand should_equal expectations" do (@o.foo(true)).should_be_a_kind_of X::Y (@o.foo(true).inspect).should_equal "#<struct X::Y a=2>" (@o.foo(true).a).should_equal 2 (@o.foo(false)).should_equal 2 end specify "Should expand should_raise expectations" do lambda{(@o.bar)}.should_raise RuntimeError end specify "Should expand should_be_nil expectations" do (@o.baz).should_be_nil end specify "Should expand correct expectations for complex values" do (@o.babar).should_equal [1, 2] end specify "Should expand should_be_close expectations" do (@o.fubar(10)).should_be_close(101.0, 0.0001) end end
こうなる!