#include "src/string_reader.h"
#include "src/unicode.h"
#include "lib/scoped_ptr.h"
+#include "lib/smart_ptr.h"
#include "src/utf8_transcoder.h"
-#include "src/lexeme.h"
+#include "src/lexer/token.h"
namespace textarrayformat = utility::textarrayformat;
namespace lexer = utakata::lexer;
reader::StringReader sr(textarray.GetBlockAt(0));
reader::EncodingReader reader(&sr, new transcoder::UTF8Transcoder);
+ akebono::smart_ptr<lexer::Token> l;
lexer::CommentLexer lexer;
- EXPECT_FALSE(lexer.Lex(&reader));
+ EXPECT_FALSE(lexer.Lex(&reader, l));
reader.Read(7);
- akebono::scoped_ptr<lexer::Lexeme> l(lexer.Lex(&reader));
- EXPECT_TRUE(l.get() == NULL);
+ EXPECT_TRUE(lexer.Lex(&reader, l));
+ EXPECT_TRUE(l.is_null());
unicode::UniString st(unicode::Convert(reader.Read(4)));
EXPECT_TRUE(st == unicode::UniString("huga"));
}
reader::EncodingReader reader(&sr, new transcoder::UTF8Transcoder);
lexer::CommentLexer lexer;
- akebono::scoped_ptr<lexer::Lexeme> l(lexer.Lex(&reader));
+ akebono::smart_ptr<lexer::Token> l;
+ EXPECT_TRUE(lexer.Lex(&reader, l));
- EXPECT_TRUE(l.get() != NULL);
- EXPECT_EQ(l->type(), lexer::Lexeme::kSpecialComment);
+ EXPECT_EQ(l->type(), lexer::Token::kSpecialComment);
reader.Read();
EXPECT_TRUE(reader.IsEof());
}
TEST_F(CommentLexerTest, BlockCommentNoNested) {
textarrayformat::TextArrayReader textarray(*gen);
- akebono::scoped_ptr<lexer::Lexeme> l;
+
reader::StringReader sr(textarray.GetBlockAt(2));
reader::EncodingReader reader(&sr, new transcoder::UTF8Transcoder);
lexer::CommentLexer lexer;
- l.reset(lexer.Lex(&reader));
+ akebono::smart_ptr<lexer::Token> l;
+ EXPECT_TRUE(lexer.Lex(&reader, l));
- EXPECT_TRUE(l.get() == NULL);
unicode::UniString tmp(unicode::Convert(reader.Read(2)));
EXPECT_TRUE(tmp == unicode::Convert("ss"));
}
TEST_F(CommentLexerTest, NestedBlockComment) {
textarrayformat::TextArrayReader textarray(*gen);
- akebono::scoped_ptr<lexer::Lexeme> l;
+
reader::StringReader sr(textarray.GetBlockAt(3));
reader::EncodingReader reader(&sr, new transcoder::UTF8Transcoder);
lexer::CommentLexer lexer;
- l.reset(lexer.Lex(&reader));
- EXPECT_TRUE(lexer.Lex(&reader) == NULL);
+ akebono::smart_ptr<lexer::Token> l;
+ EXPECT_TRUE(lexer.Lex(&reader, l));
+
unicode::UniString tmp(unicode::Convert(reader.Read(3)));
EXPECT_TRUE(tmp == unicode::Convert("123"));
}
TEST_F(CommentLexerTest, DatumComment) {
textarrayformat::TextArrayReader textarray(*gen);
- akebono::scoped_ptr<lexer::Lexeme> l;
+ akebono::smart_ptr<lexer::Token> l;
reader::StringReader sr(textarray.GetBlockAt(4));
reader::EncodingReader reader(&sr, new transcoder::UTF8Transcoder);
lexer::CommentLexer lexer;
// 関係上、字句解析ではなく構文解析レベルでのコメントが必要となるため、
// その判別が必要であるためです。
// datum commentは、その性質上、幾重にもネストする可能性があります。
- l.reset(lexer.Lex(&reader));
- EXPECT_TRUE(l.get() != NULL);
+ EXPECT_TRUE(lexer.Lex(&reader, l));
+
+ EXPECT_EQ(l->type(), lexer::Token::kDatumComment);
unicode::UniString tmp(unicode::Convert(reader.Read(4)));
EXPECT_TRUE(tmp == unicode::Convert("data"));
}