/* -*- 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 GetTestQueue() { static StaticBackgroundTaskQueue sQueue("TestStaticBackgroundTaskQueue"); return sQueue.Get(); } TEST(StaticBackgroundTaskQueue, GetAndDispatch) { nsCOMPtr queue = GetTestQueue(); ASSERT_TRUE(queue); nsCOMPtr queue2 = GetTestQueue(); ASSERT_EQ(queue, queue2); ASSERT_TRUE(NS_IsMainThread()); ASSERT_FALSE(queue->IsOnCurrentThread()); bool didRun = false; RefPtr 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