From a004cd8eba5b3868d21fb7069e9e12fbb43a2172 Mon Sep 17 00:00:00 2001 From: Povilas Kanapickas Date: Sun, 10 Jan 2021 15:28:06 +0200 Subject: [PATCH 1/4] gui/test: Put createAction() to anonymous namespace --- src/gui/test/HotkeyTests.cpp | 61 +++++++++++++++++++----------------- 1 file changed, 32 insertions(+), 29 deletions(-) diff --git a/src/gui/test/HotkeyTests.cpp b/src/gui/test/HotkeyTests.cpp index e3d31ac5..0df017f5 100644 --- a/src/gui/test/HotkeyTests.cpp +++ b/src/gui/test/HotkeyTests.cpp @@ -96,39 +96,42 @@ 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; -} +} // namespace void doHotkeyLoadSaveTest(const TestHotKey& test_hotkey, QSettings::Format format) { From 141f6de2c45015293938d0f0bdd04d9b987a2200 Mon Sep 17 00:00:00 2001 From: Povilas Kanapickas Date: Sun, 10 Jan 2021 15:28:07 +0200 Subject: [PATCH 2/4] gui/test: Extract createHotkey() --- src/gui/test/HotkeyTests.cpp | 26 ++++++++++++++++---------- 1 file changed, 16 insertions(+), 10 deletions(-) diff --git a/src/gui/test/HotkeyTests.cpp b/src/gui/test/HotkeyTests.cpp index 0df017f5..918858d9 100644 --- a/src/gui/test/HotkeyTests.cpp +++ b/src/gui/test/HotkeyTests.cpp @@ -131,6 +131,21 @@ namespace { } return action; } + + 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; + } } // namespace void doHotkeyLoadSaveTest(const TestHotKey& test_hotkey, QSettings::Format format) @@ -141,16 +156,7 @@ void doHotkeyLoadSaveTest(const TestHotKey& test_hotkey, QSettings::Format forma { QSettings settings(filename, format); - - 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); From 7befd121d49ed57263ddce7dc68f8999438594fb Mon Sep 17 00:00:00 2001 From: Povilas Kanapickas Date: Sun, 10 Jan 2021 15:28:08 +0200 Subject: [PATCH 3/4] gui/test: Remove testing of different QSettings formats QSettings guarantees are provided regardless of the format and until we use a custom format it does not make sense to verify guarantees provided by Qt. --- src/gui/test/HotkeyTests.cpp | 21 ++++++++------------- src/gui/test/KeySequenceTests.cpp | 12 +++++------- 2 files changed, 13 insertions(+), 20 deletions(-) diff --git a/src/gui/test/HotkeyTests.cpp b/src/gui/test/HotkeyTests.cpp index 918858d9..9df9c209 100644 --- a/src/gui/test/HotkeyTests.cpp +++ b/src/gui/test/HotkeyTests.cpp @@ -148,13 +148,13 @@ namespace { } } // namespace -void doHotkeyLoadSaveTest(const TestHotKey& test_hotkey, QSettings::Format format) +void doHotkeyLoadSaveTest(const TestHotKey& test_hotkey) { auto filename = getTemporaryFilename(); Hotkey hotkey_before, hotkey_after; { - QSettings settings(filename, format); + QSettings settings(filename, QSettings::NativeFormat); hotkey_before = createHotkey(test_hotkey); @@ -163,7 +163,7 @@ void doHotkeyLoadSaveTest(const TestHotKey& test_hotkey, QSettings::Format forma settings.endGroup(); } { - QSettings settings(filename, format); + QSettings settings(filename, QSettings::NativeFormat); settings.beginGroup("test"); hotkey_after.loadSettings(settings); @@ -198,15 +198,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) @@ -217,8 +215,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) @@ -232,8 +229,7 @@ TEST(HotkeyLoadSaveTests, KeysSingleAction) TestAction::createKeyDown({{Qt::Key_Z, Qt::NoModifier}}) } }; - doHotkeyLoadSaveTest(hotkey, QSettings::NativeFormat); - doHotkeyLoadSaveTest(hotkey, QSettings::IniFormat); + doHotkeyLoadSaveTest(hotkey); } TEST(HotkeyLoadSaveTests, KeysMultipleAction) @@ -248,6 +244,5 @@ TEST(HotkeyLoadSaveTests, KeysMultipleAction) TestAction::createSwitchToScreen("test_screen") } }; - doHotkeyLoadSaveTest(hotkey, QSettings::NativeFormat); - doHotkeyLoadSaveTest(hotkey, QSettings::IniFormat); + doHotkeyLoadSaveTest(hotkey); } 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) { From def2ef2a9ff3ea7ce4ffb12e5592a601f41670c1 Mon Sep 17 00:00:00 2001 From: Povilas Kanapickas Date: Sun, 10 Jan 2021 15:28:09 +0200 Subject: [PATCH 4/4] gui/test: Add tests for Hotkey serialization via QTextStream --- src/gui/test/HotkeyTests.cpp | 72 ++++++++++++++++++++++++++++++++++++ 1 file changed, 72 insertions(+) diff --git a/src/gui/test/HotkeyTests.cpp b/src/gui/test/HotkeyTests.cpp index 9df9c209..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 { @@ -146,6 +147,14 @@ namespace { } 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) @@ -246,3 +255,66 @@ TEST(HotkeyLoadSaveTests, KeysMultipleAction) }; 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"); +}