1//------------------------------------------------------------------------------ 2// MessengerAssignmentTester.cpp 3// 4//------------------------------------------------------------------------------ 5 6// Standard Includes ----------------------------------------------------------- 7#include <stdio.h> 8 9// System Includes ------------------------------------------------------------- 10#include <Message.h> 11#include <OS.h> 12#include <Handler.h> 13#include <Looper.h> 14#include <Messenger.h> 15 16// Project Includes ------------------------------------------------------------ 17#include <TestUtils.h> 18#include <ThreadedTestCaller.h> 19#include <cppunit/TestSuite.h> 20 21// Local Includes -------------------------------------------------------------- 22#include "Helpers.h" 23#include "MessengerAssignmentTester.h" 24 25// Local Defines --------------------------------------------------------------- 26 27// Globals --------------------------------------------------------------------- 28 29//------------------------------------------------------------------------------ 30 31// constructor 32MessengerAssignmentTester::MessengerAssignmentTester() 33 : BThreadedTestCase(), 34 fHandler(NULL), 35 fLooper(NULL) 36{ 37} 38 39// constructor 40MessengerAssignmentTester::MessengerAssignmentTester(std::string name) 41 : BThreadedTestCase(name), 42 fHandler(NULL), 43 fLooper(NULL) 44{ 45} 46 47// destructor 48MessengerAssignmentTester::~MessengerAssignmentTester() 49{ 50 if (fLooper) { 51 fLooper->Lock(); 52 if (fHandler) { 53 fLooper->RemoveHandler(fHandler); 54 delete fHandler; 55 } 56 fLooper->Quit(); 57 } 58} 59 60/* 61 BMessenger &operator=(const BMessenger &from) 62 @case 1 from is uninitialized 63 @results IsValid() and IsTargetLocal() should return false 64 Target() should return NULL and NULL for looper. 65 Team() should return -1. 66 */ 67void MessengerAssignmentTester::AssignmentTest1() 68{ 69 BMessenger from; 70 BMessenger messenger; 71 CHK(&(messenger = from) == &messenger); 72 CHK(messenger.IsValid() == false); 73 CHK(messenger.IsTargetLocal() == false); 74 BLooper *looper; 75 CHK(messenger.Target(&looper) == NULL); 76 CHK(looper == NULL); 77 CHK(messenger.Team() == -1); 78} 79 80/* 81 BMessenger &operator=(const BMessenger &from) 82 @case 2 from is properly initialized to a local target 83 (preferred handler) 84 @results IsValid() and IsTargetLocal() should return true 85 Target() should return the same values as for from. 86 Team() should return this team. 87 */ 88void MessengerAssignmentTester::AssignmentTest2() 89{ 90 // create looper 91 status_t result = B_OK; 92 BLooper *looper = new BLooper; 93 looper->Run(); 94 LooperQuitter quitter(looper); 95 // create the from messenger 96 BMessenger from(NULL, looper, &result); 97 CHK(from.IsValid() == true); 98 CHK(from.IsTargetLocal() == true); 99 BLooper *resultLooper; 100 CHK(from.Target(&resultLooper) == NULL); 101 CHK(resultLooper == looper); 102 CHK(from.Team() == get_this_team()); 103 CHK(result == B_OK); 104 // create the messenger and do the checks 105 BMessenger messenger; 106 CHK(&(messenger = from) == &messenger); 107 CHK(messenger.IsValid() == true); 108 CHK(messenger.IsTargetLocal() == true); 109 resultLooper = NULL; 110 CHK(messenger.Target(&resultLooper) == NULL); 111 CHK(resultLooper == looper); 112 CHK(messenger.Team() == get_this_team()); 113} 114 115/* 116 BMessenger &operator=(const BMessenger &from) 117 @case 3 from is properly initialized to a local target 118 (specific handler) 119 @results IsValid() and IsTargetLocal() should return true 120 Target() should return the same values as for from. 121 Team() should return this team. 122 */ 123void MessengerAssignmentTester::AssignmentTest3() 124{ 125 // create looper and handler 126 status_t result = B_OK; 127 BLooper *looper = new BLooper; 128 looper->Run(); 129 LooperQuitter quitter(looper); 130 BHandler *handler = new BHandler; 131 HandlerDeleter deleter(handler); 132 CHK(looper->Lock()); 133 looper->AddHandler(handler); 134 looper->Unlock(); 135 // create the from messenger 136 BMessenger from(handler, looper, &result); 137 CHK(from.IsValid() == true); 138 CHK(from.IsTargetLocal() == true); 139 BLooper *resultLooper; 140 CHK(from.Target(&resultLooper) == handler); 141 CHK(resultLooper == looper); 142 CHK(from.Team() == get_this_team()); 143 CHK(result == B_OK); 144 // create the messenger and do the checks 145 BMessenger messenger; 146 CHK(&(messenger = from) == &messenger); 147 CHK(messenger.IsValid() == true); 148 CHK(messenger.IsTargetLocal() == true); 149 resultLooper = NULL; 150 CHK(messenger.Target(&resultLooper) == handler); 151 CHK(resultLooper == looper); 152 CHK(messenger.Team() == get_this_team()); 153} 154 155 156Test* MessengerAssignmentTester::Suite() 157{ 158 typedef BThreadedTestCaller<MessengerAssignmentTester> TC; 159 160 TestSuite* testSuite = new TestSuite; 161 162 ADD_TEST4(BMessenger, testSuite, MessengerAssignmentTester, AssignmentTest1); 163 ADD_TEST4(BMessenger, testSuite, MessengerAssignmentTester, AssignmentTest2); 164 ADD_TEST4(BMessenger, testSuite, MessengerAssignmentTester, AssignmentTest3); 165 166 return testSuite; 167} 168 169 170