1 /*
2 * synergy -- mouse and keyboard sharing utility
3 * Copyright (C) 2012-2016 Symless Ltd.
4 * Copyright (C) 2011 Nick Bolton
5 *
6 * This package is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU General Public License
8 * found in the file LICENSE that should have accompanied this file.
9 *
10 * This package is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details.
14 *
15 * You should have received a copy of the GNU General Public License
16 * along with this program. If not, see <http://www.gnu.org/licenses/>.
17 */
18
19 #include "platform/MSWindowsClipboard.h"
20 #include "platform/IMSWindowsClipboardFacade.h"
21
22 #include "test/global/gmock.h"
23 #include "test/global/gtest.h"
24
25 class MSWindowsClipboardTests : public ::testing::Test
26 {
27 protected:
SetUp()28 virtual void SetUp()
29 {
30 emptyClipboard();
31 }
32
TearDown()33 virtual void TearDown()
34 {
35 emptyClipboard();
36 }
37
38 private:
emptyClipboard()39 void emptyClipboard()
40 {
41 MSWindowsClipboard clipboard(NULL);
42 clipboard.open(0);
43 clipboard.empty();
44 }
45 };
46
47 class MockFacade : public IMSWindowsClipboardFacade
48 {
49 public:
50 MOCK_METHOD2(write, void(HANDLE, UINT));
51 };
52
TEST_F(MSWindowsClipboardTests,emptyUnowned_openCalled_returnsTrue)53 TEST_F(MSWindowsClipboardTests, emptyUnowned_openCalled_returnsTrue)
54 {
55 MSWindowsClipboard clipboard(NULL);
56 clipboard.open(0);
57
58 bool actual = clipboard.emptyUnowned();
59
60 EXPECT_EQ(true, actual);
61 }
62
TEST_F(MSWindowsClipboardTests,empty_openCalled_returnsTrue)63 TEST_F(MSWindowsClipboardTests, empty_openCalled_returnsTrue)
64 {
65 MSWindowsClipboard clipboard(NULL);
66 clipboard.open(0);
67
68 bool actual = clipboard.empty();
69
70 EXPECT_EQ(true, actual);
71 }
72
TEST_F(MSWindowsClipboardTests,empty_singleFormat_hasReturnsFalse)73 TEST_F(MSWindowsClipboardTests, empty_singleFormat_hasReturnsFalse)
74 {
75 MSWindowsClipboard clipboard(NULL);
76 clipboard.open(0);
77 clipboard.add(MSWindowsClipboard::kText, "synergy rocks!");
78
79 clipboard.empty();
80
81 bool actual = clipboard.has(MSWindowsClipboard::kText);
82 EXPECT_EQ(false, actual);
83 }
84
TEST_F(MSWindowsClipboardTests,add_newValue_valueWasStored)85 TEST_F(MSWindowsClipboardTests, add_newValue_valueWasStored)
86 {
87 MSWindowsClipboard clipboard(NULL);
88 clipboard.open(0);
89
90 clipboard.add(IClipboard::kText, "synergy rocks!");
91
92 String actual = clipboard.get(IClipboard::kText);
93 EXPECT_EQ("synergy rocks!", actual);
94 }
95
TEST_F(MSWindowsClipboardTests,add_newValue_writeWasCalled)96 TEST_F(MSWindowsClipboardTests, add_newValue_writeWasCalled)
97 {
98 MockFacade facade;
99 EXPECT_CALL(facade, write(testing::_, testing::_));
100
101 MSWindowsClipboard clipboard(NULL);
102 clipboard.setFacade(facade);
103 clipboard.open(0);
104
105 clipboard.add(IClipboard::kText, "synergy rocks!");
106 }
107
TEST_F(MSWindowsClipboardTests,add_replaceValue_valueWasReplaced)108 TEST_F(MSWindowsClipboardTests, add_replaceValue_valueWasReplaced)
109 {
110 MSWindowsClipboard clipboard(NULL);
111 clipboard.open(0);
112
113 clipboard.add(IClipboard::kText, "synergy rocks!");
114 clipboard.add(IClipboard::kText, "maxivista sucks"); // haha, just kidding.
115
116 String actual = clipboard.get(IClipboard::kText);
117 EXPECT_EQ("maxivista sucks", actual);
118 }
119
TEST_F(MSWindowsClipboardTests,open_timeIsZero_returnsTrue)120 TEST_F(MSWindowsClipboardTests, open_timeIsZero_returnsTrue)
121 {
122 MSWindowsClipboard clipboard(NULL);
123
124 bool actual = clipboard.open(0);
125
126 EXPECT_EQ(true, actual);
127 }
128
TEST_F(MSWindowsClipboardTests,open_timeIsOne_returnsTrue)129 TEST_F(MSWindowsClipboardTests, open_timeIsOne_returnsTrue)
130 {
131 MSWindowsClipboard clipboard(NULL);
132
133 bool actual = clipboard.open(1);
134
135 EXPECT_EQ(true, actual);
136 }
137
TEST_F(MSWindowsClipboardTests,close_isOpen_noErrors)138 TEST_F(MSWindowsClipboardTests, close_isOpen_noErrors)
139 {
140 MSWindowsClipboard clipboard(NULL);
141 clipboard.open(0);
142
143 clipboard.close();
144
145 // can't assert anything
146 }
147
148 // looks like this test may fail intermittently:
149 // * http://buildbot.symless.com:8000/builders/trunk-win32/builds/246/steps/shell_3/logs/stdio
150 /*TEST_F(MSWindowsClipboardTests, getTime_openWithNoEmpty_returnsOne)
151 {
152 MSWindowsClipboard clipboard(NULL);
153 clipboard.open(1);
154
155 MSWindowsClipboard::Time actual = clipboard.getTime();
156
157 // this behavior is different to that of Clipboard which only
158 // returns the value passed into open(t) after empty() is called.
159 EXPECT_EQ(1, actual);
160 }*/
161
162 // this also fails intermittently:
163 // http://buildbot.symless.com:8000/builders/trunk-win32/builds/266/steps/shell_3/logs/stdio
164 /*TEST_F(MSWindowsClipboardTests, getTime_openAndEmpty_returnsOne)
165 {
166 MSWindowsClipboard clipboard(NULL);
167 clipboard.open(1);
168 clipboard.empty();
169
170 MSWindowsClipboard::Time actual = clipboard.getTime();
171
172 EXPECT_EQ(1, actual);
173 }*/
174
TEST_F(MSWindowsClipboardTests,has_withFormatAdded_returnsTrue)175 TEST_F(MSWindowsClipboardTests, has_withFormatAdded_returnsTrue)
176 {
177 MSWindowsClipboard clipboard(NULL);
178 clipboard.open(0);
179 clipboard.empty();
180 clipboard.add(IClipboard::kText, "synergy rocks!");
181
182 bool actual = clipboard.has(IClipboard::kText);
183
184 EXPECT_EQ(true, actual);
185 }
186
TEST_F(MSWindowsClipboardTests,has_withNoFormats_returnsFalse)187 TEST_F(MSWindowsClipboardTests, has_withNoFormats_returnsFalse)
188 {
189 MSWindowsClipboard clipboard(NULL);
190 clipboard.open(0);
191 clipboard.empty();
192
193 bool actual = clipboard.has(IClipboard::kText);
194
195 EXPECT_EQ(false, actual);
196 }
197
TEST_F(MSWindowsClipboardTests,get_withNoFormats_returnsEmpty)198 TEST_F(MSWindowsClipboardTests, get_withNoFormats_returnsEmpty)
199 {
200 MSWindowsClipboard clipboard(NULL);
201 clipboard.open(0);
202 clipboard.empty();
203
204 String actual = clipboard.get(IClipboard::kText);
205
206 EXPECT_EQ("", actual);
207 }
208
TEST_F(MSWindowsClipboardTests,get_withFormatAdded_returnsExpected)209 TEST_F(MSWindowsClipboardTests, get_withFormatAdded_returnsExpected)
210 {
211 MSWindowsClipboard clipboard(NULL);
212 clipboard.open(0);
213 clipboard.empty();
214 clipboard.add(IClipboard::kText, "synergy rocks!");
215
216 String actual = clipboard.get(IClipboard::kText);
217
218 EXPECT_EQ("synergy rocks!", actual);
219 }
220
TEST_F(MSWindowsClipboardTests,isOwnedBySynergy_defaultState_noError)221 TEST_F(MSWindowsClipboardTests, isOwnedBySynergy_defaultState_noError)
222 {
223 MSWindowsClipboard clipboard(NULL);
224 clipboard.open(0);
225
226 bool actual = clipboard.isOwnedBySynergy();
227
228 EXPECT_EQ(true, actual);
229 }
230