require 'runit/testcase'
require 'runit/cui/testrunner'
require 'rrb/rename_method'
class TestScript_RenameMethod < RUNIT::TestCase
INPUT_STR2 = "\
/home/ohai/ruby/test/test.rb\C-a
class E
end
class F < E
def bar
foo
end
end
class G < F
def foo
end
end
if __FILE__ == $0 then
G.new.foo
end
\C-a-- END --\C-a
"
OUTPUT_STR2 = "\
/home/ohai/ruby/test/test.rb\C-a
class E
end
class F < E
def bar
foofee
end
end
class G < F
def foo(*arg); raise 'G#foo is renamed foofee' end
def foofee
end
end
if __FILE__ == $0 then
G.new.foo
end
\C-a-- END --\C-a
"
def input_str
result = 'test.rb'
result << RRB::IO_SPLITTER
result << TestScriptFile_RenameMethod::INPUT_STR
result << RRB::IO_SPLITTER
result << RRB::IO_TERMINATOR
result << RRB::IO_SPLITTER
result
end
def test_methods_related_with
script = RRB::Script.new_from_io( StringIO.new( input_str ) )
assert_equals( Set.new(%w( C#foo ).map{|x| RRB::MN[x]}),
script.methods_related_with( [ RRB::MN['C#foo'] ] ) )
assert_equals( Set.new(%w( A#foo B#foo C::D#foo ).map{|x| RRB::MN[x]}),
script.methods_related_with( [ RRB::MN['A#foo'] ] ) )
assert_equals( Set.new(%w( A#foo B#foo C::D#foo ).map{|x| RRB::MN[x]}),
script.methods_related_with( [ RRB::MN['B#foo'] ] ) )
assert_equals( Set.new(%w( A#foo B#foo C::D#foo ).map{|x| RRB::MN[x]}),
script.methods_related_with( [ RRB::MN['C::D#foo'] ] ) )
script2 = RRB::Script.new_from_io( StringIO.new( INPUT_STR2 ) )
assert_equals( Set.new(%w( F#foo G#foo ).map{|x| RRB::MN[x]}),
script2.methods_related_with( [ RRB::MN['G#foo'] ] ) )
assert_equals( Set.new(%w( F#foo G#foo ).map{|x| RRB::MN[x]}),
script2.methods_related_with( [ RRB::MN['F#foo'] ] ) )
end
def test_rename_method?
script = RRB::Script.new_from_io( StringIO.new( input_str ) )
assert_equals( true,
script.rename_method?( [ RRB::MN['C#foo'] ], 'bar' ) )
assert_equals( true,
script.rename_method?( [ RRB::MN['B#foo'] ], 'foobar' ) )
assert_equals( false,
script.rename_method?( [ RRB::MN['B#foo'] ], 'bar' ) )
assert_equals( "bar: already defined at C::D", script.error_message)
assert_equals( false,
script.rename_method?( [ RRB::MN['B#foo'] ], '@@bar' ) )
assert_equals( "@@bar is not a valid name for methods",
script.error_message)
assert_equals( false,
script.rename_method?( [RRB::MN['C#foo'],RRB::MN['B#bar']],
'foobar' ) )
assert_equals( "All method should be same name", script.error_message )
end
def test_rename_method
script = RRB::Script.new_from_io( StringIO.new( INPUT_STR2 ) )
script.rename_method( [ RRB::MN['G#foo'] ], 'foofee' )
result = ''
script.result_to_io( result )
assert_equals( OUTPUT_STR2, result )
end
def test_supermethod?
script = RRB::Script.new_from_io( StringIO.new( input_str ) )
assert_equals( true,
script.supermethod?( RRB::MN['A#heke'], RRB::MN['B#heke'] ))
assert_equals( false,
script.supermethod?( RRB::MN['B#heke'], RRB::MN['A#heke'] ))
assert_equals( false,
script.supermethod?( RRB::MN['A#heke'], RRB::MN['B#mohe'] ))
end
def test_supermethods
script = RRB::Script.new_from_io( StringIO.new( input_str ) )
assert_equals( [ RRB::MN['A#foo'],RRB::MN['B#foo'] ],
script.supermethods( RRB::MN['B#foo'] ) )
assert_equals( [ RRB::MN['A#foo'] ],
script.supermethods( RRB::MN['A#foo'] ) )
end
def test_all_fcalls
script = RRB::Script.new_from_io( StringIO.new( INPUT_STR2 ) )
assert_equals( Set[RRB::MN['F#foo']], script.all_fcalls )
end
end
class TestScriptFile_RenameMethod < RUNIT::TestCase
INPUT_STR = "\
class A
def foo
end
def bar
end
end
class B < A
def foo
super
end
def bar
foo
end
end
class C
def foo
end
class D < B
def bar
foo
end
end
end
if __FILE__ == $0 then
b = B.new
a.foo
c = C.new
c.foo
end
"
OUTPUT_STR = "\
class A
def foo(*arg); raise 'A#foo is renamed feefoo' end
def feefoo
end
def bar
end
end
class B < A
def foo(*arg); raise 'B#foo is renamed feefoo' end
def feefoo
super
end
def bar
feefoo
end
end
class C
def foo
end
class D < B
def bar
feefoo
end
end
end
if __FILE__ == $0 then
b = B.new
a.foo
c = C.new
c.foo
end
"
def test_all_fcalls
scriptfile = RRB::ScriptFile.new( INPUT_STR, 'test.rb' )
assert_equals( Set[RRB::MN['B#foo'], RRB::MN['C::D#foo']],
scriptfile.all_fcalls )
end
def test_rename_method
scriptfile = RRB::ScriptFile.new( INPUT_STR, 'test.rb' )
scriptfile.rename_method( %w(A#foo B#foo C::D#foo).map{|x| RRB::MN[x]}, 'feefoo' )
assert_equals( OUTPUT_STR, scriptfile.new_script )
end
end
if $0 == __FILE__
if ARGV.size == 0
suite = RUNIT::TestSuite.new
suite.add_test( TestScriptFile_RenameMethod.suite )
suite.add_test( TestScript_RenameMethod.suite )
else
suite = RUNIT::TestSuite.new
ARGV.each do |testmethod|
suite.add_test(TestScriptFile_RenameMethod.new(testmethod))
end
end
RUNIT::CUI::TestRunner.run(suite)
end
syntax highlighted by Code2HTML, v. 0.9.1