diff options
| -rw-r--r-- | slicer/slicer/modelParts.cpp | 9 | ||||
| -rw-r--r-- | slicer/slicer/modelParts.h | 35 | ||||
| -rw-r--r-- | slicer/test/initial/int.xml | 2 | ||||
| -rw-r--r-- | slicer/test/initial/int2.json | 1 | ||||
| -rw-r--r-- | slicer/test/initial/string.xml | 2 | ||||
| -rw-r--r-- | slicer/test/initial/string2.json | 1 | ||||
| -rw-r--r-- | slicer/test/serializers.cpp | 27 | 
7 files changed, 59 insertions, 18 deletions
diff --git a/slicer/slicer/modelParts.cpp b/slicer/slicer/modelParts.cpp index 80d90cf..e2711a1 100644 --- a/slicer/slicer/modelParts.cpp +++ b/slicer/slicer/modelParts.cpp @@ -90,5 +90,14 @@ namespace Slicer {  	{  		return emptyMetadata;  	} + +	template<> std::string Slicer::ModelPartForRoot<std::string>::rootName = "String"; +	template<> std::string Slicer::ModelPartForRoot<bool>::rootName = "Boolean"; +	template<> std::string Slicer::ModelPartForRoot<Ice::Float>::rootName = "Float"; +	template<> std::string Slicer::ModelPartForRoot<Ice::Double>::rootName = "Double"; +	template<> std::string Slicer::ModelPartForRoot<Ice::Byte>::rootName = "Byte"; +	template<> std::string Slicer::ModelPartForRoot<Ice::Short>::rootName = "Short"; +	template<> std::string Slicer::ModelPartForRoot<Ice::Int>::rootName = "Int"; +	template<> std::string Slicer::ModelPartForRoot<Ice::Long>::rootName = "Long";  } diff --git a/slicer/slicer/modelParts.h b/slicer/slicer/modelParts.h index 7cc6332..388fe05 100644 --- a/slicer/slicer/modelParts.h +++ b/slicer/slicer/modelParts.h @@ -115,16 +115,28 @@ namespace Slicer {  			virtual const Metadata & GetMetadata() const = 0;  	}; -#define templateMODELPARTFOR(Type, ModelPart) \ +#define templateMODELPARTFOR(Type) \  	template <class T> ModelPartPtr ModelPartFor(Type & t); \  	template <class T> ModelPartPtr ModelPartFor(Type * t); -	templateMODELPARTFOR(IceInternal::Handle<T>, ModelPartForClass); -	templateMODELPARTFOR(std::vector<T>, ModelPartForSequence); -	templateMODELPARTFOR(std::list<T>, ModelPartForSequence); +#define MODELPARTFOR(Type) \ +	ModelPartPtr ModelPartFor(Type & t); \ +	ModelPartPtr ModelPartFor(Type * t); +	templateMODELPARTFOR(IceInternal::Handle<T>); +	templateMODELPARTFOR(std::vector<T>); +	templateMODELPARTFOR(std::list<T>);  	template <class K, class V> ModelPartPtr ModelPartFor(std::map<K, V> & t);  	template <class K, class V> ModelPartPtr ModelPartFor(std::map<K, V> * t); -	templateMODELPARTFOR(T, ModelPartForStruct); +	MODELPARTFOR(std::string); +	MODELPARTFOR(bool); +	MODELPARTFOR(Ice::Float); +	MODELPARTFOR(Ice::Double); +	MODELPARTFOR(Ice::Byte); +	MODELPARTFOR(Ice::Short); +	MODELPARTFOR(Ice::Int); +	MODELPARTFOR(Ice::Long); +	templateMODELPARTFOR(T);  #undef templateMODELPARTFOR +#undef MODELPARTFOR  	class ModelPart : public IceUtil::Shared {  		public: @@ -591,27 +603,14 @@ namespace Slicer {  #define templateMODELPARTFOR(Type, ModelPart) \  	template <class T> ModelPartPtr ModelPartFor(Type & t) { return new ModelPart< Type >(t); } \  	template <class T> ModelPartPtr ModelPartFor(Type * t) { return new ModelPart< Type >(t); } -#define MODELPARTFOR(Type, ModelPart) \ -	ModelPartPtr ModelPartFor(Type & t); \ -	ModelPartPtr ModelPartFor(Type * t); -  	templateMODELPARTFOR(IceInternal::Handle<T>, ModelPartForClass);  	templateMODELPARTFOR(std::vector<T>, ModelPartForSequence);  	templateMODELPARTFOR(std::list<T>, ModelPartForSequence);  	template <class K, class V> ModelPartPtr ModelPartFor(std::map<K, V> & t) { return new ModelPartForDictionary< std::map<K, V> >(t); } \  	template <class K, class V> ModelPartPtr ModelPartFor(std::map<K, V> * t) { return new ModelPartForDictionary< std::map<K, V> >(t); } \ -	MODELPARTFOR(std::string, ModelPartForSimple); -	MODELPARTFOR(bool, ModelPartForSimple); -	MODELPARTFOR(Ice::Float, ModelPartForSimple); -	MODELPARTFOR(Ice::Double, ModelPartForSimple); -	MODELPARTFOR(Ice::Byte, ModelPartForSimple); -	MODELPARTFOR(Ice::Short, ModelPartForSimple); -	MODELPARTFOR(Ice::Int, ModelPartForSimple); -	MODELPARTFOR(Ice::Long, ModelPartForSimple);  	// Everything else is a struct?  	templateMODELPARTFOR(T, ModelPartForStruct);  #undef templateMODELPARTFOR -#undef MODELPARTFOR  }  #endif diff --git a/slicer/test/initial/int.xml b/slicer/test/initial/int.xml new file mode 100644 index 0000000..af15a80 --- /dev/null +++ b/slicer/test/initial/int.xml @@ -0,0 +1,2 @@ +<?xml version="1.0" encoding="UTF-8"?> +<Int>27</Int> diff --git a/slicer/test/initial/int2.json b/slicer/test/initial/int2.json new file mode 100644 index 0000000..a5c750f --- /dev/null +++ b/slicer/test/initial/int2.json @@ -0,0 +1 @@ +27
\ No newline at end of file diff --git a/slicer/test/initial/string.xml b/slicer/test/initial/string.xml new file mode 100644 index 0000000..8812534 --- /dev/null +++ b/slicer/test/initial/string.xml @@ -0,0 +1,2 @@ +<?xml version="1.0" encoding="UTF-8"?> +<String>test string</String> diff --git a/slicer/test/initial/string2.json b/slicer/test/initial/string2.json new file mode 100644 index 0000000..31825f5 --- /dev/null +++ b/slicer/test/initial/string2.json @@ -0,0 +1 @@ +"test string"
\ No newline at end of file diff --git a/slicer/test/serializers.cpp b/slicer/test/serializers.cpp index 107a2ba..12dc37b 100644 --- a/slicer/test/serializers.cpp +++ b/slicer/test/serializers.cpp @@ -197,6 +197,13 @@ checkStruct(const TestModule::StructType & st)  	BOOST_REQUIRE_EQUAL(st.b, 13);  } +template<class T> +void +checkAssertEq(const T & expected, const T & actual) +{ +	BOOST_REQUIRE_EQUAL(expected, actual); +} +  xmlpp::Document *  readXml(const fs::path & path)  { @@ -255,6 +262,26 @@ BOOST_AUTO_TEST_CASE( structtype_json )  	verifyByFile<TestModule::StructType, Slicer::JsonFileDeserializer>("struct2.json", checkStruct);  } +BOOST_AUTO_TEST_CASE( simplestring_xml ) +{ +	verifyByFile<std::string, Slicer::XmlFileDeserializer>("string.xml", boost::bind(checkAssertEq<std::string>, "test string", _1)); +} + +BOOST_AUTO_TEST_CASE( simpleint_xml ) +{ +	verifyByFile<Ice::Int, Slicer::XmlFileDeserializer>("int.xml", boost::bind(checkAssertEq<Ice::Int>, 27, _1)); +} + +BOOST_AUTO_TEST_CASE( simplestring_json ) +{ +	verifyByFile<std::string, Slicer::JsonFileDeserializer>("string2.json", boost::bind(checkAssertEq<std::string>, "test string", _1)); +} + +BOOST_AUTO_TEST_CASE( simpleint_json ) +{ +	verifyByFile<Ice::Int, Slicer::JsonFileDeserializer>("int2.json", boost::bind(checkAssertEq<Ice::Int>, 27, _1)); +} +  BOOST_AUTO_TEST_CASE( sequenceOfClass_xml )  {  	verifyByFile<TestModule::Classes, Slicer::XmlFileDeserializer>("seqOfClass.xml", checkSeqOfClass);  | 
