UnitTests: make it possible to build tests for code that has global dependencies

This commit is contained in:
Pierre Bourdon 2014-08-01 23:23:52 -07:00
parent 226a9c2392
commit 8b26d7bf1e
9 changed files with 93 additions and 41 deletions

View File

@ -48,6 +48,11 @@ if(WIN32)
set(SRCS ${SRCS} ExtendedTrace.cpp) set(SRCS ${SRCS} ExtendedTrace.cpp)
endif(WIN32) endif(WIN32)
set(LIBS "${CMAKE_THREAD_LIBS_INIT}")
if((NOT ${CMAKE_SYSTEM_NAME} MATCHES "Darwin") AND (NOT ANDROID))
set(LIBS ${LIBS} rt)
endif()
enable_precompiled_headers(stdafx.h stdafx.cpp SRCS) enable_precompiled_headers(stdafx.h stdafx.cpp SRCS)
add_dolphin_library(common "${SRCS}" "${CMAKE_THREAD_LIBS_INIT}") add_dolphin_library(common "${SRCS}" "${LIBS}")

View File

@ -221,7 +221,18 @@ if(_M_ARM_32)
) )
endif() endif()
set(LIBS bdisasm inputcommon videoogl videosoftware sfml-network) set(LIBS
audiocommon
bdisasm
common
discio
inputcommon
${LZO}
sfml-network
videoogl
videosoftware
z
)
if(LIBUSB_FOUND) if(LIBUSB_FOUND)
# Using shared LibUSB # Using shared LibUSB
@ -236,6 +247,8 @@ if(WIN32)
HW/WiimoteReal/IOWin.cpp) HW/WiimoteReal/IOWin.cpp)
elseif(${CMAKE_SYSTEM_NAME} MATCHES "Darwin") elseif(${CMAKE_SYSTEM_NAME} MATCHES "Darwin")
set(SRCS ${SRCS} HW/BBA-TAP/TAP_Apple.cpp HW/WiimoteReal/IOdarwin.mm) set(SRCS ${SRCS} HW/BBA-TAP/TAP_Apple.cpp HW/WiimoteReal/IOdarwin.mm)
set(LIBS ${LIBS}
${IOB_LIBRARY})
elseif(UNIX) elseif(UNIX)
set(SRCS ${SRCS} HW/BBA-TAP/TAP_Unix.cpp) set(SRCS ${SRCS} HW/BBA-TAP/TAP_Unix.cpp)
if((${CMAKE_SYSTEM_NAME} MATCHES "Linux") AND BLUEZ_FOUND) if((${CMAKE_SYSTEM_NAME} MATCHES "Linux") AND BLUEZ_FOUND)

View File

@ -4,41 +4,17 @@ endif()
set(LIBS core set(LIBS core
${LZO} ${LZO}
discio
bdisasm
inputcommon
common
audiocommon
z
sfml-network
${GTK2_LIBRARIES}) ${GTK2_LIBRARIES})
if((NOT ${CMAKE_SYSTEM_NAME} MATCHES "Darwin") AND (NOT ANDROID))
set(LIBS ${LIBS} rt)
endif()
if(NOT ANDROID) if(NOT ANDROID)
if(USE_X11) if(USE_X11)
set(LIBS ${LIBS} ${X11_LIBRARIES} set(LIBS ${LIBS} ${XRANDR_LIBRARIES})
${XINPUT2_LIBRARIES}
${XRANDR_LIBRARIES})
endif() endif()
if(USE_WAYLAND) if(USE_WAYLAND)
set(LIBS ${LIBS} ${WAYLAND_LIBRARIES} set(LIBS ${LIBS} ${WAYLAND_LIBRARIES} ${XKBCOMMON_LIBRARIES})
${XKBCOMMON_LIBRARIES})
endif() endif()
link_directories(${CMAKE_PREFIX_PATH}/lib) link_directories(${CMAKE_PREFIX_PATH}/lib)
if(SDL2_FOUND)
# Using shared SDL2
set(LIBS ${LIBS} ${SDL2_LIBRARY})
else(SDL2_FOUND)
if(SDL_FOUND)
# Using shared SDL
set(LIBS ${LIBS} ${SDL_LIBRARY})
endif()
endif()
else() else()
set(LIBS ${LIBS} png iconv) set(LIBS ${LIBS} png iconv)
endif() endif()
@ -135,7 +111,6 @@ elseif(${CMAKE_SYSTEM_NAME} MATCHES "Darwin")
${COREAUDIO_LIBRARY} ${COREAUDIO_LIBRARY}
${COREFUND_LIBRARY} ${COREFUND_LIBRARY}
${CORESERV_LIBRARY} ${CORESERV_LIBRARY}
${IOB_LIBRARY}
${IOK_LIBRARY} ${IOK_LIBRARY}
${FORCEFEEDBACK} ${FORCEFEEDBACK}
) )

View File

