summaryrefslogtreecommitdiff
path: root/slicer/test/run-slicer.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'slicer/test/run-slicer.cpp')
-rw-r--r--slicer/test/run-slicer.cpp61
1 files changed, 59 insertions, 2 deletions
diff --git a/slicer/test/run-slicer.cpp b/slicer/test/run-slicer.cpp
index 6a73736..897d9ee 100644
--- a/slicer/test/run-slicer.cpp
+++ b/slicer/test/run-slicer.cpp
@@ -5,10 +5,66 @@
#include <boost/filesystem/operations.hpp>
#include <boost/format.hpp>
#include <boost/function.hpp>
+#include <boost/assert.hpp>
#include <types.h>
namespace fs = boost::filesystem;
+template<typename T, typename Serializer>
+void
+verify(const fs::path & root, const fs::path & tmp, const fs::path & infile, const boost::function<void(const T &)> & check = NULL)
+{
+ const fs::path input = root / "initial" / infile;
+ const fs::path output = tmp / infile;
+
+ fprintf(stderr, "%s : Deserialize\n", input.string().c_str());
+ IceInternal::Handle<T> p = Slicer::Deserialize<Serializer, T>(input);
+ fprintf(stderr, "%s : Check1\n", input.string().c_str());
+ if (check) check(*p);
+ fprintf(stderr, "%s : Serialize -> %s\n", input.string().c_str(), output.string().c_str());
+ Slicer::Serialize<Serializer>(p, output);
+ fprintf(stderr, "%s : Check2\n", input.string().c_str());
+ if (check) check(*p);
+ fprintf(stderr, "%s : OK\n", input.string().c_str());
+}
+
+void
+checkOptionals_notset(const TestModule::Optionals & opts)
+{
+ BOOST_ASSERT(!opts.optSimple);
+ BOOST_ASSERT(!opts.optStruct);
+ BOOST_ASSERT(!opts.optClass);
+ BOOST_ASSERT(!opts.optSeq);
+ BOOST_ASSERT(!opts.optDict);
+}
+
+void
+checkOptionals_areset(const TestModule::Optionals & opts)
+{
+ BOOST_ASSERT(opts.optSimple);
+ BOOST_ASSERT(opts.optSimple == 4);
+ BOOST_ASSERT(opts.optStruct);
+ BOOST_ASSERT(opts.optStruct->a == 1);
+ BOOST_ASSERT(opts.optStruct->b == 2);
+ BOOST_ASSERT(opts.optClass);
+ BOOST_ASSERT((*opts.optClass)->a == 1);
+ BOOST_ASSERT((*opts.optClass)->b == 2);
+ BOOST_ASSERT(opts.optSeq->size() == 2);
+ BOOST_ASSERT((*opts.optSeq)[0]->a == 3);
+ BOOST_ASSERT((*opts.optSeq)[0]->b == 4);
+ BOOST_ASSERT((*opts.optSeq)[1]->a == 5);
+ BOOST_ASSERT((*opts.optSeq)[1]->b == 6);
+ BOOST_ASSERT(opts.optDict);
+ BOOST_ASSERT(opts.optDict->size() == 2);
+ BOOST_ASSERT(opts.optDict->find(1) == opts.optDict->end());
+ BOOST_ASSERT(opts.optDict->find(10) != opts.optDict->end());
+ BOOST_ASSERT(opts.optDict->find(10)->second->a == 11);
+ BOOST_ASSERT(opts.optDict->find(10)->second->b == 12);
+ BOOST_ASSERT(opts.optDict->find(13) != opts.optDict->end());
+ BOOST_ASSERT(opts.optDict->find(13)->second->a == 14);
+ BOOST_ASSERT(opts.optDict->find(13)->second->b == 15);
+}
+
int
main(int, char ** argv)
{
@@ -26,8 +82,9 @@ main(int, char ** argv)
fs::create_directory(tmp);
// Execute
- TestModule::BuiltInsPtr p(new TestModule::BuiltIns());
- Slicer::Serialize<Slicer::Xml>(p, tmp / "out.xml");
+ verify<TestModule::BuiltIns, Slicer::Xml>(root, tmp, "builtins.xml");
+ verify<TestModule::Optionals, Slicer::Xml>(root, tmp, "optionals-notset.xml", checkOptionals_notset);
+ verify<TestModule::Optionals, Slicer::Xml>(root, tmp, "optionals-areset.xml", checkOptionals_areset);
return 0;
}