{
std::stringstream ss;
ss << "==========" << endl;
- ss << "(hoge 12 \"hoge\")" << endl;
+ ss << "(hoge 12 \"hoge\" )" << endl;
textarrayformat::TextArrayReader reader(ss);
smart_ptr<istream> formats(new stringstream(reader.get()));
return asserter->isOk();
}
+bool lexer_test2(smart_ptr<simpletest::SimpleTestAsserter> asserter)
+{
+ std::stringstream ss;
+ ss << "==========" << endl;
+ ss << ",@(hoge 12 `(hoge) 'huga)" << endl;
+
+ textarrayformat::TextArrayReader reader(ss);
+ smart_ptr<istream> formats(new stringstream(reader.get()));
+ smart_ptr<utakata::utf8::UTF8InputStream> st;
+ st.add(new utakata::utf8::UTF8InputStream(formats));
+
+ utakata::lexer::Lexer lexer;
+
+ smart_ptr<lexeme::ILexeme> m(lexer.lex(st));
+ asserter->check(m->toString()->toStr(), ",@");
+
+ lexeme::IDProxy idp;
+ m = lexer.lex(st);
+ asserter->check(m->getID(), idp->openParenthesis, "open paren");
+
+ m = lexer.lex(st);
+ asserter->check(m->getID(), idp->identifier, "identifier");
+
+ m = lexer.lex(st);
+ asserter->check(m->getID(), idp->number, "number");
+
+ m = lexer.lex(st);
+ asserter->check(m->getID(), idp->backquote, "back quote");
+
+ m = lexer.lex(st);
+ asserter->check(m->getID(), idp->openParenthesis, "open paren2");
+
+ m = lexer.lex(st);
+ asserter->check(m->getID(), idp->identifier, "identifier2");
+
+ m = lexer.lex(st);
+ asserter->check(m->getID(), idp->closeParenthesis, "close");
+
+ m = lexer.lex(st);
+ asserter->check(m->getID(), idp->quote, "quote");
+
+ m = lexer.lex(st);
+ asserter->check(m->getID(), idp->identifier, "identifier2");
+
+ m = lexer.lex(st);
+ asserter->check(m->getID(), idp->closeParenthesis, "close");
+
+ // ここで終了しているはず。EOFの状態から実行されると、EOFのIDを持った
+ // lexemeが返される。
+ m = lexer.lex(st);
+ asserter->check(m->getID(), idp->eof, "eof");
+
+ return asserter->isOk();
+}
+
+bool lexer_test3(smart_ptr<simpletest::SimpleTestAsserter> asserter)
+{
+ std::stringstream ss;
+ ss << "==========" << endl;
+ ss << "#'(hoge #,12 #`(hoge) 'huga) ; comment" << endl;
+ ss << "hoge" << endl;
+
+ textarrayformat::TextArrayReader reader(ss);
+ smart_ptr<istream> formats(new stringstream(reader.get()));
+ smart_ptr<utakata::utf8::UTF8InputStream> st;
+ st.add(new utakata::utf8::UTF8InputStream(formats));
+
+ utakata::lexer::Lexer lexer;
+
+ smart_ptr<lexeme::ILexeme> m(lexer.lex(st));
+ asserter->check(m->toString()->toStr(), "#'");
+
+ lexeme::IDProxy idp;
+ m = lexer.lex(st);
+ asserter->check(m->getID(), idp->openParenthesis, "open paren");
+
+ m = lexer.lex(st);
+ asserter->check(m->getID(), idp->identifier, "identifier");
+
+ m = lexer.lex(st);
+ asserter->check(m->toString()->toStr(), "#,");
+ asserter->check(m->getID(), idp->unsyntax, "unsyntax");
+
+ m = lexer.lex(st);
+ asserter->check(m->getID(), idp->number, "number");
+
+ m = lexer.lex(st);
+ asserter->check(m->getID(), idp->quasiSyntax, "quasi syntax");
+
+ m = lexer.lex(st);
+ asserter->check(m->getID(), idp->openParenthesis, "open paren2");
+
+ m = lexer.lex(st);
+ asserter->check(m->getID(), idp->identifier, "identifier2");
+
+ m = lexer.lex(st);
+ asserter->check(m->getID(), idp->closeParenthesis, "close");
+
+ m = lexer.lex(st);
+ asserter->check(m->getID(), idp->quote, "quote");
+
+ m = lexer.lex(st);
+ asserter->check(m->getID(), idp->identifier, "identifier2");
+
+ m = lexer.lex(st);
+ asserter->check(m->getID(), idp->closeParenthesis, "close");
+
+ m = lexer.lex(st);
+ asserter->check(m->getID(), idp->identifier, "identifier3");
+
+
+ // ここで終了しているはず。EOFの状態から実行されると、EOFのIDを持った
+ // lexemeが返される。
+ m = lexer.lex(st);
+ asserter->check(m->getID(), idp->eof, "eof");
+
+ return asserter->isOk();
+}
+
+
int main(int argc, char *argv[])
{
simpletest::SimpleTestSuite suite("main lexer test");
suite.addTester(sfcr::screate(lexer_test, suite.getAsserter()));
-// suite.addTester(sfcr::screate(utf8_string_test, suite.getAsserter()));
-// suite.addTester(sfcr::screate(utf8_string_util_test, suite.getAsserter()));
+ suite.addTester(sfcr::screate(lexer_test2, suite.getAsserter()));
+ suite.addTester(sfcr::screate(lexer_test3, suite.getAsserter()));
suite.run();
return 0;
}