00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019 #include <gtest/gtest.h>
00020 #include <gmock/gmock.h>
00021
00022 #define TEST_ENV
00023 #include "Global.h"
00024
00025 #include "CMSWindowsKeyState.h"
00026 #include "CMSWindowsDesks.h"
00027 #include "CMSWindowsScreen.h"
00028 #include "CMSWindowsScreenSaver.h"
00029 #include "TMethodJob.h"
00030 #include "CMockEventQueue.h"
00031 #include "CMockKeyMap.h"
00032
00033
00034 #define SYNERGY_MSG_FAKE_KEY SYNERGY_HOOK_LAST_MSG + 4
00035
00036 using ::testing::_;
00037 using ::testing::NiceMock;
00038
00039 class CMSWindowsKeyStateTests : public ::testing::Test
00040 {
00041 protected:
00042 virtual void SetUp()
00043 {
00044
00045 m_hookLibrary = m_hookLibraryLoader.openHookLibrary("synrgyhk");
00046 m_screensaver = new CMSWindowsScreenSaver();
00047 }
00048
00049 virtual void TearDown()
00050 {
00051 delete m_screensaver;
00052 }
00053
00054 CMSWindowsDesks* newDesks(IEventQueue& eventQueue)
00055 {
00056 return new CMSWindowsDesks(
00057 true, false, m_hookLibrary, m_screensaver, eventQueue,
00058 new TMethodJob<CMSWindowsKeyStateTests>(
00059 this, &CMSWindowsKeyStateTests::updateKeysCB), false);
00060 }
00061
00062 void* getEventTarget() const
00063 {
00064 return const_cast<CMSWindowsKeyStateTests*>(this);
00065 }
00066
00067 private:
00068 void updateKeysCB(void*) { }
00069 HINSTANCE m_hookLibrary;
00070 IScreenSaver* m_screensaver;
00071 CMSWindowsHookLibraryLoader m_hookLibraryLoader;
00072 };
00073
00074 TEST_F(CMSWindowsKeyStateTests, disable_nonWin95OS_eventQueueNotUsed)
00075 {
00076 NiceMock<CMockEventQueue> eventQueue;
00077 CMSWindowsDesks* desks = newDesks(eventQueue);
00078 CMockKeyMap keyMap;
00079 CMSWindowsKeyState keyState(desks, getEventTarget(), eventQueue, keyMap);
00080
00081
00082 EXPECT_CALL(eventQueue, removeHandler(_, _)).Times(0);
00083
00084 keyState.disable();
00085 delete desks;
00086 }
00087
00088 TEST_F(CMSWindowsKeyStateTests, testAutoRepeat_noRepeatAndButtonIsZero_resultIsTrue)
00089 {
00090 NiceMock<CMockEventQueue> eventQueue;
00091 CMSWindowsDesks* desks = newDesks(eventQueue);
00092 CMockKeyMap keyMap;
00093 CMSWindowsKeyState keyState(desks, getEventTarget(), eventQueue, keyMap);
00094 keyState.setLastDown(1);
00095
00096 bool actual = keyState.testAutoRepeat(true, false, 1);
00097
00098 ASSERT_TRUE(actual);
00099 delete desks;
00100 }
00101
00102 TEST_F(CMSWindowsKeyStateTests, testAutoRepeat_pressFalse_lastDownIsZero)
00103 {
00104 NiceMock<CMockEventQueue> eventQueue;
00105 CMSWindowsDesks* desks = newDesks(eventQueue);
00106 CMockKeyMap keyMap;
00107 CMSWindowsKeyState keyState(desks, getEventTarget(), eventQueue, keyMap);
00108 keyState.setLastDown(1);
00109
00110 keyState.testAutoRepeat(false, false, 1);
00111
00112 ASSERT_EQ(0, keyState.getLastDown());
00113 delete desks;
00114 }
00115
00116 TEST_F(CMSWindowsKeyStateTests, saveModifiers_noModifiers_savedModifiers0)
00117 {
00118 NiceMock<CMockEventQueue> eventQueue;
00119 CMSWindowsDesks* desks = newDesks(eventQueue);
00120 CMockKeyMap keyMap;
00121 CMSWindowsKeyState keyState(desks, getEventTarget(), eventQueue, keyMap);
00122
00123 keyState.saveModifiers();
00124
00125 ASSERT_EQ(0, keyState.getSavedModifiers());
00126 delete desks;
00127 }
00128
00129
00130
00131
00132
00133
00134
00135
00136
00137
00138
00139
00140
00141
00142
00143