#include "widgets/splits/SplitInput.hpp" #include "common/Literals.hpp" #include "controllers/accounts/AccountController.hpp" #include "controllers/commands/Command.hpp" #include "controllers/commands/CommandController.hpp" #include "controllers/hotkeys/HotkeyController.hpp" #include "mocks/BaseApplication.hpp" #include "mocks/Emotes.hpp" #include "singletons/Fonts.hpp" #include "singletons/Paths.hpp" #include "singletons/Settings.hpp" #include "singletons/Theme.hpp" #include "singletons/WindowManager.hpp" #include "Test.hpp" #include "widgets/Notebook.hpp" #include "widgets/splits/Split.hpp" #include #include using namespace chatterino; using ::testing::Exactly; namespace { class MockApplication : public mock::BaseApplication { public: MockApplication() : windowManager(this->paths_, this->settings, this->theme, this->fonts) , commands(this->paths_) { } HotkeyController *getHotkeys() override { return &this->hotkeys; } WindowManager *getWindows() override { return &this->windowManager; } AccountController *getAccounts() override { return &this->accounts; } CommandController *getCommands() override { return &this->commands; } IEmotes *getEmotes() override { return &this->emotes; } HotkeyController hotkeys; WindowManager windowManager; AccountController accounts; CommandController commands; mock::Emotes emotes; }; class SplitInputTest : public ::testing::TestWithParam> { public: SplitInputTest() : split(new Split(nullptr)) , input(this->split) { } MockApplication mockApplication; Split *split; SplitInput input; }; } // namespace TEST_P(SplitInputTest, Reply) { std::tuple params = this->GetParam(); auto [inputText, expected] = params; ASSERT_EQ("", this->input.getInputText()); this->input.setInputText(inputText); ASSERT_EQ(inputText, this->input.getInputText()); auto *message = new Message(); message->displayName = "forsen"; auto reply = MessagePtr(message); this->input.setReply(reply); QString actual = this->input.getInputText(); ASSERT_EQ(expected, actual) << "Input text after setReply should be '" << expected << "', but got '" << actual << "'"; } INSTANTIATE_TEST_SUITE_P( SplitInput, SplitInputTest, testing::Values( // Ensure message is retained std::make_tuple( // Pre-existing text in the input "Test message", // Expected text after replying to forsen "@forsen Test message "), // Ensure mention is stripped, no message std::make_tuple( // Pre-existing text in the input "@forsen", // Expected text after replying to forsen "@forsen "), // Ensure mention with space is stripped, no message std::make_tuple( // Pre-existing text in the input "@forsen ", // Expected text after replying to forsen "@forsen "), // Ensure mention is stripped, retain message std::make_tuple( // Pre-existing text in the input "@forsen Test message", // Expected text after replying to forsen "@forsen Test message "), // Ensure mention with comma is stripped, no message std::make_tuple( // Pre-existing text in the input "@forsen,", // Expected text after replying to forsen "@forsen "), // Ensure mention with comma is stripped, retain message std::make_tuple( // Pre-existing text in the input "@forsen Test message", // Expected text after replying to forsen "@forsen Test message "), // Ensure mention with comma and space is stripped, no message std::make_tuple( // Pre-existing text in the input "@forsen, ", // Expected text after replying to forsen "@forsen "), // Ensure it works with no message std::make_tuple( // Pre-existing text in the input "", // Expected text after replying to forsen "@forsen ")));