@ -4,6 +4,9 @@ set(SRCS ControllerEmu.cpp
ControllerInterface/Device.cpp ControllerInterface/Device.cpp
ControllerInterface/ExpressionParser.cpp) ControllerInterface/ExpressionParser.cpp)
set(LIBS common)
if(WIN32) if(WIN32)
set(SRCS ${SRCS} set(SRCS ${SRCS}
ControllerInterface/DInput/DInput.cpp ControllerInterface/DInput/DInput.cpp
@ -24,6 +27,7 @@ elseif(X11_FOUND)
set(SRCS ${SRCS} set(SRCS ${SRCS}
ControllerInterface/Xlib/XInput2.cpp) ControllerInterface/Xlib/XInput2.cpp)
endif() endif()
set(LIBS ${LIBS} ${X11_LIBRARIES} ${XINPUT2_LIBRARIES})
elseif(ANDROID) elseif(ANDROID)
set(SRCS ${SRCS} set(SRCS ${SRCS}
ControllerInterface/Android/Android.cpp) ControllerInterface/Android/Android.cpp)
@ -31,6 +35,11 @@ endif()
if(SDL_FOUND OR SDL2_FOUND) if(SDL_FOUND OR SDL2_FOUND)
set(SRCS ${SRCS} ControllerInterface/SDL/SDL.cpp) set(SRCS ${SRCS} ControllerInterface/SDL/SDL.cpp)
if (SDL2_FOUND)
set(LIBS ${LIBS} ${SDL2_LIBRARY})
elseif(SDL_FOUND)
set(LIBS ${LIBS} ${SDL_LIBRARY})
endif()
endif() endif()
add_dolphin_library(inputcommon "${SRCS}" "") add_dolphin_library(inputcommon "${SRCS}" "${LIBS}")

View File

@ -1,12 +1,19 @@
macro(add_dolphin_test target srcs libs) macro(add_dolphin_test target srcs)
add_executable(Tests/${target} EXCLUDE_FROM_ALL ${srcs}) # Since this is a Core dependency, it can't be linked as a library and has
# to be linked as an object file. Otherwise CMake inserts the library after
# core, but before other core dependencies like videocommon which also use
# Host_ functions.
set(srcs2 ${srcs} ${CMAKE_SOURCE_DIR}/Source/UnitTests/TestUtils/StubHost.cpp)
add_executable(Tests/${target} EXCLUDE_FROM_ALL ${srcs2})
add_custom_command(TARGET Tests/${target} add_custom_command(TARGET Tests/${target}
PRE_LINK PRE_LINK
COMMAND mkdir -p ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/Tests) COMMAND mkdir -p ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/Tests)
target_link_libraries(Tests/${target} ${libs} gtest) target_link_libraries(Tests/${target} core gtest)
add_dependencies(unittests Tests/${target}) add_dependencies(unittests Tests/${target})
add_test(NAME ${target} COMMAND ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/Tests/${target}) add_test(NAME ${target} COMMAND ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/Tests/${target})
endmacro(add_dolphin_test) endmacro(add_dolphin_test)
add_subdirectory(TestUtils)
add_subdirectory(Common) add_subdirectory(Common)
add_subdirectory(Core) add_subdirectory(Core)

View File

@ -1,7 +1,7 @@
add_dolphin_test(BitFieldTest BitFieldTest.cpp common) add_dolphin_test(BitFieldTest BitFieldTest.cpp)
add_dolphin_test(CommonFuncsTest CommonFuncsTest.cpp common) add_dolphin_test(CommonFuncsTest CommonFuncsTest.cpp)
add_dolphin_test(EventTest EventTest.cpp common) add_dolphin_test(EventTest EventTest.cpp)
add_dolphin_test(FifoQueueTest FifoQueueTest.cpp common) add_dolphin_test(FifoQueueTest FifoQueueTest.cpp)
add_dolphin_test(FixedSizeQueueTest FixedSizeQueueTest.cpp common) add_dolphin_test(FixedSizeQueueTest FixedSizeQueueTest.cpp)
add_dolphin_test(FlagTest FlagTest.cpp common) add_dolphin_test(FlagTest FlagTest.cpp)
add_dolphin_test(MathUtilTest MathUtilTest.cpp common) add_dolphin_test(MathUtilTest MathUtilTest.cpp)

View File

@ -1 +1 @@
add_dolphin_test(MMIOTest MMIOTest.cpp core) add_dolphin_test(MMIOTest MMIOTest.cpp)

View File

@ -0,0 +1,9 @@
set(SRCS
# Do not add StubHost.cpp here - it is added manually via add_dolphin_test.
)
set(LIBS
)
# TODO: uncomment when there is actually something here.
#add_dolphin_library(testutils "${SRCS}" "${LIBS}")

View File

@ -0,0 +1,34 @@
// Copyright 2014 Dolphin Emulator Project
// Licensed under GPLv2
// Refer to the license.txt file included.
// Stub implementation of the Host_* callbacks for tests. These implementations
// do nothing except return default values when required.
#include <string>
#include "Core/Host.h"
#include "VideoBackends/OGL/GLInterfaceBase.h"
void Host_NotifyMapLoaded() {}
void Host_RefreshDSPDebuggerWindow() {}
void Host_ShowJitResults(unsigned int) {}
void Host_Message(int) {}
void* Host_GetRenderHandle() { return nullptr; }
void* Host_GetInstance() { return nullptr; }
void Host_UpdateTitle(const std::string&) {}
void Host_UpdateLogDisplay() {}
void Host_UpdateDisasmDialog() {}
void Host_UpdateMainFrame() {}
void Host_UpdateBreakPointView() {}
void Host_GetRenderWindowSize(int&, int&, int&, int&) {}
void Host_RequestRenderWindowSize(int, int) {}
void Host_SetStartupDebuggingParameters() {}
bool Host_UIHasFocus() { return false; }
bool Host_RendererHasFocus() { return false; }
void Host_ConnectWiimote(int, bool) {}
void Host_UpdateStatusBar(const std::string&, int) {}
void Host_SysMessage(const char*, ...) {}
void Host_SetWiiMoteConnectionState(int) {}
void Host_ShowVideoConfig(void*, const std::string&, const std::string&) {}
cInterfaceBase* HostGL_CreateGLInterface() { return nullptr; }