Esempio n. 1
0
void TaskManagerTest::testCancel()
{
	TaskManager tm;
	TaskObserver to;
	tm.addObserver(Observer<TaskObserver, TaskStartedNotification>(to, &TaskObserver::taskStarted));
	tm.addObserver(Observer<TaskObserver, TaskCancelledNotification>(to, &TaskObserver::taskCancelled));
	tm.addObserver(Observer<TaskObserver, TaskFailedNotification>(to, &TaskObserver::taskFailed));
	tm.addObserver(Observer<TaskObserver, TaskFinishedNotification>(to, &TaskObserver::taskFinished));
	tm.addObserver(Observer<TaskObserver, TaskProgressNotification>(to, &TaskObserver::taskProgress));
	AutoPtr<TestTask> pTT = new TestTask;
	tm.start(pTT.duplicate());
	assert (pTT->progress() == 0);
	Thread::sleep(200);
	pTT->cont();
	while (pTT->progress() != 0.5) Thread::sleep(50);
	assert (to.progress() == 0.5);
	assert (to.started());
	assert (pTT->state() == Task::TASK_RUNNING);
	TaskManager::TaskList list = tm.taskList();
	assert (list.size() == 1);
	assert (tm.count() == 1);
	tm.cancelAll();
	assert (to.cancelled());
	pTT->cont();
	while (pTT->state() != Task::TASK_FINISHED) Thread::sleep(50);
	assert (pTT->state() == Task::TASK_FINISHED);
	assert (to.finished());
	while (tm.count() == 1) Thread::sleep(50);
	list = tm.taskList();
	assert (list.empty());
	assert (!to.error());
}
Esempio n. 2
0
	int main(const ArgVec& args)
	{
		if (!_helpRequested)
		{
			TaskManager tm;
			tm.start(new SampleTask);
			waitForTerminationRequest();
			tm.cancelAll();
			tm.joinAll();
		}
		return Application::EXIT_OK;
	}
Esempio n. 3
0
void TaskManagerTest::testMultiTasks()
{
	TaskManager tm;
	tm.start(new SimpleTask);
	tm.start(new SimpleTask);
	tm.start(new SimpleTask);
	
	TaskManager::TaskList list = tm.taskList();
	assert (list.size() == 3);
	
	tm.cancelAll();
	while (tm.count() > 0) Thread::sleep(100);
	assert (tm.count() == 0);
}
Esempio n. 4
0
void TaskManagerTest::testCustom()
{
	TaskManager tm;
	
	CustomTaskObserver<int> ti(0);
	tm.addObserver(
		Observer<CustomTaskObserver<int>, TaskCustomNotification<int> >
			(ti, &CustomTaskObserver<int>::taskCustom));
	
	AutoPtr<CustomNotificationTask<int> > pCNT1 = new CustomNotificationTask<int>(0);
	tm.start(pCNT1.duplicate());
	assert (ti.custom() == 0);
	
	for (int i = 1; i < 10; ++i)
	{
		pCNT1->setCustom(i);
		assert (ti.custom() == i);
	}

	CustomTaskObserver<std::string> ts("");
	tm.addObserver(
		Observer<CustomTaskObserver<std::string>, TaskCustomNotification<std::string> >
			(ts, &CustomTaskObserver<std::string>::taskCustom));
	
	AutoPtr<CustomNotificationTask<std::string> > pCNT2 = new CustomNotificationTask<std::string>("");
	tm.start(pCNT2.duplicate());
	assert (tm.taskList().size() == 2);
	assert (ts.custom() == "");
	std::string str("notify me");
	pCNT2->setCustom(str);
	assert (ts.custom() == str);
	
	S s;
	s.i = 0;
	s.str = "";

	CustomTaskObserver<S*> ptst(&s);
	
	tm.addObserver(
		Observer<CustomTaskObserver<S*>, TaskCustomNotification<S*> >
			(ptst, &CustomTaskObserver<S*>::taskCustom));
	
	AutoPtr<CustomNotificationTask<S*> > pCNT3 = new CustomNotificationTask<S*>(&s);
	tm.start(pCNT3.duplicate());
	assert (tm.taskList().size() == 3);
	assert (ptst.custom()->i == 0);
	assert (ptst.custom()->str == "");
	s.i = 123;
	s.str = "123";
	pCNT3->setCustom(&s);
	assert (ptst.custom()->i == 123);
	assert (ptst.custom()->str == "123");

	s.i = 0;
	s.str = "";

	CustomTaskObserver<S> tst(s);
	
	tm.addObserver(
		Observer<CustomTaskObserver<S>, TaskCustomNotification<S> >
			(tst, &CustomTaskObserver<S>::taskCustom));
	
	AutoPtr<CustomNotificationTask<S> > pCNT4 = new CustomNotificationTask<S>(s);
	tm.start(pCNT4.duplicate());
	assert (tm.taskList().size() == 4);
	assert (tst.custom().i == 0);
	assert (tst.custom().str == "");
	s.i = 123;
	s.str = "123";
	pCNT4->setCustom(s);
	assert (tst.custom().i == 123);
	assert (tst.custom().str == "123");
	
	AutoPtr<SimpleTask> pST = new SimpleTask;
	tm.start(pST.duplicate());
	assert (tm.taskList().size() == 5);

	tm.cancelAll();
	while (tm.count() > 0) Thread::sleep(50);
	assert (tm.count() == 0);
}