### Question:
FileManager { public boolean filesDiffer(File f1, File f2) throws IOException { boolean differ = false; FileReader fr1 = new FileReader(f1); FileReader fr2 = new FileReader(f2); try { boolean done = false; while (!differ && !done) { int c1 = fr1.read(); int c2 = fr2.read(); differ = c1 != c2; done = c1 == -1 || c2 == -1; } } finally { fr1.close(); fr2.close(); } return differ; } FileManager();  FileManager(Application app); void synchronize(File source, File target); void rename(File fileToRename, File target); void move(File object, File newParent); void move(File object, File newParent, FileFilter filter); void delete(File object); void delete(File object, FileFilter filter); void deleteChildren(File parentDir); void deleteRecursively(File file); void deleteRecursively(File file, FileFilter filter,
                                DeletionPolicy deletePolicy); File copy(File objectFile, File destDir); File copy(File objectFile, File destDir, boolean overwrite); void copyRecursively(File objectFile, File destDir); void copyRecursively(File objectFile, File destDir, FileFilter filter); void copyRecursively(File objectFile, File destDir,
                              FileFilter filter, boolean overwrite); boolean filesDiffer(File f1, File f2);  }### Answer:
@Test(dataProvider = "differTestData") public void testFilesDiffer(String contents1, String contents2) throws Exception { File f1 = new File(fmWorkspace, "f1"); File f2 = new File(fmWorkspace, "f2"); writeContents(f1, contents1); writeContents(f2, contents2); if (!contents1.equals(contents2)) { assertTrue(fileManager.filesDiffer(f1, f2), "File contents '" + contents1 + "' and '" + contents2 + "' are " + "not equal despite what FileManager claims"); } else { assertFalse(fileManager.filesDiffer(f1, f2), "File contents '" + contents1 + "' and '" + contents2 + "' are " + "equal despite what FileManager claims"); } f1.delete(); f2.delete(); }