BRoster()
none

bool IsRunning(const char *signature) const
case 1:	signature is NULL =>
		Should return false.
case 2:	signature is not NULL, but no app with this signature is running =>
		Should return false.
case 3:	signature is not NULL and an (two) app(s) with this signature is (are)
		running; quit one; quit the second one =>
		Should return true; true; false.

bool IsRunning(entry_ref *ref) const
case 1:	ref is NULL =>
		Should return false.
case 2:	ref is not NULL, but no app with this ref is running =>
		Should return false.
case 3:	ref is not NULL and an (two) app(s) with this ref is (are)
		running; quit one; quit the second one =>
		Should return true; true; false.

team_id TeamFor(const char *signature) const
case 1:	signature is NULL =>
		Should return B_BAD_VALUE.
case 2:	signature is not NULL, but no app with this signature is running =>
		Should return B_ERROR.
case 3:	signature is not NULL and an (two) app(s) with this signature is (are)
		running; quit one; quit the second one =>
		Should return the ID of one of the teams; the ID of the second team;
		B_ERROR.

team_id TeamFor(entry_ref *ref) const
case 1:	ref is NULL =>
		Should return B_BAD_VALUE.
case 2:	ref is not NULL, but no app with this ref is running =>
		Should return B_ERROR.
case 3:	ref is not NULL and an (two) app(s) with this ref is (are)
		running; quit one; quit the second one =>
		Should return the ID of one of the teams; the ID of the second team;
		B_ERROR.

status_t GetAppInfo(const char *signature, app_info *info) const
case 1:	signature is NULL or info is NULL =>
		Should return B_BAD_VALUE.
case 2:	signature/info are not NULL, but no app with this signature is
		running =>
		Should return B_ERROR.
case 3:	signature/info are not NULL and an (two) app(s) with this signature
		is (are) running; quit one; quit the second one =>
		Should
		- fill the app info with the data of one of the apps and return B_OK;
		- fill the app info with the data of the second apps and return B_OK;
		- return B_ERROR.

status_t GetAppInfo(entry_ref *ref, app_info *info) const
case 1:	ref is NULL or info is NULL =>
		Should return B_BAD_VALUE.
case 2:	ref/info are not NULL, but no app with this ref is running =>
		Should return B_ERROR.
case 3:	ref/info are not NULL and an (two) app(s) with this ref
		is (are) running; quit one; quit the second one =>
		Should
		- fill the app info with the data of one of the apps and return B_OK;
		- fill the app info with the data of the second apps and return B_OK;
		- return B_ERROR.

status_t GetRunningAppInfo(team_id team, app_info *info) const
case 1:	info is NULL =>
		Should return B_BAD_VALUE.
case 2:	info is not NULL, but no app with the team ID is running =>
		Should return B_BAD_TEAM_ID, if team >= 0, B_ERROR otherwise.
case 3:	info is not NULL, and an app with the team ID is running =>
		Should fill the app info and return B_OK.

void GetAppList(BList *teamIDList) const
case 1:	teamIDList is NULL =>
		Should do nothing.
case 2:	teamIDList is not NULL and not empty =>
		Should append the team IDs of all running apps to teamIDList.

void GetAppList(const char *signature, BList *teamIDList) const
case 1:	signature or teamIDList are NULL =>
		Should do nothing/should not modify teamIDList.
case 2:	teamIDList is not NULL and not empty, signature is not NULL, but no
		app with this signature is running =>
		Should not modify teamIDList.
case 3:	teamIDList is not NULL and not empty, signature is not NULL and
		app(s) with this signature is (are) running =>
		Should append the team IDs of all running apps with the supplied
		signature to teamIDList.
		
void GetRecentApps(BMessage *refList, int32 maxCount)
case A1:	refList is NULL; maxCount < 0
			R5: crashes
			OBOS: should quietly do nothing.
case A1:	refList is NULL; maxCount == 0
			R5: crashes
			OBOS: should quietly do nothing.
case A1:	refList is NULL; maxCount > 0
			R5: crashes
			OBOS: should quietly do nothing.
case B1:	refList is valid; maxCount < 0
			Should return zero recent apps
case B2:	refList is valid; maxCount == 0
			Should return zero recent apps
case B3:	refList is valid; maxCount > 0
			Should return maxCount apps
