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:
parent
678c20170c
commit
ae76aede51
@ -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
|
||||
|
136
src/tests/kits/storage/TestApp.cpp
Normal file
136
src/tests/kits/storage/TestApp.cpp
Normal file
@ -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;
|
||||
}
|
||||
|
48
src/tests/kits/storage/TestApp.h
Normal file
48
src/tests/kits/storage/TestApp.h
Normal file
@ -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_
|
Loading…
Reference in New Issue
Block a user