Added TestApp.{cpp,h}, since tests using the BTestApp class defined in
libcppunit.so don't work anymore with it, since it uses the BApplication code of libbe.so. Several tests still fail now, but none crashes. git-svn-id: file:///srv/svn/repos/haiku/trunk/current@3447 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
@@ -20,6 +20,7 @@ CommonTestLib libstoragetest.so
|
||||
ResourceStringsTest.cpp
|
||||
StatableTest.cpp
|
||||
SymLinkTest.cpp
|
||||
TestApp.cpp
|
||||
VolumeTest.cpp
|
||||
: <boot!home!config!lib>libopenbeos.so be stdc++.r4
|
||||
: be stdc++.r4
|
||||
|
||||
@@ -0,0 +1,136 @@
|
||||
// TestApp.cpp
|
||||
|
||||
#include <Autolock.h>
|
||||
|
||||
#include <TestApp.h>
|
||||
|
||||
// TestHandler
|
||||
|
||||
// MessageReceived
|
||||
void
|
||||
BTestHandler::MessageReceived(BMessage *message)
|
||||
{
|
||||
// clone and push it
|
||||
BMessage *clone = new BMessage(*message);
|
||||
fQueue.Lock();
|
||||
fQueue.AddMessage(clone);
|
||||
fQueue.Unlock();
|
||||
}
|
||||
|
||||
// Queue
|
||||
BMessageQueue &
|
||||
BTestHandler::Queue()
|
||||
{
|
||||
return fQueue;
|
||||
}
|
||||
|
||||
|
||||
// TestApp
|
||||
|
||||
// constructor
|
||||
BTestApp::BTestApp(const char *signature)
|
||||
: BApplication(signature),
|
||||
fAppThread(B_ERROR),
|
||||
fHandlers()
|
||||
{
|
||||
CreateTestHandler();
|
||||
Unlock();
|
||||
}
|
||||
|
||||
// destructor
|
||||
BTestApp::~BTestApp()
|
||||
{
|
||||
int32 count = fHandlers.CountItems();
|
||||
for (int32 i = count - 1; i >= 0; i--)
|
||||
DeleteTestHandler(TestHandlerAt(i));
|
||||
}
|
||||
|
||||
// Init
|
||||
status_t
|
||||
BTestApp::Init()
|
||||
{
|
||||
status_t error = B_OK;
|
||||
fAppThread = spawn_thread(&_AppThreadStart, "query app",
|
||||
B_NORMAL_PRIORITY, this);
|
||||
if (fAppThread < 0)
|
||||
error = fAppThread;
|
||||
else {
|
||||
error = resume_thread(fAppThread);
|
||||
if (error != B_OK)
|
||||
kill_thread(fAppThread);
|
||||
}
|
||||
if (error != B_OK)
|
||||
fAppThread = B_ERROR;
|
||||
return error;
|
||||
}
|
||||
|
||||
// Terminate
|
||||
void
|
||||
BTestApp::Terminate()
|
||||
{
|
||||
PostMessage(B_QUIT_REQUESTED, this);
|
||||
int32 result;
|
||||
wait_for_thread(fAppThread, &result);
|
||||
}
|
||||
|
||||
// ReadyToRun
|
||||
void
|
||||
BTestApp::ReadyToRun()
|
||||
{
|
||||
}
|
||||
|
||||
// CreateTestHandler
|
||||
BTestHandler *
|
||||
BTestApp::CreateTestHandler()
|
||||
{
|
||||
BTestHandler *handler = new BTestHandler;
|
||||
Lock();
|
||||
AddHandler(handler);
|
||||
fHandlers.AddItem(handler);
|
||||
Unlock();
|
||||
return handler;
|
||||
}
|
||||
|
||||
// DeleteTestHandler
|
||||
bool
|
||||
BTestApp::DeleteTestHandler(BTestHandler *handler)
|
||||
{
|
||||
bool result = false;
|
||||
Lock();
|
||||
result = fHandlers.RemoveItem(handler);
|
||||
if (result)
|
||||
RemoveHandler(handler);
|
||||
Unlock();
|
||||
if (result)
|
||||
delete handler;
|
||||
return result;
|
||||
}
|
||||
|
||||
// Handler
|
||||
BTestHandler &
|
||||
BTestApp::Handler()
|
||||
{
|
||||
// The returned handler must never passed to DeleteTestHandler() by the
|
||||
// caller!
|
||||
return *TestHandlerAt(0);
|
||||
}
|
||||
|
||||
// TestHandlerAt
|
||||
BTestHandler *
|
||||
BTestApp::TestHandlerAt(int32 index)
|
||||
{
|
||||
BAutolock _lock(this);
|
||||
return (BTestHandler*)fHandlers.ItemAt(index);
|
||||
}
|
||||
|
||||
// _AppThreadStart
|
||||
int32
|
||||
BTestApp::_AppThreadStart(void *data)
|
||||
{
|
||||
if (BTestApp *app = (BTestApp*)data) {
|
||||
app->Lock();
|
||||
app->Run();
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -0,0 +1,48 @@
|
||||
// TestApp.h
|
||||
|
||||
#ifndef _beos_test_app_h_
|
||||
#define _beos_test_app_h_
|
||||
|
||||
#include <Application.h>
|
||||
#include <List.h>
|
||||
#include <MessageQueue.h>
|
||||
|
||||
// TestHandler
|
||||
|
||||
class BTestHandler : public BHandler {
|
||||
public:
|
||||
virtual void MessageReceived(BMessage *message);
|
||||
BMessageQueue &Queue();
|
||||
|
||||
private:
|
||||
BMessageQueue fQueue;
|
||||
};
|
||||
|
||||
|
||||
// TestApp
|
||||
|
||||
class BTestApp : public BApplication {
|
||||
public:
|
||||
BTestApp(const char *signature);
|
||||
virtual ~BTestApp();
|
||||
|
||||
status_t Init();
|
||||
void Terminate();
|
||||
|
||||
virtual void ReadyToRun();
|
||||
|
||||
BTestHandler *CreateTestHandler();
|
||||
bool DeleteTestHandler(BTestHandler *handler);
|
||||
|
||||
BTestHandler &Handler();
|
||||
BTestHandler *TestHandlerAt(int32 index);
|
||||
|
||||
private:
|
||||
static int32 _AppThreadStart(void *data);
|
||||
|
||||
private:
|
||||
thread_id fAppThread;
|
||||
BList fHandlers;
|
||||
};
|
||||
|
||||
#endif // _beos_test_app_h_
|
||||
Reference in New Issue
Block a user