diff --git a/src/kits/app/Looper.cpp b/src/kits/app/Looper.cpp index 791f5849bc..caa5173f92 100644 --- a/src/kits/app/Looper.cpp +++ b/src/kits/app/Looper.cpp @@ -360,7 +360,10 @@ int32 BLooper::CountHandlers() const //------------------------------------------------------------------------------ BHandler* BLooper::HandlerAt(int32 index) const { - AssertLocked(); + if (!IsLocked()) + { + debugger("Looper must be locked before calling HandlerAt."); + } return (BHandler*)fHandlers.ItemAt(index); } diff --git a/src/tests/kits/app/blooper/BLooperCases b/src/tests/kits/app/blooper/BLooperCases index a2278e1671..8e87f5cb0c 100644 --- a/src/tests/kits/app/blooper/BLooperCases +++ b/src/tests/kits/app/blooper/BLooperCases @@ -47,6 +47,7 @@ HandlerAt(int32 index) const; case : No handlers added, check for looper itself case : Index out of range (CountHandlers() + 1) case : Several handlers added, checked against expected indices +case : Looper is not locked IndexOf(BHandler* handler) const; -------------- diff --git a/src/tests/kits/app/blooper/HandlerAtTest.cpp b/src/tests/kits/app/blooper/HandlerAtTest.cpp new file mode 100644 index 0000000000..56abefe37d --- /dev/null +++ b/src/tests/kits/app/blooper/HandlerAtTest.cpp @@ -0,0 +1,101 @@ +//------------------------------------------------------------------------------ +// HandlerAtTest.cpp +// +//------------------------------------------------------------------------------ + +// Standard Includes ----------------------------------------------------------- + +// System Includes ------------------------------------------------------------- +#include +#include + +// Project Includes ------------------------------------------------------------ + +// Local Includes -------------------------------------------------------------- +#include "HandlerAtTest.h" + +// Local Defines --------------------------------------------------------------- + +// Globals --------------------------------------------------------------------- + +//------------------------------------------------------------------------------ +/** + HandlerAt(int32 index) + @case No handlers added, check for looper itself + @param index 0 + @results HandlerAt() returns pointer to Looper. + */ +void THandlerAtTest::HandlerAtTest1() +{ + BLooper Looper; + CPPUNIT_ASSERT(Looper.HandlerAt(0) == &Looper); +} +//------------------------------------------------------------------------------ +/** + HandlerAt(int32 index) + @case Index out of range (CountHandlers() + 1) + @param index 1 & -1 + @results HandlerAt() returns NULL + */ +void THandlerAtTest::HandlerAtTest2() +{ + BLooper Looper; + CPPUNIT_ASSERT(Looper.HandlerAt(1) == NULL); + CPPUNIT_ASSERT(Looper.HandlerAt(-1) == NULL); +} +//------------------------------------------------------------------------------ +/** + HandlerAt(int32 index) + @case Several handlers added, checked against expected indices + @param index Various + @results + */ +#define CREATE_AND_ADD(XHANDLER) \ + BHandler XHANDLER; \ + Looper.AddHandler(&XHANDLER); +void THandlerAtTest::HandlerAtTest3() +{ + BLooper Looper; + CREATE_AND_ADD(Handler1); + CREATE_AND_ADD(Handler2); + CREATE_AND_ADD(Handler3); + + CPPUNIT_ASSERT(Looper.HandlerAt(0) == &Looper); + CPPUNIT_ASSERT(Looper.HandlerAt(1) == &Handler1); + CPPUNIT_ASSERT(Looper.HandlerAt(2) == &Handler2); + CPPUNIT_ASSERT(Looper.HandlerAt(3) == &Handler3); +} +//------------------------------------------------------------------------------ +/** + HandlerAt(int32 index) + @case Looper is not locked + @param index 0 + @results + */ +void THandlerAtTest::HandlerAtTest4() +{ + BLooper Looper; + Looper.Unlock(); + CPPUNIT_ASSERT(Looper.HandlerAt(0) == &Looper); +} +//------------------------------------------------------------------------------ +TestSuite* THandlerAtTest::Suite() +{ + TestSuite* suite = new TestSuite("BLooper::HandlerAt(int32)"); + + ADD_TEST(suite, THandlerAtTest, HandlerAtTest1); + ADD_TEST(suite, THandlerAtTest, HandlerAtTest2); + ADD_TEST(suite, THandlerAtTest, HandlerAtTest3); + ADD_TEST(suite, THandlerAtTest, HandlerAtTest4); + + return suite; +} +//------------------------------------------------------------------------------ + +/* + * $Log $ + * + * $Id $ + * + */ + diff --git a/src/tests/kits/app/blooper/HandlerAtTest.h b/src/tests/kits/app/blooper/HandlerAtTest.h new file mode 100644 index 0000000000..2f29227c96 --- /dev/null +++ b/src/tests/kits/app/blooper/HandlerAtTest.h @@ -0,0 +1,44 @@ +//------------------------------------------------------------------------------ +// HandlerAtTest.h +// +//------------------------------------------------------------------------------ + +#ifndef HANDLERATTEST_H +#define HANDLERATTEST_H + +// Standard Includes ----------------------------------------------------------- + +// System Includes ------------------------------------------------------------- + +// Project Includes ------------------------------------------------------------ + +// Local Includes -------------------------------------------------------------- +#include "../common.h" + +// Local Defines --------------------------------------------------------------- + +// Globals --------------------------------------------------------------------- + +class THandlerAtTest : public TestCase +{ + public: + THandlerAtTest() {;} + THandlerAtTest(std::string name) : TestCase(name) {;} + + void HandlerAtTest1(); + void HandlerAtTest2(); + void HandlerAtTest3(); + void HandlerAtTest4(); + + static TestSuite* Suite(); +}; + +#endif //HANDLERATTEST_H + +/* + * $Log $ + * + * $Id $ + * + */ + diff --git a/src/tests/kits/app/blooper/Jamfile b/src/tests/kits/app/blooper/Jamfile index 6ba5de631f..c35ba2161f 100644 --- a/src/tests/kits/app/blooper/Jamfile +++ b/src/tests/kits/app/blooper/Jamfile @@ -6,6 +6,7 @@ CommonUnitTest BLooperTester RemoveHandlerTest.cpp IndexOfTest.cpp CountHandlersTest.cpp + HandlerAtTest.cpp : kits app : libopenbeos.so be stdc++.r4 : be stdc++.r4 diff --git a/src/tests/kits/app/blooper/main.cpp b/src/tests/kits/app/blooper/main.cpp index d86bc7584b..5b1c93b686 100644 --- a/src/tests/kits/app/blooper/main.cpp +++ b/src/tests/kits/app/blooper/main.cpp @@ -20,6 +20,7 @@ #include "RemoveHandlerTest.h" #include "IndexOfTest.h" #include "CountHandlersTest.h" +#include "HandlerAtTest.h" // Local Defines --------------------------------------------------------------- @@ -43,6 +44,7 @@ Test* addonTestFunc(void) tests->addTest(TRemoveHandlerTest::Suite()); tests->addTest(TIndexOfTest::Suite()); tests->addTest(TCountHandlersTest::Suite()); + tests->addTest(THandlerAtTest::Suite()); return tests; }