⛏️ index : haiku.git

BApplication(const char *signature)
case 1:	signature is NULL =>
		Should print error message and quit.
case 2:	signature is no valid MIME string =>
		Should print error message and quit.
case 3:	signature is a valid MIME string, but doesn't have the "application"
		supertype =>
		Should print error message and quit.
case 4:	signature is a valid MIME string with "application" supertype,
		but a different one than in the app attributes/resources =>
		Should print warning message and continue.
		InitCheck() should return B_OK.
case 5:	signature is a valid MIME string with "application" supertype,
		and the same as in the app attributes/resources =>
		Shouldn't print anything at all and continue.
		InitCheck() should return B_OK.


BApplication(const char *signature, status_t *error)
cases similar to those of BApplication(const char *), if error is NULL,
otherwise the app does not quit and error is set to the same value as
returned by InitCheck(), which is B_BAD_VALUE on error.

thread_id Run()
case 1:	launch the app two times: B_MULTIPLE_LAUNCH | B_ARGV_ONLY,
		no command line args, send B_QUIT_REQUESTED to both of them =>
		first app:	ReadyToRun(), QuitRequested()
		second app:	ReadyToRun(), QuitRequested()
case 2:	launch the app two times: B_MULTIPLE_LAUNCH | B_ARGV_ONLY,
		command line args, send B_QUIT_REQUESTED to both of them =>
		first app:	ArgvReceived(), ReadyToRun(), QuitRequested()
		second app:	ArgvReceived(), ReadyToRun(), QuitRequested()
case 3:	launch the app two times: B_MULTIPLE_LAUNCH,
		no command line args, send B_QUIT_REQUESTED to both of them =>
		first app:	ReadyToRun(), QuitRequested()
		second app:	ReadyToRun(), QuitRequested()
case 4:	launch the app two times: B_MULTIPLE_LAUNCH,
		command line args, send B_QUIT_REQUESTED to both of them =>
		first app:	ArgvReceived(), ReadyToRun(), QuitRequested()
		second app:	ArgvReceived(), ReadyToRun(), QuitRequested()
case 5:	launch the app two times: B_SINGLE_LAUNCH | B_ARGV_ONLY,
		no command line args, send B_QUIT_REQUESTED to both of them =>
		first app:	ReadyToRun(), QuitRequested()
		second app:	quits
case 6:	launch the app two times: B_SINGLE_LAUNCH | B_ARGV_ONLY,
		command line args, send B_QUIT_REQUESTED to both of them =>
		first app:	ArgvReceived(), ReadyToRun(), ArgvReceived(),
					QuitRequested()
		second app:	quits
case 7:	launch the app two times: B_SINGLE_LAUNCH,
		no command line args, send B_QUIT_REQUESTED to both of them =>
		first app:	ReadyToRun(), QuitRequested()
		second app:	quits
case 8:	launch the app two times: B_SINGLE_LAUNCH,
		command line args, send B_QUIT_REQUESTED to both of them =>
		first app:	ArgvReceived(), ReadyToRun(), ArgvReceived(),
					QuitRequested()
		second app:	quits
case 9:	launch two apps with the same signature: B_SINGLE_LAUNCH | B_ARGV_ONLY,
		no command line args, send B_QUIT_REQUESTED to both of them =>
		first app:	ReadyToRun(), QuitRequested()
		second app:	ReadyToRun(), QuitRequested()
case 10:launch two apps with the same signature: B_SINGLE_LAUNCH | B_ARGV_ONLY,
		command line args, send B_QUIT_REQUESTED to both of them =>
		first app:	ArgvReceived(), ReadyToRun(), QuitRequested()
		second app:	ArgvReceived(), ReadyToRun(), QuitRequested()
case 11:launch two apps with the same signature: B_SINGLE_LAUNCH,
		no command line args, send B_QUIT_REQUESTED to both of them =>
		first app:	ReadyToRun(), QuitRequested()
		second app:	ReadyToRun(), QuitRequested()
case 12:launch two apps with the same signature: B_SINGLE_LAUNCH,
		command line args, send B_QUIT_REQUESTED to both of them =>
		first app:	ArgvReceived(), ReadyToRun(), QuitRequested()
		second app:	ArgvReceived(), ReadyToRun(), QuitRequested()
case 13:launch the app two times: B_EXCLUSIVE_LAUNCH | B_ARGV_ONLY,
		no command line args, send B_QUIT_REQUESTED to both of them =>
		first app:	ReadyToRun(), QuitRequested()
		second app:	quits
case 14:launch the app two times: B_EXCLUSIVE_LAUNCH | B_ARGV_ONLY,
		command line args, send B_QUIT_REQUESTED to both of them =>
		first app:	ArgvReceived(), ReadyToRun(), QuitRequested()
		second app:	quits
case 15:launch the app two times: B_EXCLUSIVE_LAUNCH,
		no command line args, send B_QUIT_REQUESTED to both of them =>
		first app:	ReadyToRun(), QuitRequested()
		second app:	quits
case 16:launch the app two times: B_EXCLUSIVE_LAUNCH,
		command line args, send B_QUIT_REQUESTED to both of them =>
		first app:	ArgvReceived(), ReadyToRun(), ArgvReceived(),
					QuitRequested()
		second app:	quits
case 17:launch two apps with the same signature:
		B_EXCLUSIVE_LAUNCH | B_ARGV_ONLY,
		no command line args, send B_QUIT_REQUESTED to both of them =>
		first app:	ReadyToRun(), QuitRequested()
		second app:	quits
case 18:launch two apps with the same signature:
		B_EXCLUSIVE_LAUNCH | B_ARGV_ONLY,
		command line args, send B_QUIT_REQUESTED to both of them =>
		first app:	ArgvReceived(), ReadyToRun(), QuitRequested()
		second app:	quits
case 19:launch two apps with the same signature: B_EXCLUSIVE_LAUNCH,
		no command line args, send B_QUIT_REQUESTED to both of them =>
		first app:	ReadyToRun(), QuitRequested()
		second app:	quits
case 20:launch two apps with the same signature: B_EXCLUSIVE_LAUNCH,
		command line args, send B_QUIT_REQUESTED to both of them =>
		first app:	ArgvReceived(), ReadyToRun(), ArgvReceived(),
					QuitRequested()
		second app:	quits
case 21:launch the app two times: first: B_EXCLUSIVE_LAUNCH,
		second: B_EXCLUSIVE_LAUNCH | B_ARGV_ONLY,
		command line args, send B_QUIT_REQUESTED to both of them =>
		first app:	ArgvReceived(), ReadyToRun(), ArgvReceived(),
					QuitRequested()
		second app:	quits

case 22:launch the app two times: first: B_EXCLUSIVE_LAUNCH | B_ARGV_ONLY,
		second: B_EXCLUSIVE_LAUNCH,
		command line args, send B_QUIT_REQUESTED to both of them =>
		first app:	ArgvReceived(), ReadyToRun(), QuitRequested()
		second app:	quits

void Quit()
case 1:	not running application =>
		Should delete the application object.
case 2:	running application, call from looper thread =>
		Run() should return. Should not delete the application object.
case 3:	running application, call from other thread =>
		Run() should return. Should not delete the application object.
case 4:	running application, call from other thread, but don't lock before =>
		Should print error message, but proceed anyway. Run() should return.
		Should not delete the application object.

bool QuitRequested()
case 1:	return false the first time, true the second time it is invoked =>
		Should not quit after the first time, but after the second one.