OSDN Git Service

<identify>、<number>、<boolean>を解釈するそれぞれの部分字句解析を行うLexerを追加。
[simplecms/utakata.git] / test / boolean_lexer_test.cpp
1 #include <test/gtest/gtest.h>
2 #include "lib/textarrayformat.h"
3 #include "src/lexer/boolean_lexer.h"
4 #include "src/encoding_reader.h"
5 #include "src/string_reader.h"
6 #include "src/unicode.h"
7 #include "lib/scoped_ptr.h"
8 #include "src/utf8_transcoder.h"
9 #include "src/lexeme.h"
10
11 namespace textarrayformat = utility::textarrayformat;
12 namespace lexer = utakata::lexer;
13 namespace unicode = utakata::unicode;
14 namespace reader = utakata::reader;
15 namespace transcoder = utakata::transcoder;
16
17 class BooleanLexerTest : public ::testing::Test {
18  protected:
19   virtual void SetUp() {
20     gen.reset(new textarrayformat::TextArrayGenerator("========="));
21     gen->Punctuate("#t #T #f #F #fd #!");
22   }
23
24   akebono::scoped_ptr<textarrayformat::TextArrayGenerator> gen;
25 };
26
27 TEST_F(BooleanLexerTest, BooleanCheck) {
28   textarrayformat::TextArrayReader textarray(*gen);
29
30   reader::StringReader sr(textarray.GetBlockAt(0));
31   reader::EncodingReader reader(&sr, new transcoder::UTF8Transcoder);
32
33   lexer::BooleanLexer lexer;
34   akebono::scoped_ptr<lexer::Lexeme> l(lexer.Lex(&reader));
35   EXPECT_TRUE(l.get() != NULL);
36   EXPECT_TRUE(l->string() == unicode::Convert("#t"));
37   EXPECT_EQ(l->string().GetSize(), 2);
38   EXPECT_EQ(l->type(), lexer::Lexeme::kBoolean);
39
40   reader.Read();
41   l.reset(lexer.Lex(&reader));
42   EXPECT_TRUE(l.get() != NULL);
43   EXPECT_TRUE(l->string() == unicode::Convert("#T"));
44   EXPECT_EQ(l->string().GetSize(), 2);
45   EXPECT_EQ(l->type(), lexer::Lexeme::kBoolean);
46
47   reader.Read();
48   l.reset(lexer.Lex(&reader));
49   EXPECT_TRUE(l.get() != NULL);
50   EXPECT_TRUE(l->string() == unicode::Convert("#f"));
51   EXPECT_EQ(l->string().GetSize(), 2);
52   EXPECT_EQ(l->type(), lexer::Lexeme::kBoolean);
53
54   reader.Read();
55   l.reset(lexer.Lex(&reader));
56   EXPECT_TRUE(l.get() != NULL);
57   EXPECT_TRUE(l->string() == unicode::Convert("#F"));
58   EXPECT_EQ(l->string().GetSize(), 2);
59   EXPECT_EQ(l->type(), lexer::Lexeme::kBoolean);
60
61   reader.Read();
62   EXPECT_THROW(lexer.Lex(&reader), lexer::LexException);
63
64   reader.Read(2);
65   l.reset(lexer.Lex(&reader));
66   EXPECT_TRUE(l.get() ==  NULL);
67 }
68
69 int main(int argc, char** argv) {
70   testing::InitGoogleTest(&argc, argv);
71   return RUN_ALL_TESTS();
72 }