📄 directorywalkertestcase.java
字号:
}
}
return list;
}
/**
* Create an name filter containg the names of the files
* in the array.
*/
private static IOFileFilter createNameFilter(File[] files) {
String[] names = new String[files.length];
for (int i = 0; i < files.length; i++) {
names[i] = files[i].getName();
}
return new NameFileFilter(names);
}
/**
* Test Cancel
*/
public void testCancel() {
String cancelName = null;
// Cancel on a file
try {
cancelName = "DirectoryWalker.java";
new TestCancelWalker(cancelName, false).find(javaDir);
fail("CancelException not thrown for '" + cancelName + "'");
} catch (DirectoryWalker.CancelException cancel) {
assertEquals("File: " + cancelName, cancelName, cancel.getFile().getName());
assertEquals("Depth: " + cancelName, 5, cancel.getDepth());
} catch(IOException ex) {
fail("IOException: " + cancelName + " " + ex);
}
// Cancel on a directory
try {
cancelName = "commons";
new TestCancelWalker(cancelName, false).find(javaDir);
fail("CancelException not thrown for '" + cancelName + "'");
} catch (DirectoryWalker.CancelException cancel) {
assertEquals("File: " + cancelName, cancelName, cancel.getFile().getName());
assertEquals("Depth: " + cancelName, 3, cancel.getDepth());
} catch(IOException ex) {
fail("IOException: " + cancelName + " " + ex);
}
// Suppress CancelException (use same file name as preceeding test)
try {
List results = new TestCancelWalker(cancelName, true).find(javaDir);
File lastFile = (File)results.get(results.size() - 1);
assertEquals("Suppress: " + cancelName, cancelName, lastFile.getName());
} catch(IOException ex) {
fail("Suppress threw " + ex);
}
}
/**
* Test Cancel
*/
public void testMultiThreadCancel() {
String cancelName = null;
TestMultiThreadCancelWalker walker = null;
// Cancel on a file
try {
cancelName = "DirectoryWalker.java";
walker = new TestMultiThreadCancelWalker(cancelName, false);
walker.find(javaDir);
fail("CancelException not thrown for '" + cancelName + "'");
} catch (DirectoryWalker.CancelException cancel) {
File last = (File) walker.results.get(walker.results.size() - 1);
assertEquals(cancelName, last.getName());
assertEquals("Depth: " + cancelName, 5, cancel.getDepth());
} catch(IOException ex) {
fail("IOException: " + cancelName + " " + ex);
}
// Cancel on a directory
try {
cancelName = "commons";
walker = new TestMultiThreadCancelWalker(cancelName, false);
walker.find(javaDir);
fail("CancelException not thrown for '" + cancelName + "'");
} catch (DirectoryWalker.CancelException cancel) {
assertEquals("File: " + cancelName, cancelName, cancel.getFile().getName());
assertEquals("Depth: " + cancelName, 3, cancel.getDepth());
} catch(IOException ex) {
fail("IOException: " + cancelName + " " + ex);
}
// Suppress CancelException (use same file name as preceeding test)
try {
walker = new TestMultiThreadCancelWalker(cancelName, true);
List results = walker.find(javaDir);
File lastFile = (File) results.get(results.size() - 1);
assertEquals("Suppress: " + cancelName, cancelName, lastFile.getName());
} catch(IOException ex) {
fail("Suppress threw " + ex);
}
}
// ------------ Test DirectoryWalker implementation --------------------------
/**
* Test DirectoryWalker implementation that finds files in a directory hierarchy
* applying a file filter.
*/
private static class TestFileFinder extends DirectoryWalker {
protected TestFileFinder(FileFilter filter, int depthLimit) {
super(filter, depthLimit);
}
protected TestFileFinder(IOFileFilter dirFilter, IOFileFilter fileFilter, int depthLimit) {
super(dirFilter, fileFilter, depthLimit);
}
/** find files. */
protected List find(File startDirectory) {
List results = new ArrayList();
try {
walk(startDirectory, results);
} catch(IOException ex) {
Assert.fail(ex.toString());
}
return results;
}
/** Handles a directory end by adding the File to the result set. */
protected void handleDirectoryEnd(File directory, int depth, Collection results) {
results.add(directory);
}
/** Handles a file by adding the File to the result set. */
protected void handleFile(File file, int depth, Collection results) {
results.add(file);
}
}
// ------------ Test DirectoryWalker implementation --------------------------
/**
* Test DirectoryWalker implementation that always returns false
* from handleDirectoryStart()
*/
private static class TestFalseFileFinder extends TestFileFinder {
protected TestFalseFileFinder(FileFilter filter, int depthLimit) {
super(filter, depthLimit);
}
/** Always returns false. */
protected boolean handleDirectory(File directory, int depth, Collection results) {
return false;
}
}
// ------------ Test DirectoryWalker implementation --------------------------
/**
* Test DirectoryWalker implementation that finds files in a directory hierarchy
* applying a file filter.
*/
static class TestCancelWalker extends DirectoryWalker {
private String cancelFileName;
private boolean suppressCancel;
TestCancelWalker(String cancelFileName,boolean suppressCancel) {
super();
this.cancelFileName = cancelFileName;
this.suppressCancel = suppressCancel;
}
/** find files. */
protected List find(File startDirectory) throws IOException {
List results = new ArrayList();
walk(startDirectory, results);
return results;
}
/** Handles a directory end by adding the File to the result set. */
protected void handleDirectoryEnd(File directory, int depth, Collection results) throws IOException {
results.add(directory);
if (cancelFileName.equals(directory.getName())) {
throw new CancelException(directory, depth);
}
}
/** Handles a file by adding the File to the result set. */
protected void handleFile(File file, int depth, Collection results) throws IOException {
results.add(file);
if (cancelFileName.equals(file.getName())) {
throw new CancelException(file, depth);
}
}
/** Handles Cancel. */
protected void handleCancelled(File startDirectory, Collection results,
CancelException cancel) throws IOException {
if (!suppressCancel) {
super.handleCancelled(startDirectory, results, cancel);
}
}
}
/**
* Test DirectoryWalker implementation that finds files in a directory hierarchy
* applying a file filter.
*/
static class TestMultiThreadCancelWalker extends DirectoryWalker {
private String cancelFileName;
private boolean suppressCancel;
private boolean cancelled;
public List results;
TestMultiThreadCancelWalker(String cancelFileName, boolean suppressCancel) {
super();
this.cancelFileName = cancelFileName;
this.suppressCancel = suppressCancel;
}
/** find files. */
protected List find(File startDirectory) throws IOException {
results = new ArrayList();
walk(startDirectory, results);
return results;
}
/** Handles a directory end by adding the File to the result set. */
protected void handleDirectoryEnd(File directory, int depth, Collection results) throws IOException {
results.add(directory);
assertEquals(false, cancelled);
if (cancelFileName.equals(directory.getName())) {
cancelled = true;
}
}
/** Handles a file by adding the File to the result set. */
protected void handleFile(File file, int depth, Collection results) throws IOException {
results.add(file);
assertEquals(false, cancelled);
if (cancelFileName.equals(file.getName())) {
cancelled = true;
}
}
/** Handles Cancelled. */
protected boolean handleIsCancelled(File file, int depth, Collection results) throws IOException {
return cancelled;
}
/** Handles Cancel. */
protected void handleCancelled(File startDirectory, Collection results,
CancelException cancel) throws IOException {
if (!suppressCancel) {
super.handleCancelled(startDirectory, results, cancel);
}
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -