OSDN Git Service

-- lexerからdelimiterの判別部分を取り出し、抽象化を行った。
[simplecms/utakata.git] / test / lexer_test.cpp
1 #include <iostream>
2 #include <sstream>
3 #include <string>
4 #include <functional>
5
6
7 #include "../simpletest.h"
8
9 #include "../TextArrayFormat.h"
10 #include "../utf8.h"
11 #include "../lexer.h"
12 #include "../lexeme.h"
13 #include "../lexeme_id.h"
14
15
16 using namespace std;
17 using namespace utakata;
18
19 bool lexer_test(smart_ptr<simpletest::SimpleTestAsserter> asserter)
20 {
21     std::stringstream ss;
22     ss << "==========" << endl;
23     ss << "(hoge)" << endl;
24
25     textarrayformat::TextArrayReader reader(ss);
26     smart_ptr<istream> formats(new stringstream(reader.get()));
27     smart_ptr<utakata::utf8::UTF8InputStream> st;
28     st.add(new utakata::utf8::UTF8InputStream(formats));
29     
30     utakata::lexer::Lexer lexer;
31
32     smart_ptr<lexeme::ILexeme> m(lexer.lex(st));
33     asserter->check(m->toString()->toStr(), "(");
34
35     lexeme::IDProxy idp;
36     asserter->check(m->getID(), idp->openParenthesis);
37
38     m = lexer.lex(st);
39     asserter->check(m->getID(), idp->string);
40
41     m = lexer.lex(st);
42     asserter->check(m->getID(), idp->closeParenthesis);
43
44     // ここで終了しているはず。EOFの状態から実行されると、EOFのIDを持った
45     // lexemeが返される。
46     m = lexer.lex(st);
47     asserter->check(m->getID(), idp->eof);
48     
49     return false;
50 }
51
52 int main(int argc, char *argv[])
53 {
54     simpletest::SimpleTestSuite suite("main lexer test");
55     suite.addTester(sfcr::screate(lexer_test, suite.getAsserter()));
56 //     suite.addTester(sfcr::screate(utf8_string_test, suite.getAsserter()));
57 //     suite.addTester(sfcr::screate(utf8_string_util_test, suite.getAsserter()));
58     suite.run();
59     return 0;
60 }