]> git.sesse.net Git - casparcg/blobdiff - dependencies64/cef/linux/tests/ceftests/waitable_event_unittest.cc
Upgrade CEF to 3.3029.1611.g44e39a8 / Chromium 58.0.3029.81.
[casparcg] / dependencies64 / cef / linux / tests / ceftests / waitable_event_unittest.cc
diff --git a/dependencies64/cef/linux/tests/ceftests/waitable_event_unittest.cc b/dependencies64/cef/linux/tests/ceftests/waitable_event_unittest.cc
new file mode 100644 (file)
index 0000000..8ba6c8d
--- /dev/null
@@ -0,0 +1,78 @@
+// Copyright 2016 The Chromium Embedded Framework Authors. Portions copyright
+// 2012 The Chromium Authors. All rights reserved. Use of this source code is
+// governed by a BSD-style license that can be found in the LICENSE file.
+
+#include "include/base/cef_bind.h"
+#include "include/cef_thread.h"
+#include "include/cef_waitable_event.h"
+#include "include/wrapper/cef_closure_task.h"
+#include "tests/gtest/include/gtest/gtest.h"
+
+// Test manual reset.
+TEST(WaitableEventTest, ManualReset) {
+  CefRefPtr<CefWaitableEvent> event =
+      CefWaitableEvent::CreateWaitableEvent(false, false);
+
+  EXPECT_FALSE(event->IsSignaled());
+
+  event->Signal();
+  EXPECT_TRUE(event->IsSignaled());
+  EXPECT_TRUE(event->IsSignaled());
+
+  event->Reset();
+  EXPECT_FALSE(event->IsSignaled());
+  EXPECT_FALSE(event->TimedWait(10));
+
+  event->Signal();
+  event->Wait();
+  EXPECT_TRUE(event->TimedWait(10));
+}
+
+// Test automatic reset.
+TEST(WaitableEventTest, AutomaticReset) {
+  CefRefPtr<CefWaitableEvent> event =
+      CefWaitableEvent::CreateWaitableEvent(true, false);
+
+  EXPECT_FALSE(event->IsSignaled());
+
+  event->Signal();
+  EXPECT_TRUE(event->IsSignaled());
+  EXPECT_FALSE(event->IsSignaled());
+
+  event->Reset();
+  EXPECT_FALSE(event->IsSignaled());
+  EXPECT_FALSE(event->TimedWait(10));
+
+  event->Signal();
+  event->Wait();
+  EXPECT_FALSE(event->TimedWait(10));
+
+  event->Signal();
+  EXPECT_TRUE(event->TimedWait(10));
+}
+
+namespace {
+
+void SignalEvent(CefWaitableEvent* event) {
+  event->Signal();
+}
+
+}  // namespace
+
+// Tests that a WaitableEvent can be safely deleted when |Wait| is done without
+// additional synchronization.
+TEST(WaitableEventTest, WaitAndDelete) {
+  CefRefPtr<CefWaitableEvent> event =
+      CefWaitableEvent::CreateWaitableEvent(true, false);
+
+  CefRefPtr<CefThread> thread = CefThread::CreateThread("waitable_event_test");
+  thread->GetTaskRunner()->PostDelayedTask(
+      CefCreateClosureTask(base::Bind(SignalEvent,
+                                      base::Unretained(event.get()))), 10);
+
+  event->Wait();
+  event = nullptr;
+
+  thread->Stop();
+  thread = nullptr;
+}