mirror of
https://github.com/OpenTTD/OpenTTD.git
synced 2025-08-12 09:09:09 +00:00
.github
bin
cmake
scripts
Baseset.cmake
CreateGRF.cmake
Desktop.cmake
FindVersion.cmake
GenerateWidget.cmake
Regression.cmake
SquirrelExport.cmake
SquirrelIncludes.cmake
AddCustomXXXTimestamp.cmake
CompileFlags.cmake
CreateGrfCommand.cmake
CreateRegression.cmake
Endian.cmake
FindAllegro.cmake
FindEditbin.cmake
FindFluidsynth.cmake
FindFontconfig.cmake
FindGrfcodec.cmake
FindICU.cmake
FindIconv.cmake
FindLZO.cmake
FindPandoc.cmake
FindSSE.cmake
FindXaudio2.cmake
InstallAndPackage.cmake
LinkPackage.cmake
MSVCFilters.cmake
Options.cmake
PackageBundle.cmake
PackageDeb.cmake
PackageNSIS.cmake
SourceList.cmake
Static.cmake
docs
media
os
regression
src
.dorpsgek.yml
.editorconfig
.gitignore
CMakeLists.txt
COMPILING.md
CONTRIBUTING.md
COPYING.md
CPackProperties.cmake.in
CREDITS.md
Doxyfile.in
README.md
changelog.txt
known-bugs.txt
107 lines
3.9 KiB
CMake
107 lines
3.9 KiB
CMake
cmake_minimum_required(VERSION 3.5)
|
|
|
|
#
|
|
# Runs a single regressoion test
|
|
#
|
|
|
|
if(NOT REGRESSION_TEST)
|
|
message(FATAL_ERROR "Script needs REGRESSION_TEST defined (tip: use -DREGRESSION_TEST=..)")
|
|
endif()
|
|
if(NOT OPENTTD_EXECUTABLE)
|
|
message(FATAL_ERROR "Script needs OPENTTD_EXECUTABLE defined (tip: use -DOPENTTD_EXECUTABLE=..)")
|
|
endif()
|
|
|
|
if(NOT EXISTS ai/${REGRESSION_TEST}/test.sav)
|
|
message(FATAL_ERROR "Regression test ${REGRESSION_TEST} does not exist (tip: check regression folder for the correct spelling)")
|
|
endif()
|
|
|
|
# If editbin is given, copy the executable to a new folder, and change the
|
|
# subsystem to console. The copy is needed as multiple regressions can run
|
|
# at the same time.
|
|
if(EDITBIN_EXECUTABLE)
|
|
execute_process(COMMAND ${CMAKE_COMMAND} -E copy ${OPENTTD_EXECUTABLE} regression_${REGRESSION_TEST}.exe)
|
|
set(OPENTTD_EXECUTABLE "regression_${REGRESSION_TEST}.exe")
|
|
|
|
execute_process(COMMAND ${EDITBIN_EXECUTABLE} /nologo /subsystem:console ${OPENTTD_EXECUTABLE})
|
|
endif()
|
|
|
|
# Run the regression test
|
|
execute_process(COMMAND ${OPENTTD_EXECUTABLE}
|
|
-x
|
|
-c regression/regression.cfg
|
|
-g ai/${REGRESSION_TEST}/test.sav
|
|
-snull
|
|
-mnull
|
|
-vnull:ticks=30000
|
|
-d script=2
|
|
-d misc=9
|
|
OUTPUT_VARIABLE REGRESSION_OUTPUT
|
|
ERROR_VARIABLE REGRESSION_RESULT
|
|
OUTPUT_STRIP_TRAILING_WHITESPACE
|
|
)
|
|
|
|
if(REGRESSION_OUTPUT)
|
|
message(FATAL_ERROR "Unexpected output: ${REGRESSION_OUTPUT}")
|
|
endif()
|
|
|
|
if(NOT REGRESSION_RESULT)
|
|
message(FATAL_ERROR "Regression did not output anything; did the compilation fail?")
|
|
endif()
|
|
|
|
# For some reason pointer can be printed as '0x(nil)', '0x0000000000000000', or '0x0x0'
|
|
string(REPLACE "0x(nil)" "0x00000000" REGRESSION_RESULT "${REGRESSION_RESULT}")
|
|
string(REPLACE "0x0000000000000000" "0x00000000" REGRESSION_RESULT "${REGRESSION_RESULT}")
|
|
string(REPLACE "0x0x0" "0x00000000" REGRESSION_RESULT "${REGRESSION_RESULT}")
|
|
|
|
# Remove timestamps if any
|
|
string(REGEX REPLACE "\[[0-9-]+ [0-9:]+\] " "" REGRESSION_RESULT "${REGRESSION_RESULT}")
|
|
|
|
# Convert the output to a format that is expected (and more readable) by result.txt
|
|
string(REPLACE "\ndbg: [script]" "\n" REGRESSION_RESULT "${REGRESSION_RESULT}")
|
|
string(REPLACE "\n " "\nERROR: " REGRESSION_RESULT "${REGRESSION_RESULT}")
|
|
string(REPLACE "\nERROR: [1] " "\n" REGRESSION_RESULT "${REGRESSION_RESULT}")
|
|
string(REPLACE "\n[P] " "\n" REGRESSION_RESULT "${REGRESSION_RESULT}")
|
|
string(REGEX REPLACE "dbg: ([^\n]*)\n?" "" REGRESSION_RESULT "${REGRESSION_RESULT}")
|
|
|
|
# Read the expected result
|
|
file(READ ai/${REGRESSION_TEST}/result.txt REGRESSION_EXPECTED)
|
|
|
|
# Convert the string to a list
|
|
string(REPLACE "\n" ";" REGRESSION_RESULT "${REGRESSION_RESULT}")
|
|
string(REPLACE "\n" ";" REGRESSION_EXPECTED "${REGRESSION_EXPECTED}")
|
|
|
|
set(ARGC 0)
|
|
set(ERROR NO)
|
|
|
|
list(LENGTH REGRESSION_EXPECTED REGRESSION_EXPECTED_LENGTH)
|
|
|
|
# Compare the output
|
|
foreach(RESULT IN LISTS REGRESSION_RESULT)
|
|
unset(EXPECTED)
|
|
if(ARGC LESS REGRESSION_EXPECTED_LENGTH)
|
|
list(GET REGRESSION_EXPECTED ${ARGC} EXPECTED)
|
|
endif()
|
|
|
|
math(EXPR ARGC "${ARGC} + 1")
|
|
|
|
if(NOT RESULT STREQUAL EXPECTED)
|
|
message("${ARGC}: - ${EXPECTED}")
|
|
message("${ARGC}: + ${RESULT}'")
|
|
set(ERROR YES)
|
|
endif()
|
|
endforeach()
|
|
|
|
if(NOT REGRESSION_EXPECTED_LENGTH EQUAL ARGC)
|
|
message("(${REGRESSION_EXPECTED_LENGTH} lines were expected but ${ARGC} were found)")
|
|
set(ERROR YES)
|
|
endif()
|
|
|
|
if(ERROR)
|
|
# Ouput the regression result to a file
|
|
set(REGRESSION_FILE "${CMAKE_CURRENT_BINARY_DIR}/regression_${REGRESSION_TEST}_output.txt")
|
|
string(REPLACE ";" "\n" REGRESSION_RESULT "${REGRESSION_RESULT}")
|
|
file(WRITE ${REGRESSION_FILE} "${REGRESSION_RESULT}")
|
|
|
|
message(FATAL_ERROR "Regression failed - Output in ${REGRESSION_FILE}")
|
|
endif()
|