### Question:
BasicDescendantFileSource implements DescendantFileSource { public String getRootDirectoryPath() { return this.rootDirectoryPath; } BasicDescendantFileSource(File rootDirectory);  BasicDescendantFileSource(String rootDirectoryPath); File getFile(String path); DescendantFileSource getDescendant(String relativePath); File getRootDirectory(); String getRootDirectoryPath(); boolean isDescendant(File file); boolean isDescendant(String filePath); String getRelativePath(File file); String getRelativePath(String filePath); @Override String toString();  }### Answer:
@Test public void testNormalizedPath() { DescendantFileSource bfl = new BasicDescendantFileSource(tmpDir); assertEquals("Root directory path not clean.", StringUtils.cleanPath(bfl.getRootDirectoryPath()), bfl.getRootDirectoryPath()); File tmp2 = new File(tmpDir, "./dir1/./dir1_2/../dir1_2/../../dir1"); bfl = new BasicDescendantFileSource(tmp2); assertEquals("Root directory path not clean.", StringUtils.cleanPath(bfl.getRootDirectoryPath()), bfl.getRootDirectoryPath()); bfl = new BasicDescendantFileSource(tmp2.getPath()); assertEquals("Root directory path not clean.", StringUtils.cleanPath(bfl.getRootDirectoryPath()), bfl.getRootDirectoryPath()); }