| /* |
| * 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); |
| } |
| } |