### Question:
RelativeFiles { @NonNull public static ImmutableSet<RelativeFile> fromDirectory(@NonNull File directory) { return fromDirectory(directory, directory); } private  RelativeFiles(); @NonNull static ImmutableSet<RelativeFile> fromDirectory(@NonNull File directory); @NonNull static ImmutableSet<RelativeFile> fromDirectory(
            @NonNull File directory,
            @NonNull final Predicate<RelativeFile> filter); @NonNull static Predicate<RelativeFile> fromPathPredicate(@NonNull Predicate<String> predicate); @NonNull static ImmutableSet<RelativeFile> fromZip(@NonNull File zip);  }### Answer:
@Test public void readFullDirectory() throws Exception { File parent = temporaryFolder.newFolder(); File file1 = new File(parent, "file1"); Files.write(new byte[0], file1); File child = new File(parent, "child"); FileUtils.mkdirs(child); File file2 = new File(child, "file2"); Files.write(new byte[0], file2); Set<RelativeFile> relativeFiles = RelativeFiles.fromDirectory(parent); assertEquals(2, relativeFiles.size()); assertThat(relativeFiles).contains(new RelativeFile(parent, file1)); assertThat(relativeFiles).contains(new RelativeFile(parent, file2)); }