/*
* Copyright 2015 Red Hat, Inc. and/or its affiliates.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.uberfire.java.nio.file;
import java.util.concurrent.atomic.AtomicInteger;
import org.junit.Test;
import org.uberfire.java.nio.IOException;
import org.uberfire.java.nio.file.attribute.BasicFileAttributes;
import static org.fest.assertions.api.Assertions.assertThat;
import static org.fest.assertions.api.Assertions.fail;
public class SimpleFileVisitorTest extends AbstractBaseTest {
final AtomicInteger preDir = new AtomicInteger();
final AtomicInteger postDir = new AtomicInteger();
final AtomicInteger fileC = new AtomicInteger();
final AtomicInteger failFile = new AtomicInteger();
final SimpleFileVisitor<Path> simple = new SimpleFileVisitor<Path>() {
@Override
public FileVisitResult preVisitDirectory(Path dir,
BasicFileAttributes attrs) throws IOException {
preDir.addAndGet(1);
return super.preVisitDirectory(dir,
attrs);
}
@Override
public FileVisitResult visitFile(Path file,
BasicFileAttributes attrs) throws IOException {
fileC.addAndGet(1);
return super.visitFile(file,
attrs);
}
@Override
public FileVisitResult visitFileFailed(Path file,
IOException exc) throws IOException {
failFile.addAndGet(1);
return super.visitFileFailed(file,
exc);
}
@Override
public FileVisitResult postVisitDirectory(Path dir,
IOException exc) throws IOException {
postDir.addAndGet(1);
return super.postVisitDirectory(dir,
exc);
}
};
@Test
public void testWalker() {
final Path dir = newTempDir(null);
final Path file1 = Files.createTempFile(dir,
"foo",
"bar");
Files.createTempFile(dir,
"foo",
"bar");
cleanupVisitor();
Files.walkFileTree(dir,
simple);
assertThat(preDir.get()).isEqualTo(1);
assertThat(postDir.get()).isEqualTo(1);
assertThat(fileC.get()).isEqualTo(2);
assertThat(failFile.get()).isEqualTo(0);
cleanupVisitor();
Files.walkFileTree(file1,
simple);
assertThat(preDir.get()).isEqualTo(0);
assertThat(postDir.get()).isEqualTo(0);
assertThat(fileC.get()).isEqualTo(1);
assertThat(failFile.get()).isEqualTo(0);
}
@Test
public void testWalkerDeep2() {
final Path dir = newTempDir(null);
final Path subDir = newTempDir(dir);
final Path subSubDir = newTempDir(subDir);
newTempDir(subSubDir);
cleanupVisitor();
Files.walkFileTree(dir,
simple);
assertThat(preDir.get()).isEqualTo(4);
assertThat(postDir.get()).isEqualTo(4);
assertThat(fileC.get()).isEqualTo(0);
assertThat(failFile.get()).isEqualTo(0);
}
@Test
public void testWalkerDeep1() {
final Path dir = newTempDir(null);
final Path subDir = newTempDir(dir);
final Path subSubDir = newTempDir(subDir);
final Path subSubSubDir = newTempDir(subSubDir);
Files.createTempFile(dir,
"foo",
"bar");
Files.createTempFile(dir,
"foo",
"bar");
cleanupVisitor();
Files.walkFileTree(dir,
simple);
assertThat(preDir.get()).isEqualTo(4);
assertThat(postDir.get()).isEqualTo(4);
assertThat(fileC.get()).isEqualTo(2);
assertThat(failFile.get()).isEqualTo(0);
}
@Test
public void testException() {
final Path dir = newTempDir(null);
final Path file = Files.createTempFile(dir,
"foo",
"bar");
final IOException myException = new IOException();
try {
simple.visitFileFailed(file,
myException);
fail("should throw an exception");
} catch (Exception ex) {
assertThat(ex).isEqualTo(myException);
}
try {
simple.postVisitDirectory(file,
myException);
fail("should throw an exception");
} catch (Exception ex) {
assertThat(ex).isEqualTo(myException);
}
}
@Test(expected = IllegalArgumentException.class)
public void preVisitDirectoryNull1() {
final Path dir = newTempDir(null);
final Path file = Files.createTempFile(dir,
"foo",
"bar");
simple.preVisitDirectory(null,
Files.readAttributes(file,
BasicFileAttributes.class));
}
@Test(expected = IllegalArgumentException.class)
public void preVisitDirectoryNull2() {
final Path dir = newTempDir(null);
simple.preVisitDirectory(dir,
null);
}
@Test(expected = IllegalArgumentException.class)
public void preVisitDirectoryNull3() {
simple.preVisitDirectory(null,
null);
}
@Test(expected = IllegalArgumentException.class)
public void visitFileNull1() {
final Path dir = newTempDir(null);
final Path file = Files.createTempFile(dir,
"foo",
"bar");
simple.visitFile(null,
Files.readAttributes(file,
BasicFileAttributes.class));
}
@Test(expected = IllegalArgumentException.class)
public void visitFileNull2() {
final Path dir = newTempDir(null);
simple.visitFile(dir,
null);
}
@Test(expected = IllegalArgumentException.class)
public void visitFileNull3() {
simple.visitFile(null,
null);
}
@Test
public void postVisitDirectoryNull1() {
final Path dir = newTempDir(null);
final Path file = Files.createTempFile(dir,
"foo",
"bar");
simple.postVisitDirectory(dir,
null);
}
@Test(expected = IllegalArgumentException.class)
public void postVisitDirectoryNull2() {
simple.postVisitDirectory(null,
new IOException());
}
@Test(expected = IllegalArgumentException.class)
public void postVisitDirectoryNull3() {
simple.postVisitDirectory(null,
null);
}
@Test(expected = IllegalArgumentException.class)
public void visitFileFailedNull1() {
final Path dir = newTempDir(null);
final Path file = Files.createTempFile(dir,
"foo",
"bar");
simple.visitFileFailed(file,
null);
}
@Test(expected = IllegalArgumentException.class)
public void visitFileFailedNull2() {
simple.visitFileFailed(null,
new IOException());
}
@Test(expected = IllegalArgumentException.class)
public void visitFileFailedNull3() {
simple.visitFileFailed(null,
null);
}
protected void cleanupVisitor() {
preDir.set(0);
postDir.set(0);
fileC.set(0);
failFile.set(0);
}
}