From f51fec58c2e31b93bd78cd3e431dfa0a5520969b Mon Sep 17 00:00:00 2001 From: Martchus Date: Fri, 27 Oct 2017 17:53:25 +0200 Subject: [PATCH] Test nested structs with generator --- generator/tests/jsongenerator.cpp | 33 +++++++++++++++++++++++++++++-- generator/tests/structs.h | 11 +++++++++++ 2 files changed, 42 insertions(+), 2 deletions(-) diff --git a/generator/tests/jsongenerator.cpp b/generator/tests/jsongenerator.cpp index 162d71b..5d16969 100644 --- a/generator/tests/jsongenerator.cpp +++ b/generator/tests/jsongenerator.cpp @@ -17,6 +17,7 @@ using namespace CPPUNIT_NS; using namespace IoUtilities; using namespace TestUtilities; +using namespace TestUtilities::Literals; using namespace ConversionUtilities; /*! @@ -27,6 +28,7 @@ class OverallTests : public TestFixture { CPPUNIT_TEST(testGeneratorItself); CPPUNIT_TEST(testCLI); CPPUNIT_TEST(testIncludingGeneratedHeader); + CPPUNIT_TEST(testNesting); CPPUNIT_TEST(testSingleInheritence); CPPUNIT_TEST(testMultipleInheritence); CPPUNIT_TEST_SUITE_END(); @@ -38,6 +40,7 @@ public: void testGeneratorItself(); void testCLI(); void testIncludingGeneratedHeader(); + void testNesting(); void testSingleInheritence(); void testMultipleInheritence(); @@ -68,8 +71,7 @@ void OverallTests::testGeneratorItself() stringstream buffer; CodeFactory factory(TestApplication::appPath(), inputFiles, clangOptions, buffer); factory.addGenerator(); - CPPUNIT_ASSERT(factory.readAST()); - CPPUNIT_ASSERT(factory.generate()); + CPPUNIT_ASSERT(factory.run()); assertEqualityLinewise(m_expectedCode, toArrayOfLines(buffer.str())); } @@ -111,6 +113,33 @@ void OverallTests::testIncludingGeneratedHeader() CPPUNIT_ASSERT_EQUAL(test.yetAnotherString, parsedTest.yetAnotherString); } +void OverallTests::testNesting() +{ + TestStruct test; + test.someInt = 42; + test.someString = "the answer"; + test.yetAnotherString = "but what was the question"; + NestedTestStruct nested; + nested.nested.emplace_front(vector{ test }); + nested.deq.emplace_back(3.14); + const string expectedJSON( + "{\"nested\":[[{\"someInt\":42,\"someString\":\"the answer\",\"yetAnotherString\":\"but what was the question\"}]],\"deq\":[3.14]}"); + + // test serialization + CPPUNIT_ASSERT_EQUAL(expectedJSON, string(nested.toJson().GetString())); + + // test deserialization + const NestedTestStruct parsedNested(NestedTestStruct::fromJson(expectedJSON)); + CPPUNIT_ASSERT_EQUAL(1_st, parsedNested.nested.size()); + CPPUNIT_ASSERT_EQUAL(1_st, parsedNested.nested.front().size()); + CPPUNIT_ASSERT_EQUAL(1_st, parsedNested.deq.size()); + const TestStruct &parsedTest(parsedNested.nested.front().front()); + CPPUNIT_ASSERT_EQUAL(test.someInt, parsedTest.someInt); + CPPUNIT_ASSERT_EQUAL(test.someString, parsedTest.someString); + CPPUNIT_ASSERT_EQUAL(test.yetAnotherString, parsedTest.yetAnotherString); + CPPUNIT_ASSERT_EQUAL(3.14, parsedNested.deq.front()); +} + /*! * \brief Like testIncludingGeneratedHeader() but also tests single inheritence. */ diff --git a/generator/tests/structs.h b/generator/tests/structs.h index 2a852c2..d9105f6 100644 --- a/generator/tests/structs.h +++ b/generator/tests/structs.h @@ -3,6 +3,8 @@ #include "../../lib/jsonserializable.h" +#include +#include #include #include @@ -19,6 +21,15 @@ struct TestStruct : public JSONSerializable { string yetAnotherString = "bar"; }; +/*! + * \brief The NestedTestStruct struct inherits from JSONSerializable and should hence have functional fromJson() + * and toJson() methods. This is asserted in OverallTests::testNesting(); + */ +struct NestedTestStruct : public JSONSerializable { + list> nested; + deque deq; +}; + /*! * \brief The AnotherTestStruct struct inherits from JSONSerializable and should hence have functional fromJson() * and toJson() methods. This is asserted in OverallTests::testInheritence();