root/src/tests/kits/app/bmessage/MessageDestructTest.cpp
//------------------------------------------------------------------------------
//      MessageDestructTest.cpp
//
//------------------------------------------------------------------------------

// Standard Includes -----------------------------------------------------------

// System Includes -------------------------------------------------------------
#include <Looper.h>
#include <Message.h>
#include <Messenger.h>

// Project Includes ------------------------------------------------------------

// Local Includes --------------------------------------------------------------
#include "MessageDestructTest.h"

// Local Defines ---------------------------------------------------------------

// Globals ---------------------------------------------------------------------

//------------------------------------------------------------------------------
/**
        ~BMessage
        @case                   no reply to sent message
        @results                B_NO_REPLY reply is received
 */
class Looper1 : public BLooper
{
        public:
                Looper1(const char* name) : BLooper(name) {;}
                
                void MessageReceived(BMessage* msg)
                {
                        switch (msg->what)
                        {
                                case '1234':
                                        break;
                                case '2345':
                                        msg->SendReply('3456');
                                        break;
                                default:
                                        BLooper::MessageReceived(msg);
                        }
                }
};

void TMessageDestructTest::MessageDestructTest1()
{
        BLooper* looper1 = new Looper1("looper1");

        looper1->Run();

        BMessenger msgr(NULL, looper1);
        BMessage reply;
        CPPUNIT_ASSERT(msgr.SendMessage('1234', &reply) == B_OK);
        CPPUNIT_ASSERT(reply.what == B_NO_REPLY);

        looper1->Lock();
        looper1->Quit();
}
//------------------------------------------------------------------------------
/**
        ~BMessage
        @case                   Reply is sent to message
        @result                 No B_NO_REPLY reply is sent
 */
void TMessageDestructTest::MessageDestructTest2()
{
        BLooper* looper1 = new Looper1("looper1");
        looper1->Run();
        
        BMessenger msgr(NULL, looper1);
        BMessage reply;
        CPPUNIT_ASSERT(msgr.SendMessage('2345', &reply) == B_OK);
        CPPUNIT_ASSERT(reply.what == '3456');

        looper1->Lock();
        looper1->Quit();
}
//------------------------------------------------------------------------------
TestSuite* TMessageDestructTest::Suite()
{
        TestSuite* suite = new TestSuite("BMessage::~BMessage()");

        ADD_TEST4(BMessage, suite, TMessageDestructTest, MessageDestructTest1);
        ADD_TEST4(BMessage, suite, TMessageDestructTest, MessageDestructTest2);

        return suite;
}
//------------------------------------------------------------------------------


/*
 * $Log $
 *
 * $Id  $
 *
 */