SetKeyEventTests.cpp
 1  #include "pch.h"
 2  
 3  // Suppressing 26466 - Don't use static_cast downcasts - in CppUnitTest.h
 4  #pragma warning(push)
 5  #pragma warning(disable : 26466)
 6  #include "CppUnitTest.h"
 7  #pragma warning(pop)
 8  
 9  #include "MockedInput.h"
10  #include <keyboardmanager/KeyboardManagerEngineLibrary/State.h>
11  #include <keyboardmanager/common/KeyboardEventHandlers.h>
12  #include <keyboardmanager/common/Helpers.h>
13  #include "TestHelpers.h"
14  
15  using namespace Microsoft::VisualStudio::CppUnitTestFramework;
16  
17  namespace RemappingLogicTests
18  {
19      // Tests for the SetKeyEvent method
20      TEST_CLASS (SetKeyEventTests)
21      {
22      private:
23          KeyboardManagerInput::MockedInput mockedInputHandler;
24          State testState;
25  
26      public:
27          TEST_METHOD_INITIALIZE(InitializeTestEnv)
28          {
29              // Reset test environment
30              TestHelpers::ResetTestEnv(mockedInputHandler, testState);
31          }
32  
33          // Test if SetKeyEvent sets the extended key flag for all the extended keys
34          TEST_METHOD (SetKeyEvent_ShouldUseExtendedKeyFlag_WhenArgumentIsExtendedKey)
35          {
36              const int nInputs = 15;
37              std::vector<INPUT> inputs;
38  
39              // List of extended keys
40              WORD keyCodes[nInputs] = { VK_RCONTROL, VK_RMENU, VK_NUMLOCK, VK_SNAPSHOT, VK_CANCEL, VK_INSERT, VK_HOME, VK_PRIOR, VK_DELETE, VK_END, VK_NEXT, VK_LEFT, VK_DOWN, VK_RIGHT, VK_UP };
41  
42              for (int i = 0; i < nInputs; i++)
43              {
44                  // Set key events for all the extended keys
45                  Helpers::SetKeyEvent(inputs, INPUT_KEYBOARD, keyCodes[i], 0, 0);
46                  // Extended key flag should be set
47                  Assert::AreEqual(true, bool(inputs[i].ki.dwFlags & KEYEVENTF_EXTENDEDKEY));
48              }
49          }
50  
51          // Test if SetKeyEvent sets the scan code field to 0 for dummy key
52          TEST_METHOD (SetKeyEvent_ShouldSetScanCodeFieldTo0_WhenArgumentIsDummyKey)
53          {
54              std::vector<INPUT> inputs{};
55  
56              Helpers::SetDummyKeyEvent(inputs, 0);
57  
58              // Assert that wScan for both inputs is 0
59              Assert::AreEqual<unsigned int>(0, inputs[0].ki.wScan);
60              Assert::AreEqual<unsigned int>(0, inputs[1].ki.wScan);
61          }
62      };
63  }