/* * Copyright (c) 2010 Remko Tronçon * Licensed under the GNU General Public License v3. * See Documentation/Licenses/GPLv3.txt for more information. */ #include #include #include #include "Swiften/Elements/Stanza.h" #include "Swiften/Elements/Payload.h" #include "Swiften/Elements/Message.h" using namespace Swift; class StanzaTest : public CppUnit::TestFixture { CPPUNIT_TEST_SUITE(StanzaTest); CPPUNIT_TEST(testConstructor_Copy); CPPUNIT_TEST(testGetPayload); CPPUNIT_TEST(testGetPayload_NoSuchPayload); CPPUNIT_TEST(testDestructor); CPPUNIT_TEST(testDestructor_Copy); CPPUNIT_TEST(testUpdatePayload_ExistingPayload); CPPUNIT_TEST(testUpdatePayload_NewPayload); CPPUNIT_TEST(testGetPayloadOfSameType); CPPUNIT_TEST(testGetPayloadOfSameType_NoSuchPayload); CPPUNIT_TEST_SUITE_END(); public: class MyPayload1 : public Payload { public: MyPayload1() {} }; class MyPayload2 : public Payload { public: MyPayload2(const String& s = "") : text_(s) {} String text_; }; class MyPayload3 : public Payload { public: MyPayload3() {} }; class DestroyingPayload : public Payload { public: DestroyingPayload(bool* alive) : alive_(alive) { } ~DestroyingPayload() { (*alive_) = false; } private: bool* alive_; }; StanzaTest() {} void testConstructor_Copy() { Message m; m.addPayload(boost::shared_ptr(new MyPayload1())); m.addPayload(boost::shared_ptr(new MyPayload2())); Message copy(m); CPPUNIT_ASSERT(copy.getPayload()); CPPUNIT_ASSERT(copy.getPayload()); } void testDestructor() { bool payloadAlive = true; { Message m; m.addPayload(boost::shared_ptr(new DestroyingPayload(&payloadAlive))); } CPPUNIT_ASSERT(!payloadAlive); } void testDestructor_Copy() { bool payloadAlive = true; Message* m1 = new Message(); m1->addPayload(boost::shared_ptr(new DestroyingPayload(&payloadAlive))); Message* m2 = new Message(*m1); delete m1; CPPUNIT_ASSERT(payloadAlive); delete m2; CPPUNIT_ASSERT(!payloadAlive); } void testGetPayload() { Message m; m.addPayload(boost::shared_ptr(new MyPayload1())); m.addPayload(boost::shared_ptr(new MyPayload2())); m.addPayload(boost::shared_ptr(new MyPayload3())); boost::shared_ptr p(m.getPayload()); CPPUNIT_ASSERT(p); } void testGetPayload_NoSuchPayload() { Message m; m.addPayload(boost::shared_ptr(new MyPayload1())); m.addPayload(boost::shared_ptr(new MyPayload3())); boost::shared_ptr p(m.getPayload()); CPPUNIT_ASSERT(!p); } void testUpdatePayload_ExistingPayload() { Message m; m.addPayload(boost::shared_ptr(new MyPayload1())); m.addPayload(boost::shared_ptr(new MyPayload2("foo"))); m.addPayload(boost::shared_ptr(new MyPayload3())); m.updatePayload(boost::shared_ptr(new MyPayload2("bar"))); CPPUNIT_ASSERT_EQUAL(static_cast(3), m.getPayloads().size()); boost::shared_ptr p(m.getPayload()); CPPUNIT_ASSERT_EQUAL(String("bar"), p->text_); } void testUpdatePayload_NewPayload() { Message m; m.addPayload(boost::shared_ptr(new MyPayload1())); m.addPayload(boost::shared_ptr(new MyPayload3())); m.updatePayload(boost::shared_ptr(new MyPayload2("bar"))); CPPUNIT_ASSERT_EQUAL(static_cast(3), m.getPayloads().size()); boost::shared_ptr p(m.getPayload()); CPPUNIT_ASSERT_EQUAL(String("bar"), p->text_); } void testGetPayloadOfSameType() { Message m; m.addPayload(boost::shared_ptr(new MyPayload1())); m.addPayload(boost::shared_ptr(new MyPayload2("foo"))); m.addPayload(boost::shared_ptr(new MyPayload3())); boost::shared_ptr payload(boost::dynamic_pointer_cast(m.getPayloadOfSameType(boost::shared_ptr(new MyPayload2("bar"))))); CPPUNIT_ASSERT(payload); CPPUNIT_ASSERT_EQUAL(String("foo"), payload->text_); } void testGetPayloadOfSameType_NoSuchPayload() { Message m; m.addPayload(boost::shared_ptr(new MyPayload1())); m.addPayload(boost::shared_ptr(new MyPayload3())); CPPUNIT_ASSERT(!m.getPayloadOfSameType(boost::shared_ptr(new MyPayload2("bar")))); } }; CPPUNIT_TEST_SUITE_REGISTRATION(StanzaTest);