1//------------------------------------------------------------------------------
2//	MessageMessengerItemTest.h
3//
4//------------------------------------------------------------------------------
5
6#ifndef MESSAGEMESSENGERITEMTEST_H
7#define MESSAGEMESSENGERITEMTEST_H
8
9// Standard Includes -----------------------------------------------------------
10
11// System Includes -------------------------------------------------------------
12#include <Looper.h>
13#include <Messenger.h>
14
15// Project Includes ------------------------------------------------------------
16
17// Local Includes --------------------------------------------------------------
18#include "MessageItemTest.h"
19
20// Local Defines ---------------------------------------------------------------
21
22// Globals ---------------------------------------------------------------------
23
24struct TMessengerFuncPolicy
25{
26	static status_t Add(BMessage& msg, const char* name, BMessenger& val)
27		{ return msg.AddMessenger(name, val); }
28	static status_t AddData(BMessage& msg, const char* name, type_code type,
29							BMessenger* data, ssize_t size, bool)
30		{ return msg.AddData(name, type, data, size); }
31	static status_t Find(BMessage& msg, const char* name, int32 index,
32						 BMessenger* val)
33		{ return msg.FindMessenger(name, index, val); }
34	static status_t ShortFind(BMessage& msg, const char* name, BMessenger* val)
35		{ return msg.FindMessenger(name, val); }
36	static BMessenger QuickFind(BMessage& msg, const char* name, int32 index)
37	{
38		BMessenger msngr;
39		msg.FindMessenger(name, index, &msngr);
40		return msngr;
41	}
42	static bool Has(BMessage& msg, const char* name, int32 index)
43		{ return msg.HasMessenger(name, index); }
44	static status_t Replace(BMessage& msg, const char* name, int32 index,
45							BMessenger& val)
46		{ return msg.ReplaceMessenger(name, index, val); }
47	static status_t FindData(BMessage& msg, const char* name, type_code type,
48							 int32 index, const void** data, ssize_t* size)
49		{ return msg.FindData(name, type, index, data, size); }
50
51	private:
52		static BMessenger sMsg;
53};
54BMessenger TMessengerFuncPolicy::sMsg;
55
56struct TMessengerInitPolicy : public ArrayTypeBase<BMessenger>
57{
58	inline static BMessenger Zero()		{ return BMessenger(); }
59	inline static BMessenger Test1()	{ return BMessenger("application/x-vnd.Be-NPOS"); }
60	inline static BMessenger Test2()	{ return BMessenger(&sLooper); }
61	inline static size_t SizeOf(const BMessenger&)	{ return sizeof (BMessenger); }
62	inline static ArrayType Array()
63	{
64		ArrayType array;
65		array.push_back(Zero());
66		array.push_back(Test1());
67		array.push_back(Test2());
68		return array;
69	}
70
71	private:
72		static BLooper sLooper;
73};
74// bonefish: TODO: Sorry, but this sucks. Just loading the App Kit test add-on
75// will already create a BLooper.
76BLooper TMessengerInitPolicy::sLooper;
77
78struct TMessengerAssertPolicy
79{
80	inline static BMessenger Zero()		{ return BMessenger(); }
81	inline static BMessenger Invalid()	{ return BMessenger(); }
82	inline static bool Size(size_t size, BMessenger& t)
83		{ return size == sizeof (t); }
84};
85
86typedef TMessageItemTest
87<
88	BMessenger,
89	B_MESSENGER_TYPE,
90	TMessengerFuncPolicy,
91	TMessengerInitPolicy,
92	TMessengerAssertPolicy
93>
94TMessageMessengerItemTest;
95
96#endif	// MESSAGEMESSENGERITEMTEST_H
97
98/*
99 * $Log $
100 *
101 * $Id  $
102 *
103 */
104
105