Improved ParserContext tests
This commit is contained in:
@@ -59,57 +59,27 @@ namespace PashaBibko::LXC::Parser
|
|||||||
|
|
||||||
ParserContext ctx(tokens.Result());
|
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();
|
const Lexer::Token* current = ctx.Advance();
|
||||||
ASSERT_FALSE(current == nullptr);
|
EXPECT_TRUE(current->type == results[index]);
|
||||||
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
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -134,5 +104,12 @@ namespace PashaBibko::LXC::Parser
|
|||||||
Lexer::Token::NumLiteral,
|
Lexer::Token::NumLiteral,
|
||||||
Lexer::Token::CloseBrace
|
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