org.evosuite.runtime.javaee.TestDataJavaEE Maven / Gradle / Ivy
/**
* 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 .
*/
package org.evosuite.runtime.javaee;
import org.evosuite.runtime.util.Inputs;
import java.util.Collections;
import java.util.Set;
import java.util.concurrent.CopyOnWriteArraySet;
/**
* Singleton class used to keep track what part of the JavaEE container have been accessed
* and that can be useful to generate proper test data
*/
public class TestDataJavaEE {
public static final String HTTP_REQUEST_CONTENT_TYPE= "javaee.servlet.http.contentType";
public static final String HTTP_REQUEST_PARAM = "javaee.servlet.http.param";
public static final String HTTP_REQUEST_PART = "javaee.servlet.http.part";
public static final String HTTP_REQUEST_PRINCIPAL = "javaee.servlet.http.principal";
private static final TestDataJavaEE singleton = new TestDataJavaEE();
/**
* Keep track of all parameters that have been checked in a http servlet
*/
private final Set httpRequestParameters;
/**
* Keep track of all http request dispatchers
*/
private final Set dispatchers;
/**
* Did the SUT check the content type of the request or of any of its parts?
*/
private volatile boolean readContentType;
/**
* Keep track of which parts were asked for.
* The set is {@code null} if no part was ever read, not even with a get all.
*/
private volatile Set partNames;
/**
* Check if there was any servlet that was initialized.
* Note: servlet initialization is automatically added every time
* a new servlet is instantiated with "new"
*
*/
private volatile boolean wasAServletInitialized;
private final Set lookedUpContextNames;
private TestDataJavaEE(){
httpRequestParameters = new CopyOnWriteArraySet<>();
dispatchers = new CopyOnWriteArraySet<>();
lookedUpContextNames = new CopyOnWriteArraySet<>();
readContentType = false;
partNames = null;
}
public static TestDataJavaEE getInstance(){
return singleton;
}
public void reset(){
httpRequestParameters.clear();
dispatchers.clear();
lookedUpContextNames.clear();
readContentType = false;
partNames = null;
wasAServletInitialized = false;
}
public JeeData getJeeData(){
return new JeeData(httpRequestParameters,dispatchers,readContentType,partNames,wasAServletInitialized,lookedUpContextNames);
}
public Set getViewOfLookedUpContextNames(){
return Collections.unmodifiableSet(lookedUpContextNames);
}
public void accessLookUpContextName(String name){
Inputs.checkNull(name);
lookedUpContextNames.add(name);
}
public boolean isWasAServletInitialized() {
return wasAServletInitialized;
}
public void setWasAServletInitialized(boolean wasAServletInitialized) {
this.wasAServletInitialized = wasAServletInitialized;
}
public Set getViewOfHttpRequestParameters(){
return Collections.unmodifiableSet(httpRequestParameters);
}
public Set getViewOfDispatchers(){
return Collections.unmodifiableSet(dispatchers);
}
public Set getViewOfParts(){
if(partNames==null){
return null;
}
return Collections.unmodifiableSet(partNames);
}
public boolean wasContentTypeRead(){
return readContentType;
}
public void accessPart(String name){
if(partNames==null){
partNames = new CopyOnWriteArraySet<>();
}
if(name != null){
partNames.add(name);
}
}
public void accessContentType(){
readContentType = true;
}
public void accessedDispatcher(String dispatcherName) throws IllegalArgumentException{
Inputs.checkNull(dispatcherName);
dispatchers.add(dispatcherName);
}
public void accessedHttpRequestParameter(String param) throws IllegalArgumentException{
Inputs.checkNull(param);
httpRequestParameters.add(param);
}
}