Improved ParserContext tests
This commit is contained in:
@@ -59,57 +59,27 @@ namespace PashaBibko::LXC::Parser
|
||||
|
||||
ParserContext ctx(tokens.Result());
|
||||
|
||||
for (size_t idx = 0; idx < 10; idx++)
|
||||
static const Lexer::Token::TokenType results[] =
|
||||
{
|
||||
Lexer::Token::OpenCrocodile,
|
||||
Lexer::Token::Identifier,
|
||||
Lexer::Token::CloseCrocodile,
|
||||
Lexer::Token::Identifier,
|
||||
Lexer::Token::OpenParen,
|
||||
Lexer::Token::CloseParen,
|
||||
Lexer::Token::OpenBrace,
|
||||
Lexer::Token::Return,
|
||||
Lexer::Token::NumLiteral,
|
||||
Lexer::Token::CloseBrace
|
||||
};
|
||||
|
||||
std::size_t resultLength = tokens.Result().size();
|
||||
EXPECT_TRUE(resultLength == 11);
|
||||
|
||||
for (std::size_t index = 0; index < resultLength - 1; index++)
|
||||
{
|
||||
const Lexer::Token* current = ctx.Advance();
|
||||
ASSERT_FALSE(current == nullptr);
|
||||
const Lexer::Token::TokenType cType = current->type;
|
||||
|
||||
switch (idx)
|
||||
{
|
||||
case 0:
|
||||
EXPECT_TRUE(cType == Lexer::Token::OpenCrocodile);
|
||||
break;
|
||||
|
||||
case 1:
|
||||
EXPECT_TRUE(cType == Lexer::Token::Identifier);
|
||||
break;
|
||||
|
||||
case 2:
|
||||
EXPECT_TRUE(cType == Lexer::Token::CloseCrocodile);
|
||||
break;
|
||||
|
||||
case 3:
|
||||
EXPECT_TRUE(cType == Lexer::Token::Identifier);
|
||||
break;
|
||||
|
||||
case 4:
|
||||
EXPECT_TRUE(cType == Lexer::Token::OpenParen);
|
||||
break;
|
||||
|
||||
case 5:
|
||||
EXPECT_TRUE(cType == Lexer::Token::CloseParen);
|
||||
break;
|
||||
|
||||
case 6:
|
||||
EXPECT_TRUE(cType == Lexer::Token::OpenBrace);
|
||||
break;
|
||||
|
||||
case 7:
|
||||
EXPECT_TRUE(cType == Lexer::Token::Return);
|
||||
break;
|
||||
|
||||
case 8:
|
||||
EXPECT_TRUE(cType == Lexer::Token::NumLiteral);
|
||||
break;
|
||||
|
||||
case 9:
|
||||
EXPECT_TRUE(cType == Lexer::Token::CloseBrace);
|
||||
break;
|
||||
|
||||
default:
|
||||
ASSERT_FALSE(false); // There were two many tokens generated by the lexer
|
||||
}
|
||||
EXPECT_TRUE(current->type == results[index]);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -134,5 +104,12 @@ namespace PashaBibko::LXC::Parser
|
||||
Lexer::Token::NumLiteral,
|
||||
Lexer::Token::CloseBrace
|
||||
}));
|
||||
|
||||
ASSERT_FALSE(ctx.Expect(std::array
|
||||
{
|
||||
Lexer::Token::FunctionDef,
|
||||
Lexer::Token::OpenCrocodile,
|
||||
Lexer::Token::NumLiteral
|
||||
}));
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user