package com.plectix.simulator.ruleapplication; import static org.junit.Assert.fail; import java.io.File; import java.util.Collection; import java.util.List; import org.junit.Test; import org.junit.runner.RunWith; import org.junit.runners.Parameterized; import org.junit.runners.Parameterized.Parameters; import com.plectix.simulator.OperationModeCollectionGenerator; import com.plectix.simulator.interfaces.ConnectedComponentInterface; import com.plectix.simulator.simulationclasses.injections.Injection; import com.plectix.simulator.simulationclasses.solution.OperationMode; import com.plectix.simulator.simulator.SimulationData; import com.plectix.simulator.simulator.UpdatesPerformer; import com.plectix.simulator.staticanalysis.Rule; import com.plectix.simulator.staticanalysis.stories.storage.StoryStorageException; import com.plectix.simulator.util.CComponentComparator; import com.plectix.simulator.util.Converter; @RunWith(value = Parameterized.class) public class RunActionTest extends InitTestAction { private static final String separator = File.separator; private static String FilePath = "test.data" + separator + "actions" + separator; private Rule activeRule; private final Integer opMode; @Parameters public static Collection<Object[]> regExValues() { return OperationModeCollectionGenerator.generate(getAllTestFileNames(FilePath),true); } public RunActionTest(String fileName, Integer opMode) { super(FilePath + fileName, opMode); this.opMode = opMode; } @Test public void test() throws StoryStorageException { List<Injection> injectionsList = run(); activeRule = getActiveRule(); List<ConnectedComponentInterface> lhs = activeRule.getLeftHandSide(); SimulationData simulationData = getSimulationData(); apply(injectionsList); if (simulationData.getSimulationArguments().getOperationMode() != OperationMode.FOURTH) { UpdatesPerformer.doNegativeUpdate(injectionsList); simulationData.getKappaSystem().doPositiveUpdate(activeRule, injectionsList); } simulationData.getKappaSystem().getSolution().flushPoolContent( activeRule.getPool()); List<ConnectedComponentInterface> rhs = activeRule.getRightHandSide(); simulationData = getSimulationData(); Collection<ConnectedComponentInterface> solution = simulationData .getKappaSystem().getSolution().split(); if (rhs == null) { if (lhs == null) fail("operation mode: " + opMode + "\nuncorrect rule"); else { if (solution.size() != (lhs.size())) fail("operation mode: " + opMode + "\nuncorrect size of solution"); } } else if (solution.size() != (rhs.size() + lhs.size())) fail("operation mode: " + opMode + "\nuncorrect size of solution"); compareWithSolution(rhs, solution, "rhs"); compareWithSolution(lhs, solution, "lhs"); } private void compareWithSolution(List<ConnectedComponentInterface> listCC, Collection<ConnectedComponentInterface> solutionCC, String ruleName) { ConnectedComponentInterface foundCC; if (listCC != null) { for (ConnectedComponentInterface cc : listCC) { foundCC = null; if ((foundCC = CComponentComparator.findComponent(cc, solutionCC)) == null) { fail("operation mode: " + opMode + "\nNot found connected component from " + ruleName + ":" + Converter.toString(cc)); } else { solutionCC.remove(foundCC); } } } } }