blob: 21c52707ce79910b42c6128b87c294fd5342cb29 [file] [log] [blame]
#
# Copyright 2020 Google LLC.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# https://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
add_test(
NAME test_io
COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/test_io.sh ${CMAKE_BINARY_DIR}
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR})
add_test(
NAME test_io_pnm
COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/test_io_pnm.sh ${CMAKE_BINARY_DIR}
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR})
add_test(
NAME test_cmd
COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/test_cmd.sh ${CMAKE_BINARY_DIR}
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR})
add_test(
NAME test_enc
COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/test_enc.sh ${CMAKE_BINARY_DIR}
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR})
add_test(
NAME test_enc_anim
COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/test_enc_anim.sh ${CMAKE_BINARY_DIR}
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR})
add_test(
NAME test_enc_dir
COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/test_enc_dir.sh ${CMAKE_BINARY_DIR}
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR})
add_test(
NAME test_memory
COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/test_memory.sh ${CMAKE_BINARY_DIR}
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR})
add_test(
NAME test_icc
COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/test_icc.sh ${CMAKE_BINARY_DIR}
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR})
if(WP2_BUILD_EXTRAS)
add_test(
NAME test_io_ewp2
COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/test_io_ewp2.sh ${CMAKE_BINARY_DIR}
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR})
add_test(
NAME test_enc_ewp2
COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/test_enc_ewp2.sh ${CMAKE_BINARY_DIR}
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR})
endif()
add_executable(ansz ansz.cc)
target_link_libraries(ansz imageio webp2)
add_test(
NAME test_ansz
COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/test_ansz.sh ${CMAKE_CURRENT_BINARY_DIR}
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR})
add_executable(test_assert_bin test_assert.cc)
target_link_libraries(test_assert_bin webp2 imageio)
add_test(NAME test_assert COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/test_assert.sh
${CMAKE_CURRENT_BINARY_DIR})
# Test with no Google Test dependency.
add_executable(test_simple_enc_dec test_simple_enc_dec.cc)
target_link_libraries(test_simple_enc_dec imageio webp2)
add_test(NAME test_simple_enc_dec
COMMAND ${CMAKE_CURRENT_BINARY_DIR}/test_simple_enc_dec
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR})
# ##############################################################################
# Dependencies
# Google Test default directories.
set(GTEST_SOURCE_DIR
"${PROJECT_SOURCE_DIR}/../googletest"
CACHE STRING "Path to Google Test source directory.")
set(GTEST_BUILD_DIR
"${CMAKE_BINARY_DIR}/googletest"
CACHE STRING
"Path to directory where Google Test will be configured and built.")
# Try the Ubuntu path if we do not have a googletest directory.
if(NOT EXISTS "${GTEST_SOURCE_DIR}/CMakeLists.txt")
if(EXISTS "/usr/src/gtest/CMakeLists.txt")
set(GTEST_SOURCE_DIR "/usr/src/googletest")
endif()
endif()
# Confirm Google Test can be built.
include(GoogleTest OPTIONAL)
if(EXISTS "${GTEST_SOURCE_DIR}/CMakeLists.txt")
message(STATUS "Using ${GTEST_SOURCE_DIR}/CMakeLists.txt.")
add_subdirectory(${GTEST_SOURCE_DIR} ${GTEST_BUILD_DIR} EXCLUDE_FROM_ALL)
# There will be a compilation warning: gtest.cc:2973:13: warning: format
# string is not a string literal So we remove "-Werror" for that target. Also
# a "no previous declaration" warning is shown if compiling from libgtest-dev:
# we use -Wno-missing-declarations.
get_property(
FLAGS
TARGET gmock
PROPERTY COMPILE_FLAGS)
if(CMAKE_CXX_COMPILER_ID MATCHES "Clang|GNU")
set(FLAGS "${FLAGS} -Wno-format-nonliteral -Wno-missing-declarations")
endif()
set_property(TARGET gtest PROPERTY COMPILE_FLAGS ${FLAGS})
set_property(TARGET gmock PROPERTY COMPILE_FLAGS ${FLAGS})
set_property(TARGET gmock_main PROPERTY COMPILE_FLAGS ${FLAGS})
set(GTEST_FOUND TRUE)
set(GTEST_INCLUDE_DIRS "${GTEST_SOURCE_DIR}/googletest/include")
set(GMOCK_INCLUDE_DIRS "${GTEST_SOURCE_DIR}/googlemock/include")
set(GTEST_BOTH_LIBRARIES gtest gtest_main)
foreach(TARGET_NAME gtest gtest_main)
get_property(
tmp
TARGET ${TARGET_NAME}
PROPERTY INTERFACE_SYSTEM_INCLUDE_DIRECTORIES)
set_property(TARGET ${TARGET_NAME} PROPERTY INTERFACE_INCLUDE_DIRECTORIES
${tmp})
# Reset INTERFACE_SYSTEM_INCLUDE_DIRECTORIES to allow warnings.
set_property(TARGET ${TARGET_NAME}
PROPERTY INTERFACE_SYSTEM_INCLUDE_DIRECTORIES "")
endforeach()
else()
# If find_package works, GTEST_FOUND, GTEST_INCLUDE_DIRS, GTEST_BOTH_LIBRARIES
# and GTEST_LIBRARIES will be set.
find_package(GTest QUIET)
if(GTEST_FOUND)
message(STATUS "Found installed CMake Google Test package.")
endif()
endif()
# ##############################################################################
# GTests
if(GTEST_FOUND AND NOT WP2_BUILD_WP2_JS)
# Helpers.
add_library(
tests_helpers STATIC ${CMAKE_CURRENT_SOURCE_DIR}/include/helpers.cc
${CMAKE_CURRENT_SOURCE_DIR}/include/helpers.h)
target_link_libraries(
tests_helpers
PUBLIC webp2
INTERFACE ${GTEST_BOTH_LIBRARIES}
PRIVATE example_utils imageio)
target_include_directories(tests_helpers PUBLIC ${GTEST_INCLUDE_DIRS}
${GMOCK_INCLUDE_DIRS})
add_library(
tests_helpers_filter STATIC
${CMAKE_CURRENT_SOURCE_DIR}/include/helpers_filter.cc
${CMAKE_CURRENT_SOURCE_DIR}/include/helpers_filter.h)
target_link_libraries(tests_helpers_filter ${GTEST_BOTH_LIBRARIES} webp2
tests_helpers)
add_library(
tests_helpers_incr STATIC
${CMAKE_CURRENT_SOURCE_DIR}/include/helpers_incr.cc
${CMAKE_CURRENT_SOURCE_DIR}/include/helpers_incr.h)
target_link_libraries(tests_helpers_incr webp2 tests_helpers)
macro(add_wp2_test TEST_FILE NUM_SHARDS)
string(REPLACE "/" "_" TEST_NAME ${TEST_FILE})
if(${NUM_SHARDS} GREATER 1)
# gtest_discover_tests() could also be used but it logs too many tests.
math(EXPR TEST_MAX_SHARD "${NUM_SHARDS} - 1")
foreach(SHARD RANGE 0 ${TEST_MAX_SHARD})
set(TEST_NAME_SHARDED ${TEST_NAME}_${SHARD})
add_executable(${TEST_NAME_SHARDED} ${TEST_FILE}.cc)
target_include_directories(${TEST_NAME_SHARDED}
PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/..)
target_link_libraries(${TEST_NAME_SHARDED} PRIVATE tests_helpers
${ARGN})
add_test(
NAME ${TEST_NAME_SHARDED}
COMMAND ${CMAKE_CURRENT_BINARY_DIR}/${TEST_NAME_SHARDED}
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR})
# GoogleTest needs two environment variables for sharding:
set_property(
TEST ${TEST_NAME_SHARDED}
APPEND
PROPERTY ENVIRONMENT "GTEST_TOTAL_SHARDS=${NUM_SHARDS};"
"GTEST_SHARD_INDEX=${SHARD}")
endforeach(SHARD)
else()
add_executable(${TEST_NAME} ${TEST_FILE}.cc)
target_include_directories(${TEST_NAME}
PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/..)
target_link_libraries(${TEST_NAME} PRIVATE tests_helpers ${ARGN})
add_test(
NAME ${TEST_NAME}
COMMAND ${CMAKE_CURRENT_BINARY_DIR}/${TEST_NAME}
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR})
endif()
endmacro()
add_wp2_test(test_alloc 1)
add_wp2_test(test_alpha_filter 1 tests_helpers_filter)
add_wp2_test(test_analysis 1)
add_wp2_test(test_anim 4 tests_helpers_filter)
add_wp2_test(test_anim_incr 4 tests_helpers_incr)
add_wp2_test(test_anim_frame 2)
add_wp2_test(test_anim_rectangle 1)
add_wp2_test(test_anim_skip 1 tests_helpers_filter)
add_wp2_test(test_ans 1 example_utils)
add_wp2_test(test_aom_residuals 4)
add_wp2_test(test_api 1)
add_wp2_test(test_average_color 1)
add_wp2_test(test_block_size 1)
add_wp2_test(test_buffer 4 tests_helpers_filter)
add_wp2_test(test_bypass 1)
add_wp2_test(test_coded_block 1)
add_wp2_test(test_color_precision 1)
add_wp2_test(test_context 1)
add_wp2_test(test_csp 1)
add_wp2_test(test_data 1)
add_wp2_test(test_data_source 1)
add_wp2_test(test_data_source_stream 1)
add_wp2_test(test_deblocking_filter 4 tests_helpers_filter)
add_wp2_test(test_dec 4)
add_wp2_test(test_decoder_api 1)
add_wp2_test(test_diffusion 1)
add_wp2_test(test_directional_filter 4 tests_helpers_filter)
add_wp2_test(test_dsp 1)
add_wp2_test(test_dsp_speed 1)
add_wp2_test(test_efforts 4)
add_wp2_test(test_example_utils 1 example_utils)
add_wp2_test(test_formats 1)
add_wp2_test(test_front_mgr 1)
add_wp2_test(test_global_params 1)
add_wp2_test(test_header 1)
add_wp2_test(test_imageio_anim 1)
add_wp2_test(test_imageio_util 1)
add_wp2_test(test_incr_dec 4 tests_helpers_incr)
add_wp2_test(test_intertile_filter 1 tests_helpers_filter)
add_wp2_test(test_math 1)
add_wp2_test(test_metadata 1)
add_wp2_test(test_debug_options 2)
add_wp2_test(test_optim 1)
add_wp2_test(test_orientation 1)
add_wp2_test(test_partitions 4)
add_wp2_test(test_partition_score_func 1)
add_wp2_test(test_pessimization 1)
add_wp2_test(test_plane 1 tests_helpers_filter)
add_wp2_test(test_predictor 1)
add_wp2_test(test_preview_api 1)
add_wp2_test(test_progress 8)
add_wp2_test(test_score 1)
add_wp2_test(test_split_iterator 1)
add_wp2_test(test_quant_mtx 1)
add_wp2_test(test_residuals 1)
add_wp2_test(test_restoration_filter 8 tests_helpers_filter)
add_wp2_test(test_screen 1)
add_wp2_test(test_segment 1)
add_wp2_test(test_simple_encode 1)
add_wp2_test(test_slow_enc 2)
add_wp2_test(test_slow_lossless_enc 3)
add_wp2_test(test_symbols 1)
add_wp2_test(test_syntax_writer 1)
add_wp2_test(test_thread 1)
add_wp2_test(test_tile_shapes 1)
add_wp2_test(test_trellis 1)
add_wp2_test(test_utils 1)
add_wp2_test(test_uv_mode 4)
add_wp2_test(test_vector 1)
add_wp2_test(lossless/test_color_cache 1)
add_wp2_test(lossless/test_group4 1)
add_wp2_test(lossless/test_histogram 1)
add_wp2_test(lossless/test_palette 1)
if(WP2_BUILD_EXTRAS)
add_wp2_test(test_custom_csp 4 extras)
add_wp2_test(test_custom_csp_dec 4 extras)
add_wp2_test(test_custom_csp_enc 4 extras)
add_wp2_test(test_custom_csp_enc_dec 4 extras)
add_wp2_test(test_distortion 4 extras tests_helpers_filter)
add_wp2_test(test_extras 1 extras)
add_wp2_test(test_imageio 1 extras)
add_wp2_test(test_imageio_conversion 1 extras)
add_wp2_test(test_transf 1 extras)
add_wp2_test(test_version 1 extras)
endif()
else()
if(NOT WP2_BUILD_WP2_JS)
message(WARNING "Didn't find Google Test, disabled some tests.")
endif()
endif()
# ##############################################################################
# SWIG
if(WP2_BUILD_SWIG_PY)
# To run the tests, 'execute' permission must be set.
file(
COPY test_stuttering_server.sh test_swig_examples.sh test_swig_python.py
DESTINATION ${CMAKE_CURRENT_BINARY_DIR}
FILE_PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE GROUP_READ
GROUP_EXECUTE WORLD_EXECUTE)
# test_stuttering_server doesn't work in a Docker environment (network issue).
if(WP2_ENABLE_TEST_HTTP_SERVER)
add_test(
NAME test_stuttering_server
COMMAND ${CMAKE_CURRENT_BINARY_DIR}/test_stuttering_server.sh
${CMAKE_SOURCE_DIR}/tests/tools
${CMAKE_CURRENT_SOURCE_DIR}/testdata
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})
endif()
add_test(
NAME test_swig_examples
COMMAND ${CMAKE_CURRENT_BINARY_DIR}/test_swig_examples.sh
${CMAKE_SOURCE_DIR}/swig/examples ${CMAKE_BINARY_DIR}
${CMAKE_CURRENT_SOURCE_DIR}/testdata
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR})
add_test(
NAME test_swig_python
COMMAND ${CMAKE_CURRENT_BINARY_DIR}/test_swig_python.py
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR})
# Add the path to libwebp2 module in PYTHONPATH environment variable.
set_tests_properties(
test_swig_examples test_swig_python
PROPERTIES ENVIRONMENT "PYTHONPATH=\$PYTHONPATH:${CMAKE_BINARY_DIR}/swig")
endif()