OLD | NEW |
(Empty) | |
| 1 // Copyright 2016 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. |
| 4 |
| 5 #include "components/sync/base/scoped_event_signal.h" |
| 6 |
| 7 #include <memory> |
| 8 #include <utility> |
| 9 |
| 10 #include "base/synchronization/waitable_event.h" |
| 11 #include "testing/gtest/include/gtest/gtest.h" |
| 12 |
| 13 namespace syncer { |
| 14 |
| 15 TEST(ScopedEventSignalTest, SignalAtEndOfScope) { |
| 16 base::WaitableEvent event(base::WaitableEvent::ResetPolicy::MANUAL, |
| 17 base::WaitableEvent::InitialState::NOT_SIGNALED); |
| 18 |
| 19 { |
| 20 ScopedEventSignal scoped_event_signal(&event); |
| 21 EXPECT_FALSE(event.IsSignaled()); |
| 22 } |
| 23 |
| 24 EXPECT_TRUE(event.IsSignaled()); |
| 25 } |
| 26 |
| 27 TEST(ScopedEventSignalTest, MoveConstructor) { |
| 28 base::WaitableEvent event(base::WaitableEvent::ResetPolicy::MANUAL, |
| 29 base::WaitableEvent::InitialState::NOT_SIGNALED); |
| 30 |
| 31 { |
| 32 ScopedEventSignal scoped_event_signal(&event); |
| 33 EXPECT_FALSE(event.IsSignaled()); |
| 34 |
| 35 { |
| 36 ScopedEventSignal other_scoped_event_signal( |
| 37 std::move(scoped_event_signal)); |
| 38 EXPECT_FALSE(event.IsSignaled()); |
| 39 } |
| 40 |
| 41 // |event| is signaled when |other_scoped_event_signal| is destroyed. |
| 42 EXPECT_TRUE(event.IsSignaled()); |
| 43 |
| 44 event.Reset(); |
| 45 } |
| 46 |
| 47 // |event| is not signaled when |scoped_signal_event| is destroyed. |
| 48 EXPECT_FALSE(event.IsSignaled()); |
| 49 } |
| 50 |
| 51 TEST(ScopedEventSignalTest, MoveAssignOperator) { |
| 52 base::WaitableEvent event(base::WaitableEvent::ResetPolicy::MANUAL, |
| 53 base::WaitableEvent::InitialState::NOT_SIGNALED); |
| 54 |
| 55 { |
| 56 ScopedEventSignal scoped_event_signal_a(&event); |
| 57 EXPECT_FALSE(event.IsSignaled()); |
| 58 |
| 59 { |
| 60 base::WaitableEvent other_event( |
| 61 base::WaitableEvent::ResetPolicy::MANUAL, |
| 62 base::WaitableEvent::InitialState::NOT_SIGNALED); |
| 63 ScopedEventSignal scoped_event_signal_b(&other_event); |
| 64 |
| 65 // Move |scoped_event_signal_b| to |scoped_event_signal_c| because the |
| 66 // assignment operator cannot be used on a ScopedEventSignal which is |
| 67 // already associated with an event. |
| 68 ScopedEventSignal scoped_event_signal_c(std::move(scoped_event_signal_b)); |
| 69 |
| 70 scoped_event_signal_b = std::move(scoped_event_signal_a); |
| 71 EXPECT_FALSE(event.IsSignaled()); |
| 72 } |
| 73 |
| 74 // |event| is signaled when |scoped_event_signal_b| is destroyed. |
| 75 EXPECT_TRUE(event.IsSignaled()); |
| 76 |
| 77 event.Reset(); |
| 78 } |
| 79 |
| 80 // |event| is not signaled when |scoped_signal_event_a| is destroyed. |
| 81 EXPECT_FALSE(event.IsSignaled()); |
| 82 } |
| 83 |
| 84 } // namespace syncer |
OLD | NEW |