macro_argument.test.cc

Go to the documentation of this file.
00001 /*
00002    The lestes compiler suite
00003    Copyright (C) 2002, 2003, 2004, 2005 Miroslav Tichy
00004    Copyright (C) 2002, 2003, 2004, 2005 Petr Zika
00005    Copyright (C) 2002, 2003, 2004, 2005 Vojtech Hala
00006    Copyright (C) 2002, 2003, 2004, 2005 Jiri Kosina
00007    Copyright (C) 2002, 2003, 2004, 2005 Pavel Sanda
00008    Copyright (C) 2002, 2003, 2004, 2005 Jan Zouhar
00009    Copyright (C) 2002, 2003, 2004, 2005 Rudolf Thomas
00010 
00011    This program is free software; you can redistribute it and/or modify
00012    it under the terms of the GNU General Public License as published by
00013    the Free Software Foundation; version 2 of the License.
00014 
00015    This program is distributed in the hope that it will be useful,
00016    but WITHOUT ANY WARRANTY; without even the implied warranty of
00017    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00018    GNU General Public License for more details.
00019 
00020    See the full text of the GNU General Public License version 2, and
00021    the limitations in the file doc/LICENSE.
00022 
00023    By accepting the license the licensee waives any and all claims
00024    against the copyright holder(s) related in whole or in part to the
00025    work, its use, and/or the inability to use it.
00026  
00027  */
00028 /*! \file
00029   Unit test for class macro_argument.
00030   \author pt
00031 */
00032 #include <lestes/common.hh>
00033 #include <lestes/std/source_location.hh>
00034 #include <lestes/std/ucn_string.hh>
00035 #include <lestes/lang/cplus/lex/macro_argument.hh>
00036 #include <lestes/lang/cplus/lex/token_sequence.hh>
00037 #include <lestes/lang/cplus/lex/pp_token.hh>
00038 #include <string>
00039 
00040 package(lestes);
00041 package(lang);
00042 package(cplus);
00043 package(lex);
00044 
00045 using namespace ::std;
00046 
00047 void macro_argument_test(void)
00048 {
00049         ptr<file_info> fi = file_info::create(string("abc"),NULL);
00050         ptr<source_location> loc = source_location::create(fi,0,0);
00051         
00052         ptr<token_sequence> ts = token_sequence::create();
00053         ts->add_back(pp_token::create(loc,pp_token::TOK_DOT));
00054         ts->add_back(pp_token::create(loc,pp_token::TOK_DOT));
00055         ts->add_back(pp_token::create(loc,pp_token::TOK_FILE_END));
00056 
00057         ts->add_back(pp_token::create(loc,pp_token::TOK_RIGHT_PAR));
00058 
00059         ts->add_back(pp_token::create(loc,pp_token::TOK_RIGHT_PAR));
00060                 
00061         ts->add_back(pp_token::create(loc,pp_token::TOK_HAT));
00062         ts->add_back(pp_token::create(loc,pp_token::TOK_LT));
00063         ts->add_back(pp_token::create(loc,pp_token::TOK_GT));
00064         ts->add_back(pp_token::create(loc,pp_token::TOK_COMMA));
00065 
00066         ts->add_back(pp_token::create(loc,pp_token::TOK_EQ));
00067         ts->add_back(pp_token::create(loc,pp_token::TOK_DOT));
00068         ts->add_back(pp_token::create(loc,pp_token::TOK_RIGHT_PAR));
00069 
00070         ts->add_back(pp_token::create(loc,pp_token::TOK_STAR));
00071         ts->add_back(pp_token::create(loc,pp_token::TOK_LEFT_PAR));
00072         ts->add_back(pp_token::create(loc,pp_token::TOK_EMARK));
00073         ts->add_back(pp_token::create(loc,pp_token::TOK_RIGHT_PAR));
00074         ts->add_back(pp_token::create(loc,pp_token::TOK_QMARK));
00075         ts->add_back(pp_token::create(loc,pp_token::TOK_COMMA));
00076                 
00077         ts->add_back(pp_token::create(loc,pp_token::TOK_LEFT_PAR));
00078         ts->add_back(pp_token::create(loc,pp_token::TOK_COMMA));
00079         ts->add_back(pp_token::create(loc,pp_token::TOK_LEFT_PAR));
00080         ts->add_back(pp_token::create(loc,pp_token::TOK_COMMA));
00081         ts->add_back(pp_token::create(loc,pp_token::TOK_RIGHT_PAR));
00082         ts->add_back(pp_token::create(loc,pp_token::TOK_COMMA));
00083         ts->add_back(pp_token::create(loc,pp_token::TOK_RIGHT_PAR));
00084         ts->add_back(pp_token::create(loc,pp_token::TOK_RIGHT_PAR));
00085 
00086         ptr<token_sequence> os1 = token_sequence::create();
00087         os1->add_back(pp_token::create(loc,pp_token::TOK_FILE_END));
00088         
00089         ptr<token_sequence> os2 = token_sequence::create();
00090         os2->add_back(pp_token::create(loc,pp_token::TOK_FILE_END));
00091         
00092         ptr<token_sequence> os3 = token_sequence::create();
00093         os3->add_back(pp_token::create(loc,pp_token::TOK_HAT));
00094         os3->add_back(pp_token::create(loc,pp_token::TOK_LT));
00095         os3->add_back(pp_token::create(loc,pp_token::TOK_GT));
00096         os3->add_back(pp_token::create(loc,pp_token::TOK_FILE_END));
00097 
00098         ptr<token_sequence> os4 = token_sequence::create();
00099         os4->add_back(pp_token::create(loc,pp_token::TOK_EQ));
00100         os4->add_back(pp_token::create(loc,pp_token::TOK_DOT));
00101         os4->add_back(pp_token::create(loc,pp_token::TOK_FILE_END));
00102 
00103         ptr<token_sequence> os5 = token_sequence::create();
00104         os5->add_back(pp_token::create(loc,pp_token::TOK_STAR));
00105         os5->add_back(pp_token::create(loc,pp_token::TOK_LEFT_PAR));
00106         os5->add_back(pp_token::create(loc,pp_token::TOK_EMARK));
00107         os5->add_back(pp_token::create(loc,pp_token::TOK_RIGHT_PAR));
00108         os5->add_back(pp_token::create(loc,pp_token::TOK_QMARK));
00109         os5->add_back(pp_token::create(loc,pp_token::TOK_FILE_END));
00110 
00111         ptr<token_sequence> os6 = token_sequence::create();
00112         os6->add_back(pp_token::create(loc,pp_token::TOK_LEFT_PAR));
00113         os6->add_back(pp_token::create(loc,pp_token::TOK_COMMA));
00114         os6->add_back(pp_token::create(loc,pp_token::TOK_LEFT_PAR));
00115         os6->add_back(pp_token::create(loc,pp_token::TOK_COMMA));
00116         os6->add_back(pp_token::create(loc,pp_token::TOK_RIGHT_PAR));
00117         os6->add_back(pp_token::create(loc,pp_token::TOK_COMMA));
00118         os6->add_back(pp_token::create(loc,pp_token::TOK_RIGHT_PAR));
00119         os6->add_back(pp_token::create(loc,pp_token::TOK_FILE_END));
00120 
00121         ptr<macro_argument> ma0 = macro_argument::create();
00122         
00123         // created object
00124         lassert(is_equal(ma0->state_get(),macro_argument::BEGIN));
00125         lassert(is_equal(ma0,ma0));
00126         
00127         // eof in argument
00128         lassert(is_equal(ma0->parse(ts,true),macro_argument::ERROR));
00129         lassert(is_equal(ma0->state_get(),macro_argument::DEAD));
00130         lassert(is_equal(ma0,ma0));
00131         // discard the eof
00132         ts->read_front();
00133 
00134         ptr<macro_argument> ma1 = macro_argument::create();
00135   
00136         // empty first argument
00137         lassert(is_equal(ma1->parse(ts,true),macro_argument::EMPTY));
00138         lassert(is_equal(ma1->state_get(),macro_argument::PARSED));
00139         lassert(is_equal(ma1,ma1));
00140 
00141         lassert(is_equal(ma1->nonexpanded_get(),os1));
00142 
00143         ptr<macro_argument> ma2 = macro_argument::create();
00144         lassert(!is_equal(ma2,ma1));
00145         
00146         // empty last argument
00147         lassert(is_equal(ma2->parse(ts,false),macro_argument::LAST));
00148         lassert(is_equal(ma2->state_get(),macro_argument::PARSED));
00149         lassert(is_equal(ma2,ma2));
00150         lassert(is_equal(ma1->nonexpanded_get(),os2));
00151 
00152         ptr<macro_argument> ma3 = macro_argument::create();
00153         
00154         // argument with comma
00155         lassert(is_equal(ma3->parse(ts,true),macro_argument::CONTINUE));
00156         lassert(is_equal(ma3->state_get(),macro_argument::PARSED));
00157         lassert(is_equal(ma3,ma3));
00158         lassert(is_equal(ma3->nonexpanded_get(),os3));
00159 
00160         ptr<macro_argument> ma4 = macro_argument::create();
00161         
00162         // argument with right parenthesis
00163         lassert(is_equal(ma4->parse(ts,true),macro_argument::LAST));
00164         lassert(is_equal(ma4->state_get(),macro_argument::PARSED));
00165         lassert(is_equal(ma4,ma4));
00166         lassert(is_equal(ma4->nonexpanded_get(),os4));
00167 
00168         ptr<macro_argument> ma5 = macro_argument::create();
00169         
00170         // argument with inner parentheses
00171         lassert(is_equal(ma5->parse(ts,true),macro_argument::CONTINUE));
00172         lassert(is_equal(ma5->state_get(),macro_argument::PARSED));
00173         lassert(is_equal(ma5,ma5));
00174         lassert(is_equal(ma5->nonexpanded_get(),os5));
00175         
00176         ptr<macro_argument> ma6 = macro_argument::create();
00177         
00178         // argument with inner parentheses and commas
00179         lassert(is_equal(ma6->parse(ts,true),macro_argument::LAST));
00180         lassert(is_equal(ma6->state_get(),macro_argument::PARSED));
00181         lassert(is_equal(ma6,ma6));
00182         lassert(is_equal(ma6->nonexpanded_get(),os6));
00183         
00184 }
00185 
00186 end_package(lex);
00187 end_package(cplus);
00188 end_package(lang);
00189 end_package(lestes);
00190 
00191 int main(void)
00192 {
00193 	::lestes::lang::cplus::lex::macro_argument_test();
00194         return 0;
00195 }
00196 /* vim: set ft=lestes : */

Generated on Mon Feb 12 18:22:40 2007 for lestes by doxygen 1.5.1-20070107