package tests.parseTreeToAST;
import static org.junit.Assert.assertTrue;
import org.junit.Test;
import ast.declarations.IdentifierDecl;
import ast.expressions.AdditiveExpression;
import ast.expressions.AndExpression;
import ast.expressions.AssignmentExpr;
import ast.expressions.BitAndExpression;
import ast.expressions.CallExpression;
import ast.expressions.CastExpression;
import ast.expressions.ConditionalExpression;
import ast.expressions.EqualityExpression;
import ast.expressions.ExclusiveOrExpression;
import ast.expressions.InclusiveOrExpression;
import ast.expressions.MultiplicativeExpression;
import ast.expressions.OrExpression;
import ast.expressions.RelationalExpression;
import ast.expressions.ShiftExpression;
import ast.statements.BlockStarter;
import ast.statements.CompoundStatement;
import ast.statements.ExpressionStatement;
import ast.statements.IdentifierDeclStatement;
public class ExpressionParsingTest
{
@Test
public void testMostBasicAssignment()
{
String input = "x = y;";
CompoundStatement contentItem = (CompoundStatement) FunctionContentTestUtil
.parseAndWalk(input);
ExpressionStatement statementItem = (ExpressionStatement) contentItem
.getStatements().get(0);
AssignmentExpr expr = (AssignmentExpr) statementItem.getExpression();
assertTrue(expr.getLeft().getEscapedCodeStr().equals("x"));
assertTrue(expr.getRight().getEscapedCodeStr().equals("y"));
}
@Test
public void testBasicAssignmentChain()
{
String input = "x = y = z;";
CompoundStatement contentItem = (CompoundStatement) FunctionContentTestUtil
.parseAndWalk(input);
ExpressionStatement statementItem = (ExpressionStatement) contentItem
.getStatements().get(0);
AssignmentExpr expr = (AssignmentExpr) statementItem.getExpression();
assertTrue(expr.getLeft().getEscapedCodeStr().equals("x"));
assertTrue(expr.getRight().getEscapedCodeStr().equals("y = z"));
}
@Test
public void testMostBasicLocalVar()
{
String input = "int x;";
CompoundStatement contentItem = (CompoundStatement) FunctionContentTestUtil
.parseAndWalk(input);
IdentifierDeclStatement statementItem = (IdentifierDeclStatement) contentItem
.getStatements().get(0);
IdentifierDecl identifierDecl = (IdentifierDecl) statementItem
.getIdentifierDeclList().get(0);
assertTrue(identifierDecl.getName().getEscapedCodeStr().equals("x"));
}
@Test
public void testConditionalExpr()
{
String input = "foo = cond? x : y;";
CompoundStatement contentItem = (CompoundStatement) FunctionContentTestUtil
.parseAndWalk(input);
ExpressionStatement statementItem = (ExpressionStatement) contentItem
.getStatements().get(0);
AssignmentExpr expr = (AssignmentExpr) statementItem.getExpression();
ConditionalExpression right = (ConditionalExpression) expr.getRight();
assertTrue(right.getChild(0).getEscapedCodeStr().equals("cond"));
}
@Test
public void testOrExpr()
{
String input = "x || y;";
CompoundStatement contentItem = (CompoundStatement) FunctionContentTestUtil
.parseAndWalk(input);
ExpressionStatement statementItem = (ExpressionStatement) contentItem
.getStatements().get(0);
OrExpression expr = (OrExpression) statementItem.getExpression();
assertTrue(expr.getLeft().getEscapedCodeStr().equals("x"));
}
@Test
public void testAndExpr()
{
String input = "x && y;";
CompoundStatement contentItem = (CompoundStatement) FunctionContentTestUtil
.parseAndWalk(input);
ExpressionStatement statementItem = (ExpressionStatement) contentItem
.getStatements().get(0);
AndExpression expr = (AndExpression) statementItem.getExpression();
assertTrue(expr.getLeft().getEscapedCodeStr().equals("x"));
}
@Test
public void testInclusiveOrExpr()
{
String input = "x | y;";
CompoundStatement contentItem = (CompoundStatement) FunctionContentTestUtil
.parseAndWalk(input);
ExpressionStatement statementItem = (ExpressionStatement) contentItem
.getStatements().get(0);
InclusiveOrExpression expr = (InclusiveOrExpression) statementItem
.getExpression();
assertTrue(expr.getLeft().getEscapedCodeStr().equals("x"));
}
@Test
public void testExclusiveOrExpr()
{
String input = "x ^ y;";
CompoundStatement contentItem = (CompoundStatement) FunctionContentTestUtil
.parseAndWalk(input);
ExpressionStatement statementItem = (ExpressionStatement) contentItem
.getStatements().get(0);
ExclusiveOrExpression expr = (ExclusiveOrExpression) statementItem
.getExpression();
assertTrue(expr.getLeft().getEscapedCodeStr().equals("x"));
}
@Test
public void testBitAndExpr()
{
String input = "if(x & y){};";
CompoundStatement contentItem = (CompoundStatement) FunctionContentTestUtil
.parseAndWalk(input);
BlockStarter starter = (BlockStarter) contentItem.getStatements()
.get(0);
BitAndExpression expr = (BitAndExpression) starter.getCondition()
.getExpression();
assertTrue(expr.getLeft().getEscapedCodeStr().equals("x"));
}
@Test
public void EqualityExpr()
{
String input = "if(x == y){};";
CompoundStatement contentItem = (CompoundStatement) FunctionContentTestUtil
.parseAndWalk(input);
BlockStarter starter = (BlockStarter) contentItem.getStatements()
.get(0);
EqualityExpression expr = (EqualityExpression) starter.getCondition()
.getExpression();
assertTrue(expr.getLeft().getEscapedCodeStr().equals("x"));
}
@Test
public void RelationalExpr()
{
String input = "if(x < y){};";
CompoundStatement contentItem = (CompoundStatement) FunctionContentTestUtil
.parseAndWalk(input);
BlockStarter starter = (BlockStarter) contentItem.getStatements()
.get(0);
RelationalExpression expr = (RelationalExpression) starter
.getCondition().getExpression();
assertTrue(expr.getLeft().getEscapedCodeStr().equals("x"));
}
@Test
public void ShiftExpr()
{
String input = "if(x >> y){};";
CompoundStatement contentItem = (CompoundStatement) FunctionContentTestUtil
.parseAndWalk(input);
BlockStarter starter = (BlockStarter) contentItem.getStatements()
.get(0);
ShiftExpression expr = (ShiftExpression) starter.getCondition()
.getExpression();
assertTrue(expr.getLeft().getEscapedCodeStr().equals("x"));
}
@Test
public void AdditiveExpr()
{
String input = "if(x + y){};";
CompoundStatement contentItem = (CompoundStatement) FunctionContentTestUtil
.parseAndWalk(input);
BlockStarter starter = (BlockStarter) contentItem.getStatements()
.get(0);
AdditiveExpression expr = (AdditiveExpression) starter.getCondition()
.getExpression();
assertTrue(expr.getLeft().getEscapedCodeStr().equals("x"));
}
@Test
public void MultiplicativeExpr()
{
String input = "if(x * y){};";
CompoundStatement contentItem = (CompoundStatement) FunctionContentTestUtil
.parseAndWalk(input);
BlockStarter starter = (BlockStarter) contentItem.getStatements()
.get(0);
MultiplicativeExpression expr = (MultiplicativeExpression) starter
.getCondition().getExpression();
assertTrue(expr.getLeft().getEscapedCodeStr().equals("x"));
}
@Test
public void CastExpr()
{
String input = "if((some_type) y){};";
CompoundStatement contentItem = (CompoundStatement) FunctionContentTestUtil
.parseAndWalk(input);
BlockStarter starter = (BlockStarter) contentItem.getStatements()
.get(0);
CastExpression expr = (CastExpression) starter.getCondition()
.getExpression();
assertTrue(expr.getCastTarget().getEscapedCodeStr().equals("some_type"));
}
@Test
public void funCall()
{
String input = "if(foo()){};";
CompoundStatement contentItem = (CompoundStatement) FunctionContentTestUtil
.parseAndWalk(input);
BlockStarter starter = (BlockStarter) contentItem.getStatements()
.get(0);
CallExpression expr = (CallExpression) starter.getCondition()
.getExpression();
assertTrue(expr.getTarget().getEscapedCodeStr().equals("foo"));
}
}