case C1:	Normal function, with the second most recent app being one with a
			qualifying BEOS:APP_FLAGS attribute, and the most recent app launched
			being one with no BEOS:APP_FLAGS attribute.
			The latter application should *not* appear at the top
			of the recent apps list.
case C2:	Normal function, with the second most recent app being one with a
			qualifying BEOS:APP_FLAGS attribute, and the most recent app launched
			also being one with a qualifying BEOS:APP_FLAGS attribute.
			The latter application *should* appear at the top of the recent
			apps list.
case C3:	Normal function, with the second most recent app being one with a
			qualifying BEOS:APP_FLAGS attribute, and the most recent app launched
			being one with a non-qualifying BEOS:APP_FLAGS attribute.
			The latter application *should* appear at the top of the recent
			apps list.

void GetRecentDocuments(BMessage *refList, int32 maxCount, const char *fileType,
                        const char *appSig)
void GetRecentDocuments(BMessage *refList, int32 maxCount, const char *fileTypes[],
                        int32 fileTypesCount, const char *appSig)
case 1:	refList is NULL; all other params are valid.
		Should quietly do nothing.
case 2:	refList is non-NULL, maxCount is zero, fileType and appSig are NULL.
		R5: Returns one recent document.
		OBOS: Returns an empty message
case 3:	refList is non-NULL, maxCount is negative, fileType and appSig are NULL.
		R5: Returns one recent document.
		OBOS: Returns an empty message
case 4:	Normal function.
case 5: Duplicate entries with different app sigs are added. When requested,
        only most recent instance among the duplicates is returned.

void GetRecentFolders(BMessage *refList, int32 maxCount, const char *appSig)
case 1:	refList is NULL; maxCount is valid, appSig is NULL.
		Should quietly do nothing.
case 2:	refList is valid, maxCount is negative, appSig is NULL.
		R5: Returns one recent document.
		OBOS: Returns an empty message.
case 3:	refList is valid, maxCount is zero, appSig is NULL.
		R5: Returns one recent document.
		OBOS: Returns an empty message.
case 4: Normal function
case 5: Duplicate entries with different app sigs are added. When requested,
        only most recent instance among the duplicates is returned.

status_t FindApp() const: common cases
case 1:	uninstalled type mimeType =>
		Should return B_LAUNCH_FAILED_APP_NOT_FOUND.
case 2:	installed type mimeType, no preferred app =>
		Should return B_LAUNCH_FAILED_NO_PREFERRED_APP.
case 3:	installed type mimeType, preferred app, app type not installed,
		app has no signature =>
		Should return B_LAUNCH_FAILED_APP_NOT_FOUND.
case 4:	installed type mimeType, preferred app, app type not installed,
		app has signature =>
		Should return B_OK and set the ref to refer to the application's
		executable. Should install the app type and set the app hint on it.
case 5:	installed type mimeType, preferred app, app type installed,
		app has signature =>
		Should return B_OK and set the ref to refer to the application's
		executable. Should set the app hint on the app type.
case 6:	installed type mimeType, preferred app, app type installed,
		app has signature, app has no execute permission =>
		Should return B_OK and set the ref to refer to the application's
		executable. Should set the app hint on the app type.
case 7:	installed type mimeType, preferred app, app type installed,
		two apps have the signature =>
		Should return B_OK and set the ref to refer to the application
		executable with the most recent modification time. Should set the app
		hint on the app type.
case 8:	installed type mimeType, preferred app, app type installed,
		two apps have the signature, one has a version info, the other one is
		newer =>
		Should return B_OK and set the ref to refer to the application
		executable with version info. Should set the app hint on the app type.
case 9:	installed type mimeType, preferred app, app type installed,
		two apps have the signature, both apps have a version info =>
		Should return B_OK and set the ref to refer to the application
		executable with the greater version. Should set the app
		hint on the app type.
