org.evosuite.testcase.statements.Statement Maven / Gradle / Ivy
The newest version!
/**
* Copyright (C) 2010-2018 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 .
*/
/**
*
*/
package org.evosuite.testcase.statements;
import java.io.PrintStream;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Type;
import java.util.List;
import java.util.Map;
import java.util.Set;
import org.evosuite.assertion.Assertion;
import org.evosuite.testcase.TestCase;
import org.evosuite.testcase.TestFactory;
import org.evosuite.testcase.execution.Scope;
import org.evosuite.testcase.variable.VariableReference;
import org.evosuite.utils.generic.GenericAccessibleObject;
import org.objectweb.asm.commons.GeneratorAdapter;
/**
*
* StatementInterface interface.
*
*
* @author Sebastian Steenbuck
* @author Gordon Fraser
*/
public interface Statement {
/**
* Add a new assertion to statement
*
* @param assertion
* Assertion to be added
*/
public void addAssertion(Assertion assertion);
/**
* A statement can have a textual comment that will be included
* in the JUnit output
*
* @param comment
*/
public void addComment(String comment);
/**
* Class instances are bound to a class loader - if we want to reexecute a
* test on a different classloader we need to be able to change the class of
* the reflection object
*
* @param loader
* a {@link java.lang.ClassLoader} object.
*/
public void changeClassLoader(ClassLoader loader);
/**
* Create deep copy of statement
*
* @return a {@link Statement} object.
*/
public Statement clone();
/**
*
* clone
*
*
* @param newTestCase
* the testcase in which this statement will be inserted
* @return a {@link Statement} object.
*/
public Statement clone(TestCase newTestCase);
/**
*
* copy
*
*
* @param newTestCase
* the testcase in which this statement will be inserted
* @param offset
* a int.
* @return a {@link Statement} object.
*/
public Statement copy(TestCase newTestCase, int offset);
/**
*
* copyAssertions
*
*
* @param newTestCase
* the testcase in which this statement will be inserted
* @param offset
* a int.
* @return a {@link java.util.Set} object.
*/
public Set copyAssertions(TestCase newTestCase, int offset);
/**
* {@inheritDoc}
*
* Equality check
*/
@Override
public boolean equals(Object s);
/**
* This method executes the statement under the given scope. If execution of
* the statement is aborted abnormally (i.e. an exception is thrown.) The
* exception is returned. Otherwise the return value is null.
*
* @param scope
* the scope under which the statement is executed
* @param out
* a {@link java.io.PrintStream} object.
* @return if an exception was thrown during execution this is the exception
* @throws java.lang.reflect.InvocationTargetException
* if any.
* @throws java.lang.IllegalArgumentException
* if any.
* @throws java.lang.IllegalAccessException
* if any.
* @throws java.lang.InstantiationException
* if any.
*/
public Throwable execute(Scope scope, PrintStream out)
throws InvocationTargetException, IllegalArgumentException,
IllegalAccessException, InstantiationException;
/**
* Returns the accessibleObject which is used to generate this kind of
* statement E.g. the Field of a FieldStatement, the Method of a
* MethodStatement and so on MAY return NULL (for example for
* NullStatements)
*
* @return a {@link java.lang.reflect.AccessibleObject} object.
*/
public GenericAccessibleObject> getAccessibleObject();
/**
* Get Java code representation of assertions
*
* @return String representing all assertions attached to this statement
*/
public String getAssertionCode();
/**
* Return list of assertions
*
* @return a {@link java.util.Set} object.
*/
public Set getAssertions();
/**
* Create a string representing the statement as Java code
*
* @return a {@link java.lang.String} object.
*/
public String getCode();
/**
* Create a string representing the statement as Java code
*
* @param exception
* a {@link java.lang.Throwable} object.
* @return a {@link java.lang.String} object.
*/
public String getCode(Throwable exception);
/**
* Retrieve comment for this statement
* @return
*/
public String getComment();
/**
*
* getDeclaredExceptions
*
*
* @return a {@link java.util.Set} object.
*/
public Set> getDeclaredExceptions();
/**
* Retrieve the number of parameters of this statement
*
* @return
*/
public int getNumParameters();
/**
*
* getPosition
*
*
* @return a int.
*/
public int getPosition();
/**
*
* getReturnClass
*
*
* @return Raw class of return value
*/
public Class> getReturnClass();
/**
*
* getReturnType
*
*
* @return Generic type of return value
*/
public Type getReturnType();
/**
*
* getReturnValue
*
*
* @return Variable representing return value
*/
public VariableReference getReturnValue();
/**
* Retrieve the test case this statement is part of
*
* @return
*/
public TestCase getTestCase();
/**
*
* getUniqueVariableReferences
*
*
* @return a {@link java.util.List} object.
*/
public List getUniqueVariableReferences();
/**
*
* getVariableReferences
*
*
* @return a {@link java.util.Set} object.
*/
public Set getVariableReferences();
/**
* Check if there are assertions
*
* @return True if there are assertions
*/
public boolean hasAssertions();
/**
* {@inheritDoc}
*
* Generate hash code
*/
@Override
public int hashCode();
/**
* Determine if the underlying reflection object is currently accessible
* @return
*/
public boolean isAccessible();
/**
* Returns true if this statement should be handled as an
* AssignmentStatement. This method was added to allow the wrapping of
* AssignmentStatements (in which case "a instanceof AssignmentStatement" is
* no longer working)
*
* @return a boolean.
*/
public boolean isAssignmentStatement();
public boolean isReflectionStatement();
/**
* Tests if the throwable defined by t is declared to be thrown by the
* underlying type. Obviously this can only return true for methods and
* constructors.
*
* @param t
* a {@link java.lang.Throwable} object.
* @return a boolean.
*/
public boolean isDeclaredException(Throwable t);
/**
* Various consistency checks. This method might also return with an
* assertionError Functionality might depend on the status of
* enableAssertions in this JVM
*
* @return a boolean.
*/
public boolean isValid();
/**
*
* mutate
*
*
* @param test
* a {@link org.evosuite.testcase.TestCase} object.
* @param factory
* a {@link org.evosuite.testcase.TestFactory} object.
* @return a boolean.
*/
public boolean mutate(TestCase test, TestFactory factory);
/**
* Check if the statement makes use of var
*
* @param var
* Variable we are checking for
* @return True if var is referenced
*/
public boolean references(VariableReference var);
/**
* Delete assertion attached to this statement
*
* @param assertion
* a {@link org.evosuite.assertion.Assertion} object.
*/
public void removeAssertion(Assertion assertion);
/**
* Delete all assertions attached to this statement
*/
public void removeAssertions();
/**
* Replace a VariableReference with another one
*
* @param var1
* The old variable
* @param var2
* The new variable
*/
public void replace(VariableReference var1, VariableReference var2);
/**
* Allows the comparing of Statements between TestCases. I.e. this is a more
* semantic comparison than the one done by equals. E.g. two Variable are
* equal if they are at the same position and they reference to objects of
* the same type.
*
* @param s
* a {@link Statement} object.
* @return a boolean.
*/
public boolean same(Statement s);
/**
* Sets the set of assertions to statement
*
* @param assertions
* a {@link java.util.Set} object.
*/
public void setAssertions(Set assertions);
/**
*
* setRetval
*
*
* @param newRetVal
* a {@link org.evosuite.testcase.variable.VariableReference} object.
*/
public void setRetval(VariableReference newRetVal);
}
© 2015 - 2024 Weber Informatics LLC | Privacy Policy