blob: 70ac0e99f8aa599037f1270fe97e9efc8d8cce8e [file] [log] [blame]
/*
* Copyright 2013 Google Inc.
*
* 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 com.google.common.jimfs;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;
import java.io.File;
import java.io.IOException;
import java.net.URI;
import java.nio.file.FileSystem;
import java.nio.file.LinkOption;
import java.nio.file.Path;
import java.nio.file.PathMatcher;
import java.nio.file.Paths;
import java.nio.file.WatchEvent;
import java.nio.file.WatchKey;
import java.nio.file.WatchService;
import java.util.Iterator;
import java.util.regex.PatternSyntaxException;
import org.checkerframework.checker.nullness.compatqual.NullableDecl;
/**
* Abstract base class for tests of {@link PathMatcher} implementations.
*
* @author Colin Decker
*/
public abstract class AbstractPathMatcherTest {
/**
* Creates a new {@code PathMatcher} using the given pattern in the syntax this test is testing.
*/
protected abstract PathMatcher matcher(String pattern);
/** Override to return a real matcher for the given pattern. */
@NullableDecl
protected PathMatcher realMatcher(String pattern) {
return null;
}
protected void assertSyntaxError(String pattern) {
try {
matcher(pattern);
fail();
} catch (PatternSyntaxException expected) {
}
try {
PathMatcher real = realMatcher(pattern);
if (real != null) {
fail();
}
} catch (PatternSyntaxException expected) {
}
}
protected final PatternAsserter assertThat(String pattern) {
return new PatternAsserter(pattern);
}
protected final class PatternAsserter {
private final PathMatcher matcher;
@NullableDecl private final PathMatcher realMatcher;
PatternAsserter(String pattern) {
this.matcher = matcher(pattern);
this.realMatcher = realMatcher(pattern);
}
PatternAsserter matches(String... paths) {
for (String path : paths) {
assertTrue(
"matcher '" + matcher + "' did not match '" + path + "'", matcher.matches(fake(path)));
if (realMatcher != null) {
Path realPath = Paths.get(path);
assertTrue(
"real matcher '" + realMatcher + "' did not match '" + realPath + "'",
realMatcher.matches(realPath));
}
}
return this;
}
PatternAsserter doesNotMatch(String... paths) {
for (String path : paths) {
assertFalse(
"glob '" + matcher + "' should not have matched '" + path + "'",
matcher.matches(fake(path)));
if (realMatcher != null) {
Path realPath = Paths.get(path);
assertFalse(
"real matcher '" + realMatcher + "' matched '" + realPath + "'",
realMatcher.matches(realPath));
}
}
return this;
}
}
/** Path that only provides toString(). */
private static Path fake(final String path) {
return new Path() {
@Override
public FileSystem getFileSystem() {
return null;
}
@Override
public boolean isAbsolute() {
return false;
}
@Override
public Path getRoot() {
return null;
}
@Override
public Path getFileName() {
return null;
}
@Override
public Path getParent() {
return null;
}
@Override
public int getNameCount() {
return 0;
}
@Override
public Path getName(int index) {
return null;
}
@Override
public Path subpath(int beginIndex, int endIndex) {
return null;
}
@Override
public boolean startsWith(Path other) {
return false;
}
@Override
public boolean startsWith(String other) {
return false;
}
@Override
public boolean endsWith(Path other) {
return false;
}
@Override
public boolean endsWith(String other) {
return false;
}
@Override
public Path normalize() {
return null;
}
@Override
public Path resolve(Path other) {
return null;
}
@Override
public Path resolve(String other) {
return null;
}
@Override
public Path resolveSibling(Path other) {
return null;
}
@Override
public Path resolveSibling(String other) {
return null;
}
@Override
public Path relativize(Path other) {
return null;
}
@Override
public URI toUri() {
return null;
}
@Override
public Path toAbsolutePath() {
return null;
}
@Override
public Path toRealPath(LinkOption... options) throws IOException {
return null;
}
@Override
public File toFile() {
return null;
}
@Override
public WatchKey register(
WatchService watcher, WatchEvent.Kind<?>[] events, WatchEvent.Modifier... modifiers)
throws IOException {
return null;
}
@Override
public WatchKey register(WatchService watcher, WatchEvent.Kind<?>... events)
throws IOException {
return null;
}
@Override
public Iterator<Path> iterator() {
return null;
}
@Override
public int compareTo(Path other) {
return 0;
}
@Override
public String toString() {
return path;
}
};
}
}