package com.plectix.simulator.subviews;
import static org.junit.Assert.fail;
import java.util.Collection;
import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
import org.junit.runners.Parameterized.Parameters;
import com.plectix.simulator.FileNameCollectionGenerator;
import com.plectix.simulator.OperationModeCollectionGenerator;
import com.plectix.simulator.staticanalysis.subviews.AllSubViewsOfAllAgentsInterface;
import com.plectix.simulator.staticanalysis.subviews.storage.SubViewsInterface;
@RunWith(value = Parameterized.class)
public class TestSubViews {
private static final String prefixSourseModel = InitData.pathForSourseModel;
// private static final String prefixResult = InitData.pathForResult;
private AllSubViewsOfAllAgentsInterface subViews;
private Map<String, Integer> resultNumClassesForAgentsMap;
private Map<String, Integer> resultNumSubViewsForClassesMap;
private Map<String, Integer> testNumClassesForAgentsMap;
private Map<String, Integer> testNumSubViewsForClassesMap;
// private static boolean isConsole = InitData.isPrintinConsoleAndFile;
private final InitTestSubView initTestSubView = new InitTestSubView();
@Parameters
public static Collection<Object[]> configs() {
return OperationModeCollectionGenerator.generate(FileNameCollectionGenerator
.getAllFileNamesWithPathWithModifyName(prefixSourseModel,
"~kappa"),false);
}
public TestSubViews(String count, String patch, Integer opMode) throws Exception {
initTestSubView.initializeSimulation(patch, count, opMode);
init(initTestSubView.getSourcePath());
}
private void init(String soursePath) {
resultNumClassesForAgentsMap = new LinkedHashMap<String, Integer>();
resultNumSubViewsForClassesMap = new LinkedHashMap<String, Integer>();
ParserFileTesterSubViews parser = new ParserFileTesterSubViews(
soursePath);
parser.parseFile(resultNumClassesForAgentsMap,
resultNumSubViewsForClassesMap);
}
@Before
public void setUp() {
subViews = initTestSubView.getSubViews();
}
@Test
public void testSubViews() {
numClassesForAgentsTest();
numSubViewsForClassTest();
}
public void numClassesForAgentsTest() {
Iterator<String> allTypesOfAgents = subViews.getAllTypesIdOfAgents();
initTestNumClassesForAgentMap(allTypesOfAgents);
StringBuffer errorStr = new StringBuffer();
for (String agentName : resultNumClassesForAgentsMap.keySet()) {
Integer resultNumClasses = resultNumClassesForAgentsMap
.get(agentName);
if (testNumClassesForAgentsMap.containsKey(agentName)) {
Integer testNumClasses = testNumClassesForAgentsMap
.get(agentName);
if (resultNumClasses.intValue() != testNumClasses.intValue()) {
String errorString = "[Error] Agent " + agentName
+ " | [file] ClassNum = " + resultNumClasses
+ " <> " + " [test] ClassNum = " + testNumClasses
+ "\n";
errorStr.append(errorString);
}
} else {
String errorString = "[Error] In test has not Agent "
+ agentName + " ClassNum = " + resultNumClasses + "\n";
errorStr.append(errorString);
}
}
if (errorStr.length() > 0) {
fail(errorStr.toString());
}
}
private void initTestNumClassesForAgentMap(Iterator<String> allTypesOfAgents) {
testNumClassesForAgentsMap = new LinkedHashMap<String, Integer>();
while (allTypesOfAgents.hasNext()) {
String agentType = allTypesOfAgents.next();
String agent = subViews.getFullMapOfAgents().get(agentType)
.toString();
Integer numAllSubViews = subViews.getAllSubViewsByType(agentType)
.size();
testNumClassesForAgentsMap.put(agent, numAllSubViews);
// String srtInfo = "[Info] Test Agent " + agent + " Amount = "
// + numAllSubViews;
}
}
public void numSubViewsForClassTest() {
Iterator<String> allTypesOfAgents = subViews.getAllTypesIdOfAgents();
initTestNumSubViewsForClassesMap(allTypesOfAgents);
StringBuffer errorStr = new StringBuffer();
for (String subViewName : resultNumSubViewsForClassesMap.keySet()) {
Integer resultNumSubView = resultNumSubViewsForClassesMap
.get(subViewName);
if (testNumSubViewsForClassesMap.containsKey(subViewName)) {
Integer testNumSubView = testNumSubViewsForClassesMap
.get(subViewName);
if (resultNumSubView.intValue() != testNumSubView.intValue()) {
String errorString = "[Error] SubViews " + subViewName
+ " | [file] SubViewsNum = " + resultNumSubView
+ " <> " + "[test] SubViewsNum = " + testNumSubView
+ "\n";
errorStr.append(errorString);
}
} else {
String errorString = "[Error] In test has not SubViews "
+ subViewName + " SubViewsNum = " + resultNumSubView
+ "\n";
errorStr.append(errorString);
}
}
if (errorStr.length() > 0) {
fail(errorStr.toString());
}
}
private void initTestNumSubViewsForClassesMap(
Iterator<String> allTypesOfAgents) {
testNumSubViewsForClassesMap = new LinkedHashMap<String, Integer>();
while (allTypesOfAgents.hasNext()) {
String agentType = allTypesOfAgents.next();
String agent = subViews.getFullMapOfAgents().get(agentType)
.toString();
if (resultNumClassesForAgentsMap.containsKey(agent)) {
List<SubViewsInterface> allSubViewsClasses = subViews
.getAllSubViewsByType(agentType);
Integer numSubClass = 0;
for (SubViewsInterface subViewsClass : allSubViewsClasses) {
// String subClassName = getClassForAgent(subViewsClass);
numSubClass = numSubClass
+ subViewsClass.getAllSubViews().size();
/*
* testNumSubViewsForClassesMap.put(subClassName,
* numSubClass); String srtInfo = "[Info] Test SubView " +
* subClassName + " Amount = " + numSubClass;
* printConsole(srtInfo);
*/
}
testNumSubViewsForClassesMap.put(agent, numSubClass);
// String srtInfo = "[Info] Test AllSubViews for Agent " + agent
// + " Amount = " + numSubClass;
}
}
}
}