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"
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;
17 class BooleanLexerTest : public ::testing::Test {
19 virtual void SetUp() {
20 gen.reset(new textarrayformat::TextArrayGenerator("========="));
21 gen->Punctuate("#t #T #f #F #fd #!");
24 akebono::scoped_ptr<textarrayformat::TextArrayGenerator> gen;
27 TEST_F(BooleanLexerTest, BooleanCheck) {
28 textarrayformat::TextArrayReader textarray(*gen);
30 reader::StringReader sr(textarray.GetBlockAt(0));
31 reader::EncodingReader reader(&sr, new transcoder::UTF8Transcoder);
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);
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);
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);
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);
62 EXPECT_THROW(lexer.Lex(&reader), lexer::LexException);
65 l.reset(lexer.Lex(&reader));
66 EXPECT_TRUE(l.get() == NULL);
69 int main(int argc, char** argv) {
70 testing::InitGoogleTest(&argc, argv);
71 return RUN_ALL_TESTS();