case 10:installed type mimeType, preferred app, app type installed,
		preferred app type has an app hint that points to an app with a
		different signature =>
		Should return B_OK and set the ref to refer to the application's
		executable. Should remove the incorrect app hint on the app type.
		(OBOS: Should set the correct app hint.
		 Don't even return the wrong app?)
case 11:installed type mimeType, preferred app, app type installed,
		preferred app type has an app hint pointing to void,
		a differently named app with this signature exists =>
		Should return B_OK and set the ref to refer to the application's
		executable. (not R5: Should update the app hint on the app type?)
case 12:mimeType is app signature, not installed =>
		Should return B_OK and set the ref to refer to the application
		executable. Should set the app hint on the app type.
case 13:mimeType is installed, but has no preferred application,
		super type has preferred application =>
		Should return B_OK and set the ref to refer to the application
		executable associated with the preferred app of the supertype.
		Should set the app hint on the app type.
case 14:installed type mimeType, preferred app, app type not installed,
		app has signature, app is trash =>
		Should return B_LAUNCH_FAILED_APP_IN_TRASH.
case 15:installed type mimeType, preferred app, app type installed,
		preferred app type has an app hint pointing to void,
		no app with this signature exists =>
		Should return B_LAUNCH_FAILED_APP_NOT_FOUND and unset the app type's
		app hint.
case 16:installed type mimeType, preferred app, app type installed,
		preferred app type has an app hint pointing to a cyclic link,
		no app with this signature exists =>
		R5: Should return B_OK and set the ref to refer to the link.
		OBOS: Should return B_LAUNCH_FAILED_APP_NOT_FOUND and unset the app
		type's app hint.

status_t FindApp(const char *mimeType, entry_ref *app) const
case 1:	mimeType or app are NULL =>
		Should return B_BAD_VALUE.
case 2:	mimeType is invalid =>
		Should return B_BAD_VALUE.
case 3:	common tests (all)

status_t FindApp(entry_ref *ref, entry_ref *app) const
case 1:	ref or app are NULL =>
		Should return B_BAD_VALUE.
case 2:	ref doesn't refer to an existing entry =>
		Should return B_ENTRY_NOT_FOUND.
case 3:	ref is valid, file has type and preferred app, preferred app is in
		trash =>
		Should return B_LAUNCH_FAILED_APP_IN_TRASH.
case 4:	ref is valid, file has type and preferred app, app type is not
		installed, app exists and has signature =>
		Should return B_OK and set the ref to refer to the file's (not the
		file type's) preferred application's executable. Should install the
		app type and set the app hint on it.
case 5:	ref is valid, file has no type, but preferred app, app type is not
		installed, app exists and has signature =>
		Should return B_OK and set the ref to refer to the application's
		executable. Should install the app type and set the app hint on it.
case 6:	ref is valid, file has type and app hint, the type's preferred app
		type is not installed, app exists and has signature =>
		Should return B_OK and set the ref to refer to the file type's
		preferred application's executable. Should install the app type and
		set the app hint on it.
case 7:	ref is valid, file has type, the type's preferred app
		type is not installed, app exists and has signature, file is
		executable =>
		Should return B_OK and set the ref to refer to the file.
		Should not set the app hint on the app or file type (Why?).
case 8:	ref is valid and refers to a link to a file, file has type,
		the type's preferred app type is not installed,
		app exists and has signature =>
		Should return B_OK and set the ref to refer to the file type's
		preferred application's executable. Should install the app type and
		set the app hint on it.
case 9:	ref is valid, file has type,
		common cases 1-14
case 10:ref is valid, file has no type, sniffing results in a type,
		type is set on file,
		common cases 2-14
case 11:ref is valid and refers to a cyclic link =>
		Should return B_LAUNCH_FAILED_NO_RESOLVE_LINK.
case 12:ref is valid and refers to a link to void =>
		Should return B_LAUNCH_FAILED_NO_RESOLVE_LINK.

status_t Launch() const: common cases
case 1:	uninstalled type mimeType =>
		Should return B_LAUNCH_FAILED_APP_NOT_FOUND.
case 2:	installed type mimeType, no preferred app =>
		Should return B_LAUNCH_FAILED_NO_PREFERRED_APP.
case 3:	installed type mimeType, preferred app, app type not installed,
		app has no signature =>
		Should return B_LAUNCH_FAILED_APP_NOT_FOUND.
case 4:	installed type mimeType, preferred app, app type not installed,
		app has signature =>
		Should return B_OK and set team to the ID of the team running the
		application's executable. Should install the app type and set the
		app hint on it.
case 5:	installed type mimeType, preferred app, app type installed,
		app has signature =>
		Should return B_OK and set team to the ID of the team running the
		application's executable. Should set the app hint on the app type.
case 6:	installed type mimeType, preferred app, app type installed,
		app has signature, app has no execute permission =>
		Should return B_OK and set team to the ID of the team running the
		application's executable. Should set the app hint on the app type.
case 7:	installed type mimeType, preferred app, app type installed,
		two apps have the signature =>
		Should return B_OK and set team to the ID of the team running the
		application executable with the most recent modification time.
		Should set the app hint on the app type.
case 8:	installed type mimeType, preferred app, app type installed,
		two apps have the signature, one has a version info, the other one is
		newer =>
		Should return B_OK and set team to the ID of the team running the
		application executable with version info. Should set the app hint
		on the app type.
case 9:	installed type mimeType, preferred app, app type installed,
		two apps have the signature, both apps have a version info =>
		Should return B_OK and set team to the ID of the team running the
		application executable with the greater version. Should set the app
		hint on the app type.
case 10:installed type mimeType, preferred app, app type installed,
		preferred app type has an app hint that points to an app with a
		different signature =>
		Should return B_OK and set team to the ID of the team running the
		application's executable. Should remove the incorrect app hint on
		the app type.
		(OBOS: Should set the correct app hint.
		 Don't even run the wrong app?)
case 11:installed type mimeType, preferred app, app type installed,
		preferred app type has an app hint pointing to void,
		a differently named app with this signature exists =>
		Should return B_OK and set team to the ID of the team running the
		application's executable.
		(not R5: Should update the app hint on the app type?)
case 12:mimeType is app signature, not installed =>
		Should return B_OK and set team to the ID of the team running the
		application executable. Should set the app hint on the app type.
case 13:mimeType is installed, but has no preferred application,
		super type has preferred application =>
		Should return B_OK and set team to the ID of the team running the
		application executable associated with the preferred app of the
		supertype. Should set the app hint on the app type.
case 14:installed type mimeType, preferred app, app type not installed,
		app has signature, app is trash =>
		Should return B_LAUNCH_FAILED_APP_IN_TRASH.
case 15:installed type mimeType, preferred app, app type not installed,
		app has signature, team is NULL =>
		Should return B_OK and set team to the ID of the team running the
		application's executable. Should install the app type and set the
		app hint on it.
case 16:launch the app two times: B_MULTIPLE_LAUNCH | B_ARGV_ONLY =>
		first app:	ArgvReceived(), ReadyToRun(), QuitRequested()
		second app:	ArgvReceived(), ReadyToRun(), QuitRequested()
case 17:launch the app two times: B_MULTIPLE_LAUNCH =>
		first app:	{Message,Argv,Refs}Received()*, ReadyToRun(),
					QuitRequested()
		second app:	{Message,Argv,Refs}Received()*, ReadyToRun(),
					QuitRequested()
case 18:launch the app two times: B_SINGLE_LAUNCH | B_ARGV_ONLY =>
		first app:	ArgvReceived(), ReadyToRun(), QuitRequested()
					(No second ArgvReceived()!)
		second app:	Launch() fails with B_ALREADY_RUNNING
case 19:launch the app two times: B_SINGLE_LAUNCH =>
		first app:	{Message,Argv,Refs}Received()*, ReadyToRun(),
					{Message,Argv,Refs}Received()*, QuitRequested()
		second app:	Launch() fails with B_ALREADY_RUNNING
case 20:launch two apps with the same signature:
		B_SINGLE_LAUNCH | B_ARGV_ONLY =>
		first app:	ArgvReceived(), ReadyToRun(), QuitRequested()
		second app:	ArgvReceived(), ReadyToRun(), QuitRequested()
case 21:launch two apps with the same signature: B_SINGLE_LAUNCH =>
		first app:	{Message,Argv,Refs}Received()*, ReadyToRun(),
					QuitRequested()
		second app:	{Message,Argv,Refs}Received()*, ReadyToRun(),
					QuitRequested()
case 22:launch the app two times: B_EXCLUSIVE_LAUNCH | B_ARGV_ONLY =>
		first app:	ArgvReceived(), ReadyToRun(), QuitRequested()
					(No second ArgvReceived()!)
		second app:	Launch() fails with B_ALREADY_RUNNING
case 23:launch the app two times: B_EXCLUSIVE_LAUNCH =>
		first app:	{Message,Argv,Refs}Received()*, ReadyToRun(),
					{Message,Argv,Refs}Received()*, QuitRequested()
		second app:	Launch() fails with B_ALREADY_RUNNING
case 24:launch two apps with the same signature:
		B_EXCLUSIVE_LAUNCH | B_ARGV_ONLY =>
		first app:	ArgvReceived(), ReadyToRun(), QuitRequested()
					(No second ArgvReceived()!)
		second app:	Launch() fails with B_ALREADY_RUNNING
case 25:launch two apps with the same signature: B_EXCLUSIVE_LAUNCH =>
		first app:	{Message,Argv,Refs}Received()*, ReadyToRun(),
					{Message,Argv,Refs}Received()*, QuitRequested()
		second app:	Launch() fails with B_ALREADY_RUNNING
case 26:launch two apps with the same signature:
		first: B_EXCLUSIVE_LAUNCH,
		second: B_EXCLUSIVE_LAUNCH | B_ARGV_ONLY =>
		first app:	{Message,Argv,Refs}Received()*, ReadyToRun(),
					QuitRequested()
		second app:	Launch() fails with B_ALREADY_RUNNING
case 27:launch two apps with the same signature:
		first: B_EXCLUSIVE_LAUNCH | B_ARGV_ONLY,
		second: B_EXCLUSIVE_LAUNCH =>
		first app:	ArgvReceived(), ReadyToRun(), QuitRequested()
					(No second ArgvReceived()!)
		second app:	Launch() fails with B_ALREADY_RUNNING
case 28:installed type mimeType, preferred app, app type installed,
		preferred app type has an app hint pointing to void,
		no app with this signature exists =>
		Should return B_LAUNCH_FAILED_APP_NOT_FOUND and unset the app type's
		app hint.
case 29:installed type mimeType, preferred app, app type installed,
		preferred app type has an app hint pointing to a cyclic link,
		no app with this signature exists =>
		Should return
		OBOS: B_LAUNCH_FAILED_APP_NOT_FOUND and unset the app type's app hint.
		R5: B_ENTRY_NOT_FOUND or B_LAUNCH_FAILED_NO_RESOLVE_LINK.
case 30:installed type mimeType, preferred app, app type installed,
		preferred app type has an app hint that points to an app without a
		signature, app will pass a different signature to the
		BApplication constructor =>
		Should return B_OK and set team to the ID of the team running the
		application's executable. Should remove the incorrect app hint on
		the app type. BRoster::GetRunningAppInfo() should return an app_info
		with the signature passed to the BApplication constructor.

status_t Launch(const char *mimeType, BMessage *initialMsg,
				team_id *appTeam) const
case 1:	mimeType is NULL =>
		Should return B_BAD_VALUE.
case 2:	mimeType is invalid =>
		Should return B_BAD_VALUE.
case 3:	common cases (all)
case 4:	installed type mimeType, preferred app, app type not installed,
		app has signature, NULL initialMsg =>
		Should return B_OK and set team to the ID of the team running the
		application's executable. Should install the app type and set the
		app hint on it.


status_t Launch(const char *mimeType, BList *messageList,
				team_id *appTeam) const
case 1:	mimeType is NULL =>
		Should return B_BAD_VALUE.
case 2:	mimeType is invalid =>
		Should return B_BAD_VALUE.
case 3:	common cases (all)
case 4:	installed type mimeType, preferred app, app type not installed,
		app has signature, NULL messageList =>
		Should return B_OK and set team to the ID of the team running the
		application's executable. Should install the app type and set the
		app hint on it.
case 5:	installed type mimeType, preferred app, app type not installed,
		app has signature, empty messageList =>
		Should return B_OK and set team to the ID of the team running the
		application's executable. Should install the app type and set the
		app hint on it.

status_t Launch(const char *mimeType, int argc, char **args,
				team_id *appTeam) const
case 1:	mimeType is NULL or argc > 0 and args is NULL =>
		Should return B_BAD_VALUE.
case 2:	mimeType is invalid =>
		Should return B_BAD_VALUE.
case 3:	common cases (all)
case 4:	installed type mimeType, preferred app, app type not installed,
		app has signature, NULL args, argc is 0 =>
		Should return B_OK and set team to the ID of the team running
		the application's executable. Should install the app type and set the
		app hint on it.

status_t Launch(const entry_ref *ref, const BMessage *initialMessage,
				team_id *app_team) const
case 1:	ref is NULL =>
		Should return B_BAD_VALUE.
case 2:	ref doesn't refer to an existing entry =>
		Should return B_ENTRY_NOT_FOUND.
case 3:	ref is valid, file has type and preferred app, app type is not
		installed, app exists and has signature =>
		Should return B_OK and set team to the ID of the team running the
		file's (not the file type's) preferred application's executable.
		Should install the app type and set the app hint on it.
case 4:	ref is valid, file has no type, but preferred app, app type is not
		installed, app exists and has signature =>
		Should return B_OK and set team to the ID of the team running the
		application's executable. Should install the app type and set the app
		hint on it.
case 5:	ref is valid, file has type and app hint, the type's preferred app
		type is not installed, app exists and has signature =>
		Should return B_OK and set team to the ID of the team running the file
		type's preferred application's executable. Should install the app
		type and set the app hint on it.
case 6:	ref is valid, file has type, the type's preferred app
		type is not installed, app exists and has signature, file has
		executable permission, but is not executable  =>
		Should return B_LAUNCH_FAILED_EXECUTABLE.
		Should not set the app hint on the app or file type.
case 7:	ref is valid and refers to a link to a file, file has type,
		the type's preferred app type is not installed,
		app exists and has signature =>
		Should return B_OK and set team to the ID of the team running the file
		type's preferred application's executable. Should install the app
		type and set the app hint on it.
case 8:	ref is valid, file has type,
		common cases 1-14
case 9:	ref is valid, file has no type, sniffing results in a type,
		type is set on file,
		common cases 2-14
case 10:ref is valid, file has no type, but preferred app, app type is not
		installed, app exists and has signature, NULL initialMessage =>
		Should return B_OK and set team to the ID of the team running the
		application's executable. Should install the app type and set the app
		hint on it.
case 11:ref is valid and refers to a cyclic link =>
		Should return B_LAUNCH_FAILED_NO_RESOLVE_LINK.
case 12:ref is valid and refers to a link to void =>
		Should return B_LAUNCH_FAILED_NO_RESOLVE_LINK.
case 13:ref is valid and refers to an executable without signature =>
		Should return B_OK and set team to the ID of the team running the
		application's executable.


status_t Launch(const entry_ref *ref, const BList *messageList,
				team_id *appTeam) const
case 1:	ref is NULL =>
		Should return B_BAD_VALUE.
case 2:	ref doesn't refer to an existing entry =>
		Should return B_ENTRY_NOT_FOUND.
case 3:	ref is valid, file has type and preferred app, app type is not
		installed, app exists and has signature =>
		Should return B_OK and set team to the ID of the team running the
		file's (not the file type's) preferred application's executable.
		Should install the app type and set the app hint on it.
