diff --git a/AlgebraicDataflowArchitectureModel/src/tests/parser/comment/CommentTest.java b/AlgebraicDataflowArchitectureModel/src/tests/parser/comment/CommentTest.java new file mode 100644 index 0000000..5ac3879 --- /dev/null +++ b/AlgebraicDataflowArchitectureModel/src/tests/parser/comment/CommentTest.java @@ -0,0 +1,105 @@ +package tests.parser.comment; + +import models.algebra.Symbol; +import models.algebra.Term; +import models.algebra.Variable; +import models.dataConstraintModel.ChannelMember; +import models.dataConstraintModel.JsonTerm; +import models.dataConstraintModel.ResourcePath; +import models.dataConstraintModel.StateTransition; +import models.dataFlowModel.DataTransferChannel; +import models.dataFlowModel.DataTransferModel; +import org.junit.Test; +import parser.Parser; +import parser.exceptions.*; + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; + +import static org.junit.Assert.assertEquals; + +public class CommentTest { + @Test + public void test() { + try (InputStream in = getClass().getResourceAsStream("WithoutComments.model")) { + assert in != null; + Parser parser = new Parser(new BufferedReader(new InputStreamReader(in))); + try { + DataTransferModel actual = parser.doParse(); + DataTransferModel expected = getExpectedModel(); + // FIXME: Should assert by comparison of object members, not string equality + assertEquals(expected.toString(), actual.toString()); + } catch (ExpectedAssignment | WrongLHSExpression | ExpectedInOrOutOrRefOrSubKeyword | WrongJsonExpression | + WrongPathExpression | ExpectedRightCurlyBracket | ExpectedChannelName | ExpectedStateTransition | + ExpectedRightBracket | ExpectedRHSExpression | WrongRHSExpression | ExpectedEquals | + ExpectedLeftCurlyBracket | ExpectedColon | ExpectedDoubleQuotation | ExpectedChannel e) { + throw new RuntimeException(e); + } + } catch (RuntimeException | IOException e) { + throw new RuntimeException(e); + } + } + + private DataTransferModel getExpectedModel() { + ResourcePath accountsPath = new ResourcePath("accounts"); + ResourcePath accountPath = new ResourcePath(accountsPath, new Variable("accountId")); + ResourcePath usernamePath = new ResourcePath(accountPath, "username"); + ResourcePath emailPath = new ResourcePath(accountPath, "email"); + ResourcePath passwordPath = new ResourcePath(accountPath, "password"); + + DataTransferChannel createAccountChannel = new DataTransferChannel("CreateAccount"); + ChannelMember accountsChannelMember = new ChannelMember(accountsPath); + createAccountChannel.addChannelMemberAsOutput(accountsChannelMember); + + StateTransition transition = new StateTransition(); + transition.setCurStateExpression(getAccountsVariable()); + transition.setMessageExpression(getCreateAccountTerm()); + transition.setNextStateExpression(getInsertTerm()); + accountsChannelMember.setStateTransition(transition); + + DataTransferModel model = new DataTransferModel(); + model.addResourcePath(usernamePath); + model.addResourcePath(emailPath); + model.addResourcePath(passwordPath); + model.addInputChannel(createAccountChannel); + return model; + } + + private Variable getAccountsVariable() { + return new Variable("accounts", DataTransferModel.typeMap); + } + + private Term getCreateAccountTerm() { + Symbol createAccount = new Symbol("createAccount", 4); + Variable accountId = new Variable("accountId", DataTransferModel.typeInt); + Variable username = new Variable("username", DataTransferModel.typeString); + Variable email = new Variable("email", DataTransferModel.typeString); + Variable password = new Variable("password", DataTransferModel.typeString); + Term term = new Term(createAccount); + term.addChild(accountId); + term.addChild(username); + term.addChild(email); + term.addChild(password); + return term; + } + + private Term getInsertTerm() { + Variable accounts = new Variable("accounts"); + Variable accountId = new Variable("accountId"); + JsonTerm jsonBody = new JsonTerm(); + Variable username = new Variable("username"); + Variable email = new Variable("email"); + Variable password = new Variable("password"); + jsonBody.addMember("username", username); + jsonBody.addMember("email", email); + jsonBody.addMember("password", password); + Symbol insert = new Symbol("insert", 3); + Term term = new Term(insert); + term.addChild(accounts); + term.addChild(accountId); + term.addChild(jsonBody); + return term; + } +}