root/src/tests/kits/app/blooper/SetCommonFilterListTest.cpp
//------------------------------------------------------------------------------
//      SetCommonFilterListTest.cpp
//
//------------------------------------------------------------------------------

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

// System Includes -------------------------------------------------------------
#include <List.h>
#include <Looper.h>
#include <MessageFilter.h>

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

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

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

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

//------------------------------------------------------------------------------
/**
        SetCommonFilterList(BList* filters)
        @case                   NULL list
        @param  filters NULL
        @result                 CommonFilterList() returns NULL
 */
void TSetCommonFilterListTest::SetCommonFilterListTest1()
{
        BLooper Looper;
        Looper.SetCommonFilterList(NULL);
        CPPUNIT_ASSERT(Looper.CommonFilterList() == NULL);
}
//------------------------------------------------------------------------------
/**
        SetCommonFilterList(BList* filters)
        @case                   Valid list, looper not locked
        @param  filters Valid pointer to BList containing BMessageFilter
        @result                 Debugger message: "Owning Looper must be locked before
                                        calling SetCommonFilterList".  CommonFilterList() returns
                                        NULL.
 */
void TSetCommonFilterListTest::SetCommonFilterListTest2()
{
        DEBUGGER_ESCAPE;

        BLooper Looper;
        BList* filters = new BList;
        filters->AddItem(new BMessageFilter('1234'));
        Looper.Unlock();
        Looper.SetCommonFilterList(filters);
        CPPUNIT_ASSERT(Looper.CommonFilterList() == NULL);
}
//------------------------------------------------------------------------------
/**
        SetCommonFilterList(BList* filters)
        @case                   Valid list, looper locked
        @param  filters Valid pointer to BList containing BMessageFilter
        @result                 CommonFilterList() returns filters.
 */
void TSetCommonFilterListTest::SetCommonFilterListTest3()
{
        BLooper Looper;
        BList* filters = new BList;
        filters->AddItem(new BMessageFilter('1234'));
        Looper.SetCommonFilterList(filters);
        CPPUNIT_ASSERT(Looper.CommonFilterList() == filters);
}
//------------------------------------------------------------------------------
/**
        SetCommonFilterList(BList* filters)
        @case                   Valid list, looper locked, owned by another looper
        @param  filters Valid pointer to BList containing BMessageFilter
        @result                 Looper2.CommonFilterList() returns NULL.
        @note                   R5 implementation segfaults when the first looper is
                                        destroyed (it goes last because it was constructed first)
                                        because it tries to clean up the filter list which has
                                        already been cleaned up by the other looper.  Now fixed in
                                        Haiku.
 */
void TSetCommonFilterListTest::SetCommonFilterListTest4()
{
        DEBUGGER_ESCAPE;

        BLooper Looper1;
        BLooper Looper2;
        BList* filters = new BList;
        filters->AddItem(new BMessageFilter('1234'));
        Looper1.SetCommonFilterList(filters);
        Looper2.SetCommonFilterList(filters);
        CPPUNIT_ASSERT(Looper1.CommonFilterList() == filters);
#ifndef TEST_R5
        CPPUNIT_ASSERT(Looper2.CommonFilterList() == NULL);
#else
        CPPUNIT_ASSERT(Looper2.CommonFilterList() == filters);
#endif
}
//------------------------------------------------------------------------------
#ifdef ADD_TEST
#undef ADD_TEST
#endif
#define ADD_TEST(__test_name__) \
        ADD_TEST4(BLooper, suite, TSetCommonFilterListTest, __test_name__)
TestSuite* TSetCommonFilterListTest::Suite()
{
        TestSuite* suite = new TestSuite("BLooper::SetCommonFilterList(BList*)");

        ADD_TEST(SetCommonFilterListTest1);
        ADD_TEST(SetCommonFilterListTest2);
        ADD_TEST(SetCommonFilterListTest3);
        ADD_TEST(SetCommonFilterListTest4);

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

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