case 4:	ref is valid, file has no type, but preferred app, app type is not
		installed, app exists and has signature =>
		Should return B_OK and set team to the ID of the team running the
		application's executable. Should install the app type and set the app
		hint on it.
case 5:	ref is valid, file has type and app hint, the type's preferred app
		type is not installed, app exists and has signature =>
		Should return B_OK and set team to the ID of the team running the file
		type's preferred application's executable. Should install the app
		type and set the app hint on it.
case 6:	ref is valid, file has type, the type's preferred app
		type is not installed, app exists and has signature, file has
		executable permission, but is not executable  =>
		Should return B_LAUNCH_FAILED_EXECUTABLE.
		Should not set the app hint on the app or file type.
case 7:	ref is valid and refers to a link to a file, file has type,
		the type's preferred app type is not installed,
		app exists and has signature =>
		Should return B_OK and set team to the ID of the team running the file
		type's preferred application's executable. Should install the app
		type and set the app hint on it.
case 8:	ref is valid, file has type,
		common cases 1-14
case 9:	ref is valid, file has no type, sniffing results in a type,
		type is set on file,
		common cases 2-14
case 10:ref is valid, file has no type, but preferred app, app type is not
		installed, app exists and has signature, NULL messageList =>
		Should return B_OK and set team to the ID of the team running the
		application's executable. Should install the app type and set the app
		hint on it.
