diff --git a/lib/fakefs/fileutils.rb b/lib/fakefs/fileutils.rb index 72295377..18b0613f 100644 --- a/lib/fakefs/fileutils.rb +++ b/lib/fakefs/fileutils.rb @@ -96,7 +96,8 @@ def cp_r(src, dest) def mv(src, dest, options={}) if target = FileSystem.find(src) - FileSystem.add(dest, target.entry.clone) + d_path = File.directory?(dest) ? File.join(dest, File.basename(src)) : dest + FileSystem.add(d_path, target.entry.clone) FileSystem.delete(src) else raise Errno::ENOENT, src diff --git a/test/fakefs_test.rb b/test/fakefs_test.rb index b17c433c..3607c084 100644 --- a/test/fakefs_test.rb +++ b/test/fakefs_test.rb @@ -797,6 +797,14 @@ def test_mv_works_with_options assert_equal('bar', File.open('baz') { |f| f.read }) end + def test_mv_to_directory + File.open('foo', 'w') {|f| f.write 'bar'} + FileUtils.mkdir_p 'destdir' + FileUtils.mv 'foo', 'destdir' + assert_equal('bar', File.open('destdir/foo') {|f| f.read }) + assert File.directory?('destdir') + end + def test_cp_actually_works File.open('foo', 'w') {|f| f.write 'bar' } FileUtils.cp('foo', 'baz')