Source code

Revision control

Copy as Markdown

Other Tools

/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
/* vim: set ts=8 sts=2 et sw=2 tw=80: */
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
#include "gtest/gtest.h"
#include "mozilla/StaticBackgroundTaskQueue.h"
#include "mozilla/SyncRunnable.h"
#include "nsThreadUtils.h"
namespace TestStaticBackgroundTaskQueue {
using namespace mozilla;
static already_AddRefed<nsISerialEventTarget> GetTestQueue() {
static StaticBackgroundTaskQueue sQueue("TestStaticBackgroundTaskQueue");
return sQueue.Get();
}
TEST(StaticBackgroundTaskQueue, GetAndDispatch)
{
nsCOMPtr<nsISerialEventTarget> queue = GetTestQueue();
ASSERT_TRUE(queue);
nsCOMPtr<nsISerialEventTarget> queue2 = GetTestQueue();
ASSERT_EQ(queue, queue2);
ASSERT_TRUE(NS_IsMainThread());
ASSERT_FALSE(queue->IsOnCurrentThread());
bool didRun = false;
RefPtr<SyncRunnable> syncWithThread = new SyncRunnable(
NS_NewRunnableFunction("TestStaticBackgroundTaskQueue", [&] {
EXPECT_FALSE(NS_IsMainThread());
EXPECT_TRUE(queue->IsOnCurrentThread());
didRun = true;
}));
ASSERT_TRUE(NS_SUCCEEDED(syncWithThread->DispatchToThread(queue)));
ASSERT_TRUE(didRun);
}
} // namespace TestStaticBackgroundTaskQueue