00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034 #include <lestes/common.hh>
00035 #include <lestes/equality.hh>
00036 #include <lestes/lang/cplus/lex/encoder.hh>
00037 #include <lestes/lang/cplus/lex/encoder_factory.hh>
00038
00039 package(lestes);
00040 package(lang);
00041 package(cplus);
00042 package(lex);
00043
00044 using namespace ::std;
00045
00046
00047
00048
00049
00050
00051
00052
00053 template <ulint Discriminator>
00054 class encoder_test: public encoder {
00055 public:
00056
00057 ptr<ucn_token> read(void);
00058
00059 static ptr< encoder_test<Discriminator> > create(void);
00060 protected:
00061
00062 encoder_test(void);
00063 private:
00064
00065 encoder_test(const encoder_test<Discriminator> &);
00066
00067 encoder_test<Discriminator> &operator=(const encoder_test<Discriminator> &);
00068 };
00069
00070
00071
00072
00073 template <ulint Discriminator>
00074 encoder_test<Discriminator>::encoder_test<Discriminator>(void)
00075 {
00076 }
00077
00078
00079
00080
00081
00082
00083 template <ulint Discriminator>
00084 ptr<ucn_token> encoder_test<Discriminator>::read(void)
00085 {
00086 return ucn_token::create(ucn_token::TOK_NOT_EOF,Discriminator);
00087 }
00088
00089
00090
00091
00092
00093 template <ulint Discriminator>
00094 ptr< encoder_test<Discriminator> > encoder_test<Discriminator>::create(void)
00095 {
00096 return new encoder_test<Discriminator>();
00097 }
00098
00099
00100 typedef encoder_test<1> enc1;
00101
00102 typedef encoder_test<2> enc2;
00103
00104 typedef encoder_test<3> enc3;
00105
00106
00107
00108
00109
00110
00111 void encoder_factory_test(void)
00112 {
00113 ptr<encoder_factory> ef = encoder_factory::instance();
00114
00115
00116 lassert(ef);
00117
00118
00119 lassert(is_equal(ef->summon("first"),ptr<encoder>(NULL)));
00120 lassert(is_equal(ef->summon("second"),ptr<encoder>(NULL)));
00121 lassert(is_equal(ef->summon("third"),ptr<encoder>(NULL)));
00122
00123
00124 ef->insert("first",encoder_factory::encoder_create_adaptor<enc1>);
00125 lassert(!is_equal(ef->summon("first"),ptr<encoder>(NULL)));
00126 lassert(is_equal(ef->summon("second"),ptr<encoder>(NULL)));
00127 lassert(is_equal(ef->summon("third"),ptr<encoder>(NULL)));
00128 lassert(is_equal(ef->summon("first")->read()->value_get(),1U));
00129
00130
00131 ef->insert("second",&encoder_factory::encoder_create_adaptor<enc2>);
00132 lassert(!is_equal(ef->summon("first"),ptr<encoder>(NULL)));
00133 lassert(!is_equal(ef->summon("second"),ptr<encoder>(NULL)));
00134 lassert(is_equal(ef->summon("third"),ptr<encoder>(NULL)));
00135 lassert(is_equal(ef->summon("first")->read()->value_get(),1U));
00136 lassert(is_equal(ef->summon("second")->read()->value_get(),2U));
00137
00138
00139 ef->insert("third",&encoder_factory::encoder_create_adaptor<enc3>);
00140 lassert(!is_equal(ef->summon("first"),ptr<encoder>(NULL)));
00141 lassert(!is_equal(ef->summon("second"),ptr<encoder>(NULL)));
00142 lassert(!is_equal(ef->summon("third"),ptr<encoder>(NULL)));
00143 lassert(is_equal(ef->summon("first")->read()->value_get(),1U));
00144 lassert(is_equal(ef->summon("second")->read()->value_get(),2U));
00145 lassert(is_equal(ef->summon("third")->read()->value_get(),3U));
00146
00147
00148 ef->remove("first");
00149 lassert(is_equal(ef->summon("first"),ptr<encoder>(NULL)));
00150 lassert(!is_equal(ef->summon("second"),ptr<encoder>(NULL)));
00151 lassert(!is_equal(ef->summon("third"),ptr<encoder>(NULL)));
00152 lassert(is_equal(ef->summon("second")->read()->value_get(),2U));
00153 lassert(is_equal(ef->summon("third")->read()->value_get(),3U));
00154
00155 }
00156
00157 end_package(lex);
00158 end_package(cplus);
00159 end_package(lang);
00160 end_package(lestes);
00161
00162
00163
00164
00165
00166
00167 int main(void)
00168 {
00169 ::lestes::lang::cplus::lex::encoder_factory_test();
00170 return 0;
00171 }
00172