case 11:ref is valid, file has no type, but preferred app, app type is not
		installed, app exists and has signature, empty messageList =>
		Should return B_OK and set team to the ID of the team running the
		application's executable. Should install the app type and set the app
		hint on it.
case 12:ref is valid and refers to a cyclic link =>
		Should return B_LAUNCH_FAILED_NO_RESOLVE_LINK.
case 13:ref is valid and refers to a link to void =>
		Should return B_LAUNCH_FAILED_NO_RESOLVE_LINK.
case 14:ref is valid and refers to an executable without signature =>
		Should return B_OK and set team to the ID of the team running the
		application's executable.

status_t Launch(const entry_ref *ref, int argc, const char * const *args,
				team_id *appTeam) const
case 1:	ref is NULL =>
		Should return B_BAD_VALUE.
case 2:	ref doesn't refer to an existing entry =>
		Should return B_ENTRY_NOT_FOUND.
case 3:	ref is valid, file has type and preferred app, app type is not
		installed, app exists and has signature =>
		Should return B_OK and set team to the ID of the team running the
		file's (not the file type's) preferred application's executable.
		Should install the app type and set the app hint on it.
		ref is converted to path and added as additional argv.
case 4:	ref is valid, file has no type, but preferred app, app type is not
		installed, app exists and has signature =>
		Should return B_OK and set team to the ID of the team running the
		application's executable. Should install the app type and set the app
		hint on it.
		ref is converted to path and added as additional argv.
