1// AppRunner.h 2 3#ifndef APP_RUNNER_H 4#define APP_RUNNER_H 5 6#include <stdio.h> 7 8#include <DataIO.h> 9#include <Entry.h> 10#include <Locker.h> 11 12class AppRunner { 13public: 14 AppRunner(bool requestQuitOnDestruction = false); 15 ~AppRunner(); 16 17 status_t Run(const char *command, const char *args = NULL, 18 bool findCommand = true); 19 bool HasQuitted(); 20 void WaitFor(bool requestQuit = false); 21 team_id Team(); 22 port_id AppLooperPort(); 23 status_t GetRef(entry_ref *ref); 24 status_t RequestQuit(); 25 26 status_t GetOutput(BString *buffer); 27 ssize_t ReadOutput(void *buffer, size_t size); 28 ssize_t ReadOutputAt(off_t position, void *buffer, size_t size); 29 30private: 31 static int32 _ReaderEntry(void *data); 32 int32 _ReaderLoop(); 33 34 static bool _LockTeamPort(); 35 static void _UnlockTeamPort(); 36 static port_id _ReadPortID(BMessenger &messenger); 37 38private: 39 BLocker fOutputLock; 40 port_id fRemotePort; 41 BMallocIO fOutput; 42 thread_id fReader; 43 team_id fTeam; 44 entry_ref fRef; 45 BMessenger fMessenger; 46 bool fRequestQuitOnDestruction; 47 48 static port_id fTeamPort; 49 static BLocker fTeamPortLock; 50}; 51 52status_t find_test_app(const char *testApp, BString *path); 53status_t find_test_app(const char *testApp, entry_ref *ref); 54 55#endif // APP_RUNNER_H 56