package tests;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.util.HashMap;
import org.junit.Test;
import algorithms.DataTransferModelAnalyzer;
import models.Node;
import models.dataFlowModel.*;
import parser.Parser;
import parser.exceptions.ExpectedAssignment;
import parser.exceptions.ExpectedChannel;
import parser.exceptions.ExpectedChannelName;
import parser.exceptions.ExpectedColon;
import parser.exceptions.ExpectedDoubleQuotation;
import parser.exceptions.ExpectedEquals;
import parser.exceptions.ExpectedInOrOutOrRefOrSubKeyword;
import parser.exceptions.ExpectedLeftCurlyBracket;
import parser.exceptions.ExpectedRHSExpression;
import parser.exceptions.ExpectedRightBracket;
import parser.exceptions.ExpectedRightCurlyBracket;
import parser.exceptions.ExpectedStateTransition;
import parser.exceptions.WrongJsonExpression;
import parser.exceptions.WrongLHSExpression;
import parser.exceptions.WrongPathExpression;
import parser.exceptions.WrongRHSExpression;
public class DataStorageNecessityTest {
@Test
public void test() {
File file = new File("models/POS2.model");
HashMap<String, Boolean> exprectedNecessity = new HashMap<>();
exprectedNecessity.put("history", true);
exprectedNecessity.put("total", true);
exprectedNecessity.put("points", false);
exprectedNecessity.put("payment", false);
try {
Parser parser = new Parser(new BufferedReader(new FileReader(file)));
DataTransferModel model;
try {
model = parser.doParse();
System.out.println(model);
DataFlowGraph graph = DataTransferModelAnalyzer.createDataFlowGraphWithStateStoringAttribute(model);
for (Node n: graph.getNodes()) {
if (n instanceof ResourceNode) {
ResourceNode resource = (ResourceNode) n;
if((StoreAttribute) resource.getAttribute() != null) {
String resName = resource.getResourceName();
boolean necessity = ((StoreAttribute) resource.getAttribute()).isNeeded();
System.out.println(resName + ":" + necessity);
assertNotNull(exprectedNecessity.get(resName));
assertEquals(necessity, exprectedNecessity.get(resName));
}
}
}
} catch (ExpectedChannel | ExpectedChannelName | ExpectedLeftCurlyBracket | ExpectedInOrOutOrRefOrSubKeyword
| ExpectedStateTransition | ExpectedEquals | ExpectedRHSExpression | WrongLHSExpression
| WrongRHSExpression | ExpectedRightBracket | ExpectedAssignment | ExpectedRightCurlyBracket | WrongPathExpression | WrongJsonExpression | ExpectedColon | ExpectedDoubleQuotation e) {
e.printStackTrace();
}
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}
}