Skip to content

Commit 41c2cf2

Browse files
rintaronkcsgexi
authored andcommitted
[Parse] Add test for Lexer::getStateForBeginningOfToken() with Trivia
1 parent dcc37c3 commit 41c2cf2

File tree

1 file changed

+49
-0
lines changed

1 file changed

+49
-0
lines changed

unittests/Parse/LexerTests.cpp

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -260,6 +260,55 @@ TEST_F(LexerTest, RestoreStopAtCodeCompletion) {
260260
ASSERT_EQ(tok::eof, Tok.getKind());
261261
}
262262

263+
TEST_F(LexerTest, RestoreWithTrivia) {
264+
using namespace swift::syntax;
265+
StringRef SourceStr = "aaa \n bbb /*C*/ccc";
266+
267+
LangOptions LangOpts;
268+
SourceManager SourceMgr;
269+
unsigned BufferID = SourceMgr.addMemBufferCopy(SourceStr);
270+
271+
Lexer L(LangOpts, SourceMgr, BufferID, /*Diags=*/nullptr, /*InSILMode=*/false,
272+
CommentRetentionMode::AttachToNextToken,
273+
TriviaRetentionMode::WithTrivia);
274+
275+
Token Tok;
276+
Trivia LeadingTrivia, TrailingTrivia;
277+
278+
L.lex(Tok, LeadingTrivia, TrailingTrivia);
279+
ASSERT_EQ(tok::identifier, Tok.getKind());
280+
ASSERT_EQ("aaa", Tok.getText());
281+
ASSERT_TRUE(Tok.isAtStartOfLine());
282+
ASSERT_EQ(LeadingTrivia, Trivia());
283+
ASSERT_EQ(TrailingTrivia, (Trivia{{TriviaPiece::spaces(1)}}));
284+
285+
L.lex(Tok, LeadingTrivia, TrailingTrivia);
286+
ASSERT_EQ(tok::identifier, Tok.getKind());
287+
ASSERT_EQ("bbb", Tok.getText());
288+
ASSERT_TRUE(Tok.isAtStartOfLine());
289+
ASSERT_EQ(LeadingTrivia,
290+
(Trivia{{TriviaPiece::newlines(1), TriviaPiece::spaces(1)}}));
291+
ASSERT_EQ(TrailingTrivia, (Trivia{{TriviaPiece::spaces(1)}}));
292+
293+
Lexer::State S = L.getStateForBeginningOfToken(Tok, LeadingTrivia);
294+
295+
L.lex(Tok, LeadingTrivia, TrailingTrivia);
296+
ASSERT_EQ(tok::identifier, Tok.getKind());
297+
ASSERT_EQ("ccc", Tok.getText());
298+
ASSERT_FALSE(Tok.isAtStartOfLine());
299+
ASSERT_EQ(LeadingTrivia, (Trivia{{TriviaPiece::blockComment("/*C*/")}}));
300+
ASSERT_EQ(TrailingTrivia, Trivia());
301+
302+
L.restoreState(S);
303+
L.lex(Tok, LeadingTrivia, TrailingTrivia);
304+
ASSERT_EQ(tok::identifier, Tok.getKind());
305+
ASSERT_EQ("bbb", Tok.getText());
306+
ASSERT_TRUE(Tok.isAtStartOfLine());
307+
ASSERT_EQ(LeadingTrivia,
308+
(Trivia{{TriviaPiece::newlines(1), TriviaPiece::spaces(1)}}));
309+
ASSERT_EQ(TrailingTrivia, (Trivia{{TriviaPiece::spaces(1)}}));
310+
}
311+
263312
TEST_F(LexerTest, getLocForStartOfToken) {
264313
const char *Source = "aaa \n \tbbb \"hello\" \"-\\(val)-\"";
265314

0 commit comments

Comments
 (0)