import static org.junit.Assert.assertTrue;
import java.util.LinkedList;
import java.util.List;
import java.util.Set;
import javax.naming.InvalidNameException;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import easysm.Constants;
import easysm.datatypes.Name;
import easysm.datatypes.Value;
import easysm.datatypes.information.EnumerationInfo;
import easysm.datatypes.information.LiteralInfo;
import easysm.datatypes.information.ProjectInfo;
import easysm.datatypes.information.StateObserverInfo;
import easysm.executors.Main;
import easysm.factories.ListFactory;
import easysm.factories.SetFactory;
import easysm.stores.Enumeration;
import easysm.stores.Row;
import easysm.stores.StateObserver;
import easysm.stores.Type;
/**
* @author Federica Lupi
* @author Marta Semeria
*/
public class StateTableTests
{
Main main;
Name stPino;
Name stGino;
Name stTino;
@Before
public void setUp()
{
main = new Main(false);
Name name = null;
try {
name = new Name("Test");
stPino = new Name("Pino");
stGino = new Name("Gino");
stTino = new Name("Tino");
} catch (InvalidNameException e) {
//
}
ProjectInfo projectInfo = new ProjectInfo(name, "Test", "Test");
main.doNewProject(projectInfo);
}
@After
public void tearDown()
{
main = null;
}
@Test
public void Main_doGenerateStates_OneValidTable_FinalState()
{
List<StateObserver> usedSet = main.stateObservers().soList();
main.doSelectUsedSO(usedSet);
main.doGenerateStateTable();
List<Row> rows = main.stateTable().rows();
assertTrue(rows.size() == 2);
List<Value> values = new LinkedList<Value>();
values.add(new Value(Constants.TRUE_REPR));
Row rowTrue = new Row(values, Constants.IMPOSSIBLE_NAME);
assertTrue(rows.get(0).equals(rowTrue));
values.clear();
values.add(new Value(Constants.FALSE_REPR));
Row rowFalse = new Row(values, Constants.IMPOSSIBLE_NAME);
assertTrue(rows.get(1).equals(rowFalse));
}
@Test
public void Main_doGenerateStates_OneValidTable_OneState()
{
StateObserverInfo soInfo = new StateObserverInfo(stPino, Type.BOOLEAN, null);
main.doAddStateObserver(soInfo);
List<StateObserver> usedSet = ListFactory.createList(StateObserver.class);
usedSet.add(new StateObserver(soInfo));
main.doSelectUsedSO(usedSet);
main.doGenerateStateTable();
List<Row> rows = main.stateTable().rows();
assertTrue(rows.size() == 2);
List<Value> values = new LinkedList<Value>();
values.add(new Value(Constants.TRUE_REPR));
Row rowTrue = new Row(values, Constants.IMPOSSIBLE_NAME);
assertTrue(rows.get(0).equals(rowTrue));
values.clear();
values.add(new Value(Constants.FALSE_REPR));
Row rowFalse = new Row(values, Constants.IMPOSSIBLE_NAME);
assertTrue(rows.get(1).equals(rowFalse));
}
@Test
public void Main_doGenerateStates_OneValidTable_ThreeState()
{
main.doAddStateObserver(new StateObserverInfo(stPino, Type.BOOLEAN, null));
main.doAddStateObserver(new StateObserverInfo(stGino, Type.BOOLEAN, null));
List<StateObserver> usedSet = main.stateObservers().soList();
main.doSelectUsedSO(usedSet);
main.doGenerateStateTable();
Value True = new Value(Constants.TRUE_REPR);
Value False = new Value(Constants.FALSE_REPR);
List<Value> values = new LinkedList<Value>();
values.add(True);
values.add(True);
values.add(True);
Row row0 = new Row(values, Constants.IMPOSSIBLE_NAME);
values = new LinkedList<Value>();
values.add(True);
values.add(True);
values.add(False);
Row row1 = new Row(values, Constants.IMPOSSIBLE_NAME);
values = new LinkedList<Value>();
values.add(True);
values.add(False);
values.add(True);
Row row2 = new Row(values, Constants.IMPOSSIBLE_NAME);
values = new LinkedList<Value>();
values.add(True);
values.add(False);
values.add(False);
Row row3 = new Row(values, Constants.IMPOSSIBLE_NAME);
values = new LinkedList<Value>();
values.add(False);
values.add(True);
values.add(True);
Row row4 = new Row(values, Constants.IMPOSSIBLE_NAME);
values = new LinkedList<Value>();
values.add(False);
values.add(True);
values.add(False);
Row row5 = new Row(values, Constants.IMPOSSIBLE_NAME);
values = new LinkedList<Value>();
values.add(False);
values.add(False);
values.add(True);
Row row6 = new Row(values, Constants.IMPOSSIBLE_NAME);
values = new LinkedList<Value>();
values.add(False);
values.add(False);
values.add(False);
Row row7 = new Row(values, Constants.IMPOSSIBLE_NAME);
Row[] rows = new Row[] { row0, row1, row2, row3, row4, row5, row6, row7 };
List<Row> rowState = main.stateTable().rows();
assertTrue(rowState.size() == 8);
for (int i = 0; i < 8; i++) {
assertTrue(rowState.get(i).equals(rows[i]));
}
}
@Test
public void Main_doGenerateStates_OneValidTable_EnumState()
{
Set<LiteralInfo> literals = SetFactory.createSet(LiteralInfo.class);
literals.add(new LiteralInfo(stPino));
literals.add(new LiteralInfo(stGino));
EnumerationInfo eInfo = new EnumerationInfo(stTino, literals);
Enumeration e = new Enumeration(eInfo);
main.doAddStateObserver(new StateObserverInfo(stGino, Type.enumAsType(e), null));
List<StateObserver> usedSet = main.stateObservers().soList();
main.doSelectUsedSO(usedSet);
main.doGenerateStateTable();
List<Row> rows = main.stateTable().rows();
assertTrue(rows.size() == 4);
Value True = new Value(Constants.TRUE_REPR);
Value False = new Value(Constants.FALSE_REPR);
Value pino = new Value(stPino.toString());
Value gino = new Value(stGino.toString());
List<Value> values = new LinkedList<Value>();
values.add(True);
values.add(pino);
Row rowTT = new Row(values, Constants.IMPOSSIBLE_NAME);
assertTrue(rows.get(0).equals(rowTT));
values.clear();
values.add(True);
values.add(gino);
Row rowTF = new Row(values, Constants.IMPOSSIBLE_NAME);
assertTrue(rows.get(1).equals(rowTF));
values.clear();
values.add(False);
values.add(pino);
Row rowFT = new Row(values, Constants.IMPOSSIBLE_NAME);
assertTrue(rows.get(2).equals(rowFT));
values.clear();
values.add(False);
values.add(gino);
Row rowFF = new Row(values, Constants.IMPOSSIBLE_NAME);
assertTrue(rows.get(3).equals(rowFF));
}
}