]> git.tdb.fi Git - libs/datafile.git/blobdiff - tests/loader.cpp
Add unit tests
[libs/datafile.git] / tests / loader.cpp
diff --git a/tests/loader.cpp b/tests/loader.cpp
new file mode 100644 (file)
index 0000000..60c1499
--- /dev/null
@@ -0,0 +1,128 @@
+#include <msp/datafile/dataerror.h>
+#include <msp/datafile/loader.h>
+#include <msp/datafile/objectloader.h>
+#include <msp/io/memory.h>
+#include <msp/test/test.h>
+
+using namespace std;
+using namespace Msp;
+
+class LoaderTests: public Test::RegisteredTest<LoaderTests>
+{
+public:
+       LoaderTests();
+
+       static const char *get_name() { return "Loader"; }
+
+private:
+       void load();
+       void int_as_float();
+       void bad_keyword();
+       void bad_signature();
+};
+
+class TestObject
+{
+public:
+       class Loader: public DataFile::ObjectLoader<TestObject>
+       {
+       public:
+               Loader(TestObject &);
+
+       private:
+               void func();
+       };
+
+       int i;
+       float f;
+       string s;
+       bool func_called;
+
+       TestObject();
+};
+
+LoaderTests::LoaderTests()
+{
+       add(&LoaderTests::load, "Load");
+       add(&LoaderTests::int_as_float, "Int -> float");
+       add(&LoaderTests::bad_keyword, "Bad keyword").expect_throw<DataFile::data_error>();
+       add(&LoaderTests::bad_signature, "Bad signature").expect_throw<DataFile::data_error>();
+}
+
+void LoaderTests::load()
+{
+       const char input[] =
+               "i 1;\n"
+               "f 2.5;\n"
+               "s \"foo\";\n"
+               "c;\n";
+
+       TestObject obj;
+       IO::Memory mem(input, sizeof(input)-1);
+       DataFile::Parser parser(mem, "-");
+       TestObject::Loader loader(obj);
+       loader.load(parser);
+
+       EXPECT_EQUAL(obj.i, 1);
+       EXPECT_EQUAL(obj.f, 2.5);
+       EXPECT_EQUAL(obj.s, "foo");
+       EXPECT_EQUAL(obj.func_called, true);
+}
+
+void LoaderTests::int_as_float()
+{
+       const char input[] =
+               "f 2;\n";
+
+       TestObject obj;
+       IO::Memory mem(input, sizeof(input)-1);
+       DataFile::Parser parser(mem, "-");
+       TestObject::Loader loader(obj);
+       loader.load(parser);
+
+       EXPECT_EQUAL(obj.f, 2);
+}
+
+void LoaderTests::bad_keyword()
+{
+       const char input[] =
+               "a;\n";
+
+       TestObject obj;
+       IO::Memory mem(input, sizeof(input)-1);
+       DataFile::Parser parser(mem, "-");
+       TestObject::Loader loader(obj);
+       loader.load(parser);
+}
+
+void LoaderTests::bad_signature()
+{
+       const char input[] =
+               "i 2.5;\n";
+
+       TestObject obj;
+       IO::Memory mem(input, sizeof(input)-1);
+       DataFile::Parser parser(mem, "-");
+       TestObject::Loader loader(obj);
+       loader.load(parser);
+}
+
+TestObject::TestObject():
+       i(0),
+       f(0),
+       func_called(false)
+{ }
+
+TestObject::Loader::Loader(TestObject &o):
+       DataFile::ObjectLoader<TestObject>(o)
+{
+       add("i", &TestObject::i);
+       add("f", &TestObject::f);
+       add("s", &TestObject::s);
+       add("c", &Loader::func);
+}
+
+void TestObject::Loader::func()
+{
+       obj.func_called = true;
+}