void testHandleAckReceived_AcksStanza() {
            std::shared_ptr<StanzaAckRequester> testling(createRequester());
            testling->handleStanzaSent(createMessage("m1"));

            testling->handleAckReceived(1);

            CPPUNIT_ASSERT_EQUAL(1, static_cast<int>(ackedStanzas.size()));
            CPPUNIT_ASSERT_EQUAL(std::string("m1"), ackedStanzas[0]->getID());
        }
		void testHandleAckRequestReceived_AcksStanza() {
			boost::shared_ptr<StanzaAckResponder> testling(createResponder());
			testling->handleStanzaReceived();

			testling->handleAckRequestReceived();

			CPPUNIT_ASSERT_EQUAL(1, static_cast<int>(acks.size()));
			CPPUNIT_ASSERT_EQUAL(1U, acks[0]);
		}
        void testSetXMPPStatus_Offline() {
            MenuletController testling(menulet);

            testling.setXMPPStatus("You are not connected", MenuletController::Offline);

            size_t i = 0;
            CPPUNIT_ASSERT_EQUAL(std::string("No online users"), menulet->items[i++]);
            CPPUNIT_ASSERT_EQUAL(std::string("-"), menulet->items[i++]);
            CPPUNIT_ASSERT_EQUAL(std::string("[Offline] You are not connected"), menulet->items[i++]);
        }
        void testSetUserNames_NoUsers() {
            MenuletController testling(menulet);

            std::vector<std::string> users;
            testling.setUserNames(users);

            size_t i = 0;
            CPPUNIT_ASSERT_EQUAL(std::string("No online users"), menulet->items[i++]);
            CPPUNIT_ASSERT_EQUAL(std::string("-"), menulet->items[i++]);
        }
		void testHandleAckRequestReceived_AcksMultipleStanzas() {
			std::auto_ptr<StanzaAckResponder> testling(createResponder());
			testling->handleStanzaReceived();
			testling->handleStanzaReceived();

			testling->handleAckRequestReceived();

			CPPUNIT_ASSERT_EQUAL(1, static_cast<int>(acks.size()));
			CPPUNIT_ASSERT_EQUAL(2U, acks[0]);
		}
		// Handle stanza ack count wrapping, as per the XEP
		void testHandleAckRequestReceived_WrapAround() {
			boost::shared_ptr<StanzaAckResponder> testling(createResponder());
			testling->handledStanzasCount = boost::numeric_cast<unsigned int>((1ULL<<32) - 1);
			testling->handleStanzaReceived();
			testling->handleStanzaReceived();

			testling->handleAckRequestReceived();

			CPPUNIT_ASSERT_EQUAL(1, static_cast<int>(acks.size()));
			CPPUNIT_ASSERT_EQUAL(1U, acks[0]);
		}
        // Handle stanza ack count wrapping, as per the XEP
        void testHandleAckReceived_WrapAround() {
            std::shared_ptr<StanzaAckRequester> testling(createRequester());
            testling->lastHandledStanzasCount = boost::numeric_cast<unsigned int>((1ULL<<32) - 1);
            testling->handleStanzaSent(createMessage("m1"));
            testling->handleStanzaSent(createMessage("m2"));

            testling->handleAckReceived(1);

            CPPUNIT_ASSERT_EQUAL(2, static_cast<int>(ackedStanzas.size()));
            CPPUNIT_ASSERT_EQUAL(std::string("m1"), ackedStanzas[0]->getID());
            CPPUNIT_ASSERT_EQUAL(std::string("m2"), ackedStanzas[1]->getID());
        }
        void testHandleAckReceived_AcksMultipleStanzas() {
            std::shared_ptr<StanzaAckRequester> testling(createRequester());
            testling->handleStanzaSent(createIQ("iq1"));
            testling->handleStanzaSent(createPresence("p1"));
            testling->handleStanzaSent(createMessage("m1"));

            testling->handleAckReceived(3);

            CPPUNIT_ASSERT_EQUAL(3, static_cast<int>(ackedStanzas.size()));
            CPPUNIT_ASSERT_EQUAL(std::string("iq1"), ackedStanzas[0]->getID());
            CPPUNIT_ASSERT_EQUAL(std::string("p1"), ackedStanzas[1]->getID());
            CPPUNIT_ASSERT_EQUAL(std::string("m1"), ackedStanzas[2]->getID());
        }
        void testSetUserNames() {
            MenuletController testling(menulet);

            std::vector<std::string> users;
            users.push_back("Alice In Wonderland");
            users.push_back("The Mad Hatter");
            testling.setUserNames(users);

            size_t i = 0;
            CPPUNIT_ASSERT_EQUAL(std::string("Online users:"), menulet->items[i++]);
            CPPUNIT_ASSERT_EQUAL(std::string("  Alice In Wonderland"), menulet->items[i++]);
            CPPUNIT_ASSERT_EQUAL(std::string("  The Mad Hatter"), menulet->items[i++]);
            CPPUNIT_ASSERT_EQUAL(std::string("-"), menulet->items[i++]);
        }
        void testConstructor() {
            MenuletController testling(menulet);

            CPPUNIT_ASSERT_EQUAL(8, static_cast<int>(menulet->items.size()));
            size_t i = 0;
            CPPUNIT_ASSERT_EQUAL(std::string("No online users"), menulet->items[i++]);
            CPPUNIT_ASSERT_EQUAL(std::string("-"), menulet->items[i++]);
            CPPUNIT_ASSERT_EQUAL(std::string("[Offline] "), menulet->items[i++]);
            CPPUNIT_ASSERT_EQUAL(std::string("-"), menulet->items[i++]);
            CPPUNIT_ASSERT_EQUAL(std::string("*About*"), menulet->items[i++]);
            CPPUNIT_ASSERT_EQUAL(std::string("-"), menulet->items[i++]);
            CPPUNIT_ASSERT_EQUAL(std::string("*Restart*"), menulet->items[i++]);
            CPPUNIT_ASSERT_EQUAL(std::string("*Exit*"), menulet->items[i++]);
        }
        void testUpdate() {
            MenuletController testling(menulet);

            testling.setXMPPStatus("You are connected", MenuletController::Online);

            CPPUNIT_ASSERT_EQUAL(8, static_cast<int>(menulet->items.size()));
            size_t i = 0;
            CPPUNIT_ASSERT_EQUAL(std::string("No online users"), menulet->items[i++]);
            CPPUNIT_ASSERT_EQUAL(std::string("-"), menulet->items[i++]);
            CPPUNIT_ASSERT_EQUAL(std::string("[Online] You are connected"), menulet->items[i++]);
            CPPUNIT_ASSERT_EQUAL(std::string("-"), menulet->items[i++]);
            CPPUNIT_ASSERT_EQUAL(std::string("*About*"), menulet->items[i++]);
            CPPUNIT_ASSERT_EQUAL(std::string("-"), menulet->items[i++]);
            CPPUNIT_ASSERT_EQUAL(std::string("*Restart*"), menulet->items[i++]);
            CPPUNIT_ASSERT_EQUAL(std::string("*Exit*"), menulet->items[i++]);
        }
        void testHandleStanzaSent_PresenceDoesNotRequestAck() {
            std::shared_ptr<StanzaAckRequester> testling(createRequester());
            testling->handleStanzaSent(createPresence("p1"));

            CPPUNIT_ASSERT_EQUAL(0, acksRequested);
        }
        void testHandleStanzaSent_MessageRequestsAck() {
            std::shared_ptr<StanzaAckRequester> testling(createRequester());
            testling->handleStanzaSent(createMessage("m1"));

            CPPUNIT_ASSERT_EQUAL(1, acksRequested);
        }