126 lines
4.9 KiB
Java
126 lines
4.9 KiB
Java
/*
|
|
* Copyright (C) 2012 The Guava Authors
|
|
*
|
|
* 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.io;
|
|
|
|
import static com.google.common.base.Preconditions.checkNotNull;
|
|
|
|
import com.google.common.collect.ImmutableList;
|
|
import com.google.common.collect.ImmutableMap;
|
|
import com.google.common.collect.Lists;
|
|
import java.io.IOException;
|
|
import java.io.Reader;
|
|
import java.io.StringReader;
|
|
import java.lang.reflect.Method;
|
|
import java.lang.reflect.Modifier;
|
|
import java.util.List;
|
|
import junit.framework.TestCase;
|
|
|
|
/**
|
|
* @param <S> the source or sink type
|
|
* @param <T> the data type (byte[] or String)
|
|
* @param <F> the factory type
|
|
* @author Colin Decker
|
|
*/
|
|
@AndroidIncompatible // Android doesn't understand tests that lack default constructors.
|
|
public class SourceSinkTester<S, T, F extends SourceSinkFactory<S, T>> extends TestCase {
|
|
|
|
static final String LOREM_IPSUM =
|
|
"Lorem ipsum dolor sit amet, consectetur adipiscing "
|
|
+ "elit. Cras fringilla elit ac ipsum adipiscing vulputate. Maecenas in lorem nulla, ac "
|
|
+ "sollicitudin quam. Praesent neque elit, sodales quis vestibulum vel, pellentesque nec "
|
|
+ "erat. Proin cursus commodo lacus eget congue. Aliquam erat volutpat. Fusce ut leo sed "
|
|
+ "risus tempor vehicula et a odio. Nam aliquet dolor viverra libero rutrum accumsan "
|
|
+ "quis in augue. Suspendisse id dui in lorem tristique placerat eget vel risus. Sed "
|
|
+ "metus neque, scelerisque in molestie ac, mattis quis lectus. Pellentesque viverra "
|
|
+ "justo commodo quam bibendum ut gravida leo accumsan. Nullam malesuada sagittis diam, "
|
|
+ "quis suscipit mauris euismod vulputate. Pellentesque ultrices tellus sed lorem "
|
|
+ "aliquet pulvinar. Nam lorem nunc, ultrices at auctor non, scelerisque eget turpis. "
|
|
+ "Nullam eget varius erat. Sed a lorem id arcu dictum euismod. Fusce lectus odio, "
|
|
+ "elementum ullamcorper mattis viverra, dictum sit amet lacus.\n"
|
|
+ "\n"
|
|
+ "Nunc quis lacus est. Sed aliquam pretium cursus. Sed eu libero eros. In hac habitasse "
|
|
+ "platea dictumst. Pellentesque molestie, nibh nec iaculis luctus, justo sem lobortis "
|
|
+ "enim, at feugiat leo magna nec libero. Mauris quis odio eget nisl rutrum cursus nec "
|
|
+ "eget augue. Sed nec arcu sem. In hac habitasse platea dictumst.";
|
|
|
|
static final ImmutableMap<String, String> TEST_STRINGS =
|
|
ImmutableMap.<String, String>builder()
|
|
.put("empty", "")
|
|
.put("1 char", "0")
|
|
.put("1 word", "hello")
|
|
.put("2 words", "hello world")
|
|
.put("\\n line break", "hello\nworld")
|
|
.put("\\r line break", "hello\rworld")
|
|
.put("\\r\\n line break", "hello\r\nworld")
|
|
.put("\\n at EOF", "hello\nworld\n")
|
|
.put("\\r at EOF", "hello\nworld\r")
|
|
.put("lorem ipsum", LOREM_IPSUM)
|
|
.build();
|
|
|
|
protected final F factory;
|
|
protected final T data;
|
|
protected final T expected;
|
|
|
|
private final String suiteName;
|
|
private final String caseDesc;
|
|
|
|
SourceSinkTester(F factory, T data, String suiteName, String caseDesc, Method method) {
|
|
super(method.getName());
|
|
this.factory = checkNotNull(factory);
|
|
this.data = checkNotNull(data);
|
|
this.expected = checkNotNull(factory.getExpected(data));
|
|
this.suiteName = checkNotNull(suiteName);
|
|
this.caseDesc = checkNotNull(caseDesc);
|
|
}
|
|
|
|
@Override
|
|
public String getName() {
|
|
return super.getName() + " [" + suiteName + " [" + caseDesc + "]]";
|
|
}
|
|
|
|
protected static ImmutableList<String> getLines(final String string) {
|
|
try {
|
|
return new CharSource() {
|
|
@Override
|
|
public Reader openStream() throws IOException {
|
|
return new StringReader(string);
|
|
}
|
|
}.readLines();
|
|
} catch (IOException e) {
|
|
throw new AssertionError();
|
|
}
|
|
}
|
|
|
|
@Override
|
|
public void tearDown() throws IOException {
|
|
factory.tearDown();
|
|
}
|
|
|
|
static ImmutableList<Method> getTestMethods(Class<?> testClass) {
|
|
List<Method> result = Lists.newArrayList();
|
|
for (Method method : testClass.getDeclaredMethods()) {
|
|
if (Modifier.isPublic(method.getModifiers())
|
|
&& method.getReturnType() == void.class
|
|
&& method.getParameterTypes().length == 0
|
|
&& method.getName().startsWith("test")) {
|
|
result.add(method);
|
|
}
|
|
}
|
|
return ImmutableList.copyOf(result);
|
|
}
|
|
}
|