OSDN Git Service

SchemeLexerの実装により、字句解析部分の作成を完了。
[simplecms/utakata.git] / test / comment_lexer_test.cpp
index 512faa7..ca16b35 100755 (executable)
@@ -5,8 +5,9 @@
 #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;
@@ -34,12 +35,13 @@ TEST_F(CommentLexerTest, OnelineComment) {
   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"));
 }
@@ -51,43 +53,44 @@ TEST_F(CommentLexerTest, SpecialComment) {
   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;
@@ -97,8 +100,9 @@ TEST_F(CommentLexerTest, DatumComment) {
   // 関係上、字句解析ではなく構文解析レベルでのコメントが必要となるため、
   // その判別が必要であるためです。
   // 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"));
 }