diff --git a/src/gui/test/HotkeyTests.cpp b/src/gui/test/HotkeyTests.cpp index e3d31ac5..be8741c3 100644 --- a/src/gui/test/HotkeyTests.cpp +++ b/src/gui/test/HotkeyTests.cpp @@ -20,6 +20,7 @@ #include "Utils.h" #include +#include struct TestAction { @@ -96,65 +97,82 @@ struct TestHotKey std::vector actions; }; -Action createAction(const TestAction& test_action) -{ - Action action; - action.setType(test_action.type); +namespace { - switch (test_action.type) { - case Action::keyDown: - case Action::keyUp: - case Action::keystroke: { - KeySequence sequence; - for (auto key : test_action.keys) { - sequence.appendKey(key.key, key.modifier); + Action createAction(const TestAction& test_action) + { + Action action; + action.setType(test_action.type); + + switch (test_action.type) { + case Action::keyDown: + case Action::keyUp: + case Action::keystroke: { + KeySequence sequence; + for (auto key : test_action.keys) { + sequence.appendKey(key.key, key.modifier); + } + action.setKeySequence(sequence); + for (const auto& type_screen_name : test_action.type_screen_names) { + action.appendTypeScreenName(QString::fromStdString(type_screen_name)); + } + break; } - action.setKeySequence(sequence); - for (const auto& type_screen_name : test_action.type_screen_names) { - action.appendTypeScreenName(QString::fromStdString(type_screen_name)); - } - break; + case Action::switchToScreen: + action.setSwitchScreenName(QString::fromStdString(test_action.screen_name)); + break; + case Action::toggleScreen: + break; + case Action::switchInDirection: + action.setSwitchDirection(test_action.switch_direction); + break; + case Action::lockCursorToScreen: + action.setLockCursorMode(test_action.lock_cursor_mode); + break; } - case Action::switchToScreen: - action.setSwitchScreenName(QString::fromStdString(test_action.screen_name)); - break; - case Action::toggleScreen: - break; - case Action::switchInDirection: - action.setSwitchDirection(test_action.switch_direction); - break; - case Action::lockCursorToScreen: - action.setLockCursorMode(test_action.lock_cursor_mode); - break; + return action; } - return action; -} -void doHotkeyLoadSaveTest(const TestHotKey& test_hotkey, QSettings::Format format) + Hotkey createHotkey(const TestHotKey& test_hotkey) + { + Hotkey hotkey; + KeySequence sequence; + for (auto key : test_hotkey.keys) { + sequence.appendKey(key.key, key.modifier); + } + hotkey.setKeySequence(sequence); + + for (auto action : test_hotkey.actions) { + hotkey.appendAction(createAction(action)); + } + return hotkey; + } + + std::string hotkeyToStringViaTextStream(const Hotkey& hotkey) + { + QString result; + QTextStream stream{&result}; + stream << hotkey; + return result.toStdString(); + } +} // namespace + +void doHotkeyLoadSaveTest(const TestHotKey& test_hotkey) { auto filename = getTemporaryFilename(); Hotkey hotkey_before, hotkey_after; { - QSettings settings(filename, format); + QSettings settings(filename, QSettings::NativeFormat); - - KeySequence sequence; - for (auto key : test_hotkey.keys) { - sequence.appendKey(key.key, key.modifier); - } - hotkey_before.setKeySequence(sequence); - - for (auto action : test_hotkey.actions) { - hotkey_before.appendAction(createAction(action)); - } + hotkey_before = createHotkey(test_hotkey); settings.beginGroup("test"); hotkey_before.saveSettings(settings); settings.endGroup(); } { - QSettings settings(filename, format); + QSettings settings(filename, QSettings::NativeFormat); settings.beginGroup("test"); hotkey_after.loadSettings(settings); @@ -189,15 +207,13 @@ void doHotkeyLoadSaveTest(const TestHotKey& test_hotkey, QSettings::Format forma TEST(HotkeyLoadSaveTests, Empty) { TestHotKey hotkey; - doHotkeyLoadSaveTest(hotkey, QSettings::NativeFormat); - doHotkeyLoadSaveTest(hotkey, QSettings::IniFormat); + doHotkeyLoadSaveTest(hotkey); } TEST(HotkeyLoadSaveTests, KeysNoActions) { TestHotKey hotkey = {{{Qt::Key_A, Qt::NoModifier}, {Qt::Key_B, Qt::NoModifier}}, {}}; - doHotkeyLoadSaveTest(hotkey, QSettings::NativeFormat); - doHotkeyLoadSaveTest(hotkey, QSettings::IniFormat); + doHotkeyLoadSaveTest(hotkey); } TEST(HotkeyLoadSaveTests, CommaKeyNoActions) @@ -208,8 +224,7 @@ TEST(HotkeyLoadSaveTests, CommaKeyNoActions) {Qt::Key_Comma, Qt::NoModifier}, {Qt::Key_B, Qt::NoModifier} }, {}}; - doHotkeyLoadSaveTest(hotkey, QSettings::NativeFormat); - doHotkeyLoadSaveTest(hotkey, QSettings::IniFormat); + doHotkeyLoadSaveTest(hotkey); } TEST(HotkeyLoadSaveTests, KeysSingleAction) @@ -223,8 +238,7 @@ TEST(HotkeyLoadSaveTests, KeysSingleAction) TestAction::createKeyDown({{Qt::Key_Z, Qt::NoModifier}}) } }; - doHotkeyLoadSaveTest(hotkey, QSettings::NativeFormat); - doHotkeyLoadSaveTest(hotkey, QSettings::IniFormat); + doHotkeyLoadSaveTest(hotkey); } TEST(HotkeyLoadSaveTests, KeysMultipleAction) @@ -239,6 +253,68 @@ TEST(HotkeyLoadSaveTests, KeysMultipleAction) TestAction::createSwitchToScreen("test_screen") } }; - doHotkeyLoadSaveTest(hotkey, QSettings::NativeFormat); - doHotkeyLoadSaveTest(hotkey, QSettings::IniFormat); + doHotkeyLoadSaveTest(hotkey); +} + +TEST(HotkeyToTexStreamTests, Empty) +{ + TestHotKey hotkey; + ASSERT_EQ(hotkeyToStringViaTextStream(createHotkey(hotkey)), ""); +} + +TEST(HotkeyToTexStreamTests, KeysNoActions) +{ + TestHotKey hotkey = { + { + {Qt::Key_A, Qt::NoModifier}, + {Qt::Key_B, Qt::NoModifier} + }, + {} + }; + ASSERT_EQ(hotkeyToStringViaTextStream(createHotkey(hotkey)), ""); +} + +TEST(HotkeyToTexStreamTests, KeysSingleAction) +{ + TestHotKey hotkey = { + { + {Qt::Key_A, Qt::NoModifier}, + {Qt::Key_B, Qt::NoModifier} + }, + {} + }; + ASSERT_EQ(hotkeyToStringViaTextStream(createHotkey(hotkey)), ""); +} + + +TEST(HotkeyToTexStreamTests, KeysCommaSingleAction) +{ + TestHotKey hotkey = { + { + {Qt::Key_A, Qt::NoModifier}, + {Qt::Key_Comma, Qt::NoModifier}, + {Qt::Key_B, Qt::NoModifier} + }, + { + TestAction::createKeyDown({{Qt::Key_Z, Qt::NoModifier}}) + } + }; + ASSERT_EQ(hotkeyToStringViaTextStream(createHotkey(hotkey)), + "\tkeystroke(a+,+b) = keyDown(z,*)\n"); +} + +TEST(HotkeyToTexStreamTests, KeysMultipleAction) +{ + TestHotKey hotkey = { + { + {Qt::Key_A, Qt::NoModifier}, + {Qt::Key_B, Qt::NoModifier} + }, + { + TestAction::createKeyDown({{Qt::Key_Z, Qt::NoModifier}}), + TestAction::createSwitchToScreen("test_screen") + } + }; + ASSERT_EQ(hotkeyToStringViaTextStream(createHotkey(hotkey)), + "\tkeystroke(a+b) = keyDown(z,*)\n\tkeystroke(a+b) = switchToScreen(test_screen)\n"); } diff --git a/src/gui/test/KeySequenceTests.cpp b/src/gui/test/KeySequenceTests.cpp index 1e22ac4b..cc1743d9 100644 --- a/src/gui/test/KeySequenceTests.cpp +++ b/src/gui/test/KeySequenceTests.cpp @@ -86,17 +86,16 @@ namespace { } // namespace class KeySequenceLoadSaveTestFixture : - public ::testing::TestWithParam> {}; + public ::testing::TestWithParam {}; TEST_P(KeySequenceLoadSaveTestFixture, SupportsSpecialSymbols) { - int key = std::tr1::get<0>(GetParam()); - QSettings::Format format = std::tr1::get<1>(GetParam()); + int key = GetParam(); auto filename = getTemporaryFilename(); { - QSettings settings(filename, format); + QSettings settings(filename, QSettings::NativeFormat); KeySequence sequence; sequence.appendKey(key, 0); @@ -106,7 +105,7 @@ TEST_P(KeySequenceLoadSaveTestFixture, SupportsSpecialSymbols) settings.endGroup(); } { - QSettings settings(filename, format); + QSettings settings(filename, QSettings::NativeFormat); KeySequence sequence; settings.beginGroup("test"); @@ -125,8 +124,7 @@ TEST_P(KeySequenceLoadSaveTestFixture, SupportsSpecialSymbols) INSTANTIATE_TEST_CASE_P( KeySequenceLoadSaveTests, KeySequenceLoadSaveTestFixture, - ::testing::Combine(::testing::ValuesIn(s_key_sequence_test_keys), - ::testing::Values(QSettings::NativeFormat, QSettings::IniFormat))); + ::testing::ValuesIn(s_key_sequence_test_keys)); TEST(KeySequenceTests, ToString) {