diff --git a/src/test/unittests/platform/MSWindowsClipboardTests.cpp b/src/test/unittests/platform/MSWindowsClipboardTests.cpp deleted file mode 100644 index 612b0d853..000000000 --- a/src/test/unittests/platform/MSWindowsClipboardTests.cpp +++ /dev/null @@ -1,217 +0,0 @@ -/* - * Deskflow -- mouse and keyboard sharing utility - * SPDX-FileCopyrightText: (C) 2012 - 2016 Symless Ltd. - * SPDX-FileCopyrightText: (C) 2011 Nick Bolton - * SPDX-License-Identifier: GPL-2.0-only WITH LicenseRef-OpenSSL-Exception - */ - -#include "platform/IMSWindowsClipboardFacade.h" -#include "platform/MSWindowsClipboard.h" - -#include -#include - -class MSWindowsClipboardTests : public ::testing::Test -{ -protected: - virtual void SetUp() - { - emptyClipboard(); - } - - virtual void TearDown() - { - emptyClipboard(); - } - -private: - void emptyClipboard() - { - MSWindowsClipboard clipboard(nullptr); - clipboard.open(0); - clipboard.empty(); - } -}; - -class MockFacade : public IMSWindowsClipboardFacade -{ -public: - MOCK_METHOD2(write, void(HANDLE, UINT)); -}; - -TEST_F(MSWindowsClipboardTests, emptyUnowned_openCalled_returnsTrue) -{ - MSWindowsClipboard clipboard(nullptr); - clipboard.open(0); - - bool actual = clipboard.emptyUnowned(); - - EXPECT_EQ(true, actual); -} - -TEST_F(MSWindowsClipboardTests, empty_openCalled_returnsTrue) -{ - MSWindowsClipboard clipboard(nullptr); - clipboard.open(0); - - bool actual = clipboard.empty(); - - EXPECT_EQ(true, actual); -} - -TEST_F(MSWindowsClipboardTests, empty_singleFormat_hasReturnsFalse) -{ - MSWindowsClipboard clipboard(nullptr); - clipboard.open(0); - clipboard.add(MSWindowsClipboard::kText, "synergy rocks!"); - - clipboard.empty(); - - bool actual = clipboard.has(MSWindowsClipboard::kText); - EXPECT_EQ(false, actual); -} - -TEST_F(MSWindowsClipboardTests, add_newValue_valueWasStored) -{ - MSWindowsClipboard clipboard(nullptr); - clipboard.open(0); - - clipboard.add(IClipboard::kText, "synergy rocks!"); - - std::string actual = clipboard.get(IClipboard::kText); - EXPECT_EQ("synergy rocks!", actual); -} - -TEST_F(MSWindowsClipboardTests, add_newValue_writeWasCalled) -{ - MockFacade facade; - EXPECT_CALL(facade, write(testing::_, testing::_)); - - MSWindowsClipboard clipboard(nullptr); - clipboard.setFacade(facade); - clipboard.open(0); - - clipboard.add(IClipboard::kText, "synergy rocks!"); -} - -TEST_F(MSWindowsClipboardTests, add_replaceValue_valueWasReplaced) -{ - MSWindowsClipboard clipboard(nullptr); - clipboard.open(0); - - clipboard.add(IClipboard::kText, "synergy rocks!"); - clipboard.add(IClipboard::kText, "maxivista sucks"); // haha, just kidding. - - std::string actual = clipboard.get(IClipboard::kText); - EXPECT_EQ("maxivista sucks", actual); -} - -TEST_F(MSWindowsClipboardTests, open_timeIsZero_returnsTrue) -{ - MSWindowsClipboard clipboard(nullptr); - - bool actual = clipboard.open(0); - - EXPECT_EQ(true, actual); -} - -TEST_F(MSWindowsClipboardTests, open_timeIsOne_returnsTrue) -{ - MSWindowsClipboard clipboard(nullptr); - - bool actual = clipboard.open(1); - - EXPECT_EQ(true, actual); -} - -TEST_F(MSWindowsClipboardTests, close_isOpen_noErrors) -{ - MSWindowsClipboard clipboard(nullptr); - clipboard.open(0); - - clipboard.close(); - - // can't assert anything -} - -// TODO: fix intermittently failing tests -#if 0 -TEST_F(MSWindowsClipboardTests, getTime_openWithNoEmpty_returnsOne) -{ - MSWindowsClipboard clipboard(nullptr); - clipboard.open(1); - - MSWindowsClipboard::Time actual = clipboard.getTime(); - - // this behavior is different to that of Clipboard which only - // returns the value passed into open(t) after empty() is called. - EXPECT_EQ(1, actual); -} - -TEST_F(MSWindowsClipboardTests, getTime_openAndEmpty_returnsOne) -{ - MSWindowsClipboard clipboard(nullptr); - clipboard.open(1); - clipboard.empty(); - - MSWindowsClipboard::Time actual = clipboard.getTime(); - - EXPECT_EQ(1, actual); -} -#endif - -TEST_F(MSWindowsClipboardTests, has_withFormatAdded_returnsTrue) -{ - MSWindowsClipboard clipboard(nullptr); - clipboard.open(0); - clipboard.empty(); - clipboard.add(IClipboard::kText, "synergy rocks!"); - - bool actual = clipboard.has(IClipboard::kText); - - EXPECT_EQ(true, actual); -} - -TEST_F(MSWindowsClipboardTests, has_withNoFormats_returnsFalse) -{ - MSWindowsClipboard clipboard(nullptr); - clipboard.open(0); - clipboard.empty(); - - bool actual = clipboard.has(IClipboard::kText); - - EXPECT_EQ(false, actual); -} - -TEST_F(MSWindowsClipboardTests, get_withNoFormats_returnsEmpty) -{ - MSWindowsClipboard clipboard(nullptr); - clipboard.open(0); - clipboard.empty(); - - std::string actual = clipboard.get(IClipboard::kText); - - EXPECT_EQ("", actual); -} - -TEST_F(MSWindowsClipboardTests, get_withFormatAdded_returnsExpected) -{ - MSWindowsClipboard clipboard(nullptr); - clipboard.open(0); - clipboard.empty(); - clipboard.add(IClipboard::kText, "synergy rocks!"); - - std::string actual = clipboard.get(IClipboard::kText); - - EXPECT_EQ("synergy rocks!", actual); -} - -TEST_F(MSWindowsClipboardTests, isOwnedByDeskflow_defaultState_noError) -{ - MSWindowsClipboard clipboard(nullptr); - clipboard.open(0); - - bool actual = clipboard.isOwnedByDeskflow(); - - EXPECT_EQ(true, actual); -} diff --git a/src/unittests/CMakeLists.txt b/src/unittests/CMakeLists.txt index ea4d77e41..acb832ecf 100644 --- a/src/unittests/CMakeLists.txt +++ b/src/unittests/CMakeLists.txt @@ -44,6 +44,7 @@ find_package(Qt6 ${REQUIRED_QT_VERSION} REQUIRED COMPONENTS Test) add_subdirectory(common) add_subdirectory(deskflow) add_subdirectory(gui) +add_subdirectory(platform) #make sure to use CI only plugin on Unix if (UNIX AND NOT APPLE) diff --git a/src/unittests/platform/CMakeLists.txt b/src/unittests/platform/CMakeLists.txt new file mode 100644 index 000000000..b8757f3af --- /dev/null +++ b/src/unittests/platform/CMakeLists.txt @@ -0,0 +1,12 @@ +# SPDX-FileCopyrightText: 2025 Deskflow Developers +# SPDX-License-Identifier: MIT + +if (WIN32) + create_test( + NAME MSWindowsClipboardTests + DEPENDS platform + LIBS base arch + SOURCE MSWindowsClipboardTests.cpp + WORKING_DIRECTORY "${CMAKE_BINARY_DIR}/src/lib/platform" + ) +endif() diff --git a/src/unittests/platform/MSWindowsClipboardTests.cpp b/src/unittests/platform/MSWindowsClipboardTests.cpp new file mode 100644 index 000000000..ad685b963 --- /dev/null +++ b/src/unittests/platform/MSWindowsClipboardTests.cpp @@ -0,0 +1,138 @@ +/* + * Deskflow -- mouse and keyboard sharing utility + * SPDX-FileCopyrightText: (C) 2025 Chris Rizzitello + * SPDX-FileCopyrightText: (C) 2012 - 2016 Symless Ltd. + * SPDX-FileCopyrightText: (C) 2002 Chris Schoeneman + * SPDX-License-Identifier: GPL-2.0-only WITH LicenseRef-OpenSSL-Exception + */ + +#include "MSWindowsClipboardTests.h" + +#include "../../lib/platform/MSWindowsClipboard.h" + +void MSWindowsClipboardTests::initTestCase() +{ + m_arch.init(); + m_log.setFilter(kDEBUG2); + + MSWindowsClipboard clipboard(NULL); + + QVERIFY(clipboard.open(0)); + QVERIFY(clipboard.empty()); +} + +void MSWindowsClipboardTests::cleanupTestCase() +{ + initTestCase(); +} + +void MSWindowsClipboardTests::emptyUnusedClipboard() +{ + MSWindowsClipboard clipboard(NULL); + QVERIFY(clipboard.open(0)); + QVERIFY(clipboard.emptyUnowned()); +} + +void MSWindowsClipboardTests::emptyOpenCalled() +{ + MSWindowsClipboard clipboard(NULL); + QVERIFY(clipboard.open(0)); + QVERIFY(clipboard.empty()); +} + +void MSWindowsClipboardTests::emptySingleFormat() +{ + MSWindowsClipboard clipboard(NULL); + QVERIFY(clipboard.open(0)); + + clipboard.add(MSWindowsClipboard::kText, m_testString); + QVERIFY(clipboard.empty()); + QVERIFY(!clipboard.has(MSWindowsClipboard::kText)); +} + +void MSWindowsClipboardTests::addValue() +{ + MSWindowsClipboard clipboard(NULL); + QVERIFY(clipboard.open(0)); + + clipboard.add(IClipboard::kText, m_testString); + QCOMPARE(clipboard.get(IClipboard::kText), m_testString); +} + +void MSWindowsClipboardTests::replaceValue() +{ + MSWindowsClipboard clipboard(NULL); + QVERIFY(clipboard.open(0)); + + clipboard.add(IClipboard::kText, m_testString); + clipboard.add(IClipboard::kText, m_testString2); + + QCOMPARE(clipboard.get(IClipboard::kText), m_testString2); +} + +void MSWindowsClipboardTests::openTimeIsOne() +{ + MSWindowsClipboard clipboard(NULL); + QVERIFY(clipboard.open(1)); +} + +void MSWindowsClipboardTests::closeIsOpen() +{ + MSWindowsClipboard clipboard(NULL); + QVERIFY(clipboard.open(1)); + clipboard.close(); +} + +void MSWindowsClipboardTests::getTimeOpenWithNoEmpty() +{ + MSWindowsClipboard clipboard(NULL); + QVERIFY(clipboard.open(1)); + // this behavior is different to that of Clipboard which only + // returns the value passed into open(t) after empty() is called. + QCOMPARE(clipboard.getTime(), 1); +} + +void MSWindowsClipboardTests::getTimeOpenAndEmpty() +{ + MSWindowsClipboard clipboard(NULL); + QVERIFY(clipboard.open(1)); + QVERIFY(clipboard.empty()); + QCOMPARE(clipboard.getTime(), 1); +} + +void MSWindowsClipboardTests::has_withFormatAdded() +{ + MSWindowsClipboard clipboard(NULL); + QVERIFY(clipboard.open(0)); + QVERIFY(clipboard.empty()); + + clipboard.add(IClipboard::kText, m_testString); + QVERIFY(clipboard.has(IClipboard::kText)); +} + +void MSWindowsClipboardTests::has_withNoFormatAdded() +{ + MSWindowsClipboard clipboard(NULL); + QVERIFY(clipboard.open(0)); + QVERIFY(clipboard.empty()); + QCOMPARE(clipboard.get(IClipboard::kText), ""); +} + +void MSWindowsClipboardTests::getNonEmptyText() +{ + MSWindowsClipboard clipboard(NULL); + QVERIFY(clipboard.open(0)); + QVERIFY(clipboard.empty()); + + clipboard.add(IClipboard::kText, m_testString); + QCOMPARE(clipboard.get(IClipboard::kText), m_testString); +} + +void MSWindowsClipboardTests::isOwnedByDeskflow() +{ + MSWindowsClipboard clipboard(NULL); + QVERIFY(clipboard.open(0)); + QVERIFY(clipboard.isOwnedByDeskflow()); +} + +QTEST_MAIN(MSWindowsClipboardTests) diff --git a/src/unittests/platform/MSWindowsClipboardTests.h b/src/unittests/platform/MSWindowsClipboardTests.h new file mode 100644 index 000000000..e4a739cf6 --- /dev/null +++ b/src/unittests/platform/MSWindowsClipboardTests.h @@ -0,0 +1,37 @@ +/* + * Deskflow -- mouse and keyboard sharing utility + * SPDX-FileCopyrightText: (C) 2025 Chris Rizzitello + * SPDX-License-Identifier: GPL-2.0-only WITH LicenseRef-OpenSSL-Exception + */ + +#include "base/Log.h" + +#include + +class MSWindowsClipboardTests : public QObject +{ + Q_OBJECT +private slots: + // Test are run in order top to bottom + void initTestCase(); + void cleanupTestCase(); + void emptyUnusedClipboard(); + void emptyOpenCalled(); + void emptySingleFormat(); + void addValue(); + void replaceValue(); + void openTimeIsOne(); + void closeIsOpen(); + void getTimeOpenWithNoEmpty(); + void getTimeOpenAndEmpty(); + void has_withFormatAdded(); + void has_withNoFormatAdded(); + void getNonEmptyText(); + void isOwnedByDeskflow(); + +private: + Arch m_arch; + Log m_log; + const std::string m_testString = "deskflow test string"; + const std::string m_testString2 = "Another String"; +};