1 //------------------------------------------------------------------------------ 2 // SetNextHandlerTest.cpp 3 // 4 //------------------------------------------------------------------------------ 5 6 // Standard Includes ----------------------------------------------------------- 7 8 // System Includes ------------------------------------------------------------- 9 #include <Looper.h> 10 11 // Project Includes ------------------------------------------------------------ 12 13 // Local Includes -------------------------------------------------------------- 14 #include "SetNextHandlerTest.h" 15 16 // Local Defines --------------------------------------------------------------- 17 18 // Globals --------------------------------------------------------------------- 19 20 //------------------------------------------------------------------------------ 21 /** 22 SetNextHandler(BHandler* handler); 23 NextHandler(); 24 @case Clear the next handler 25 @param handler Valid BHandler pointer, then NULL 26 @results NextHandler() returns Handler2, then NULL 27 */ 28 void TSetNextHandlerTest::SetNextHandler0() 29 { 30 BLooper Looper; 31 BHandler Handler1; 32 BHandler Handler2; 33 34 Looper.AddHandler(&Handler1); 35 Looper.AddHandler(&Handler2); 36 37 Handler1.SetNextHandler(&Handler2); 38 CPPUNIT_ASSERT(Handler1.NextHandler() == &Handler2); 39 40 Handler1.SetNextHandler(NULL); 41 CPPUNIT_ASSERT(!Handler1.NextHandler()); 42 } 43 //------------------------------------------------------------------------------ 44 /** 45 SetNextHandler(BHandler* handler); 46 NextHandler(); 47 @case Handler1 and Handler2 do not belong to a BLooper 48 @param handler Valid BHandler pointer 49 @results NextHandler() returns NULL 50 debug message "handler must belong to looper before setting 51 NextHandler" 52 */ 53 void TSetNextHandlerTest::SetNextHandler1() 54 { 55 DEBUGGER_ESCAPE; 56 57 BHandler Handler1; 58 BHandler Handler2; 59 Handler1.SetNextHandler(&Handler2); 60 CPPUNIT_ASSERT(Handler1.NextHandler() == NULL); 61 } 62 //------------------------------------------------------------------------------ 63 /** 64 SetNextHandler(BHandler* handler); 65 NextHandler(); 66 @case Handler1 belongs to a unlocked BLooper, Handler2 does not 67 @param handler Valid BHandler pointer 68 @results NextHandler() returns BLooper 69 debug message "The handler's looper must be locked before 70 setting NextHandler" 71 */ 72 void TSetNextHandlerTest::SetNextHandler2() 73 { 74 DEBUGGER_ESCAPE; 75 76 BHandler Handler1; 77 BHandler Handler2; 78 BLooper Looper; 79 Looper.AddHandler(&Handler1); 80 Looper.Unlock(); 81 Handler1.SetNextHandler(&Handler2); 82 CPPUNIT_ASSERT(Handler1.NextHandler() == &Looper); 83 } 84 //------------------------------------------------------------------------------ 85 /** 86 SetNextHandler(BHandler* handler); 87 NextHandler(); 88 @case Handler1 belongs to a locked BLooper, Handler2 does not 89 @param handler Valid BHandler pointer 90 @results NextHandler() returns BLooper 91 debug message "The handler and its NextHandler must have 92 the same looper" 93 */ 94 void TSetNextHandlerTest::SetNextHandler3() 95 { 96 DEBUGGER_ESCAPE; 97 98 BHandler Handler1; 99 BHandler Handler2; 100 BLooper Looper; 101 Looper.AddHandler(&Handler1); 102 Handler1.SetNextHandler(&Handler2); 103 CPPUNIT_ASSERT(Handler1.NextHandler() == &Looper); 104 } 105 //------------------------------------------------------------------------------ 106 /** 107 SetNextHandler(BHandler* handler); 108 NextHandler(); 109 @case Handler2 belongs to a unlocked BLooper, Handler1 does not 110 @param handler Valid BHandler pointer 111 @results NextHandler() returns NULL 112 debug message "handler must belong to looper before setting 113 NextHandler" 114 */ 115 void TSetNextHandlerTest::SetNextHandler4() 116 { 117 DEBUGGER_ESCAPE; 118 119 BHandler Handler1; 120 BHandler Handler2; 121 BLooper Looper; 122 Looper.AddHandler(&Handler2); 123 Looper.Unlock(); 124 Handler1.SetNextHandler(&Handler2); 125 CPPUNIT_ASSERT(Handler1.NextHandler() == NULL); 126 } 127 //------------------------------------------------------------------------------ 128 /** 129 SetNextHandler(BHandler* handler); 130 NextHandler(); 131 @case Handler2 belongs to a locked BLooper, Handler1 does not 132 @param handler Valid BHandler pointer 133 @results NextHandler() returns NULL 134 debug message "handler must belong to looper before setting 135 NextHandler" 136 */ 137 void TSetNextHandlerTest::SetNextHandler5() 138 { 139 DEBUGGER_ESCAPE; 140 141 BHandler Handler1; 142 BHandler Handler2; 143 BLooper Looper; 144 Looper.AddHandler(&Handler2); 145 Handler1.SetNextHandler(&Handler2); 146 CPPUNIT_ASSERT(Handler1.NextHandler() == NULL); 147 } 148 //------------------------------------------------------------------------------ 149 /** 150 SetNextHandler(BHandler* handler); 151 NextHandler(); 152 @case Handler1 and Handler2 belong to different unlocked BLoopers 153 @param handler Valid BHandler pointer 154 @results Returns BLooper; 155 debug message "The handler and its NextHandler must have the 156 same looper" 157 */ 158 void TSetNextHandlerTest::SetNextHandler6() 159 { 160 DEBUGGER_ESCAPE; 161 162 BHandler Handler1; 163 BHandler Handler2; 164 BLooper Looper1; 165 BLooper Looper2; 166 Looper1.AddHandler(&Handler1); 167 Looper2.AddHandler(&Handler2); 168 Looper1.Unlock(); 169 Looper2.Unlock(); 170 Handler1.SetNextHandler(&Handler2); 171 CPPUNIT_ASSERT(Handler1.NextHandler() == &Looper1); 172 } 173 //------------------------------------------------------------------------------ 174 /** 175 SetNextHandler(BHandler* handler); 176 NextHandler(); 177 @case Handler1 and Handler2 belong to different BLoopers; 178 Handler1's is locked; Handler2's is not 179 @param handler Valid BHandler pointer 180 @result Returns BLooper; 181 debug message "The handler and its NextHandler must have the 182 same looper" 183 */ 184 void TSetNextHandlerTest::SetNextHandler7() 185 { 186 DEBUGGER_ESCAPE; 187 188 BHandler Handler1; 189 BHandler Handler2; 190 BLooper Looper1; 191 BLooper Looper2; 192 Looper1.AddHandler(&Handler1); 193 Looper2.AddHandler(&Handler2); 194 Looper2.Unlock(); 195 Handler1.SetNextHandler(&Handler2); 196 CPPUNIT_ASSERT(Handler1.NextHandler() == &Looper1); 197 } 198 //------------------------------------------------------------------------------ 199 /** 200 SetNextHandler(BHandler* handler); 201 NextHandler(); 202 @case Handler1 and Handler2 belong to different BLoopers; 203 Handler1's is unlocked; Handler2's is locked 204 @param handler Valid BHandler pointer 205 @results Returns BLooper 206 debug message "The handler and its NextHandler must have the 207 same looper" 208 */ 209 void TSetNextHandlerTest::SetNextHandler8() 210 { 211 DEBUGGER_ESCAPE; 212 213 BHandler Handler1; 214 BHandler Handler2; 215 BLooper Looper1; 216 BLooper Looper2; 217 Looper1.AddHandler(&Handler1); 218 Looper2.AddHandler(&Handler2); 219 Looper1.Unlock(); 220 Handler1.SetNextHandler(&Handler2); 221 CPPUNIT_ASSERT(Handler1.NextHandler() == &Looper1); 222 } 223 //------------------------------------------------------------------------------ 224 /** 225 SetNextHandler(BHandler* handler); 226 NextHandler(); 227 @case Handler1 and Handler2 belong to different locked BLoopers 228 @param handler Valid BHandler pointer 229 @results Returns BLooper 230 debug message "The handler and its NextHandler must have the 231 same looper" 232 */ 233 void TSetNextHandlerTest::SetNextHandler9() 234 { 235 DEBUGGER_ESCAPE; 236 237 BHandler Handler1; 238 BHandler Handler2; 239 BLooper Looper1; 240 BLooper Looper2; 241 Looper1.AddHandler(&Handler1); 242 Looper2.AddHandler(&Handler2); 243 Handler1.SetNextHandler(&Handler2); 244 CPPUNIT_ASSERT(Handler1.NextHandler() == &Looper1); 245 } 246 //------------------------------------------------------------------------------ 247 /** 248 SetNextHandler(BHandler* handler); 249 NextHandler(); 250 @case Handler1 and Handler2 belong to the same unlocked BLooper 251 @param handler Valid BHandler pointer 252 @results Returns Handler2 253 debug message "The handler's looper must be locked before 254 setting NextHandler" 255 @note R5 implementation allows the next handler to be set anyway; 256 we do the same. 257 */ 258 void TSetNextHandlerTest::SetNextHandler10() 259 { 260 DEBUGGER_ESCAPE; 261 262 BLooper Looper; 263 BHandler Handler1; 264 BHandler Handler2; 265 Looper.AddHandler(&Handler1); 266 Looper.AddHandler(&Handler2); 267 Looper.Unlock(); 268 Handler1.SetNextHandler(&Handler2); 269 CPPUNIT_ASSERT(Handler1.NextHandler() == &Looper); 270 } 271 //------------------------------------------------------------------------------ 272 /** 273 SetNextHandler(BHandler* handler); 274 NextHandler(); 275 @case Handler1 and Handler2 belong to the same locked BLooper 276 @param handler Valid BHandler pointer 277 @results Returns Handler2 278 */ 279 void TSetNextHandlerTest::SetNextHandler11() 280 { 281 BLooper Looper; 282 BHandler Handler1; 283 BHandler Handler2; 284 Looper.AddHandler(&Handler1); 285 Looper.AddHandler(&Handler2); 286 Handler1.SetNextHandler(&Handler2); 287 CPPUNIT_ASSERT(Handler1.NextHandler() == &Handler2); 288 } 289 //------------------------------------------------------------------------------ 290 Test* TSetNextHandlerTest::Suite() 291 { 292 TestSuite* SuiteOfTests = new TestSuite("BHandler::SetNextHandler"); 293 294 ADD_TEST4(BHandler, SuiteOfTests, TSetNextHandlerTest, SetNextHandler0); 295 ADD_TEST4(BHandler, SuiteOfTests, TSetNextHandlerTest, SetNextHandler1); 296 ADD_TEST4(BHandler, SuiteOfTests, TSetNextHandlerTest, SetNextHandler2); 297 ADD_TEST4(BHandler, SuiteOfTests, TSetNextHandlerTest, SetNextHandler3); 298 ADD_TEST4(BHandler, SuiteOfTests, TSetNextHandlerTest, SetNextHandler4); 299 ADD_TEST4(BHandler, SuiteOfTests, TSetNextHandlerTest, SetNextHandler5); 300 ADD_TEST4(BHandler, SuiteOfTests, TSetNextHandlerTest, SetNextHandler6); 301 ADD_TEST4(BHandler, SuiteOfTests, TSetNextHandlerTest, SetNextHandler7); 302 ADD_TEST4(BHandler, SuiteOfTests, TSetNextHandlerTest, SetNextHandler8); 303 ADD_TEST4(BHandler, SuiteOfTests, TSetNextHandlerTest, SetNextHandler9); 304 ADD_TEST4(BHandler, SuiteOfTests, TSetNextHandlerTest, SetNextHandler10); 305 ADD_TEST4(BHandler, SuiteOfTests, TSetNextHandlerTest, SetNextHandler11); 306 307 return SuiteOfTests; 308 } 309 //------------------------------------------------------------------------------ 310 311 /* 312 * $Log $ 313 * 314 * $Id $ 315 * 316 */ 317 318 319