Implements assignment parsing
This commit is contained in:
@@ -154,5 +154,42 @@ TEST_CASE( "Parse String Tokens", "[parser]" ) {
|
||||
REQUIRE(boolean->GetValue() == "foo bar");
|
||||
}
|
||||
|
||||
TEST_CASE( "Parse Global Assignment", "[parser]" ) {
|
||||
vector<IToken*> v {
|
||||
new IdentifierToken("foo",0,0),
|
||||
new SimpleToken(TokenKind::AssignmentToken,0,0),
|
||||
new SimpleToken(TokenKind::TrueKeyword,0,0),
|
||||
new SimpleToken(TokenKind::EndOfFile,0,0)
|
||||
};
|
||||
Parser parser = Parser(v, nullptr);
|
||||
auto parsedStatements = parser.Parse() -> GetStatements();
|
||||
REQUIRE(parsedStatements.size() == 1);
|
||||
auto firstStatement = parsedStatements[0];
|
||||
REQUIRE(firstStatement -> GetKind() == ParsedStatementKind::Assignment);
|
||||
auto assignment = (ParsedAssignmentStatement*)firstStatement;
|
||||
REQUIRE(!assignment -> IsLocal());
|
||||
REQUIRE(assignment->GetIdentifier() == "foo");
|
||||
REQUIRE(((LiteralBoolExpression*)assignment->GetExpression()) -> GetValue());
|
||||
}
|
||||
|
||||
TEST_CASE( "Parse local Assignment", "[parser]" ) {
|
||||
vector<IToken*> v {
|
||||
new SimpleToken(TokenKind::LocalKeyword,0,0),
|
||||
new IdentifierToken("foo",0,0),
|
||||
new SimpleToken(TokenKind::AssignmentToken,0,0),
|
||||
new SimpleToken(TokenKind::TrueKeyword,0,0),
|
||||
new SimpleToken(TokenKind::EndOfFile,0,0)
|
||||
};
|
||||
Parser parser = Parser(v, nullptr);
|
||||
auto parsedStatements = parser.Parse() -> GetStatements();
|
||||
REQUIRE(parsedStatements.size() == 1);
|
||||
auto firstStatement = parsedStatements[0];
|
||||
REQUIRE(firstStatement -> GetKind() == ParsedStatementKind::Assignment);
|
||||
auto assignment = (ParsedAssignmentStatement*)firstStatement;
|
||||
REQUIRE(assignment -> IsLocal());
|
||||
REQUIRE(assignment->GetIdentifier() == "foo");
|
||||
REQUIRE(((LiteralBoolExpression*)assignment->GetExpression()) -> GetValue());
|
||||
}
|
||||
|
||||
|
||||
#endif
|
||||
Reference in New Issue
Block a user