1//------------------------------------------------------------------------------
2//	IndexOfTest.cpp
3//
4//------------------------------------------------------------------------------
5
6// Standard Includes -----------------------------------------------------------
7
8// System Includes -------------------------------------------------------------
9#include <Handler.h>
10#include <Looper.h>
11
12// Project Includes ------------------------------------------------------------
13
14// Local Includes --------------------------------------------------------------
15#include "IndexOfTest.h"
16
17// Local Defines ---------------------------------------------------------------
18
19// Globals ---------------------------------------------------------------------
20
21//------------------------------------------------------------------------------
22/**
23	IndexOf(BHandler* handler)
24	@case		handler is NULL
25	@param		handler	NULL
26	@results	IndexOf() returns B_ERROR
27 */
28void TIndexOfTest::IndexOfTest1()
29{
30	BLooper Looper;
31	CPPUNIT_ASSERT(Looper.IndexOf(NULL) == B_ERROR);
32}
33//------------------------------------------------------------------------------
34/**
35	IndexOf(BHandler* handler)
36	@case		handler is valid, doesn't belong to this looper
37	@param		handler	Valid BHandler pointer, not assigned to this looper
38	@results	IndexOf() returns B_ERROR
39 */
40void TIndexOfTest::IndexOfTest2()
41{
42	BLooper Looper;
43	BHandler Handler;
44	CPPUNIT_ASSERT(Looper.IndexOf(&Handler) == B_ERROR);
45}
46//------------------------------------------------------------------------------
47/**
48	IndexOf(BHandler* handler)
49	@case		handler is valid, belongs to looper
50	@param		handler	Valid BHandler pointer, assigned to this looper
51	@results	IndexOf returns 1
52 */
53void TIndexOfTest::IndexOfTest3()
54{
55	BLooper Looper;
56	BHandler Handler;
57	Looper.AddHandler(&Handler);
58	CPPUNIT_ASSERT(Looper.IndexOf(&Handler) == 1);
59}
60//------------------------------------------------------------------------------
61/**
62	IndexOf(BHandler* handler)
63	@case		handler is valid, one of many added and removed
64	@param		handler	Valid BHandler pointer, assigned to this looper
65	@results	IndexOf() returns correct index for each handler
66 */
67void TIndexOfTest::IndexOfTest4()
68{
69	BLooper Looper;
70	BHandler Handler1;
71	BHandler Handler2;
72	BHandler Handler3;
73	BHandler Handler4;
74	BHandler Handler5;
75
76	Looper.AddHandler(&Handler1);
77	CPPUNIT_ASSERT(Looper.IndexOf(&Handler1) == 1);
78	Looper.AddHandler(&Handler2);
79	CPPUNIT_ASSERT(Looper.IndexOf(&Handler1) == 1);
80	CPPUNIT_ASSERT(Looper.IndexOf(&Handler2) == 2);
81	Looper.AddHandler(&Handler3);
82	CPPUNIT_ASSERT(Looper.IndexOf(&Handler1) == 1);
83	CPPUNIT_ASSERT(Looper.IndexOf(&Handler2) == 2);
84	CPPUNIT_ASSERT(Looper.IndexOf(&Handler3) == 3);
85	Looper.AddHandler(&Handler4);
86	CPPUNIT_ASSERT(Looper.IndexOf(&Handler1) == 1);
87	CPPUNIT_ASSERT(Looper.IndexOf(&Handler2) == 2);
88	CPPUNIT_ASSERT(Looper.IndexOf(&Handler3) == 3);
89	CPPUNIT_ASSERT(Looper.IndexOf(&Handler4) == 4);
90	Looper.AddHandler(&Handler5);
91	CPPUNIT_ASSERT(Looper.IndexOf(&Handler1) == 1);
92	CPPUNIT_ASSERT(Looper.IndexOf(&Handler2) == 2);
93	CPPUNIT_ASSERT(Looper.IndexOf(&Handler3) == 3);
94	CPPUNIT_ASSERT(Looper.IndexOf(&Handler4) == 4);
95	CPPUNIT_ASSERT(Looper.IndexOf(&Handler5) == 5);
96
97	// Now we remove them
98	Looper.RemoveHandler(&Handler5);
99	CPPUNIT_ASSERT(Looper.IndexOf(&Handler1) == 1);
100	CPPUNIT_ASSERT(Looper.IndexOf(&Handler2) == 2);
101	CPPUNIT_ASSERT(Looper.IndexOf(&Handler3) == 3);
102	CPPUNIT_ASSERT(Looper.IndexOf(&Handler4) == 4);
103	CPPUNIT_ASSERT(Looper.IndexOf(&Handler5) == B_ERROR);
104	Looper.RemoveHandler(&Handler4);
105	CPPUNIT_ASSERT(Looper.IndexOf(&Handler1) == 1);
106	CPPUNIT_ASSERT(Looper.IndexOf(&Handler2) == 2);
107	CPPUNIT_ASSERT(Looper.IndexOf(&Handler3) == 3);
108	CPPUNIT_ASSERT(Looper.IndexOf(&Handler4) == B_ERROR);
109	CPPUNIT_ASSERT(Looper.IndexOf(&Handler5) == B_ERROR);
110	Looper.RemoveHandler(&Handler3);
111	CPPUNIT_ASSERT(Looper.IndexOf(&Handler1) == 1);
112	CPPUNIT_ASSERT(Looper.IndexOf(&Handler2) == 2);
113	CPPUNIT_ASSERT(Looper.IndexOf(&Handler3) == B_ERROR);
114	CPPUNIT_ASSERT(Looper.IndexOf(&Handler4) == B_ERROR);
115	CPPUNIT_ASSERT(Looper.IndexOf(&Handler5) == B_ERROR);
116	Looper.RemoveHandler(&Handler2);
117	CPPUNIT_ASSERT(Looper.IndexOf(&Handler1) == 1);
118	CPPUNIT_ASSERT(Looper.IndexOf(&Handler2) == B_ERROR);
119	CPPUNIT_ASSERT(Looper.IndexOf(&Handler3) == B_ERROR);
120	CPPUNIT_ASSERT(Looper.IndexOf(&Handler4) == B_ERROR);
121	CPPUNIT_ASSERT(Looper.IndexOf(&Handler5) == B_ERROR);
122	Looper.RemoveHandler(&Handler1);
123	CPPUNIT_ASSERT(Looper.IndexOf(&Handler1) == B_ERROR);
124	CPPUNIT_ASSERT(Looper.IndexOf(&Handler2) == B_ERROR);
125	CPPUNIT_ASSERT(Looper.IndexOf(&Handler3) == B_ERROR);
126	CPPUNIT_ASSERT(Looper.IndexOf(&Handler4) == B_ERROR);
127	CPPUNIT_ASSERT(Looper.IndexOf(&Handler5) == B_ERROR);
128}
129//------------------------------------------------------------------------------
130/**
131	IndexOf(BHandler* handler)
132	@case		handler is valid, looper is unlocked
133	@param		handler	Valid BHandler pointer, assigned to this looper
134	@results	IndexOf returns 1.  Debugger message "Looper must be locked
135				before calling IndexOf."
136 */
137void TIndexOfTest::IndexOfTest5()
138{
139	DEBUGGER_ESCAPE;
140
141	BLooper Looper;
142	BHandler Handler;
143	Looper.AddHandler(&Handler);
144	Looper.Unlock();
145	CPPUNIT_ASSERT(Looper.IndexOf(&Handler) == 1);
146}
147//------------------------------------------------------------------------------
148/**
149	IndexOf(BHandler* handler)
150	@case		handler is "this"
151	@param		handler	The looper's this pointer
152	@result		IndexOf() returns 0
153 */
154void TIndexOfTest::IndexOfTest6()
155{
156	BLooper Looper;
157	CPPUNIT_ASSERT(Looper.IndexOf(&Looper) == 0);
158}
159//------------------------------------------------------------------------------
160TestSuite* TIndexOfTest::Suite()
161{
162	TestSuite* suite = new TestSuite("BLooper::IndexOf(BHandler*)");
163
164	ADD_TEST4(BLooper, suite, TIndexOfTest, IndexOfTest1);
165	ADD_TEST4(BLooper, suite, TIndexOfTest, IndexOfTest2);
166	ADD_TEST4(BLooper, suite, TIndexOfTest, IndexOfTest3);
167	ADD_TEST4(BLooper, suite, TIndexOfTest, IndexOfTest4);
168	ADD_TEST4(BLooper, suite, TIndexOfTest, IndexOfTest5);
169	ADD_TEST4(BLooper, suite, TIndexOfTest, IndexOfTest6);
170
171	return suite;
172}
173//------------------------------------------------------------------------------
174
175/*
176 * $Log $
177 *
178 * $Id  $
179 *
180 */
181
182
183