/**
* Copyright (C) 2010-2017 Gordon Fraser, Andrea Arcuri and EvoSuite
* contributors
*
* This file is part of EvoSuite.
*
* EvoSuite is free software: you can redistribute it and/or modify it
* under the terms of the GNU Lesser General Public License as published
* by the Free Software Foundation, either version 3.0 of the License, or
* (at your option) any later version.
*
* EvoSuite is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with EvoSuite. If not, see <http://www.gnu.org/licenses/>.
*/
package org.evosuite.junit;
import java.lang.reflect.Type;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;
import org.evosuite.assertion.Assertion;
import org.evosuite.ga.ConstructionFailedException;
import org.evosuite.testcase.Scope;
import org.evosuite.testcase.StatementInterface;
import org.evosuite.testcase.TestCase;
import org.evosuite.testcase.TestFitnessFunction;
import org.evosuite.testcase.TestVisitor;
import org.evosuite.testcase.VariableReference;
import org.evosuite.utils.Listener;
/**
* This is a wrapper for a {@link TestCase} that allows
* {@link StatementInterface}s to reference this test case and still exchange
* the wrapped test case.
*
* @author roessler
*/
public class DelegatingTestCase implements TestCase {
private static final long serialVersionUID = 1L;
private TestCase delegate;
private final Set<Listener<Void>> listeners = new HashSet<Listener<Void>>();
/** {@inheritDoc} */
@Override
public void accept(TestVisitor visitor) {
delegate.accept(visitor);
}
/** {@inheritDoc} */
@Override
public void addAssertions(TestCase other) {
delegate.addAssertions(other);
}
/** {@inheritDoc} */
@Override
public void addCoveredGoal(TestFitnessFunction goal) {
delegate.addCoveredGoal(goal);
}
/** {@inheritDoc} */
@Override
public void addListener(Listener<Void> listener) {
listeners.add(listener);
}
/** {@inheritDoc} */
@Override
public VariableReference addStatement(StatementInterface statement) {
return delegate.addStatement(statement);
}
/** {@inheritDoc} */
@Override
public VariableReference addStatement(StatementInterface statement, int position) {
return delegate.addStatement(statement, position);
}
/** {@inheritDoc} */
@Override
public void addStatements(List<? extends StatementInterface> statements) {
delegate.addStatements(statements);
}
/** {@inheritDoc} */
@Override
public void chop(int length) {
delegate.chop(length);
}
/** {@inheritDoc} */
@Override
public void clearCoveredGoals() {
delegate.clearCoveredGoals();
}
/** {@inheritDoc} */
@Override
public TestCase clone() {
return delegate.clone();
}
/** {@inheritDoc} */
@Override
public void deleteListener(Listener<Void> listener) {
listeners.remove(listener);
}
/** {@inheritDoc} */
@Override
public boolean equals(Object other) {
if (delegate != null) {
return delegate.equals(other);
}
return super.equals(other);
}
/** {@inheritDoc} */
@Override
public Set<Class<?>> getAccessedClasses() {
return delegate.getAccessedClasses();
}
/** {@inheritDoc} */
@Override
public List<String> getAccessedFiles() {
return delegate.getAccessedFiles();
}
/** {@inheritDoc} */
@Override
public List<Assertion> getAssertions() {
return delegate.getAssertions();
}
/** {@inheritDoc} */
@Override
public Set<TestFitnessFunction> getCoveredGoals() {
return delegate.getCoveredGoals();
}
/** {@inheritDoc} */
@Override
public Set<Class<?>> getDeclaredExceptions() {
return delegate.getDeclaredExceptions();
}
/**
* <p>Getter for the field <code>delegate</code>.</p>
*
* @return a {@link org.evosuite.testcase.TestCase} object.
*/
public TestCase getDelegate() {
return delegate;
}
/** {@inheritDoc} */
@Override
public Set<VariableReference> getDependencies(VariableReference var) {
return delegate.getDependencies(var);
}
/** {@inheritDoc} */
@Override
public Object getObject(VariableReference reference, Scope scope) {
return delegate.getObject(reference, scope);
}
/** {@inheritDoc} */
@Override
public List<VariableReference> getObjects(int position) {
return delegate.getObjects(position);
}
/** {@inheritDoc} */
@Override
public List<VariableReference> getObjects(Type type, int position) {
return delegate.getObjects(type, position);
}
/** {@inheritDoc} */
@Override
public VariableReference getRandomNonNullObject(Type type, int position) throws ConstructionFailedException {
return delegate.getRandomNonNullObject(type, position);
}
@Override
public VariableReference getRandomNonNullNonPrimitiveObject(Type type,
int position) throws ConstructionFailedException {
return delegate.getRandomNonNullNonPrimitiveObject(type, position);
}
/** {@inheritDoc} */
@Override
public VariableReference getRandomObject() {
return delegate.getRandomObject();
}
/** {@inheritDoc} */
@Override
public VariableReference getRandomObject(int position) {
return delegate.getRandomObject(position);
}
/** {@inheritDoc} */
@Override
public VariableReference getRandomObject(Type type) throws ConstructionFailedException {
return delegate.getRandomObject(type);
}
/** {@inheritDoc} */
@Override
public VariableReference getRandomObject(Type type, int position) throws ConstructionFailedException {
return delegate.getRandomObject(type, position);
}
/** {@inheritDoc} */
@Override
public Set<VariableReference> getReferences(VariableReference var) {
return delegate.getReferences(var);
}
/** {@inheritDoc} */
@Override
public VariableReference getReturnValue(int position) {
return delegate.getReturnValue(position);
}
/** {@inheritDoc} */
@Override
public StatementInterface getStatement(int position) {
return delegate.getStatement(position);
}
/** {@inheritDoc} */
@Override
public boolean hasAssertions() {
return delegate.hasAssertions();
}
/** {@inheritDoc} */
@Override
public boolean hasCalls() {
return delegate.hasCalls();
}
/** {@inheritDoc} */
@Override
public boolean hasCastableObject(Type type) {
return delegate.hasCastableObject(type);
}
/** {@inheritDoc} */
@Override
public int hashCode() {
if (delegate != null) {
return delegate.hashCode();
}
return super.hashCode();
}
/** {@inheritDoc} */
@Override
public boolean hasObject(Type type, int position) {
return delegate.hasObject(type, position);
}
/** {@inheritDoc} */
@Override
public boolean hasReferences(VariableReference var) {
return delegate.hasReferences(var);
}
/** {@inheritDoc} */
@Override
public boolean isEmpty() {
return delegate.isEmpty();
}
/**
* <p>isFinished</p>
*
* @return a boolean.
*/
public boolean isFinished() {
return delegate != null;
}
/** {@inheritDoc} */
@Override
public boolean isPrefix(TestCase t) {
return delegate.isPrefix(t);
}
/** {@inheritDoc} */
@Override
public boolean isValid() {
return delegate.isValid();
}
/** {@inheritDoc} */
@Override
public Iterator<StatementInterface> iterator() {
return delegate.iterator();
}
/** {@inheritDoc} */
@Override
public void remove(int position) {
delegate.remove(position);
}
/** {@inheritDoc} */
@Override
public void removeAssertions() {
delegate.removeAssertions();
}
@Override
public void removeAssertion(Assertion assertion) {
delegate.removeAssertion(assertion);
}
/** {@inheritDoc} */
@Override
public void replace(VariableReference var1, VariableReference var2) {
delegate.replace(var1, var2);
}
/** {@inheritDoc} */
@Override
public void setAccessedFiles(List<String> files) {
delegate.setAccessedFiles(files);
}
/**
* <p>Setter for the field <code>delegate</code>.</p>
*
* @param delegate a {@link org.evosuite.testcase.TestCase} object.
*/
public void setDelegate(TestCase delegate) {
assert this.delegate == null;
this.delegate = delegate;
for (Listener<Void> listener : listeners) {
delegate.addListener(listener);
}
}
/** {@inheritDoc} */
@Override
public VariableReference setStatement(StatementInterface statement, int position) {
return delegate.setStatement(statement, position);
}
/** {@inheritDoc} */
@Override
public int size() {
if (delegate == null) {
return 0;
}
return delegate.size();
}
/** {@inheritDoc} */
@Override
public String toCode() {
return delegate.toCode();
}
/** {@inheritDoc} */
@Override
public String toCode(Map<Integer, Throwable> exceptions) {
return delegate.toCode(exceptions);
}
/** {@inheritDoc} */
@Override
public String toString() {
if (delegate != null) {
return delegate.toString();
}
return super.toString();
}
}