implemented google mock config and gave it a quick try (see: add_newValue_writeWasCalled)
This commit is contained in:
parent
ae7a1f70e7
commit
edeae477e1
|
@ -22,6 +22,7 @@
|
||||||
#include "CMSWindowsClipboardHTMLConverter.h"
|
#include "CMSWindowsClipboardHTMLConverter.h"
|
||||||
#include "CLog.h"
|
#include "CLog.h"
|
||||||
#include "CArchMiscWindows.h"
|
#include "CArchMiscWindows.h"
|
||||||
|
#include "CMSWindowsClipboardFacade.h"
|
||||||
|
|
||||||
//
|
//
|
||||||
// CMSWindowsClipboard
|
// CMSWindowsClipboard
|
||||||
|
@ -31,7 +32,9 @@ UINT CMSWindowsClipboard::s_ownershipFormat = 0;
|
||||||
|
|
||||||
CMSWindowsClipboard::CMSWindowsClipboard(HWND window) :
|
CMSWindowsClipboard::CMSWindowsClipboard(HWND window) :
|
||||||
m_window(window),
|
m_window(window),
|
||||||
m_time(0)
|
m_time(0),
|
||||||
|
m_facade(new CMSWindowsClipboardFacade()),
|
||||||
|
m_deleteFacade(true)
|
||||||
{
|
{
|
||||||
// add converters, most desired first
|
// add converters, most desired first
|
||||||
m_converters.push_back(new CMSWindowsClipboardUTF16Converter);
|
m_converters.push_back(new CMSWindowsClipboardUTF16Converter);
|
||||||
|
@ -47,6 +50,12 @@ CMSWindowsClipboard::CMSWindowsClipboard(HWND window) :
|
||||||
CMSWindowsClipboard::~CMSWindowsClipboard()
|
CMSWindowsClipboard::~CMSWindowsClipboard()
|
||||||
{
|
{
|
||||||
clearConverters();
|
clearConverters();
|
||||||
|
|
||||||
|
// dependency injection causes confusion over ownership, so we need
|
||||||
|
// logic to decide whether or not we delete the facade. there must
|
||||||
|
// be a more elegant way of doing this.
|
||||||
|
if (m_deleteFacade)
|
||||||
|
delete m_facade;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool
|
bool
|
||||||
|
@ -94,12 +103,7 @@ CMSWindowsClipboard::add(EFormat format, const CString& data)
|
||||||
HANDLE win32Data = converter->fromIClipboard(data);
|
HANDLE win32Data = converter->fromIClipboard(data);
|
||||||
if (win32Data != NULL) {
|
if (win32Data != NULL) {
|
||||||
UINT win32Format = converter->getWin32Format();
|
UINT win32Format = converter->getWin32Format();
|
||||||
if (SetClipboardData(win32Format, win32Data) == NULL) {
|
m_facade->write(win32Data, win32Format);
|
||||||
// free converted data if we couldn't put it on
|
|
||||||
// the clipboard.
|
|
||||||
// nb: couldn't cause this in integ tests.
|
|
||||||
GlobalFree(win32Data);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -19,16 +19,19 @@
|
||||||
#define CMSWINDOWSCLIPBOARD_H
|
#define CMSWINDOWSCLIPBOARD_H
|
||||||
|
|
||||||
#include "IClipboard.h"
|
#include "IClipboard.h"
|
||||||
|
#include "CMSWindowsClipboardFacade.h"
|
||||||
#include "stdvector.h"
|
#include "stdvector.h"
|
||||||
#define WIN32_LEAN_AND_MEAN
|
#define WIN32_LEAN_AND_MEAN
|
||||||
#include <windows.h>
|
#include <windows.h>
|
||||||
|
|
||||||
class IMSWindowsClipboardConverter;
|
class IMSWindowsClipboardConverter;
|
||||||
|
class IMSWindowsClipboardFacade;
|
||||||
|
|
||||||
//! Microsoft windows clipboard implementation
|
//! Microsoft windows clipboard implementation
|
||||||
class CMSWindowsClipboard : public IClipboard {
|
class CMSWindowsClipboard : public IClipboard {
|
||||||
public:
|
public:
|
||||||
CMSWindowsClipboard(HWND window);
|
CMSWindowsClipboard(HWND window);
|
||||||
|
CMSWindowsClipboard(HWND window, IMSWindowsClipboardFacade &facade);
|
||||||
virtual ~CMSWindowsClipboard();
|
virtual ~CMSWindowsClipboard();
|
||||||
|
|
||||||
//! Empty clipboard without ownership
|
//! Empty clipboard without ownership
|
||||||
|
@ -58,6 +61,8 @@ public:
|
||||||
virtual bool has(EFormat) const;
|
virtual bool has(EFormat) const;
|
||||||
virtual CString get(EFormat) const;
|
virtual CString get(EFormat) const;
|
||||||
|
|
||||||
|
void setFacade(IMSWindowsClipboardFacade& facade) { m_facade = &facade; m_deleteFacade = false; }
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void clearConverters();
|
void clearConverters();
|
||||||
|
|
||||||
|
@ -74,6 +79,8 @@ private:
|
||||||
mutable Time m_time;
|
mutable Time m_time;
|
||||||
ConverterList m_converters;
|
ConverterList m_converters;
|
||||||
static UINT s_ownershipFormat;
|
static UINT s_ownershipFormat;
|
||||||
|
IMSWindowsClipboardFacade* m_facade;
|
||||||
|
bool m_deleteFacade;
|
||||||
};
|
};
|
||||||
|
|
||||||
//! Clipboard format converter interface
|
//! Clipboard format converter interface
|
||||||
|
|
|
@ -0,0 +1,29 @@
|
||||||
|
/*
|
||||||
|
* synergy -- mouse and keyboard sharing utility
|
||||||
|
* Copyright (C) 2002 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 <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "CMSWindowsClipboard.h"
|
||||||
|
#include "CMSWindowsClipboardFacade.h"
|
||||||
|
|
||||||
|
void CMSWindowsClipboardFacade::write(HANDLE win32Data, UINT win32Format)
|
||||||
|
{
|
||||||
|
if (SetClipboardData(win32Format, win32Data) == NULL) {
|
||||||
|
// free converted data if we couldn't put it on
|
||||||
|
// the clipboard.
|
||||||
|
// nb: couldn't cause this in integ tests.
|
||||||
|
GlobalFree(win32Data);
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,30 @@
|
||||||
|
/*
|
||||||
|
* synergy -- mouse and keyboard sharing utility
|
||||||
|
* Copyright (C) 2002 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 <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef CMSWINDOWSCLIPBOARDFACADE_H
|
||||||
|
#define CMSWINDOWSCLIPBOARDFACADE_H
|
||||||
|
|
||||||
|
#include "IMSWindowsClipboardFacade.h"
|
||||||
|
#include "IClipboard.h"
|
||||||
|
|
||||||
|
class CMSWindowsClipboardFacade : public IMSWindowsClipboardFacade
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
virtual void write(HANDLE win32Data, UINT win32Format);
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif
|
|
@ -29,11 +29,13 @@ if (WIN32)
|
||||||
CMSWindowsScreenSaver.h
|
CMSWindowsScreenSaver.h
|
||||||
CMSWindowsUtil.h
|
CMSWindowsUtil.h
|
||||||
CMSWindowsRelauncher.h
|
CMSWindowsRelauncher.h
|
||||||
|
IMSWindowsClipboardFacade.h
|
||||||
)
|
)
|
||||||
|
|
||||||
set(src
|
set(src
|
||||||
${inc}
|
${inc}
|
||||||
CMSWindowsClipboard.cpp
|
CMSWindowsClipboard.cpp
|
||||||
|
CMSWindowsClipboardFacade.cpp
|
||||||
CMSWindowsClipboardAnyTextConverter.cpp
|
CMSWindowsClipboardAnyTextConverter.cpp
|
||||||
CMSWindowsClipboardBitmapConverter.cpp
|
CMSWindowsClipboardBitmapConverter.cpp
|
||||||
CMSWindowsClipboardHTMLConverter.cpp
|
CMSWindowsClipboardHTMLConverter.cpp
|
||||||
|
|
|
@ -0,0 +1,34 @@
|
||||||
|
/*
|
||||||
|
* synergy -- mouse and keyboard sharing utility
|
||||||
|
* Copyright (C) 2002 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 <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef IMWINDOWSCLIPBOARDFACADE
|
||||||
|
#define IMWINDOWSCLIPBOARDFACADE
|
||||||
|
|
||||||
|
#include "IInterface.h"
|
||||||
|
#define WIN32_LEAN_AND_MEAN
|
||||||
|
#include <windows.h>
|
||||||
|
|
||||||
|
class IMSWindowsClipboardConverter;
|
||||||
|
|
||||||
|
class IMSWindowsClipboardFacade : public IInterface
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
virtual void write(HANDLE win32Data, UINT win32Format) = 0;
|
||||||
|
virtual ~IMSWindowsClipboardFacade() { }
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif
|
|
@ -14,10 +14,13 @@
|
||||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
include_directories(
|
include_directories(
|
||||||
../../tools/gtest
|
../../tools/gtest-1.6.0
|
||||||
../../tools/gtest/include)
|
../../tools/gtest-1.6.0/include
|
||||||
|
../../tools/gmock-1.6.0
|
||||||
|
../../tools/gmock-1.6.0/include)
|
||||||
|
|
||||||
add_library(gtest STATIC ../../tools/gtest/src/gtest-all.cc)
|
add_library(gtest STATIC ../../tools/gtest-1.6.0/src/gtest-all.cc)
|
||||||
|
add_library(gmock STATIC ../../tools/gmock-1.6.0/src/gmock-all.cc)
|
||||||
|
|
||||||
add_subdirectory(integtests)
|
add_subdirectory(integtests)
|
||||||
add_subdirectory(unittests)
|
add_subdirectory(unittests)
|
||||||
|
|
|
@ -50,7 +50,8 @@ set(inc
|
||||||
../../lib/net
|
../../lib/net
|
||||||
../../lib/platform
|
../../lib/platform
|
||||||
../../lib/synergy
|
../../lib/synergy
|
||||||
../../../tools/gtest/include
|
../../../tools/gtest-1.6.0/include
|
||||||
|
../../../tools/gmock-1.6.0/include
|
||||||
)
|
)
|
||||||
|
|
||||||
if (UNIX)
|
if (UNIX)
|
||||||
|
@ -62,4 +63,4 @@ endif()
|
||||||
include_directories(${inc})
|
include_directories(${inc})
|
||||||
add_executable(integtests ${src})
|
add_executable(integtests ${src})
|
||||||
target_link_libraries(integtests
|
target_link_libraries(integtests
|
||||||
arch base client common io mt net platform server synergy gtest ${libs})
|
arch base client common io mt net platform server synergy gtest gmock ${libs})
|
||||||
|
|
|
@ -16,8 +16,9 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <gtest/gtest.h>
|
#include <gtest/gtest.h>
|
||||||
|
#include <gmock/gmock.h>
|
||||||
#include "CMSWindowsClipboard.h"
|
#include "CMSWindowsClipboard.h"
|
||||||
|
#include "IMSWindowsClipboardFacade.h"
|
||||||
|
|
||||||
class CMSWindowsClipboardTests : public ::testing::Test
|
class CMSWindowsClipboardTests : public ::testing::Test
|
||||||
{
|
{
|
||||||
|
@ -41,6 +42,12 @@ private:
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
class MockFacade : public IMSWindowsClipboardFacade
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
MOCK_METHOD2(write, void(HANDLE, UINT));
|
||||||
|
};
|
||||||
|
|
||||||
TEST_F(CMSWindowsClipboardTests, emptyUnowned_openCalled_returnsTrue)
|
TEST_F(CMSWindowsClipboardTests, emptyUnowned_openCalled_returnsTrue)
|
||||||
{
|
{
|
||||||
CMSWindowsClipboard clipboard(NULL);
|
CMSWindowsClipboard clipboard(NULL);
|
||||||
|
@ -84,6 +91,18 @@ TEST_F(CMSWindowsClipboardTests, add_newValue_valueWasStored)
|
||||||
EXPECT_EQ("synergy rocks!", actual);
|
EXPECT_EQ("synergy rocks!", actual);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
TEST_F(CMSWindowsClipboardTests, add_newValue_writeWasCalled)
|
||||||
|
{
|
||||||
|
MockFacade facade;
|
||||||
|
EXPECT_CALL(facade, write(testing::_, testing::_));
|
||||||
|
|
||||||
|
CMSWindowsClipboard clipboard(NULL);
|
||||||
|
clipboard.setFacade(facade);
|
||||||
|
clipboard.open(0);
|
||||||
|
|
||||||
|
clipboard.add(IClipboard::kText, "synergy rocks!");
|
||||||
|
}
|
||||||
|
|
||||||
TEST_F(CMSWindowsClipboardTests, add_replaceValue_valueWasReplaced)
|
TEST_F(CMSWindowsClipboardTests, add_replaceValue_valueWasReplaced)
|
||||||
{
|
{
|
||||||
CMSWindowsClipboard clipboard(NULL);
|
CMSWindowsClipboard clipboard(NULL);
|
||||||
|
|
|
@ -14,7 +14,7 @@
|
||||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
set(src
|
set(src
|
||||||
../../../tools/gtest/src/gtest_main.cc
|
../../../tools/gtest-1.6.0/src/gtest_main.cc
|
||||||
synergy/CClipboardTests.cpp
|
synergy/CClipboardTests.cpp
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -28,7 +28,8 @@ set(inc
|
||||||
../../lib/net
|
../../lib/net
|
||||||
../../lib/platform
|
../../lib/platform
|
||||||
../../lib/synergy
|
../../lib/synergy
|
||||||
../../../tools/gtest/include
|
../../../tools/gtest-1.6.0/include
|
||||||
|
../../../tools/gmock-1.6.0/include
|
||||||
)
|
)
|
||||||
|
|
||||||
if (UNIX)
|
if (UNIX)
|
||||||
|
@ -40,4 +41,4 @@ endif()
|
||||||
include_directories(${inc})
|
include_directories(${inc})
|
||||||
add_executable(unittests ${src})
|
add_executable(unittests ${src})
|
||||||
target_link_libraries(unittests
|
target_link_libraries(unittests
|
||||||
arch base client common io mt net platform server synergy gtest ${libs})
|
arch base client common io mt net platform server synergy gtest gmock ${libs})
|
||||||
|
|
Loading…
Reference in New Issue