This source file includes following definitions.
- enqueueEvent
- cancelEvent
- close
- refExecutionContext
- derefExecutionContext
- eventQueue
- tasksNeedSuspension
- setTasksNeedSuspention
- m_queue
- create
- performTask
- TEST
- TEST
- TEST
#include "config.h"
#include "core/dom/MainThreadTaskRunner.h"
#include "core/dom/ExecutionContext.h"
#include "core/dom/ExecutionContextTask.h"
#include "core/events/EventQueue.h"
#include "core/testing/UnitTestHelpers.h"
#include <gtest/gtest.h>
using namespace WebCore;
namespace {
class NullEventQueue : public EventQueue {
public:
NullEventQueue() { }
virtual ~NullEventQueue() { }
virtual bool enqueueEvent(PassRefPtrWillBeRawPtr<Event>) OVERRIDE { return true; }
virtual bool cancelEvent(Event*) OVERRIDE { return true; }
virtual void close() OVERRIDE { }
};
class NullExecutionContext : public ExecutionContext, public RefCounted<NullExecutionContext> {
public:
using RefCounted<NullExecutionContext>::ref;
using RefCounted<NullExecutionContext>::deref;
virtual void refExecutionContext() OVERRIDE { ref(); }
virtual void derefExecutionContext() OVERRIDE { deref(); }
virtual EventQueue* eventQueue() const OVERRIDE { return m_queue.get(); }
virtual bool tasksNeedSuspension() { return m_tasksNeedSuspension; }
void setTasksNeedSuspention(bool flag) { m_tasksNeedSuspension = flag; }
NullExecutionContext();
private:
bool m_tasksNeedSuspension;
OwnPtr<EventQueue> m_queue;
};
NullExecutionContext::NullExecutionContext()
: m_tasksNeedSuspension(false)
, m_queue(adoptPtr(new NullEventQueue()))
{
}
class MarkingBooleanTask FINAL : public ExecutionContextTask {
public:
static PassOwnPtr<MarkingBooleanTask> create(bool* toBeMarked)
{
return adoptPtr(new MarkingBooleanTask(toBeMarked));
}
virtual ~MarkingBooleanTask() { }
private:
MarkingBooleanTask(bool* toBeMarked) : m_toBeMarked(toBeMarked) { }
virtual void performTask(ExecutionContext* context) OVERRIDE
{
*m_toBeMarked = true;
}
bool* m_toBeMarked;
};
TEST(MainThreadTaskRunnerTest, PostTask)
{
RefPtr<NullExecutionContext> context = adoptRef(new NullExecutionContext());
OwnPtr<MainThreadTaskRunner> runner = MainThreadTaskRunner::create(context.get());
bool isMarked = false;
runner->postTask(MarkingBooleanTask::create(&isMarked));
EXPECT_FALSE(isMarked);
WebCore::testing::runPendingTasks();
EXPECT_TRUE(isMarked);
}
TEST(MainThreadTaskRunnerTest, SuspendTask)
{
RefPtr<NullExecutionContext> context = adoptRef(new NullExecutionContext());
OwnPtr<MainThreadTaskRunner> runner = MainThreadTaskRunner::create(context.get());
bool isMarked = false;
context->setTasksNeedSuspention(true);
runner->postTask(MarkingBooleanTask::create(&isMarked));
runner->suspend();
WebCore::testing::runPendingTasks();
EXPECT_FALSE(isMarked);
context->setTasksNeedSuspention(false);
runner->resume();
WebCore::testing::runPendingTasks();
EXPECT_TRUE(isMarked);
}
TEST(MainThreadTaskRunnerTest, RemoveRunner)
{
RefPtr<NullExecutionContext> context = adoptRef(new NullExecutionContext());
OwnPtr<MainThreadTaskRunner> runner = MainThreadTaskRunner::create(context.get());
bool isMarked = false;
context->setTasksNeedSuspention(true);
runner->postTask(MarkingBooleanTask::create(&isMarked));
runner.clear();
WebCore::testing::runPendingTasks();
EXPECT_FALSE(isMarked);
}
}