package com.plectix.simulator.updates;
import static org.junit.Assert.assertFalse;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.Collection;
import java.util.List;
import java.util.Map;
import org.junit.Test;
import org.junit.runners.Parameterized.Parameters;
import com.plectix.simulator.OperationModeCollectionGenerator;
import com.plectix.simulator.interfaces.ConnectedComponentInterface;
import com.plectix.simulator.interfaces.ObservableConnectedComponentInterface;
import com.plectix.simulator.parser.SimulationDataFormatException;
import com.plectix.simulator.simulationclasses.injections.Injection;
import com.plectix.simulator.simulator.ThreadLocalData;
import com.plectix.simulator.staticanalysis.Site;
import com.plectix.simulator.util.Failer;
import com.plectix.simulator.util.QuantityDataParser;
public class TestNegativeUpdate extends TestUpdate {
private static final String separator = File.separator;
private static final String myPrefixFileName = "test.data" + separator
+ "negativeUpdate" + separator;
private String myTestFileName = "";
private Map<String, Integer> myObsInjectionsQuantity;
private Map<String, Integer> myLHSInjectionsQuantity;
private final Failer myFailer = new Failer();
@Parameters
public static Collection<Object[]> regExValues() {
return OperationModeCollectionGenerator.generate(getAllTestFileNames(myPrefixFileName),true);
}
public TestNegativeUpdate(String fileName, Integer opMode) {
super(fileName, opMode);
myTestFileName = fileName;
myFailer.loadTestFile(myTestFileName);
}
@Test
public void testLHS() {
List<ConnectedComponentInterface> leftHand = getActiveRule()
.getLeftHandSide();
for (ConnectedComponentInterface cc : leftHand) {
Collection<Injection> componentInjections = cc.getInjectionsList();
if (!lhsIsEmpty(leftHand)) {
myFailer.assertEquals("LHS injections", myLHSInjectionsQuantity
.get(myTestFileName), (int) cc.getInjectionsWeight());
for (Injection injection : getCurrentInjectionsList()) {
assertFalse(cc.getInjectionsList().contains(injection));
for (Site site : injection.getChangedSites()) {
myFailer.assertEmpty("LHS lifts", site.getLift());
}
}
} else {
myFailer.assertTrue("LHS injections", (componentInjections
.size() == 1)
&& (componentInjections.contains(ThreadLocalData
.getEmptyInjection())));
}
}
}
@Test
public void testObs() {
for (ObservableConnectedComponentInterface cc : getInitializator().getObservables()) {
myFailer.assertEquals("Observables injections",
myObsInjectionsQuantity.get(myTestFileName), (int)cc
.getInjectionsWeight());
}
}
@Override
public boolean isDoingPositive() {
return false;
}
@Override
public String getPrefixFileName() {
return myPrefixFileName;
}
@Override
public void init() throws FileNotFoundException, SimulationDataFormatException, IOException {
myObsInjectionsQuantity = (new QuantityDataParser(myPrefixFileName
+ "ObsInjectionsData" + DEFAULT_EXTENSION_FILE))
.parse();
myLHSInjectionsQuantity = (new QuantityDataParser(myPrefixFileName
+ "LHSInjectionsData" + DEFAULT_EXTENSION_FILE))
.parse();
}
}