X-Git-Url: http://git.tdb.fi/?p=libs%2Fdatafile.git;a=blobdiff_plain;f=tests%2Floader.cpp;fp=tests%2Floader.cpp;h=60c14997319be4efa8428d69974e9146912b3379;hp=0000000000000000000000000000000000000000;hb=3461239f03fd281092e81d0e264a0d5dab165415;hpb=9f2a99f61887a71a31afb4c56558fcc76be532d1 diff --git a/tests/loader.cpp b/tests/loader.cpp new file mode 100644 index 0000000..60c1499 --- /dev/null +++ b/tests/loader.cpp @@ -0,0 +1,128 @@ +#include +#include +#include +#include +#include + +using namespace std; +using namespace Msp; + +class LoaderTests: public Test::RegisteredTest +{ +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 + { + 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(); + add(&LoaderTests::bad_signature, "Bad signature").expect_throw(); +} + +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(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; +}