<?xml version="1.0" encoding="UTF-8"?>
<commit>
  <added type="array"/>
  <modified type="array">
    <modified>
      <diff>@@ -33,5 +33,13 @@ module FakeFS
         name
       end
     end
+
+    def delete(node = self)
+      if node == self
+        parent.delete(self)
+      else
+        super(node.name)
+      end
+    end
   end
 end</diff>
      <filename>lib/fakefs/fake/dir.rb</filename>
    </modified>
    <modified>
      <diff>@@ -15,6 +15,10 @@ module FakeFS
         links &lt;&lt; file unless links.include?(file)
         file.inode = self
       end
+
+      def unlink(file)
+        links.delete(file)
+      end
     end
 
     def initialize(name = nil, parent = nil)
@@ -59,5 +63,10 @@ module FakeFS
     def to_s
       File.join(parent.to_s, name)
     end
+
+    def delete
+      inode.unlink(self)
+      parent.delete(self)
+    end
   end
 end</diff>
      <filename>lib/fakefs/fake/file.rb</filename>
    </modified>
    <modified>
      <diff>@@ -15,10 +15,14 @@ module FakeFS
       FileSystem.find(target)
     end
 
+    def delete
+      parent.delete(self)
+    end
+
     def respond_to?(method)
       entry.respond_to?(method)
     end
-  
+
   private
     
     def method_missing(*args, &amp;block)</diff>
      <filename>lib/fakefs/fake/symlink.rb</filename>
    </modified>
    <modified>
      <diff>@@ -135,6 +135,24 @@ module FakeFS
       0
     end
 
+    def self.delete(file_name, *additional_file_names)
+      if !exists?(file_name)
+        raise Errno::ENOENT, &quot;No such file or directory - #{file_name}&quot;
+      end
+
+      FileUtils.rm(file_name)
+
+      additional_file_names.each do |file_name|
+        FileUtils.rm(file_name)
+      end
+
+      additional_file_names.size + 1
+    end
+
+    class &lt;&lt; self
+      alias_method :unlink, :delete
+    end
+
     def self.symlink(source, dest)
       FileUtils.ln_s(source, dest)
     end</diff>
      <filename>lib/fakefs/file.rb</filename>
    </modified>
    <modified>
      <diff>@@ -66,8 +66,8 @@ module FakeFS
     end
 
     def delete(path)
-      if dir = FileSystem.find(path)
-        dir.parent.delete(dir.name)
+      if node = FileSystem.find(path)
+        node.delete
       end
     end
 </diff>
      <filename>lib/fakefs/file_system.rb</filename>
    </modified>
    <modified>
      <diff>@@ -970,6 +970,96 @@ class FakeFSTest &lt; Test::Unit::TestCase
     assert_equal File::Stat, File.stat(&quot;/foo&quot;).class
   end
 
+  def test_can_delete_file_with_delete
+    FileUtils.touch(&quot;/foo&quot;)
+
+    File.delete(&quot;/foo&quot;)
+
+    assert !File.exists?(&quot;/foo&quot;)
+  end
+
+  def test_can_delete_multiple_files_with_delete
+    FileUtils.touch(&quot;/foo&quot;)
+    FileUtils.touch(&quot;/bar&quot;)
+
+    File.delete(&quot;/foo&quot;, &quot;/bar&quot;)
+
+    assert !File.exists?(&quot;/foo&quot;)
+    assert !File.exists?(&quot;/bar&quot;)
+  end
+
+  def test_delete_raises_argument_error_with_no_filename_given
+    assert_raises ArgumentError do
+      File.delete
+    end
+  end
+
+  def test_delete_returns_number_one_when_given_one_arg
+    FileUtils.touch(&quot;/foo&quot;)
+
+    assert_equal 1, File.delete(&quot;/foo&quot;)
+  end
+
+  def test_delete_returns_number_two_when_given_two_args
+    FileUtils.touch(&quot;/foo&quot;)
+    FileUtils.touch(&quot;/bar&quot;)
+
+    assert_equal 2, File.delete(&quot;/foo&quot;, &quot;/bar&quot;)
+  end
+
+  def test_delete_raises_error_when_first_file_does_not_exist
+    assert_raises Errno::ENOENT do
+      File.delete(&quot;/foo&quot;)
+    end
+  end
+
+  def test_delete_does_not_raise_error_when_second_file_does_not_exist
+    FileUtils.touch(&quot;/foo&quot;)
+
+    assert_nothing_raised do
+      File.delete(&quot;/foo&quot;, &quot;/bar&quot;)
+    end
+  end
+
+  def test_unlink_is_alias_for_delete
+    assert_equal File.method(:unlink), File.method(:delete)
+  end
+
+  def test_unlink_removes_only_one_file_content
+    File.open(&quot;/foo&quot;, &quot;w&quot;) { |f| f &lt;&lt; &quot;some_content&quot; }
+    File.link(&quot;/foo&quot;, &quot;/bar&quot;)
+
+    File.unlink(&quot;/bar&quot;)
+    File.read(&quot;/foo&quot;) == &quot;some_content&quot;
+  end
+
+  def test_link_reports_correct_stat_info_after_unlinking
+    File.open(&quot;/foo&quot;, &quot;w&quot;) { |f| f &lt;&lt; &quot;some_content&quot; }
+    File.link(&quot;/foo&quot;, &quot;/bar&quot;)
+
+    File.unlink(&quot;/bar&quot;)
+    assert_equal 1, File.stat(&quot;/foo&quot;).nlink
+  end
+
+  def test_delete_works_with_symlink
+    FileUtils.touch(&quot;/foo&quot;)
+    File.symlink(&quot;/foo&quot;, &quot;/bar&quot;)
+
+    File.unlink(&quot;/bar&quot;)
+
+    assert File.exists?(&quot;/foo&quot;)
+    assert !File.exists?(&quot;/bar&quot;)
+  end
+
+  def test_delete_works_with_symlink_source
+    FileUtils.touch(&quot;/foo&quot;)
+    File.symlink(&quot;/foo&quot;, &quot;/bar&quot;)
+
+    File.unlink(&quot;/foo&quot;)
+
+    assert !File.exists?(&quot;/foo&quot;)
+  end
+
   def here(fname)
     RealFile.expand_path(RealFile.dirname(__FILE__)+'/'+fname)
   end</diff>
      <filename>test/fakefs_test.rb</filename>
    </modified>
  </modified>
  <removed type="array"/>
  <parents type="array">
    <parent>
      <id>bdcdc26d490ff354670b0adfb63831f419e3a88e</id>
    </parent>
  </parents>
  <author>
    <name>Scott Taylor</name>
    <email>scott@railsnewbie.com</email>
  </author>
  <url>http://github.com/jyurek/fakefs/commit/c00d4506623d16a928fb37ae66084d2c632970a1</url>
  <id>c00d4506623d16a928fb37ae66084d2c632970a1</id>
  <committed-date>2009-09-30T23:52:02-07:00</committed-date>
  <authored-date>2009-09-30T23:42:29-07:00</authored-date>
  <message>Add File::delete and alias File::unlink.  Get those, plus FileUtils.rm to work properly with hard links.  Closes #8</message>
  <tree>35dd828f82213c73b4928a0b87c473ed0c143808</tree>
  <committer>
    <name>Scott Taylor</name>
    <email>scott@railsnewbie.com</email>
  </committer>
</commit>
