1 #include <test/gtest/gtest.h>
2 #include "lib/textarrayformat.h"
3 #include "src/lexer/charactor_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 "lib/smart_ptr.h"
9 #include "src/utf8_transcoder.h"
10 #include "src/lexer/token.h"
12 namespace textarrayformat = utility::textarrayformat;
13 namespace lexer = utakata::lexer;
14 namespace unicode = utakata::unicode;
15 namespace reader = utakata::reader;
16 namespace transcoder = utakata::transcoder;
18 class CharactorLexerTest : public ::testing::Test {
20 virtual void SetUp() {
21 gen.reset(new textarrayformat::TextArrayGenerator("========="));
22 gen->Punctuate("#\\a #\\z #\\x( #\\xo");
23 gen->Punctuate("#\\x001 #\\x7f8f");
24 gen->Punctuate("#\\nul");
25 gen->Punctuate("#\\alarm");
26 gen->Punctuate("#\\backspace");
27 gen->Punctuate("#\\tab #\\linefeed");
28 gen->Punctuate("#\\newline #\\vtab #\\page");
29 gen->Punctuate(std::string("#\\return #\\esc") + std::string("\n")
30 + std::string("#\\space"));
31 gen->Punctuate("#\\delete");
34 akebono::scoped_ptr<textarrayformat::TextArrayGenerator> gen;
37 TEST_F(CharactorLexerTest, SingleCharactorLex) {
38 textarrayformat::TextArrayReader textarray(*gen);
40 reader::StringReader sr(textarray.GetBlockAt(0));
41 reader::EncodingReader reader(&sr, new transcoder::UTF8Transcoder);
43 lexer::CharactorLexer lexer;
44 akebono::smart_ptr<lexer::Token> l(lexer.Lex(&reader));
45 EXPECT_TRUE(l.get() != NULL);
46 EXPECT_EQ(l->string().At(0).rawcode(), 'a');
47 EXPECT_EQ(l->string().GetSize(), 1);
48 EXPECT_EQ(l->type(), lexer::Token::kCharactor);
51 l = lexer.Lex(&reader);
52 EXPECT_TRUE(l.get() != NULL);
53 EXPECT_EQ(l->string().At(0).rawcode(), 'z');
54 EXPECT_EQ(l->string().GetSize(), 1);
55 EXPECT_EQ(l->type(), lexer::Token::kCharactor);
58 l = lexer.Lex(&reader);
59 EXPECT_TRUE(l.get() != NULL);
60 EXPECT_EQ(l->string().At(0).rawcode(), 'x');
61 EXPECT_EQ(l->string().GetSize(), 1);
62 EXPECT_EQ(l->type(), lexer::Token::kCharactor);
65 EXPECT_THROW(lexer.Lex(&reader), lexer::LexException);
68 TEST_F(CharactorLexerTest, HexCharactorTest) {
69 textarrayformat::TextArrayReader textarray(*gen);
71 reader::StringReader sr(textarray.GetBlockAt(1));
72 reader::EncodingReader reader(&sr, new transcoder::UTF8Transcoder);
74 lexer::CharactorLexer lexer;
75 akebono::smart_ptr<lexer::Token> l;
77 l = lexer.Lex(&reader);
78 EXPECT_TRUE(l.get() != NULL);
79 EXPECT_EQ(l->string().At(0).rawcode(), 0x01);
80 EXPECT_EQ(l->string().GetSize(), 1);
81 EXPECT_EQ(l->type(), lexer::Token::kCharactor);
84 l = lexer.Lex(&reader);
85 EXPECT_TRUE(l.get() != NULL);
86 EXPECT_EQ(l->string().At(0).rawcode(), 0x7f8f);
87 EXPECT_EQ(l->string().GetSize(), 1);
88 EXPECT_EQ(l->type(), lexer::Token::kCharactor);
91 TEST_F(CharactorLexerTest, NameLexingNul) {
92 textarrayformat::TextArrayReader textarray(*gen);
93 akebono::smart_ptr<lexer::Token> l;
95 reader::StringReader sr(textarray.GetBlockAt(2));
96 reader::EncodingReader reader(&sr, new transcoder::UTF8Transcoder);
97 lexer::CharactorLexer lexer;
99 l = lexer.Lex(&reader);
100 EXPECT_TRUE(l.get() != NULL);
101 EXPECT_EQ(l->string().At(0).rawcode(), 0x0);
102 EXPECT_EQ(l->string().GetSize(), 1);
106 reader::StringReader sr("#\\null");
107 reader::EncodingReader reader(&sr, new transcoder::UTF8Transcoder);
108 lexer::CharactorLexer lexer;
110 EXPECT_THROW(lexer.Lex(&reader), lexer::LexException);
114 reader::StringReader sr("#\\nu");
115 reader::EncodingReader reader(&sr, new transcoder::UTF8Transcoder);
116 lexer::CharactorLexer lexer;
117 EXPECT_THROW(lexer.Lex(&reader), lexer::LexException);
121 TEST_F(CharactorLexerTest, NameLexingAlarm) {
122 textarrayformat::TextArrayReader textarray(*gen);
123 akebono::smart_ptr<lexer::Token> l;
125 reader::StringReader sr(textarray.GetBlockAt(3));
126 reader::EncodingReader reader(&sr, new transcoder::UTF8Transcoder);
127 lexer::CharactorLexer lexer;
129 l = lexer.Lex(&reader);
130 EXPECT_TRUE(l.get() != NULL);
131 EXPECT_EQ(l->string().At(0).rawcode(), 0x07);
132 EXPECT_EQ(l->string().GetSize(), 1);
136 reader::StringReader sr("#\\alar");
137 reader::EncodingReader reader(&sr, new transcoder::UTF8Transcoder);
138 lexer::CharactorLexer lexer;
140 EXPECT_THROW(lexer.Lex(&reader), lexer::LexException);
144 reader::StringReader sr("#\\alarms");
145 reader::EncodingReader reader(&sr, new transcoder::UTF8Transcoder);
146 lexer::CharactorLexer lexer;
147 EXPECT_THROW(lexer.Lex(&reader), lexer::LexException);
151 TEST_F(CharactorLexerTest, NameLexingBackspace) {
152 textarrayformat::TextArrayReader textarray(*gen);
153 akebono::smart_ptr<lexer::Token> l;
155 reader::StringReader sr(textarray.GetBlockAt(4));
156 reader::EncodingReader reader(&sr, new transcoder::UTF8Transcoder);
157 lexer::CharactorLexer lexer;
159 l = lexer.Lex(&reader);
160 EXPECT_TRUE(l.get() != NULL);
161 EXPECT_EQ(l->string().At(0).rawcode(), 0x08);
162 EXPECT_EQ(l->string().GetSize(), 1);
166 reader::StringReader sr("#\\Backspace");
167 reader::EncodingReader reader(&sr, new transcoder::UTF8Transcoder);
168 lexer::CharactorLexer lexer;
170 EXPECT_THROW(lexer.Lex(&reader), lexer::LexException);
174 reader::StringReader sr("#\\backspa");
175 reader::EncodingReader reader(&sr, new transcoder::UTF8Transcoder);
176 lexer::CharactorLexer lexer;
177 EXPECT_THROW(lexer.Lex(&reader), lexer::LexException);
181 TEST_F(CharactorLexerTest, NameLexingTabAndLinefeed) {
182 textarrayformat::TextArrayReader textarray(*gen);
183 akebono::smart_ptr<lexer::Token> l;
185 reader::StringReader sr(textarray.GetBlockAt(5));
186 reader::EncodingReader reader(&sr, new transcoder::UTF8Transcoder);
187 lexer::CharactorLexer lexer;
189 l = lexer.Lex(&reader);
190 EXPECT_TRUE(l.get() != NULL);
191 EXPECT_EQ(l->string().At(0).rawcode(), 0x09);
192 EXPECT_EQ(l->string().GetSize(), 1);
195 l = lexer.Lex(&reader);
196 EXPECT_TRUE(l.get() != NULL);
197 EXPECT_EQ(l->string().At(0).rawcode(), 0x0a);
198 EXPECT_EQ(l->string().GetSize(), 1);
202 reader::StringReader sr("#\\Tab");
203 reader::EncodingReader reader(&sr, new transcoder::UTF8Transcoder);
204 lexer::CharactorLexer lexer;
206 EXPECT_THROW(lexer.Lex(&reader), lexer::LexException);
210 reader::StringReader sr("#\\line");
211 reader::EncodingReader reader(&sr, new transcoder::UTF8Transcoder);
212 lexer::CharactorLexer lexer;
213 EXPECT_THROW(lexer.Lex(&reader), lexer::LexException);
217 TEST_F(CharactorLexerTest, NameLexing) {
218 textarrayformat::TextArrayReader textarray(*gen);
219 akebono::smart_ptr<lexer::Token> l;
221 reader::StringReader sr(textarray.GetBlockAt(6));
222 reader::EncodingReader reader(&sr, new transcoder::UTF8Transcoder);
223 lexer::CharactorLexer lexer;
225 l = lexer.Lex(&reader);
226 EXPECT_TRUE(l.get() != NULL);
227 EXPECT_EQ(l->string().At(0).rawcode(), 0x0A);
228 EXPECT_EQ(l->string().GetSize(), 1);
231 l = lexer.Lex(&reader);
232 EXPECT_TRUE(l.get() != NULL);
233 EXPECT_EQ(l->string().At(0).rawcode(), 0x0B);
234 EXPECT_EQ(l->string().GetSize(), 1);
237 l = lexer.Lex(&reader);
238 EXPECT_TRUE(l.get() != NULL);
239 EXPECT_EQ(l->string().At(0).rawcode(), 0x0C);
240 EXPECT_EQ(l->string().GetSize(), 1);
244 reader::StringReader sr(textarray.GetBlockAt(7));
245 reader::EncodingReader reader(&sr, new transcoder::UTF8Transcoder);
246 lexer::CharactorLexer lexer;
248 l = lexer.Lex(&reader);
249 EXPECT_TRUE(l.get() != NULL);
250 EXPECT_EQ(l->string().At(0).rawcode(), 0x0D);
251 EXPECT_EQ(l->string().GetSize(), 1);
254 l = lexer.Lex(&reader);
255 EXPECT_TRUE(l.get() != NULL);
256 EXPECT_EQ(l->string().At(0).rawcode(), 0x1B);
257 EXPECT_EQ(l->string().GetSize(), 1);
260 l = lexer.Lex(&reader);
261 EXPECT_TRUE(l.get() != NULL);
262 EXPECT_EQ(l->string().At(0).rawcode(), 0x20);
263 EXPECT_EQ(l->string().GetSize(), 1);
267 TEST_F(CharactorLexerTest, NameLexingDelete) {
268 textarrayformat::TextArrayReader textarray(*gen);
269 akebono::smart_ptr<lexer::Token> l;
271 reader::StringReader sr(textarray.GetBlockAt(8));
272 reader::EncodingReader reader(&sr, new transcoder::UTF8Transcoder);
273 lexer::CharactorLexer lexer;
275 l = lexer.Lex(&reader);
276 EXPECT_TRUE(l.get() != NULL);
277 EXPECT_EQ(l->string().At(0).rawcode(), 0x7f);
278 EXPECT_EQ(l->string().GetSize(), 1);
282 reader::StringReader sr("#\\del");
283 reader::EncodingReader reader(&sr, new transcoder::UTF8Transcoder);
284 lexer::CharactorLexer lexer;
286 EXPECT_THROW(lexer.Lex(&reader), lexer::LexException);
290 reader::StringReader sr("#\\Delete");
291 reader::EncodingReader reader(&sr, new transcoder::UTF8Transcoder);
292 lexer::CharactorLexer lexer;
293 EXPECT_THROW(lexer.Lex(&reader), lexer::LexException);
297 int main(int argc, char** argv) {
298 testing::InitGoogleTest(&argc, argv);
299 return RUN_ALL_TESTS();