15
15
* <http://www.gnu.org/licenses/>
17
17
* Authored by: Tim Penhey <tim.penhey@canonical.com>
18
* Marco Trevisan <marco.trevisan@canonical.com>
19
20
#ifndef TESTS_MOCK_APPLICATION_H
20
21
#define TESTS_MOCK_APPLICATION_H
24
#include <gmock/gmock.h>
24
26
#include "unity-shared/ApplicationManager.h"
25
27
#include "unity-shared/WindowManager.h"
29
using namespace testing;
27
31
namespace testmocks
29
33
struct MockApplicationWindow : unity::ApplicationWindow
35
typedef NiceMock<MockApplicationWindow> Nice;
31
37
MockApplicationWindow(Window xid)
40
46
visible.SetGetterFunction([this] { return visible_; });
41
47
active.SetGetterFunction([this] { return active_; });
42
48
urgent.SetGetterFunction([this] { return urgent_; });
49
title.SetGetterFunction([this] { return title_; });
50
icon.SetGetterFunction([this] { return icon_; });
52
ON_CALL(*this, type()).WillByDefault(Invoke([this] { return type_; }));
53
ON_CALL(*this, window_id()).WillByDefault(Invoke([this] { return xid_; }));
54
ON_CALL(*this, monitor()).WillByDefault(Invoke([this] { return monitor_; }));
55
ON_CALL(*this, Focus()).WillByDefault(Invoke([this] { return LocalFocus(); }));
56
ON_CALL(*this, application()).WillByDefault(Invoke([this] { return unity::ApplicationPtr(); }));
55
virtual std::string title() const { return title_; }
56
virtual std::string icon() const { return icon_; }
57
virtual std::string type() const { return type_; }
59
virtual Window window_id() const { return xid_; }
60
virtual int monitor() const { return monitor_; }
62
virtual unity::ApplicationPtr application() const { return unity::ApplicationPtr(); }
63
virtual bool Focus() const
69
MOCK_CONST_METHOD0(type, std::string());
70
MOCK_CONST_METHOD0(window_id, Window());
71
MOCK_CONST_METHOD0(monitor, int());
72
MOCK_CONST_METHOD0(application, unity::ApplicationPtr());
73
MOCK_CONST_METHOD0(Focus, bool());
74
MOCK_CONST_METHOD0(Quit, void());
76
virtual bool LocalFocus() const
65
78
auto& wm = unity::WindowManager::Default();
70
virtual void Quit() const {}
84
void SetTitle(std::string const& new_title)
86
if (new_title == title())
90
title.changed(title_);
93
void SetIcon(std::string const& new_icon)
95
if (new_icon == icon())
73
103
struct MockApplication : unity::Application
105
typedef NiceMock<MockApplication> Nice;
108
: MockApplication("")
75
111
MockApplication(std::string const& desktop_file,
76
std::string const& icon = "",
77
std::string const& title = "")
112
std::string const& icon_name = "",
113
std::string const& title_str = "")
78
114
: desktop_file_(desktop_file)
89
seen.SetGetterFunction(sigc::mem_fun(this, &MockApplication::GetSeen));
90
125
seen.SetSetterFunction(sigc::mem_fun(this, &MockApplication::SetSeen));
91
sticky.SetGetterFunction(sigc::mem_fun(this, &MockApplication::GetSticky));
92
126
sticky.SetSetterFunction(sigc::mem_fun(this, &MockApplication::SetSticky));
93
visible.SetGetterFunction(sigc::mem_fun(this, &MockApplication::GetVisible));
94
active.SetGetterFunction(sigc::mem_fun(this, &MockApplication::GetActive));
95
running.SetGetterFunction(sigc::mem_fun(this, &MockApplication::GetRunning));
96
urgent.SetGetterFunction(sigc::mem_fun(this, &MockApplication::GetUrgent));
128
seen.SetGetterFunction([this] { return seen_; });
129
sticky.SetGetterFunction([this] { return sticky_; });
130
visible.SetGetterFunction([this] { return visible_; });
131
active.SetGetterFunction([this] { return active_; });
132
running.SetGetterFunction([this] { return running_; });
133
urgent.SetGetterFunction([this] { return urgent_; });
134
title.SetGetterFunction([this] { return title_; });
135
icon.SetGetterFunction([this] { return icon_; });
137
ON_CALL(*this, desktop_file()).WillByDefault(Invoke([this] { return desktop_file_; }));
138
ON_CALL(*this, type()).WillByDefault(Invoke([this] { return type_; }));
139
ON_CALL(*this, repr()).WillByDefault(Invoke([this] { return "MockApplication"; }));
140
ON_CALL(*this, GetWindows()).WillByDefault(Invoke([this] { return windows_; }));
141
ON_CALL(*this, OwnsWindow(_)).WillByDefault(Invoke([this] (Window xid) { return LocalOwnsWindow(xid); }));
99
144
std::string desktop_file_;
108
153
unity::WindowList windows_;
109
154
std::string type_;
112
virtual std::string icon() const { return icon_; }
113
virtual std::string title() const { return title_; }
114
virtual std::string desktop_file() const { return desktop_file_; }
115
virtual std::string type() const { return type_; }
116
virtual std::string repr() const { return "MockApplication"; }
118
virtual unity::WindowList GetWindows() const { return windows_; }
119
virtual bool OwnsWindow(Window window_id) const {
156
MOCK_CONST_METHOD0(desktop_file, std::string());
157
MOCK_CONST_METHOD0(type, std::string());
158
MOCK_CONST_METHOD0(repr, std::string());
159
MOCK_CONST_METHOD0(GetWindows, unity::WindowList());
160
MOCK_CONST_METHOD1(OwnsWindow, bool(Window));
161
MOCK_CONST_METHOD0(GetSupportedMimeTypes, std::vector<std::string>());
162
MOCK_CONST_METHOD0(GetFocusableWindow, unity::ApplicationWindowPtr());
163
MOCK_CONST_METHOD2(Focus, void(bool, int));
164
MOCK_CONST_METHOD0(Quit, void());
166
bool LocalOwnsWindow(Window window_id) const {
120
167
auto end = std::end(windows_);
121
168
return std::find_if(std::begin(windows_), end, [window_id] (unity::ApplicationWindowPtr window) {
122
169
return window->window_id() == window_id;
126
virtual std::vector<std::string> GetSupportedMimeTypes() const { return {}; }
128
virtual unity::ApplicationWindowPtr GetFocusableWindow() const { return unity::ApplicationWindowPtr(); }
129
virtual void Focus(bool show_on_visible, int monitor) const {}
130
virtual void Quit() const {}
131
173
void SetRunState(bool state) {
132
174
running_ = state;
133
175
running.changed.emit(state);
136
bool GetSeen() const { return seen_; }
137
178
bool SetSeen(bool const& param) {
138
179
if (param != seen_) {
159
199
active.changed.emit(state);
162
bool GetVisible() const { return visible_; }
163
bool GetActive() const { return active_; }
164
bool GetRunning() const { return running_; }
165
bool GetUrgent() const { return urgent_; }
202
void SetTitle(std::string const& new_title)
204
if (new_title == title())
208
title.changed(title_);
211
void SetIcon(std::string const& new_icon)
213
if (new_icon == icon())
168
class MockApplicationManager : public unity::ApplicationManager
221
struct MockApplicationManager : public unity::ApplicationManager
223
typedef NiceMock<MockApplicationManager> Nice;
225
MockApplicationManager()
227
ON_CALL(*this, GetApplicationForDesktopFile(_)).WillByDefault(Invoke(this, &MockApplicationManager::LocalGetApplicationForDesktopFile));
228
ON_CALL(*this, GetActiveWindow()).WillByDefault(Invoke([this] { return unity::ApplicationWindowPtr(); } ));
229
ON_CALL(*this, GetRunningApplications()).WillByDefault(Invoke([this] { return unity::ApplicationList(); } ));
230
ON_CALL(*this, GetApplicationForWindow(_)).WillByDefault(Invoke([this] (Window) { return unity::ApplicationPtr(); } ));
171
233
static void StartApp(std::string const& desktop_file)
173
// We know the application manager is a mock one so we can cast it.
174
auto self = dynamic_cast<MockApplicationManager&>(unity::ApplicationManager::Default());
175
auto app = self.GetApplicationForDesktopFile(desktop_file);
176
self.application_started.emit(app);
179
virtual unity::ApplicationWindowPtr GetActiveWindow()
181
return unity::ApplicationWindowPtr();
184
unity::ApplicationPtr GetApplicationForDesktopFile(std::string const& desktop_file)
235
// We know the application manager is a mock one so we can cast it.
236
auto& app_manager = unity::ApplicationManager::Default();
237
auto self = dynamic_cast<MockApplicationManager*>(&app_manager);
238
auto app = self->LocalGetApplicationForDesktopFile(desktop_file);
239
app_manager.application_started.emit(app);
242
MOCK_METHOD0(GetActiveWindow, unity::ApplicationWindowPtr());
243
MOCK_METHOD1(GetApplicationForDesktopFile, unity::ApplicationPtr(std::string const&));
244
MOCK_METHOD0(GetRunningApplications, unity::ApplicationList());
245
MOCK_METHOD1(GetApplicationForWindow, unity::ApplicationPtr(Window));
247
unity::ApplicationPtr LocalGetApplicationForDesktopFile(std::string const& desktop_file)
186
249
AppMap::iterator iter = app_map_.find(desktop_file);
187
250
if (iter == app_map_.end())
189
unity::ApplicationPtr app(new MockApplication(desktop_file));
252
auto app = std::make_shared<NiceMock<MockApplication>>(desktop_file);
190
253
app_map_.insert(AppMap::value_type(desktop_file, app));