Bug 1290338. Part 1 - add a gtest to test WatchManager::Shutdown(). r=bholley
authorJW Wang <jwwang@mozilla.com>
Fri, 29 Jul 2016 11:26:41 +0800
changeset 307736 bddcdfa7e10c6b7f42d48876f2c65c53f145ae34
parent 307735 909dbdc5f047393437603d5cb7d488cc8030efc9
child 307737 07eba947e1ffdad80f27b6658473671c04f74664
push id80163
push usercbook@mozilla.com
push dateTue, 02 Aug 2016 15:13:03 +0000
treeherdermozilla-inbound@9f3c3f219840 [default view] [failures only]
perfherder[talos] [build metrics] [platform microbench] (compared to previous push)
reviewersbholley
bugs1290338
milestone51.0a1
first release with
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
last release without
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
Bug 1290338. Part 1 - add a gtest to test WatchManager::Shutdown(). r=bholley MozReview-Commit-ID: CJ3JJU2zLUF
xpcom/tests/gtest/TestStateWatching.cpp
xpcom/tests/gtest/moz.build
new file mode 100644
--- /dev/null
+++ b/xpcom/tests/gtest/TestStateWatching.cpp
@@ -0,0 +1,45 @@
+/* -*- 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/StateWatching.h"
+#include "mozilla/TaskQueue.h"
+#include "nsISupportsImpl.h"
+#include "VideoUtils.h"
+
+namespace TestStateWatching {
+
+using namespace mozilla;
+
+struct Foo {
+  NS_INLINE_DECL_THREADSAFE_REFCOUNTING(Foo)
+  void Notify() { mNotified = true; }
+  bool mNotified = false;
+private:
+  ~Foo() {}
+};
+
+TEST(WatchManager, Shutdown)
+{
+  RefPtr<TaskQueue> queue = new TaskQueue(
+    GetMediaThreadPool(MediaThreadType::PLAYBACK));
+
+  RefPtr<Foo> p = new Foo;
+  WatchManager<Foo> manager(p, queue);
+  Watchable<bool> notifier(false, "notifier");
+
+  queue->Dispatch(NS_NewRunnableFunction([&] () {
+    manager.Watch(notifier, &Foo::Notify);
+    notifier = true; // Trigger the call to Foo::Notify().
+    manager.Shutdown(); // Shutdown() should cancel the call.
+  }));
+
+  queue->BeginShutdown();
+  queue->AwaitShutdownAndIdle();
+  EXPECT_FALSE(p->mNotified);
+}
+
+} // namespace TestStateWatching
--- a/xpcom/tests/gtest/moz.build
+++ b/xpcom/tests/gtest/moz.build
@@ -12,16 +12,17 @@ UNIFIED_SOURCES += [
     'TestEncoding.cpp',
     'TestEscapeURL.cpp',
     'TestExpirationTracker.cpp',
     'TestNSPRLogModulesParser.cpp',
     'TestPipes.cpp',
     'TestPLDHash.cpp',
     'TestPriorityQueue.cpp',
     'TestSnappyStreams.cpp',
+    'TestStateWatching.cpp',
     'TestStorageStream.cpp',
     'TestStrings.cpp',
     'TestStringStream.cpp',
     'TestSynchronization.cpp',
     'TestTArray.cpp',
     'TestThreadPool.cpp',
     'TestThreads.cpp',
     'TestTimeStamp.cpp',