mirror of
https://github.com/fish-shell/fish-shell.git
synced 2024-12-01 23:24:21 +08:00
23d88e0e03
In tests we would like to arrange for an executable to invoke certain system calls, e.g. to claim or relinquish control of the terminal. This is annoying to do portably via e.g. perl. fish_test_helper is a little program where we can add custom commands to make it act in certain ways.
135 lines
5.0 KiB
CMake
135 lines
5.0 KiB
CMake
# Define fish_tests.
|
|
ADD_EXECUTABLE(fish_tests EXCLUDE_FROM_ALL
|
|
src/fish_tests.cpp)
|
|
FISH_LINK_DEPS(fish_tests)
|
|
|
|
# The "test" directory.
|
|
SET(TEST_DIR ${CMAKE_CURRENT_BINARY_DIR}/test)
|
|
|
|
# The directory into which fish is installed.
|
|
SET(TEST_INSTALL_DIR ${TEST_DIR}/buildroot)
|
|
|
|
# The directory where the tests expect to find the fish root (./bin, etc)
|
|
SET(TEST_ROOT_DIR ${TEST_DIR}/root)
|
|
|
|
# Copy tests files.
|
|
FILE(GLOB TESTS_FILES tests/*)
|
|
ADD_CUSTOM_TARGET(tests_dir DEPENDS tests)
|
|
|
|
IF(NOT FISH_IN_TREE_BUILD)
|
|
ADD_CUSTOM_COMMAND(TARGET tests_dir
|
|
COMMAND ${CMAKE_COMMAND} -E copy_directory
|
|
${CMAKE_SOURCE_DIR}/tests/ ${CMAKE_BINARY_DIR}/tests/
|
|
COMMENT "Copying test files to binary dir"
|
|
VERBATIM)
|
|
|
|
ADD_DEPENDENCIES(fish_tests tests_dir)
|
|
ENDIF()
|
|
|
|
# Create the 'test' target.
|
|
# Set a policy so CMake stops complaining about the name 'test'.
|
|
CMAKE_POLICY(PUSH)
|
|
IF(POLICY CMP0037)
|
|
CMAKE_POLICY(SET CMP0037 OLD)
|
|
ENDIF()
|
|
ADD_CUSTOM_TARGET(test)
|
|
CMAKE_POLICY(POP)
|
|
|
|
ADD_CUSTOM_TARGET(test_low_level
|
|
COMMAND env XDG_DATA_HOME=test/data XDG_CONFIG_HOME=test/home ./fish_tests
|
|
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
|
|
DEPENDS fish_tests
|
|
USES_TERMINAL)
|
|
ADD_DEPENDENCIES(test test_low_level tests_dir)
|
|
|
|
# Make the directory in which to run tests.
|
|
# Also symlink fish to where the tests expect it to be.
|
|
# Lastly put fish_test_helper there too.
|
|
ADD_CUSTOM_TARGET(tests_buildroot_target
|
|
COMMAND ${CMAKE_COMMAND} -E make_directory ${TEST_INSTALL_DIR}
|
|
COMMAND DESTDIR=${TEST_INSTALL_DIR} ${CMAKE_COMMAND}
|
|
--build ${CMAKE_CURRENT_BINARY_DIR} --target install
|
|
COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_BINARY_DIR}/fish_test_helper
|
|
${TEST_INSTALL_DIR}/${CMAKE_INSTALL_PREFIX}/bin
|
|
COMMAND ${CMAKE_COMMAND} -E create_symlink
|
|
${TEST_INSTALL_DIR}/${CMAKE_INSTALL_PREFIX}
|
|
${TEST_ROOT_DIR}
|
|
DEPENDS fish fish_test_helper)
|
|
|
|
IF(NOT FISH_IN_TREE_BUILD)
|
|
# We need to symlink share/functions for the tests.
|
|
# This should be simplified.
|
|
ADD_CUSTOM_TARGET(symlink_functions
|
|
COMMAND ${CMAKE_COMMAND} -E create_symlink
|
|
${CMAKE_CURRENT_SOURCE_DIR}/share/functions
|
|
${CMAKE_CURRENT_BINARY_DIR}/share/functions)
|
|
ADD_DEPENDENCIES(tests_buildroot_target symlink_functions)
|
|
ELSE()
|
|
ADD_CUSTOM_TARGET(symlink_functions)
|
|
ENDIF()
|
|
|
|
#
|
|
# Prep the environment for running the unit tests.
|
|
# test-prep: show-DESTDIR show-LN_S show-FISH_VERSION
|
|
# $v rm -rf test
|
|
# $v $(MKDIR_P) test/data test/home test/temp
|
|
# ifdef DESTDIR
|
|
# $v $(LN_S) $(DESTDIR) test/root
|
|
# else
|
|
# $v $(MKDIR_P) test/root
|
|
# endif
|
|
ADD_CUSTOM_TARGET(test_prep
|
|
COMMAND ${CMAKE_COMMAND} -E remove_directory ${TEST_DIR}/data
|
|
COMMAND ${CMAKE_COMMAND} -E remove_directory ${TEST_DIR}/home
|
|
COMMAND ${CMAKE_COMMAND} -E remove_directory ${TEST_DIR}/temp
|
|
COMMAND ${CMAKE_COMMAND} -E make_directory
|
|
${TEST_DIR}/data ${TEST_DIR}/home ${TEST_DIR}/temp
|
|
DEPENDS tests_buildroot_target
|
|
USES_TERMINAL)
|
|
|
|
|
|
# test_high_level_test_deps = test_fishscript test_interactive test_invocation
|
|
# test_high_level: DESTDIR = $(PWD)/test/root/
|
|
# test_high_level: prefix = .
|
|
# test_high_level: test-prep install-force test_fishscript test_interactive test_invocation
|
|
# .PHONY: test_high_level
|
|
#
|
|
# test_invocation: $(call filter_up_to,test_invocation,$(active_test_goals))
|
|
# cd tests; ./invocation.sh
|
|
# .PHONY: test_invocation
|
|
ADD_CUSTOM_TARGET(test_invocation
|
|
COMMAND ./invocation.sh
|
|
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/tests/
|
|
DEPENDS test_prep test_low_level
|
|
USES_TERMINAL)
|
|
|
|
#
|
|
# test_fishscript: $(call filter_up_to,test_fishscript,$(active_test_goals))
|
|
# cd tests; ../test/root/bin/fish test.fish
|
|
# .PHONY: test_fishscript
|
|
|
|
ADD_CUSTOM_TARGET(test_fishscript
|
|
COMMAND cd tests && ${TEST_ROOT_DIR}/bin/fish test.fish
|
|
DEPENDS test_prep test_invocation
|
|
USES_TERMINAL)
|
|
#
|
|
# test_interactive: $(call filter_up_to,test_interactive,$(active_test_goals))
|
|
# cd tests; ../test/root/bin/fish interactive.fish
|
|
# .PHONY: test_interactive
|
|
|
|
ADD_CUSTOM_TARGET(test_interactive
|
|
COMMAND cd tests && ${TEST_ROOT_DIR}/bin/fish interactive.fish
|
|
DEPENDS test_prep test_invocation test_fishscript
|
|
USES_TERMINAL)
|
|
|
|
ADD_CUSTOM_TARGET(test_high_level
|
|
DEPENDS test_invocation test_fishscript test_interactive)
|
|
ADD_DEPENDENCIES(test test_high_level)
|
|
|
|
# Group test targets into a TestTargets folder
|
|
SET_PROPERTY(TARGET test test_low_level test_high_level tests_dir
|
|
test_invocation test_fishscript test_prep
|
|
tests_buildroot_target
|
|
symlink_functions
|
|
PROPERTY FOLDER cmake/TestTargets)
|