Index: remoting/host/mock_callback_unittest.cc |
diff --git a/remoting/host/mock_callback_unittest.cc b/remoting/host/mock_callback_unittest.cc |
new file mode 100644 |
index 0000000000000000000000000000000000000000..cfc053d22c0c5bc95cd8a742edde779229303847 |
--- /dev/null |
+++ b/remoting/host/mock_callback_unittest.cc |
@@ -0,0 +1,67 @@ |
+// Copyright 2014 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 "remoting/host/mock_callback.h" |
+ |
+#include "testing/gmock/include/gmock/gmock.h" |
+#include "testing/gtest/include/gtest/gtest-spi.h" |
+#include "testing/gtest/include/gtest/gtest.h" |
+ |
+namespace remoting { |
+ |
+TEST(MockCallbackTest, SimpleExampleFromHeader) { |
+ EXPECT_NONFATAL_FAILURE({ |
+ MockCallback<void(int)> mock_callback; |
+ EXPECT_CALL(mock_callback, Run(123)).Times(2); |
+ base::Callback<void(int)> callback = |
+ mock_callback.GetCallback(); |
+ |
+ callback.Run(123); |
+ callback.Run(123); |
+ callback.Run(123); // Called too many times. |
+ }, |
+ "Mock function called more times than expected"); |
+} |
+ |
+TEST(MockCallbackTest, HasRemainingCallbacks) { |
+ MockCallback<int()> mock_callback; |
+ EXPECT_CALL(mock_callback, Run()).WillOnce(testing::Return(123)); |
+ |
+ { |
+ base::Callback<int()> callback = mock_callback.GetCallback(); |
+ EXPECT_TRUE(mock_callback.HasRemainingCallbacks()); |
+ EXPECT_EQ(123, callback.Run()); |
+ } |
+ |
+ EXPECT_FALSE(mock_callback.HasRemainingCallbacks()); |
+} |
+ |
+TEST(MockCallbackTest, CallbackRunAfterMockAlreadyDestroyed) { |
+ EXPECT_NONFATAL_FAILURE( |
+ { |
+ base::Callback<int(int)> long_lived_callback; |
+ { |
+ MockCallback<int(int)> short_lived_mock_callback; |
+ |
+ EXPECT_CALL(short_lived_mock_callback, Run(123)) |
+ .WillOnce(testing::Return(456)); |
+ long_lived_callback = short_lived_mock_callback.GetCallback(); |
+ |
+ int actual_result1 = long_lived_callback.Run(123); |
+ ASSERT_EQ(456, actual_result1); |
+ } |
+ |
+ // This |Run| invocation happens when short_lived_mock_callback is |
+ // already |
+ // destroyed. Such |Run| invocation should cause a test failure (that |
+ // we |
+ // are verifying via the outer EXPECT_NONFATAL_FAILURE). |
+ testing::DefaultValue<int>::Set(42); |
+ int actual_result2 = long_lived_callback.Run(789); |
+ ASSERT_EQ(42, actual_result2); |
+ }, |
+ "MockCallback should be alive when Callback::Run happens."); |
+} |
+ |
+} // namespace remoting |