1//------------------------------------------------------------------------------
2//	LockLooper.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 "LockLooperTest.h"
15#include "LockLooperTestCommon.h"
16
17// Local Defines ---------------------------------------------------------------
18
19// Globals ---------------------------------------------------------------------
20
21//------------------------------------------------------------------------------
22/**
23	LockLooper();
24	@case		handler has no looper
25	@results	Returns false
26 */
27void TLockLooperTest::LockLooper1()
28{
29	BHandler Handler;
30	CPPUNIT_ASSERT(!Handler.LockLooper());
31}
32//------------------------------------------------------------------------------
33/**
34	LockLooper();
35	@case		handler has a looper which is initially unlocked
36	@results	Returns true
37 */
38void TLockLooperTest::LockLooper2()
39{
40	BLooper Looper;
41	BHandler Handler;
42	Looper.AddHandler(&Handler);
43	if (Looper.IsLocked())
44	{
45		// Make sure the looper is unlocked
46		Looper.Unlock();
47	}
48	CPPUNIT_ASSERT(Handler.LockLooper());
49}
50//------------------------------------------------------------------------------
51/**
52	LockLooper();
53	@case		handler has a looper which is initially locked
54	@results	Returns true
55 */
56void TLockLooperTest::LockLooper3()
57{
58	BLooper Looper;
59	BHandler Handler;
60	Looper.AddHandler(&Handler);
61	Looper.Lock();
62	CPPUNIT_ASSERT(Handler.LockLooper());
63}
64//------------------------------------------------------------------------------
65/**
66	LockLooper();
67	@case		handler has a looper which is locked in another thread
68	@results	Returns false
69 */
70void TLockLooperTest::LockLooper4()
71{
72	BLooper Looper;
73	BHandler Handler;
74	Looper.AddHandler(&Handler);
75	if (Looper.IsLocked())
76	{
77		Looper.Unlock();
78	}
79
80	TLockLooperInfo info(&Looper);
81	thread_id tid = spawn_thread(LockLooperThreadFunc, "LockLooperHelperThread",
82								 B_NORMAL_PRIORITY, (void*)&info);
83	resume_thread(tid);
84	info.LockTest();
85
86	CPPUNIT_ASSERT(!Handler.LockLooper());
87	info.UnlockThread();
88}
89//------------------------------------------------------------------------------
90Test* TLockLooperTest::Suite()
91{
92	TestSuite* SuiteOfTests = new TestSuite("BHandler::LockLooper");
93
94	ADD_TEST4(BHandler, SuiteOfTests, TLockLooperTest, LockLooper1);
95	ADD_TEST4(BHandler, SuiteOfTests, TLockLooperTest, LockLooper2);
96	ADD_TEST4(BHandler, SuiteOfTests, TLockLooperTest, LockLooper3);
97//	ADD_TEST4(BHandler, SuiteOfTests, TLockLooperTest, LockLooper4);
98
99	return SuiteOfTests;
100}
101//------------------------------------------------------------------------------
102
103/*
104 * $Log $
105 *
106 * $Id  $
107 *
108 */
109
110
111