Skip to content

Commit

Permalink
[build] CMake: enable Java testing
Browse files Browse the repository at this point in the history
  • Loading branch information
Gold856 committed Sep 25, 2024
1 parent 69af778 commit 1501912
Show file tree
Hide file tree
Showing 13 changed files with 217 additions and 0 deletions.
44 changes: 44 additions & 0 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -124,6 +124,50 @@ if(WITH_JAVA OR WITH_JAVA_SOURCE)
set(CMAKE_JAVA_COMPILE_FLAGS "-encoding" "UTF8" "-Xlint:unchecked")
find_package(Java REQUIRED COMPONENTS Development)
find_package(JNI REQUIRED COMPONENTS JVM)
if(WITH_TESTS)
include(DownloadAndCheck)
set(maven_url https://search.maven.org/remotecontent?filepath=)
set(junit_jar_name junit-platform-console-standalone-1.9.3.jar)
set(junit_jar ${WPILIB_BINARY_DIR}/${java_lib_dest}/${junit_jar_name})
if(NOT EXISTS ${junit_jar})
download_and_check(
"${maven_url}org/junit/platform/junit-platform-console-standalone/1.9.3/${junit_jar_name}"
${junit_jar}
)
endif()
set(objenesis_jar_name objenesis-3.3.jar)
set(objenesis_jar ${WPILIB_BINARY_DIR}/${java_lib_dest}/${objenesis_jar_name})
if(NOT EXISTS ${objenesis_jar})
download_and_check(
"${maven_url}org/objenesis/objenesis/3.3/${objenesis_jar_name}"
${objenesis_jar}
)
endif()
set(byte_buddy_jar_name byte-buddy-1.14.15.jar)
set(byte_buddy_jar ${WPILIB_BINARY_DIR}/${java_lib_dest}/${byte_buddy_jar_name})
if(NOT EXISTS ${byte_buddy_jar})
download_and_check(
"${maven_url}net/bytebuddy/byte-buddy/1.14.15/${byte_buddy_jar_name}"
${byte_buddy_jar}
)
endif()
set(byte_buddy_agent_jar_name byte-buddy-agent-1.14.15.jar)
set(byte_buddy_agent_jar ${WPILIB_BINARY_DIR}/${java_lib_dest}/${byte_buddy_agent_jar_name})
if(NOT EXISTS ${byte_buddy_agent_jar})
download_and_check(
"${maven_url}net/bytebuddy/byte-buddy-agent/1.14.15/${byte_buddy_agent_jar_name}"
${byte_buddy_agent_jar}
)
endif()
set(mockito_jar_name mockito-core-4.1.0.jar)
set(mockito_jar ${WPILIB_BINARY_DIR}/${java_lib_dest}/${mockito_jar_name})
if(NOT EXISTS ${mockito_jar})
download_and_check(
"${maven_url}org/mockito/mockito-core/4.1.0/${mockito_jar_name}"
${mockito_jar}
)
endif()
endif()
else()
# Protoc requires the java runtime
find_package(Java REQUIRED COMPONENTS Runtime)
Expand Down
19 changes: 19 additions & 0 deletions apriltag/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -152,6 +152,25 @@ install(FILES ${WPILIB_BINARY_DIR}/apriltag-config.cmake DESTINATION share/april
install(EXPORT apriltag DESTINATION share/apriltag)

if(WITH_TESTS)
if(WITH_JAVA)
file(GLOB JAVA_TEST_RESOURCES src/test/resources/edu/wpi/first/apriltag/*)
file(GLOB QUICKBUF_JAR ${WPILIB_BINARY_DIR}/wpiutil/thirdparty/quickbuf/*.jar)
wpilib_add_java_test(
apriltag
INCLUDE_JARS
wpimath_jar
wpiunits_jar
wpiutil_jar
${EJML_JARS}
${OPENCV_JAR_FILE}
${JACKSON_JARS}
${QUICKBUF_JAR}
RESOURCES
NAMESPACE
"edu/wpi/first/apriltag"
${JAVA_TEST_RESOURCES}
)
endif()
wpilib_add_test(apriltag src/test/native/cpp)
target_include_directories(apriltag_test PRIVATE src/test/native/include)
target_link_libraries(apriltag_test apriltag googletest)
Expand Down
66 changes: 66 additions & 0 deletions cmake/modules/AddTest.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -16,3 +16,69 @@ macro(wpilib_add_test name srcdir)
endif()
add_test(NAME ${name} COMMAND ${name}_test)
endmacro()
macro(wpilib_add_java_test name)
cmake_parse_arguments(java_test "" "" "INCLUDE_JARS" ${ARGN})
set(include_jars
${junit_jar}
${objenesis_jar}
${mockito_jar}
${byte_buddy_jar}
${byte_buddy_agent_jar}
${name}_jar
${java_test_INCLUDE_JARS}
)
file(GLOB_RECURSE JAVA_TEST_SOURCES src/test/java/*.java)
add_jar(
${name}_test_jar
${JAVA_TEST_SOURCES}
INCLUDE_JARS ${include_jars}
OUTPUT_NAME ${name}-test
OUTPUT_DIR ${WPILIB_BINARY_DIR}/${java_lib_dest}
${java_test_UNPARSED_ARGUMENTS}
)
set(include_jars ${name}_test_jar ${include_jars})
foreach(jar ${include_jars})
if(TARGET ${jar})
get_target_property(location ${jar} JAR_FILE)
list(APPEND jars ${location})
else()
list(APPEND jars ${jar})
endif()
endforeach()
if(MSVC)
list(JOIN jars ";" classpath)
else()
list(JOIN jars ":" classpath)
endif()
get_target_property(location ${name}_test_jar JAR_FILE)
add_test(
NAME ${name}_java
COMMAND
java -cp "${classpath}" org.junit.platform.console.ConsoleLauncher
--include-classname=.* --scan-class-path=${location} --fail-if-no-tests
WORKING_DIRECTORY ${WPILIB_BINARY_DIR}
)
get_property(multi_config GLOBAL PROPERTY GENERATOR_IS_MULTI_CONFIG)
if(MSVC)
set_tests_properties(
${name}_java
PROPERTIES
ENVIRONMENT_MODIFICATION
PATH=path_list_append:${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/$<${multi_config}:$<CONFIG>>
)
elseif(APPLE)
set_tests_properties(
${name}_java
PROPERTIES
ENVIRONMENT_MODIFICATION
DYLIB_LIBRARY_PATH=path_list_append:${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/$<${multi_config}:$<CONFIG>>
)
else()
set_tests_properties(
${name}_java
PROPERTIES
ENVIRONMENT_MODIFICATION
LD_LIBRARY_PATH=path_list_append:${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/$<${multi_config}:$<CONFIG>>
)
endif()
endmacro()
4 changes: 4 additions & 0 deletions cscore/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -142,6 +142,10 @@ if(WITH_JAVA_SOURCE)
endif()

if(WITH_TESTS)
if(WITH_JAVA)
file(GLOB JACKSON_JARS "${WPILIB_BINARY_DIR}/wpiutil/thirdparty/jackson/*.jar")
wpilib_add_java_test(cscore INCLUDE_JARS wpiutil_jar ${OPENCV_JAR_FILE} ${JACKSON_JARS})
endif()
wpilib_add_test(cscore src/test/native/cpp)
target_link_libraries(cscore_test cscore googletest)
endif()
5 changes: 5 additions & 0 deletions fieldImages/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
project(fieldImages)

include(AddTest)
include(CompileWarnings)
include(GenResources)

Expand Down Expand Up @@ -66,3 +67,7 @@ export(TARGETS fieldImages FILE fieldimages.cmake NAMESPACE fieldimages::)
configure_file(fieldimages-config.cmake.in ${WPILIB_BINARY_DIR}/fieldimages-config.cmake)
install(FILES ${WPILIB_BINARY_DIR}/fieldimages-config.cmake DESTINATION share/fieldImages)
install(EXPORT fieldimages DESTINATION share/fieldImages)

if(WITH_TESTS AND WITH_JAVA)
wpilib_add_java_test(field_images INCLUDE_JARS ${JACKSON_JARS})
endif()
4 changes: 4 additions & 0 deletions hal/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -89,6 +89,10 @@ if(WITH_JAVA_SOURCE)
endif()

if(WITH_TESTS)
if(WITH_JAVA)
file(GLOB JACKSON_JARS "${WPILIB_BINARY_DIR}/wpiutil/thirdparty/jackson/*.jar")
wpilib_add_java_test(hal INCLUDE_JARS wpiutil_jar ${JACKSON_JARS})
endif()
wpilib_add_test(hal src/test/native/cpp)
target_link_libraries(hal_test hal googletest)
endif()
4 changes: 4 additions & 0 deletions ntcore/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -95,6 +95,10 @@ wpilib_target_warnings(ntcoredev)
target_link_libraries(ntcoredev ntcore)

if(WITH_TESTS)
if(WITH_JAVA)
file(GLOB JACKSON_JARS "${WPILIB_BINARY_DIR}/wpiutil/thirdparty/jackson/*.jar")
wpilib_add_java_test(ntcore INCLUDE_JARS wpiutil_jar ${QUICKBUF_JAR} ${JACKSON_JARS})
endif()
wpilib_add_test(ntcore src/test/native/cpp)
target_include_directories(ntcore_test PRIVATE src/main/native/cpp)
target_link_libraries(ntcore_test ntcore googletest wpiutil_testlib)
Expand Down
24 changes: 24 additions & 0 deletions wpilibNewCommands/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -91,6 +91,30 @@ install(
install(EXPORT wpilibnewcommands DESTINATION share/wpilibNewCommands)

if(WITH_TESTS)
if(WITH_JAVA)
file(GLOB EJML_JARS "${WPILIB_BINARY_DIR}/wpimath/thirdparty/ejml/*.jar")
file(GLOB QUICKBUF_JAR ${WPILIB_BINARY_DIR}/wpiutil/thirdparty/quickbuf/*.jar)
file(GLOB EXTENSION src/test/resources/META-INF/services/*)
wpilib_add_java_test(
wpilibNewCommands
INCLUDE_JARS
hal_jar
ntcore_jar
${EJML_JARS}
${JACKSON_JARS}
${QUICKBUF_JAR}
cscore_jar
cameraserver_jar
wpimath_jar
wpiunits_jar
wpiutil_jar
wpilibj_jar
RESOURCES
NAMESPACE
"META-INF/services"
${EXTENSION}
)
endif()
wpilib_add_test(wpilibNewCommands src/test/native/cpp)
target_include_directories(wpilibNewCommands_test PRIVATE src/test/native/include)
target_link_libraries(wpilibNewCommands_test wpilibNewCommands googletest)
Expand Down
29 changes: 29 additions & 0 deletions wpilibj/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
project(wpilibj)

include(AddTest)
# Java bindings
if(WITH_JAVA)
include(UseJava)
Expand Down Expand Up @@ -75,3 +76,31 @@ if(WITH_JAVA_SOURCE)

install_jar(wpilibj_src_jar DESTINATION ${java_lib_dest})
endif()

if(WITH_TESTS AND WITH_JAVA)
file(GLOB QUICKBUF_JAR ${WPILIB_BINARY_DIR}/wpiutil/thirdparty/quickbuf/*.jar)
file(GLOB PREFERENCES src/test/resources/edu/wpi/first/wpilibj/*)
file(GLOB EXTENSION src/test/resources/META-INF/services/*)
wpilib_add_java_test(
wpilibj
INCLUDE_JARS
hal_jar
ntcore_jar
${EJML_JARS}
${JACKSON_JARS}
${QUICKBUF_JAR}
${OPENCV_JAR_FILE}
cscore_jar
cameraserver_jar
wpimath_jar
wpiunits_jar
wpiutil_jar
RESOURCES
NAMESPACE
"edu/wpi/first/wpilibj"
${PREFERENCES}
NAMESPACE
"META-INF/services"
${EXTENSION}
)
endif()
6 changes: 6 additions & 0 deletions wpimath/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -234,6 +234,12 @@ install(FILES ${WPILIB_BINARY_DIR}/wpimath-config.cmake DESTINATION share/wpimat
install(EXPORT wpimath DESTINATION share/wpimath)

if(WITH_TESTS)
if(WITH_JAVA)
wpilib_add_java_test(
wpimath
INCLUDE_JARS wpiutil_jar wpiunits_jar ${EJML_JARS} ${JACKSON_JARS} ${QUICKBUF_JAR}
)
endif()
wpilib_add_test(wpimath src/test/native/cpp)
target_include_directories(wpimath_test PRIVATE src/test/native/include)
target_link_libraries(wpimath_test wpimath googletest)
Expand Down
4 changes: 4 additions & 0 deletions wpinet/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -222,6 +222,10 @@ set_property(TARGET netconsoleServer PROPERTY FOLDER "examples")
set_property(TARGET netconsoleTee PROPERTY FOLDER "examples")

if(WITH_TESTS)
if(WITH_JAVA)
file(GLOB JACKSON_JARS "${WPILIB_BINARY_DIR}/wpiutil/thirdparty/jackson/*.jar")
wpilib_add_java_test(wpinet INCLUDE_JARS wpiutil_jar ${JACKSON_JARS})
endif()
wpilib_add_test(wpinet src/test/native/cpp)
target_include_directories(wpinet_test PRIVATE src/test/native/include src/main/native/cpp)
target_link_libraries(wpinet_test wpinet ${LIBUTIL} googletest wpiutil_testlib)
Expand Down
5 changes: 5 additions & 0 deletions wpiunits/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
project(wpiunits)

include(AddTest)
# Java bindings
if(WITH_JAVA)
include(UseJava)
Expand Down Expand Up @@ -33,3 +34,7 @@ if(WITH_JAVA_SOURCE)

install_jar(wpiunits_src_jar DESTINATION ${java_lib_dest})
endif()

if(WITH_TESTS AND WITH_JAVA)
wpilib_add_java_test(wpiunits)
endif()
3 changes: 3 additions & 0 deletions wpiutil/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -238,6 +238,9 @@ foreach(example ${wpiutil_examples})
endforeach()

if(WITH_TESTS)
if(WITH_JAVA)
wpilib_add_java_test(wpiutil INCLUDE_JARS ${JACKSON_JARS} ${QUICKBUF_JAR})
endif()
file(GLOB_RECURSE wpiutil_testlib_src src/test/native/include/*.h)
add_library(wpiutil_testlib INTERFACE ${wpiutil_test_src})
target_include_directories(wpiutil_testlib INTERFACE src/test/native/include)
Expand Down

0 comments on commit 1501912

Please sign in to comment.