Skip to content

Commit e382e69

Browse files
add test framework
1 parent 02ea25d commit e382e69

File tree

5 files changed

+77
-3
lines changed

5 files changed

+77
-3
lines changed

.github/workflows/ci.yml

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -156,10 +156,9 @@ jobs:
156156

157157
- name: Run tests
158158
id: test
159-
if: false
160159
working-directory: build/tests
161160
run: |
162-
./test_moonlight-xboxog --gtest_color=yes
161+
./test_moonlight --gtest_color=yes
163162
164163
- name: Generate gcov report
165164
# any except canceled or skipped

.gitmodules

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,7 @@
1+
[submodule "third-party/googletest"]
2+
path = third-party/googletest
3+
url = https://github.com/google/googletest.git
4+
branch = v1.14.x
15
[submodule "third-party/moonlight-common-c"]
26
path = third-party/moonlight-common-c
37
url = https://github.com/moonlight-stream/moonlight-common-c.git

CMakeLists.txt

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,11 @@ set(XBOX_XBE_DIR "${CMAKE_CURRENT_BINARY_DIR}/xbe")
1212
set(XBOX_ISO "${CMAKE_PROJECT_NAME}.iso")
1313
message(STATUS "XBOX_ISO: ${XBOX_ISO}")
1414

15+
#
16+
# Options
17+
#
18+
option(BUILD_TESTS "Build tests" ON)
19+
1520
# create the xbe directory if it doesn't exist
1621
file(MAKE_DIRECTORY ${XBOX_XBE_DIR})
1722

@@ -30,15 +35,27 @@ add_definitions(-DXBOX -DNXDK)
3035
set(MOONLIGHT_SOURCES
3136
"${CMAKE_CURRENT_SOURCE_DIR}/src/main.cpp"
3237
)
38+
set(MOONLIGHT_EXTERNAL_LIBRARIES
39+
"${NXDK_DIR}/lib/libpbkit.lib"
40+
)
3341

3442
add_executable(${CMAKE_PROJECT_NAME}
3543
${MOONLIGHT_SOURCES}
3644
)
3745
include_directories("${NXDK_DIR}/lib")
38-
target_link_libraries(${CMAKE_PROJECT_NAME} PUBLIC ${NXDK_DIR}/lib/libpbkit.lib)
46+
target_link_libraries(${CMAKE_PROJECT_NAME} PUBLIC
47+
${MOONLIGHT_EXTERNAL_LIBRARIES}
48+
)
3949

4050
target_compile_definitions(${CMAKE_PROJECT_NAME} PRIVATE "")
4151

52+
#
53+
# tests
54+
#
55+
if(BUILD_TESTS)
56+
add_subdirectory(tests)
57+
endif()
58+
4259
# Post-build exe to xbe conversion
4360
add_custom_target(cxbe_convert ALL
4461
VERBATIM COMMAND "${CMAKE_COMMAND}" -E env ./tools/cxbe/cxbe -OUT:${XBOX_XBE_DIR}/default.xbe -TITLE:${XBE_TITLE} ${CMAKE_CURRENT_BINARY_DIR}/${XBE_TITLE}.exe

tests/CMakeLists.txt

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
cmake_minimum_required(VERSION 3.13)
2+
# https://github.com/google/oss-policies-info/blob/main/foundational-cxx-support-matrix.md#foundational-c-support
3+
4+
project(test_moonlight)
5+
6+
include_directories("${CMAKE_SOURCE_DIR}")
7+
8+
enable_testing()
9+
10+
# Add GoogleTest directory to the project
11+
set(GTEST_SOURCE_DIR "${CMAKE_SOURCE_DIR}/third-party/googletest")
12+
set(INSTALL_GTEST OFF)
13+
set(INSTALL_GMOCK OFF)
14+
add_subdirectory("${GTEST_SOURCE_DIR}" "${CMAKE_CURRENT_BINARY_DIR}/googletest")
15+
include_directories("${GTEST_SOURCE_DIR}/googletest/include" "${GTEST_SOURCE_DIR}")
16+
17+
# coverage
18+
# https://gcovr.com/en/stable/guide/compiling.html#compiler-options
19+
set(CMAKE_CXX_FLAGS "-fprofile-arcs -ftest-coverage -ggdb -O0")
20+
set(CMAKE_C_FLAGS "-fprofile-arcs -ftest-coverage -ggdb -O0")
21+
22+
# if windows
23+
if (WIN32)
24+
# For Windows: Prevent overriding the parent project's compiler/linker settings
25+
set(gtest_force_shared_crt ON CACHE BOOL "" FORCE) # cmake-lint: disable=C0103
26+
endif ()
27+
28+
file(GLOB_RECURSE TEST_SOURCES CONFIGURE_DEPENDS
29+
${CMAKE_SOURCE_DIR}/tests/*.h
30+
${CMAKE_SOURCE_DIR}/tests/*.cpp)
31+
32+
# remove main.cpp from the list of sources
33+
# TODO
34+
# list(REMOVE_ITEM MOONLIGHT_SOURCES ${CMAKE_SOURCE_DIR}/src/main.cpp)
35+
36+
add_executable(${PROJECT_NAME}
37+
${TEST_SOURCES}
38+
${MOONLIGHT_SOURCES})
39+
40+
foreach(dep ${MOONLIGHT_TARGET_DEPENDENCIES})
41+
add_dependencies(${PROJECT_NAME} ${dep}) # compile these before Moonlight
42+
endforeach()
43+
44+
set_target_properties(${PROJECT_NAME} PROPERTIES CXX_STANDARD 20)
45+
target_link_libraries(${PROJECT_NAME}
46+
${MOONLIGHT_EXTERNAL_LIBRARIES}
47+
gtest
48+
gtest_main) # if we use this we don't need our own main function
49+
target_compile_definitions(${PROJECT_NAME} PUBLIC ${MOONLIGHT_DEFINITIONS} ${TEST_DEFINITIONS})
50+
target_compile_options(${PROJECT_NAME} PRIVATE $<$<COMPILE_LANGUAGE:CXX>:${MOONLIGHT_COMPILE_OPTIONS}>)
51+
target_link_options(${PROJECT_NAME} PRIVATE)
52+
53+
add_test(NAME ${PROJECT_NAME} COMMAND moonlight_test)

third-party/googletest

Submodule googletest added at f8d7d77

0 commit comments

Comments
 (0)