| // Copyright 2013 The Flutter Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #ifndef FLUTTER_SHELL_PLATFORM_LINUX_MOCK_SIGNAL_HANDLER_H_ |
| #define FLUTTER_SHELL_PLATFORM_LINUX_MOCK_SIGNAL_HANDLER_H_ |
| |
| #include <glib-object.h> |
| #include <glib.h> |
| |
| #include "gmock/gmock.h" |
| |
| // Expects a signal that has no arguments. |
| // |
| // MockSignalHandler timeout(timer, "timeout"); |
| // EXPECT_SIGNAL(timeout).Times(3); |
| // |
| #define EXPECT_SIGNAL(mock) EXPECT_CALL(mock, Handler()) |
| |
| // Expects a signal that has 1 argument. |
| // |
| // MockSignalHandler1<int> name_changed(object, "name-changed"); |
| // EXPECT_SIGNAL(name_changed, testing::StrEq("example")); |
| // |
| #define EXPECT_SIGNAL1(mock, a1) EXPECT_CALL(mock, Handler1(a1)) |
| |
| // Expects a signal that has 2 arguments. |
| // |
| // MockSignalHandler2<int, GObject*> child_added(parent, "children::add"); |
| // EXPECT_SIGNAL2(child_added, testing::Eq(1), testing::A<GObject*>()); |
| // |
| #define EXPECT_SIGNAL2(mock, a1, a2) EXPECT_CALL(mock, Handler2(a1, a2)) |
| |
| namespace flutter { |
| namespace testing { |
| |
| class SignalHandler { |
| public: |
| SignalHandler(gpointer instance, const gchar* name, GCallback callback); |
| virtual ~SignalHandler(); |
| |
| private: |
| gulong id_ = 0; |
| gpointer instance_ = nullptr; |
| }; |
| |
| // A mock signal handler that has no arguments. Used with EXPECT_SIGNAL(). |
| class MockSignalHandler : public SignalHandler { |
| public: |
| MockSignalHandler(gpointer instance, const gchar* name) |
| : SignalHandler(instance, name, G_CALLBACK(OnSignal)) {} |
| |
| MOCK_METHOD0(Handler, void()); |
| |
| private: |
| static void OnSignal(MockSignalHandler* mock) { mock->Handler(); } |
| }; |
| |
| // A mock signal handler that has 1 argument. Used with EXPECT_SIGNAL1(). |
| template <typename A1> |
| class MockSignalHandler1 : public SignalHandler { |
| public: |
| MockSignalHandler1(gpointer instance, const gchar* name) |
| : SignalHandler(instance, name, G_CALLBACK(OnSignal1)) {} |
| |
| MOCK_METHOD1(Handler1, void(A1 a1)); |
| |
| private: |
| static void OnSignal1(MockSignalHandler1* mock, A1 a1) { mock->Handler1(a1); } |
| }; |
| |
| // A mock signal handler that has 2 arguments. Used with EXPECT_SIGNAL2(). |
| template <typename A1, typename A2> |
| class MockSignalHandler2 : public SignalHandler { |
| public: |
| MockSignalHandler2(gpointer instance, const gchar* name) |
| : SignalHandler(instance, name, G_CALLBACK(OnSignal2)) {} |
| |
| MOCK_METHOD2(Handler2, void(A1 a1, A2 a2)); |
| |
| private: |
| static void OnSignal2(MockSignalHandler2* mock, A1 a1, A2 a2) { |
| mock->Handler2(a1, a2); |
| } |
| }; |
| |
| } // namespace testing |
| } // namespace flutter |
| |
| #endif // FLUTTER_SHELL_PLATFORM_LINUX_MOCK_SIGNAL_HANDLER_H_ |