From: stephan b. <sg...@us...> - 2004-12-26 08:09:20
|
Update of /cvsroot/pclasses/pclasses2/test In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv5467/test Modified Files: in.s11n s11nTest.cpp Log Message: Now uses P::SIO interface. Plugged in streamable proxy for the demo map, to lower the noise. Index: s11nTest.cpp =================================================================== RCS file: /cvsroot/pclasses/pclasses2/test/s11nTest.cpp,v retrieving revision 1.3 retrieving revision 1.4 diff -u -d -r1.3 -r1.4 --- s11nTest.cpp 26 Dec 2004 06:00:55 -0000 1.3 +++ s11nTest.cpp 26 Dec 2004 08:09:07 -0000 1.4 @@ -1,34 +1,46 @@ #include <pclasses/s11n/s11n_debuggering_macros.h> -#include <pclasses/s11n/s11n.h> -#include <pclasses/s11n/s11n_node.h> -#include <pclasses/s11n/io/s11n_io.h> +#include <pclasses/s11n/SIO.h> +#include <pclasses/s11n/pods_streamable.h> #include <pclasses/s11n/list.h> #include <pclasses/s11n/map.h> -#include <pclasses/s11n/pods_streamable.h> #include <pclasses/Util/LexT.h> #include <memory> // auto_ptr #include <cassert> #include <list> #include <map> -#include "FactoryTest.h" // must come after s11n.h - the FactoryTest.h for why +#include "FactoryTest.h" -#define SERIALIZE(Node,SType,SObj) ::P::s11n::serialize< NODE_TYPE >( Node, SObj ) -#define DESERIALIZE(Node,SType) ::P::s11n::deserialize< NODE_TYPE, SType >( Node ) -typedef ::P::s11n::io::data_node_serializer<NODE_TYPE> SerializerBase; +using namespace ::P::SIO; + +typedef std::map<std::string,::P::Util::LexT> TestMapType; + +// install a custom proxy, which doesn't produce as fat +// output as the default one for maps: +#define PS11N_TYPE TestMapType +#define PS11N_TYPE_NAME "TestMapType" +#define PS11N_SERIALIZE_FUNCTOR ::P::s11n::map::streamable_map_serializable_proxy +#include <pclasses/s11n/reg_serializable_traits.h> + + +#define SERIALIZE(Node,SType,SObj) serialize< SType >( Node, SObj ) +#define DESERIALIZE(Node,SType) deserialize< SType >( Node ) +#define SERIALIZER_CLASS_NAME "<!DOCTYPE P::s11n::io::expat_serializer>" +// #define SERIALIZER_CLASS_NAME "expat" bool test_load( const std::string & fn ) { + using namespace ::P::SIO; typedef std::auto_ptr<NODE_TYPE> NAP; - NAP n = NAP( P::s11n::io::load_node<NODE_TYPE>( fn ) ); + NAP n = NAP( loadNode( fn ) ); assert( n.get() && "Failed loading node from file :(" ); if( n.get() ) { - typedef std::auto_ptr<SerializerBase> SAP; - std::string serclass = "expat"; - SAP ser = SAP( ::P::Plugin::pluginManager<SerializerBase>().create( serclass ) ); + typedef std::auto_ptr<SerializerInterface> SAP; + std::string serclass = SERIALIZER_CLASS_NAME; + SAP ser = SAP( ::P::Plugin::pluginManager<SerializerInterface>().create( serclass ) ); assert( ser.get() && "Could not load serializer :(" ); return ser->serialize( *(n.get()), std::cout ); } @@ -38,6 +50,8 @@ /// i wish i could make this a P::App... int main( int argc, char ** argv ) { + using namespace ::P::SIO; + CERR << "P::s11n tests...\n"; if( 2 == argc ) @@ -48,7 +62,7 @@ typedef std::auto_ptr<TheBase> TAP; TAP b1 = TAP( new BType ); NODE_TYPE node; - assert( SERIALIZE(node,TheBase,b1.get() ) ); + assert( SERIALIZE(node,TheBase, *b1.get() ) ); // weird: i shouldn't have to deref that AP. CERR << "Serialize Workie!\n"; NODETR::class_name( node, "CType" ); // should force load of CType.so on next line... @@ -56,9 +70,9 @@ assert( b2.get() && "Deserialize failed :(" ); CERR << "Deser workie: " << b2->classname()<<"\n"; - typedef std::auto_ptr<SerializerBase> SAP; - std::string serclass = "expat"; - SAP ser = SAP( ::P::Plugin::pluginManager<SerializerBase>().create( serclass ) ); + typedef std::auto_ptr<SerializerInterface> SAP; + std::string serclass = SERIALIZER_CLASS_NAME; + SAP ser = SAP( ::P::Plugin::pluginManager<SerializerInterface>().create( serclass ) ); assert( ser.get() && "Could not load serializer :(" ); CERR << "Loaded serializer '"<<serclass<<"'. :)\n"; @@ -67,35 +81,35 @@ using ::P::Util::LexT; typedef std::list<LexT> ListT; - typedef std::map<int,LexT> MapT; ListT list; - MapT map; - LexT tmpval; + TestMapType map; + LexT tmpv; + LexT tmpk; for( int i = 0; i < 10; i++ ) { - tmpval = std::string("this is item #") + LexT(i).str(); - CERR << "Adding ["<<tmpval<<"]\n"; - list.push_back( tmpval ); - map[i] = tmpval; + tmpk = "item" + LexT(i).str(); + // ^^^ reminder: we do this to avoid numeric keys + // in map, because that don't work with XML-compliant Serializers. + tmpv = std::string("this is item #") + LexT(i).str(); + CERR << "Adding ["<<tmpv<<"]\n"; + list.push_back( tmpv ); + map[tmpk] = tmpv; } CERR << "list/map sizes == " << list.size() << " , " << map.size()<<"\n"; - bool worked; CERR << "Containers...\n"; - assert( ::P::s11n::serialize(node,list) ); + assert( serialize(node,list) ); assert( ser->serialize( node, std::cout ) ); list.clear(); - worked = ::P::s11n::deserialize( node, list ); - assert( worked && "deser list failed :(" ); + assert( deserialize( node, list ) && "deser list failed :(" ); - node.clear(); - assert( ::P::s11n::serialize(node,map) ); + NodeTraits::clear(node); + assert( serialize(node,map) ); assert( ser->serialize( node, std::cout ) ); map.clear(); - worked = ::P::s11n::deserialize( node, map ); - assert( worked && "deser map failed :(" ); - + assert( deserialize( node, map ) && "deser map failed :(" ); + NodeTraits::set( node, "i_deserialized_this", "yes" ); CERR << "Deserialized:\n"; CERR << "deser list.size() == " << list.size()<<"\n"; @@ -109,7 +123,7 @@ { CERR << "list["<<at++<<"] = " << (*(lit++))<<"\n"; } - MapT::const_iterator mit = map.begin(); + TestMapType::const_iterator mit = map.begin(); while( mit != map.end() ) { CERR << "map["<<(*mit).first<<"] = "<<(*mit).second<<"\n"; Index: in.s11n =================================================================== RCS file: /cvsroot/pclasses/pclasses2/test/in.s11n,v retrieving revision 1.1 retrieving revision 1.2 diff -u -d -r1.1 -r1.2 --- in.s11n 26 Dec 2004 07:54:10 -0000 1.1 +++ in.s11n 26 Dec 2004 08:09:07 -0000 1.2 @@ -1,83 +1,13 @@ <!DOCTYPE P::s11n::io::expat_serializer> -<s11n_node class="map"> - <pair class="pair"> - <first class="int"> - <v>0</v> - </first> - <second class="LexT"> - <v>this is item #0</v> - </second> - </pair> - <pair class="pair"> - <first class="int"> - <v>1</v> - </first> - <second class="LexT"> - <v>this is item #1</v> - </second> - </pair> - <pair class="pair"> - <first class="int"> - <v>2</v> - </first> - <second class="LexT"> - <v>this is item #2</v> - </second> - </pair> - <pair class="pair"> - <first class="int"> - <v>3</v> - </first> - <second class="LexT"> - <v>this is item #3</v> - </second> - </pair> - <pair class="pair"> - <first class="int"> - <v>4</v> - </first> - <second class="LexT"> - <v>this is item #4</v> - </second> - </pair> - <pair class="pair"> - <first class="int"> - <v>5</v> - </first> - <second class="LexT"> - <v>this is item #5</v> - </second> - </pair> - <pair class="pair"> - <first class="int"> - <v>6</v> - </first> - <second class="LexT"> - <v>this is item #6</v> - </second> - </pair> - <pair class="pair"> - <first class="int"> - <v>7</v> - </first> - <second class="LexT"> - <v>this is item #7</v> - </second> - </pair> - <pair class="pair"> - <first class="int"> - <v>8</v> - </first> - <second class="LexT"> - <v>this is item #8</v> - </second> - </pair> - <pair class="pair"> - <first class="int"> - <v>9</v> - </first> - <second class="LexT"> - <v>this is item #9</v> - </second> - </pair> +<s11n_node class="TestMapType"> + <item0>this is item #0</item0> + <item1>this is item #1</item1> + <item2>this is item #2</item2> + <item3>this is item #3</item3> + <item4>this is item #4</item4> + <item5>this is item #5</item5> + <item6>this is item #6</item6> + <item7>this is item #7</item7> + <item8>this is item #8</item8> + <item9>this is item #9</item9> </s11n_node> |