diff --git a/cmake/CMakeLists_test.txt b/cmake/CMakeLists_test.txt index bd3f379c..02de488e 100644 --- a/cmake/CMakeLists_test.txt +++ b/cmake/CMakeLists_test.txt @@ -29,6 +29,12 @@ if(WIN32) ) endif() +if(APPLE) + list(APPEND integtests + ${root_dir}/src/integtest/platform/COSXClipboardTests.cpp + ) +endif() + set(inc ${root_dir} ${root_dir}/lib diff --git a/lib/platform/COSXClipboard.cpp b/lib/platform/COSXClipboard.cpp index 9cc47b4d..da46eb76 100644 --- a/lib/platform/COSXClipboard.cpp +++ b/lib/platform/COSXClipboard.cpp @@ -102,7 +102,12 @@ COSXClipboard::add(EFormat format, const CString & data) CString osXData = converter->fromIClipboard(data); CFStringRef flavorType = converter->getOSXFormat(); CFDataRef dataRef = CFDataCreate(kCFAllocatorDefault, (UInt8 *)osXData.data(), osXData.size()); - + + // integ tests showed that if you call add(...) twice, then the + // second call will actually fail to set clipboard data. calling + // empty() seems to solve this problem. + empty(); + PasteboardPutItemFlavor( m_pboard, (PasteboardItemID) 0, diff --git a/src/integtest/IntegTestMain.cpp b/src/integtest/IntegTestMain.cpp index 74af0872..011594f3 100644 --- a/src/integtest/IntegTestMain.cpp +++ b/src/integtest/IntegTestMain.cpp @@ -17,7 +17,9 @@ #include #include +#if SYSAPI_WIN32 #include "CArchMiscWindows.h" +#endif #include "CArch.h" int diff --git a/src/integtest/platform/COSXClipboardTests.cpp b/src/integtest/platform/COSXClipboardTests.cpp new file mode 100644 index 00000000..f9e6a19a --- /dev/null +++ b/src/integtest/platform/COSXClipboardTests.cpp @@ -0,0 +1,162 @@ +/* + * synergy -- mouse and keyboard sharing utility + * Copyright (C) 2011 Chris Schoeneman, Nick Bolton, Sorin Sbarnea + * + * This package is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * found in the file COPYING that should have accompanied this file. + * + * This package is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#include +#include +#include "COSXClipboard.h" + +TEST(COSXClipboardTests, empty_openCalled_returnsTrue) +{ + COSXClipboard clipboard; + clipboard.open(0); + + bool actual = clipboard.empty(); + + EXPECT_EQ(true, actual); +} + +TEST(COSXClipboardTests, empty_singleFormat_hasReturnsFalse) +{ + COSXClipboard clipboard; + clipboard.open(0); + clipboard.add(COSXClipboard::kText, "synergy rocks!"); + + clipboard.empty(); + + bool actual = clipboard.has(COSXClipboard::kText); + EXPECT_EQ(false, actual); +} + +TEST(COSXClipboardTests, add_newValue_valueWasStored) +{ + COSXClipboard clipboard; + clipboard.open(0); + + clipboard.add(IClipboard::kText, "synergy rocks!"); + + CString actual = clipboard.get(IClipboard::kText); + EXPECT_EQ("synergy rocks!", actual); +} + +TEST(COSXClipboardTests, add_replaceValue_valueWasReplaced) +{ + COSXClipboard clipboard; + clipboard.open(0); + + clipboard.add(IClipboard::kText, "synergy rocks!"); + clipboard.add(IClipboard::kText, "maxivista sucks"); // haha, just kidding. + + CString actual = clipboard.get(IClipboard::kText); + EXPECT_EQ("maxivista sucks", actual); +} + +TEST(COSXClipboardTests, open_timeIsZero_returnsTrue) +{ + COSXClipboard clipboard; + + bool actual = clipboard.open(0); + + EXPECT_EQ(true, actual); +} + +TEST(COSXClipboardTests, open_timeIsOne_returnsTrue) +{ + COSXClipboard clipboard; + + bool actual = clipboard.open(1); + + EXPECT_EQ(true, actual); +} + +TEST(COSXClipboardTests, close_isOpen_noErrors) +{ + COSXClipboard clipboard; + clipboard.open(0); + + clipboard.close(); + + // can't assert anything +} + +TEST(COSXClipboardTests, getTime_openWithNoEmpty_returnsOne) +{ + COSXClipboard clipboard; + clipboard.open(1); + + COSXClipboard::Time actual = clipboard.getTime(); + + // this behavior is different to that of CClipboard which only + // returns the value passed into open(t) after empty() is called. + EXPECT_EQ((UInt32)1, actual); +} + +TEST(COSXClipboardTests, getTime_openAndEmpty_returnsOne) +{ + COSXClipboard clipboard; + clipboard.open(1); + clipboard.empty(); + + COSXClipboard::Time actual = clipboard.getTime(); + + EXPECT_EQ((UInt32)1, actual); +} + +TEST(COSXClipboardTests, has_withFormatAdded_returnsTrue) +{ + COSXClipboard clipboard; + clipboard.open(0); + clipboard.empty(); + clipboard.add(IClipboard::kText, "synergy rocks!"); + + bool actual = clipboard.has(IClipboard::kText); + + EXPECT_EQ(true, actual); +} + +TEST(COSXClipboardTests, has_withNoFormats_returnsFalse) +{ + COSXClipboard clipboard; + clipboard.open(0); + clipboard.empty(); + + bool actual = clipboard.has(IClipboard::kText); + + EXPECT_EQ(false, actual); +} + +TEST(COSXClipboardTests, get_withNoFormats_returnsEmpty) +{ + COSXClipboard clipboard; + clipboard.open(0); + clipboard.empty(); + + CString actual = clipboard.get(IClipboard::kText); + + EXPECT_EQ("", actual); +} + +TEST(COSXClipboardTests, get_withFormatAdded_returnsExpected) +{ + COSXClipboard clipboard; + clipboard.open(0); + clipboard.empty(); + clipboard.add(IClipboard::kText, "synergy rocks!"); + + CString actual = clipboard.get(IClipboard::kText); + + EXPECT_EQ("synergy rocks!", actual); +}