# File lib/fakefs/file.rb, line 202
    def self.rename(source, dest)
      if directory?(source) && file?(dest)
        fail Errno::ENOTDIR, "#{source} or #{dest}"
      elsif file?(source) && directory?(dest)
        fail Errno::EISDIR, "#{source} or #{dest}"
      elsif !exist?(dirname(dest))
        fail Errno::ENOENT, "#{source} or #{dest}"
      end

      if (target = FileSystem.find(source))
        if target.is_a?(FakeFS::FakeSymlink)
          File.symlink(target.target, dest)
        else
          FileSystem.add(dest, target.entry.clone)
        end

        FileSystem.delete(source)
      else
        fail Errno::ENOENT, "#{source} or #{dest}"
      end

      0
    end