/* * Copyright (c) 2010-2016 Isode Limited. * All rights reserved. * See the COPYING file for more information. */ #include #include #include #include #include #include #include #include using namespace Swift; class ResponderTest : public CppUnit::TestFixture { CPPUNIT_TEST_SUITE(ResponderTest); CPPUNIT_TEST(testConstructor); CPPUNIT_TEST(testStart); CPPUNIT_TEST(testStop); CPPUNIT_TEST(testHandleIQ_Set); CPPUNIT_TEST(testHandleIQ_Get); CPPUNIT_TEST(testHandleIQ_Error); CPPUNIT_TEST(testHandleIQ_Result); CPPUNIT_TEST(testHandleIQ_NoPayload); CPPUNIT_TEST_SUITE_END(); public: void setUp() { channel_ = std::make_unique(); router_ = std::make_unique(channel_.get()); payload_ = std::make_shared("foo"); } void tearDown() { router_.reset(); } void testConstructor() { MyResponder testling(router_.get()); channel_->onIQReceived(createRequest(IQ::Set)); CPPUNIT_ASSERT_EQUAL(0, static_cast(testling.setPayloads_.size())); } void testStart() { MyResponder testling(router_.get()); testling.start(); channel_->onIQReceived(createRequest(IQ::Set)); CPPUNIT_ASSERT_EQUAL(1, static_cast(testling.setPayloads_.size())); } void testStop() { MyResponder testling(router_.get()); testling.start(); testling.stop(); channel_->onIQReceived(createRequest(IQ::Set)); CPPUNIT_ASSERT_EQUAL(0, static_cast(testling.setPayloads_.size())); } void testHandleIQ_Set() { MyResponder testling(router_.get()); CPPUNIT_ASSERT(dynamic_cast(&testling)->handleIQ(createRequest(IQ::Set))); CPPUNIT_ASSERT_EQUAL(1, static_cast(testling.setPayloads_.size())); CPPUNIT_ASSERT(payload_ == testling.setPayloads_[0]); CPPUNIT_ASSERT_EQUAL(0, static_cast(testling.getPayloads_.size())); } void testHandleIQ_Get() { MyResponder testling(router_.get()); CPPUNIT_ASSERT(dynamic_cast(&testling)->handleIQ(createRequest(IQ::Get))); CPPUNIT_ASSERT_EQUAL(1, static_cast(testling.getPayloads_.size())); CPPUNIT_ASSERT_EQUAL(0, static_cast(testling.setPayloads_.size())); CPPUNIT_ASSERT(payload_ == testling.getPayloads_[0]); } void testHandleIQ_Error() { MyResponder testling(router_.get()); CPPUNIT_ASSERT(!dynamic_cast(&testling)->handleIQ(createRequest(IQ::Error))); CPPUNIT_ASSERT_EQUAL(0, static_cast(testling.getPayloads_.size())); CPPUNIT_ASSERT_EQUAL(0, static_cast(testling.setPayloads_.size())); } void testHandleIQ_Result() { MyResponder testling(router_.get()); CPPUNIT_ASSERT(!dynamic_cast(&testling)->handleIQ(createRequest(IQ::Result))); CPPUNIT_ASSERT_EQUAL(0, static_cast(testling.getPayloads_.size())); CPPUNIT_ASSERT_EQUAL(0, static_cast(testling.setPayloads_.size())); } void testHandleIQ_NoPayload() { MyResponder testling(router_.get()); CPPUNIT_ASSERT(!dynamic_cast(&testling)->handleIQ(std::make_shared(IQ::Get))); CPPUNIT_ASSERT_EQUAL(0, static_cast(testling.getPayloads_.size())); CPPUNIT_ASSERT_EQUAL(0, static_cast(testling.setPayloads_.size())); } private: std::shared_ptr createRequest(IQ::Type type) { std::shared_ptr iq(new IQ(type)); iq->addPayload(payload_); iq->setID("myid"); iq->setFrom(JID("foo@bar.com/baz")); return iq; } private: class MyResponder : public Responder { public: MyResponder(IQRouter* router) : Responder(router), getRequestResponse_(true), setRequestResponse_(true) {} virtual bool handleGetRequest(const JID& from, const JID&, const std::string& id, std::shared_ptr payload) { CPPUNIT_ASSERT_EQUAL(JID("foo@bar.com/baz"), from); CPPUNIT_ASSERT_EQUAL(std::string("myid"), id); getPayloads_.push_back(payload); return getRequestResponse_; } virtual bool handleSetRequest(const JID& from, const JID&, const std::string& id, std::shared_ptr payload) { CPPUNIT_ASSERT_EQUAL(JID("foo@bar.com/baz"), from); CPPUNIT_ASSERT_EQUAL(std::string("myid"), id); setPayloads_.push_back(payload); return setRequestResponse_; } bool getRequestResponse_; bool setRequestResponse_; std::vector > getPayloads_; std::vector > setPayloads_; }; private: std::unique_ptr router_; std::unique_ptr channel_; std::shared_ptr payload_; }; CPPUNIT_TEST_SUITE_REGISTRATION(ResponderTest);