code: package com.beijunyi.parallelgit.filesystem;
  
  import java.io.IOException;
  import java.nio.file.Files;
  import java.nio.file.NoSuchFileException;
  
  import org.junit.Test;
  
  import static org.junit.Assert.*;
  
  public class FilesDeleteTest extends AbstractGitFileSystemTest {
  
    @Test
    public void deleteFile_fileShouldNotExistAfterDeletion() throws IOException {
      initGitFileSystem("/test_file.txt");
  
      GitPath path = gfs.getPath("/test_file.txt");
      Files.delete(path);
      assertFalse(Files.exists(path));
    }
  
    @Test
    public void deleteFile_theFileSystemShouldBecomeDirty() throws IOException {
      initGitFileSystem("/test_file.txt");
  
      GitPath path = gfs.getPath("/test_file.txt");
      Files.delete(path);
      assertTrue(gfs.getStatusProvider().isDirty());
    }
  
    @Test
    public void deleteEmptyDirectory_directoryShouldNotExistAfterDeletion() throws IOException {
      initGitFileSystem("/dir/some_file.txt");
  
      GitPath file = gfs.getPath("/dir/some_file.txt");
      Files.delete(file);
      GitPath dir = gfs.getPath("/dir");
      Files.delete(dir);
      assertFalse(Files.exists(dir));
    }
  
    @Test
    public void createAndDeleteEmptyDirectory_theFileSystemShouldRemainClean() throws IOException {
      initGitFileSystem();
      GitPath dir = gfs.getPath("/empty_dir");
      Files.createDirectory(dir);
      Files.delete(dir);
      assertFalse(gfs.getStatusProvider().isDirty());
    }
  
    @Test
    public void deleteNonEmptyDirectory_directoryShouldNotExistAfterDeletion() throws IOException {
      initGitFileSystem("/dir/some_file.txt");
  
      GitPath dir = gfs.getPath("/dir");
      Files.delete(dir);
      assertFalse(Files.exists(dir));
    }
  
    @Test(expected = NoSuchFileException.class)
    public void deleteNonExistentFile_shouldThrowException() throws IOException {
      initGitFileSystem();
      Files.delete(gfs.getPath("/non_existent_file.txt"));
    }
  
  }
  