1 #include <msp/datafile/dataerror.h>
2 #include <msp/datafile/loader.h>
3 #include <msp/datafile/objectloader.h>
4 #include <msp/io/memory.h>
5 #include <msp/test/test.h>
10 class LoaderTests: public Test::RegisteredTest<LoaderTests>
15 static const char *get_name() { return "Loader"; }
27 class Loader: public DataFile::ObjectLoader<TestObject>
44 LoaderTests::LoaderTests()
46 add(&LoaderTests::load, "Load");
47 add(&LoaderTests::int_as_float, "Int -> float");
48 add(&LoaderTests::bad_keyword, "Bad keyword").expect_throw<DataFile::data_error>();
49 add(&LoaderTests::bad_signature, "Bad signature").expect_throw<DataFile::data_error>();
52 void LoaderTests::load()
61 IO::Memory mem(input, sizeof(input)-1);
62 DataFile::Parser parser(mem, "-");
63 TestObject::Loader loader(obj);
66 EXPECT_EQUAL(obj.i, 1);
67 EXPECT_EQUAL(obj.f, 2.5);
68 EXPECT_EQUAL(obj.s, "foo");
69 EXPECT_EQUAL(obj.func_called, true);
72 void LoaderTests::int_as_float()
78 IO::Memory mem(input, sizeof(input)-1);
79 DataFile::Parser parser(mem, "-");
80 TestObject::Loader loader(obj);
83 EXPECT_EQUAL(obj.f, 2);
86 void LoaderTests::bad_keyword()
92 IO::Memory mem(input, sizeof(input)-1);
93 DataFile::Parser parser(mem, "-");
94 TestObject::Loader loader(obj);
98 void LoaderTests::bad_signature()
104 IO::Memory mem(input, sizeof(input)-1);
105 DataFile::Parser parser(mem, "-");
106 TestObject::Loader loader(obj);
110 TestObject::TestObject():
116 TestObject::Loader::Loader(TestObject &o):
117 DataFile::ObjectLoader<TestObject>(o)
119 add("i", &TestObject::i);
120 add("f", &TestObject::f);
121 add("s", &TestObject::s);
122 add("c", &Loader::func);
125 void TestObject::Loader::func()
127 obj.func_called = true;