case 5:	ref is valid, file has type and app hint, the type's preferred app
		type is not installed, app exists and has signature =>
		Should return B_OK and set team to the ID of the team running the file
		type's preferred application's executable. Should install the app
		type and set the app hint on it.
		ref is converted to path and added as additional argv.
case 6:	ref is valid, file has type, the type's preferred app
		type is not installed, app exists and has signature, file has
		executable permission, but is not executable  =>
		Should return B_LAUNCH_FAILED_EXECUTABLE.
		Should not set the app hint on the app or file type.
case 7:	ref is valid and refers to a link to a file, file has type,
		the type's preferred app type is not installed,
		app exists and has signature =>
		Should return B_OK and set team to the ID of the team running the file
		type's preferred application's executable. Should install the app
		type and set the app hint on it.
		ref is converted to path and added as additional argv.
case 8:	ref is valid, file has type,
		common cases 1-14
		(ref is converted to path and added as additional argv.)
case 9:	ref is valid, file has no type, sniffing results in a type,
		type is set on file,
		common cases 2-14
		(ref is converted to path and added as additional argv.)
case 10:ref is valid, file has no type, but preferred app, app type is not
		installed, app exists and has signature, NULL args, argc is 0 =>
		Should return B_OK and set team to the ID of the team running the
		application's executable. Should install the app type and set the app
		hint on it. argv are ignored.
