|
@@ -467,45 +467,48 @@ TEST_F(MasterLexerStateTest, basicNumbers) {
|
|
// the tokenizer
|
|
// the tokenizer
|
|
lexer.pushSource(ss);
|
|
lexer.pushSource(ss);
|
|
|
|
|
|
- EXPECT_EQ(&s_number, State::start(lexer, common_options));
|
|
|
|
|
|
+ // Ask the lexer to recognize numbers as well
|
|
|
|
+ const MasterLexer::Options options = common_options | MasterLexer::NUMBER;
|
|
|
|
+
|
|
|
|
+ EXPECT_EQ(&s_number, State::start(lexer, options));
|
|
s_number.handle(lexer);
|
|
s_number.handle(lexer);
|
|
EXPECT_EQ(0, s_number.getToken(lexer).getNumber());
|
|
EXPECT_EQ(0, s_number.getToken(lexer).getNumber());
|
|
|
|
|
|
- EXPECT_EQ(&s_number, State::start(lexer, common_options));
|
|
|
|
|
|
+ EXPECT_EQ(&s_number, State::start(lexer, options));
|
|
s_number.handle(lexer);
|
|
s_number.handle(lexer);
|
|
EXPECT_EQ(1, s_number.getToken(lexer).getNumber());
|
|
EXPECT_EQ(1, s_number.getToken(lexer).getNumber());
|
|
|
|
|
|
- EXPECT_EQ(&s_number, State::start(lexer, common_options));
|
|
|
|
|
|
+ EXPECT_EQ(&s_number, State::start(lexer, options));
|
|
s_number.handle(lexer);
|
|
s_number.handle(lexer);
|
|
EXPECT_EQ(12345, s_number.getToken(lexer).getNumber());
|
|
EXPECT_EQ(12345, s_number.getToken(lexer).getNumber());
|
|
|
|
|
|
- EXPECT_EQ(&s_number, State::start(lexer, common_options));
|
|
|
|
|
|
+ EXPECT_EQ(&s_number, State::start(lexer, options));
|
|
s_number.handle(lexer);
|
|
s_number.handle(lexer);
|
|
EXPECT_EQ(4294967295u, s_number.getToken(lexer).getNumber());
|
|
EXPECT_EQ(4294967295u, s_number.getToken(lexer).getNumber());
|
|
|
|
|
|
- EXPECT_EQ(&s_number, State::start(lexer, common_options));
|
|
|
|
|
|
+ EXPECT_EQ(&s_number, State::start(lexer, options));
|
|
s_number.handle(lexer);
|
|
s_number.handle(lexer);
|
|
EXPECT_EQ(Token::NUMBER_RANGE,
|
|
EXPECT_EQ(Token::NUMBER_RANGE,
|
|
s_number.getToken(lexer).getErrorCode());
|
|
s_number.getToken(lexer).getErrorCode());
|
|
|
|
|
|
- EXPECT_EQ(&s_number, State::start(lexer, common_options));
|
|
|
|
|
|
+ EXPECT_EQ(&s_number, State::start(lexer, options));
|
|
s_number.handle(lexer);
|
|
s_number.handle(lexer);
|
|
EXPECT_EQ(Token::NUMBER_RANGE,
|
|
EXPECT_EQ(Token::NUMBER_RANGE,
|
|
s_number.getToken(lexer).getErrorCode());
|
|
s_number.getToken(lexer).getErrorCode());
|
|
|
|
|
|
- EXPECT_EQ(&s_number, State::start(lexer, common_options));
|
|
|
|
|
|
+ EXPECT_EQ(&s_number, State::start(lexer, options));
|
|
s_number.handle(lexer);
|
|
s_number.handle(lexer);
|
|
EXPECT_EQ(5, s_number.getToken(lexer).getNumber());
|
|
EXPECT_EQ(5, s_number.getToken(lexer).getNumber());
|
|
|
|
|
|
- EXPECT_EQ(&s_number, State::start(lexer, common_options));
|
|
|
|
|
|
+ EXPECT_EQ(&s_number, State::start(lexer, options));
|
|
s_number.handle(lexer);
|
|
s_number.handle(lexer);
|
|
EXPECT_EQ(42, s_number.getToken(lexer).getNumber());
|
|
EXPECT_EQ(42, s_number.getToken(lexer).getNumber());
|
|
|
|
|
|
- EXPECT_EQ(s_null, State::start(lexer, common_options));
|
|
|
|
|
|
+ EXPECT_EQ(s_null, State::start(lexer, options));
|
|
EXPECT_TRUE(s_crlf.wasLastEOL(lexer));
|
|
EXPECT_TRUE(s_crlf.wasLastEOL(lexer));
|
|
EXPECT_EQ(Token::END_OF_LINE, s_crlf.getToken(lexer).getType());
|
|
EXPECT_EQ(Token::END_OF_LINE, s_crlf.getToken(lexer).getType());
|
|
|
|
|
|
- EXPECT_EQ(&s_number, State::start(lexer, common_options));
|
|
|
|
|
|
+ EXPECT_EQ(&s_number, State::start(lexer, options));
|
|
s_number.handle(lexer);
|
|
s_number.handle(lexer);
|
|
EXPECT_EQ(37, s_number.getToken(lexer).getNumber());
|
|
EXPECT_EQ(37, s_number.getToken(lexer).getNumber());
|
|
|
|
|
|
@@ -517,6 +520,8 @@ TEST_F(MasterLexerStateTest, basicNumbers) {
|
|
// Test tokens that look like (or start out as) numbers,
|
|
// Test tokens that look like (or start out as) numbers,
|
|
// but turn out to be strings. Tests include escaped characters.
|
|
// but turn out to be strings. Tests include escaped characters.
|
|
TEST_F(MasterLexerStateTest, stringNumbers) {
|
|
TEST_F(MasterLexerStateTest, stringNumbers) {
|
|
|
|
+ ss << "123 "; // Should be read as a string if the
|
|
|
|
+ // NUMBER option is not given
|
|
ss << "-1 "; // Negative numbers are interpreted
|
|
ss << "-1 "; // Negative numbers are interpreted
|
|
// as strings (unsigned integers only)
|
|
// as strings (unsigned integers only)
|
|
ss << "123abc456 "; // 'Numbers' containing non-digits should
|
|
ss << "123abc456 "; // 'Numbers' containing non-digits should
|
|
@@ -532,45 +537,54 @@ TEST_F(MasterLexerStateTest, stringNumbers) {
|
|
|
|
|
|
lexer.pushSource(ss);
|
|
lexer.pushSource(ss);
|
|
|
|
|
|
|
|
+ // Note that common_options does not include MasterLexer::NUMBER,
|
|
|
|
+ // so the token should be recognized as a string
|
|
EXPECT_EQ(&s_string, State::start(lexer, common_options));
|
|
EXPECT_EQ(&s_string, State::start(lexer, common_options));
|
|
s_string.handle(lexer);
|
|
s_string.handle(lexer);
|
|
|
|
+ stringTokenCheck("123", s_string.getToken(lexer), false);
|
|
|
|
+
|
|
|
|
+ // Ask the lexer to recognize numbers as well
|
|
|
|
+ const MasterLexer::Options options = common_options | MasterLexer::NUMBER;
|
|
|
|
+
|
|
|
|
+ EXPECT_EQ(&s_string, State::start(lexer, options));
|
|
|
|
+ s_string.handle(lexer);
|
|
stringTokenCheck("-1", s_string.getToken(lexer), false);
|
|
stringTokenCheck("-1", s_string.getToken(lexer), false);
|
|
|
|
|
|
// Starts out as a number, but ends up being a string
|
|
// Starts out as a number, but ends up being a string
|
|
- EXPECT_EQ(&s_number, State::start(lexer, common_options));
|
|
|
|
|
|
+ EXPECT_EQ(&s_number, State::start(lexer, options));
|
|
s_number.handle(lexer);
|
|
s_number.handle(lexer);
|
|
stringTokenCheck("123abc456", s_number.getToken(lexer), false);
|
|
stringTokenCheck("123abc456", s_number.getToken(lexer), false);
|
|
|
|
|
|
- EXPECT_EQ(&s_number, State::start(lexer, common_options));
|
|
|
|
|
|
+ EXPECT_EQ(&s_number, State::start(lexer, options));
|
|
s_number.handle(lexer);
|
|
s_number.handle(lexer);
|
|
stringTokenCheck("123\\456", s_number.getToken(lexer), false);
|
|
stringTokenCheck("123\\456", s_number.getToken(lexer), false);
|
|
|
|
|
|
- EXPECT_EQ(&s_number, State::start(lexer, common_options));
|
|
|
|
|
|
+ EXPECT_EQ(&s_number, State::start(lexer, options));
|
|
s_number.handle(lexer); // recognize str, see ' ' at end
|
|
s_number.handle(lexer); // recognize str, see ' ' at end
|
|
stringTokenCheck("3scaped\\ space", s_number.getToken(lexer));
|
|
stringTokenCheck("3scaped\\ space", s_number.getToken(lexer));
|
|
|
|
|
|
- EXPECT_EQ(&s_number, State::start(lexer, common_options));
|
|
|
|
|
|
+ EXPECT_EQ(&s_number, State::start(lexer, options));
|
|
s_number.handle(lexer); // recognize str, see ' ' at end
|
|
s_number.handle(lexer); // recognize str, see ' ' at end
|
|
stringTokenCheck("3scaped\\\ttab", s_number.getToken(lexer));
|
|
stringTokenCheck("3scaped\\\ttab", s_number.getToken(lexer));
|
|
|
|
|
|
- EXPECT_EQ(&s_number, State::start(lexer, common_options));
|
|
|
|
|
|
+ EXPECT_EQ(&s_number, State::start(lexer, options));
|
|
s_number.handle(lexer); // recognize str, see ' ' at end
|
|
s_number.handle(lexer); // recognize str, see ' ' at end
|
|
stringTokenCheck("3scaped\\(paren", s_number.getToken(lexer));
|
|
stringTokenCheck("3scaped\\(paren", s_number.getToken(lexer));
|
|
|
|
|
|
- EXPECT_EQ(&s_number, State::start(lexer, common_options));
|
|
|
|
|
|
+ EXPECT_EQ(&s_number, State::start(lexer, options));
|
|
s_number.handle(lexer); // recognize str, see ' ' at end
|
|
s_number.handle(lexer); // recognize str, see ' ' at end
|
|
stringTokenCheck("3scaped\\)close", s_number.getToken(lexer));
|
|
stringTokenCheck("3scaped\\)close", s_number.getToken(lexer));
|
|
|
|
|
|
- EXPECT_EQ(&s_number, State::start(lexer, common_options));
|
|
|
|
|
|
+ EXPECT_EQ(&s_number, State::start(lexer, options));
|
|
s_number.handle(lexer); // recognize str, see ' ' at end
|
|
s_number.handle(lexer); // recognize str, see ' ' at end
|
|
stringTokenCheck("3scaped\\;comment", s_number.getToken(lexer));
|
|
stringTokenCheck("3scaped\\;comment", s_number.getToken(lexer));
|
|
|
|
|
|
- EXPECT_EQ(&s_number, State::start(lexer, common_options));
|
|
|
|
|
|
+ EXPECT_EQ(&s_number, State::start(lexer, options));
|
|
s_number.handle(lexer); // recognize str, see ' ' in mid
|
|
s_number.handle(lexer); // recognize str, see ' ' in mid
|
|
stringTokenCheck("3scaped\\\\", s_number.getToken(lexer));
|
|
stringTokenCheck("3scaped\\\\", s_number.getToken(lexer));
|
|
|
|
|
|
// Confirm the word that follows the escaped '\' is correctly recognized.
|
|
// Confirm the word that follows the escaped '\' is correctly recognized.
|
|
- EXPECT_EQ(&s_number, State::start(lexer, common_options));
|
|
|
|
|
|
+ EXPECT_EQ(&s_number, State::start(lexer, options));
|
|
s_number.handle(lexer); // recognize str, see ' ' at end
|
|
s_number.handle(lexer); // recognize str, see ' ' at end
|
|
stringTokenCheck("8ackslash", s_number.getToken(lexer));
|
|
stringTokenCheck("8ackslash", s_number.getToken(lexer));
|
|
|
|
|