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