case 11:ref is valid, file has no type, but preferred app, app type is not
		installed, app exists and has signature, NULL args, argc > 0 =>
		Should return B_OK and set team to the ID of the team running the
		application's executable. Should install the app type and set the app
		hint on it. argv are ignored.
case 12:ref is valid and refers to a cyclic link =>
		Should return B_LAUNCH_FAILED_NO_RESOLVE_LINK.
case 13:ref is valid and refers to a link to void =>
		Should return B_LAUNCH_FAILED_NO_RESOLVE_LINK.
case 14:ref is valid and refers to an executable without signature =>
		Should return B_OK and set team to the ID of the team running the
		application's executable.

status_t Broadcast(BMessage *message) const
case 1:	NULL message =>
		Should return B_BAD_VALUE.
case 2:	valid message, several apps, one is B_ARGV_ONLY =>
		Should return B_OK and send the message to all (including the
		B_ARGV_ONLY) apps.
		Replies go to be_app_messenger.

status_t Broadcast(BMessage *message, BMessenger replyTo) const
case 1:	NULL message =>
		Should return B_BAD_VALUE.
case 2:	valid message, several apps, one is B_ARGV_ONLY, valid replyTo =>
		Should return B_OK and send the message to all (including the
		B_ARGV_ONLY) apps.
		Replies go to the specified messenger.
case 3:	valid message, several apps, one is B_ARGV_ONLY, invalid replyTo =>
		Should return B_OK and send the message to all (including the
		B_ARGV_ONLY) apps.
		Replies go to the roster!

status_t StartWatching(BMessenger target, uint32 eventMask) const
status_t StopWatching(BMessenger target) const
case 1:	{Start,Stop}Watching() with invalid messenger or invalid flags,
		StopWatching() non-watching messenger =>
		Should return B_OK/B_BAD_VALUE.
case 2:	several apps, several watchers, different eventMasks =>
		Should return B_OK...
		Watching ends, when target has become invalid and the next watching
		message is tried to be sent.
case 3:	call StartWatching() twice, second time with different mask =>
		Should return B_OK. The second call simply overrides the first one.
TODO: Watching app activation.