Revision control
Copy as Markdown
# Copyright (C) 2024 The Qt Company Ltd.
# SPDX-License-Identifier: BSD-3-Clause
cmake_minimum_required(VERSION 3.16)
project(test)
include(../test_qt_add_ui_common/RunCMake.cmake)
include(../test_qt_add_ui_common/functions.cmake)
get_generators(generators)
foreach(generator IN ITEMS ${generators})
message(STATUS "Running tests for generator: ${generator}")
is_multi_config(${generator} multi_config_out)
if(multi_config_out)
set(configs "Debug" "Release")
else()
set(configs "single_config")
endif()
foreach(config IN ITEMS ${configs})
if("${config}" STREQUAL "single_config")
set(config_path "")
set(config_arg "")
else()
set(config_path "_${config}")
set(config_arg "${config}")
endif()
# Test case: Check whether api sets warning against AUTOUIC activation.
# Expect 1: Printing of the error message and failure of the build.
string(CONCAT test_source_dir "${CMAKE_CURRENT_SOURCE_DIR}/../"
"test_qt_add_ui_common/uic_test")
string(CONCAT test_build_dir "${CMAKE_CURRENT_BINARY_DIR}/"
"uic_warning_test${config_path}-build")
run_cmake_configure(SOURCE_DIR "${test_source_dir}"
BUILD_DIR "${test_build_dir}"
GENERATOR "${generator}"
CLEAN_FIRST
ADDITIONAL_ARGS "-DCMAKE_AUTOUIC=ON"
OUTPUT_VARIABLE cmake_output
ERROR_VARIABLE cmake_error
RESULT_VARIABLE cmake_result)
if(NOT cmake_result EQUAL 0)
message(FATAL_ERROR "cmake_output: ${cmake_output}\ncmake_error: "
"${cmake_error}\nFAIL: \"uic_warning_test\" test in "
"${CMAKE_CURRENT_BINARY_DIR}/uic_warning_test${config_path}-"
"build failed to configure")
else()
message(STATUS "PASS: \"uic_warning_test\" test in "
"${CMAKE_CURRENT_BINARY_DIR}/uic_warning_test${config_path}-"
"build was configured successfully")
endif()
string(CONCAT test_build_dir "${CMAKE_CURRENT_BINARY_DIR}/"
"uic_warning_test${config_path}-build")
run_cmake_build(
BUILD_DIR "${test_build_dir}"
VERBOSE ON
CONFIG "${config_arg}"
OUTPUT_VARIABLE cmake_build_output
RESULT_VARIABLE cmake_build_result)
if(NOT cmake_build_result EQUAL 0)
message(STATUS "PASS: \"uic_warning_test\" test in "
"${CMAKE_CURRENT_BINARY_DIR}/uic_warning_test${config_path}"
"-build failed to build")
else()
message(FATAL_ERROR "FAIL: \"uic_warning_test\" test in "
"${CMAKE_CURRENT_BINARY_DIR}/uic_warning_test${config_path}-"
"build was built successfully")
endif()
expect_string_contains("${cmake_build_output}" "has \"AUTOUIC\" enabled"
SUCCESS_MESSAGE "\"uic_warning_test\" test in \
${CMAKE_CURRENT_BINARY_DIR}/uic_warning_test${config_path}-build \
has \"has AUTOUIC enabled\""
FAILURE_MESSAGE "\"uic_warning_test\" test in \
${CMAKE_CURRENT_BINARY_DIR}/uic_warning_test${config_path}-build \
does not have \"has AUTOUIC enabled\"")
if("${generator}" MATCHES "Ninja")
# Test case: If INCLUDE_PREFIX is changed without changing the
# corresponding include path in the source file and Ninja generator
# is used, this casues the double build issue.
# Note: Only happens in Ninja generator.
# Expect 1: Failure of the build in the first build.
string(CONCAT test_source_dir "${CMAKE_CURRENT_SOURCE_DIR}/../"
"test_qt_add_ui_common/uic_test")
string(CONCAT test_build_dir "${CMAKE_CURRENT_BINARY_DIR}/"
"uic_double_build_test${config_path}-build")
run_cmake_configure(SOURCE_DIR "${test_source_dir}"
BUILD_DIR "${test_build_dir}"
GENERATOR "${generator}"
CLEAN_FIRST
ADDITIONAL_ARGS "-DMAINWINDOW_UI_PATH=sub1/sub2/sub3/"
"-DDO_NOT_GENERATE_FILE=ON"
OUTPUT_VARIABLE cmake_output
ERROR_VARIABLE cmake_error
RESULT_VARIABLE cmake_result)
if(NOT cmake_result EQUAL 0)
message(FATAL_ERROR "cmake_output: ${cmake_output}\ncmake_error"
": ${cmake_error}\nFAIL: \"uic_double_build_test\" test in "
"${CMAKE_CURRENT_BINARY_DIR}/uic_double_build_test"
"${config_path}-build failed to configure")
else()
message(STATUS "PASS: \"uic_double_build_test\" test in "
"${CMAKE_CURRENT_BINARY_DIR}/uic_double_build_test"
"${config_path}-build was configured successfully")
endif()
string(CONCAT test_build_dir "${CMAKE_CURRENT_BINARY_DIR}/"
"uic_double_build_test${config_path}-build")
run_cmake_build(
BUILD_DIR "${test_build_dir}"
VERBOSE ON
CONFIG "${config_arg}"
OUTPUT_VARIABLE cmake_build_output
RESULT_VARIABLE cmake_build_result)
if(NOT cmake_build_result EQUAL 0)
message(FATAL_ERROR "cmake_build_output: ${cmake_build_output}"
"FAIL: \"uic_double_build_test\" test in "
"${CMAKE_CURRENT_BINARY_DIR}/uic_double_build_test"
"${config_path}-build failed to build in the first build")
else()
message(STATUS "PASS: \"uic_double_build_test\" test in "
"${CMAKE_CURRENT_BINARY_DIR}/uic_double_build_test"
"${config_path}-build was built successfully in the first "
"build")
endif()
string(CONCAT test_source_dir "${CMAKE_CURRENT_SOURCE_DIR}/../"
"test_qt_add_ui_common/uic_test")
string(CONCAT test_build_dir "${CMAKE_CURRENT_BINARY_DIR}/"
"uic_double_build_test${config_path}-build")
run_cmake_configure(SOURCE_DIR "${test_source_dir}"
BUILD_DIR "${test_build_dir}"
GENERATOR "${generator}"
# We change the INCLUDE_PREFIX here.
ADDITIONAL_ARGS "-DMAINWINDOW_UI_PATH=sub1/sub2/sub/"
"-DDO_NOT_GENERATE_FILE=ON"
OUTPUT_VARIABLE cmake_output
ERROR_VARIABLE cmake_error
RESULT_VARIABLE cmake_result)
if(NOT cmake_result EQUAL 0)
message(FATAL_ERROR "cmake_output: ${cmake_output}\ncmake_error"
":${cmake_error}\nFAIL: \"uic_double_build_test\" test in "
"${CMAKE_CURRENT_BINARY_DIR}/uic_double_build_test"
"${config_path}-build failed to configure in the second "
"build")
else()
message(STATUS "PASS: \"uic_double_build_test\" test in "
"${CMAKE_CURRENT_BINARY_DIR}/uic_double_build_test"
"${config_path}-build was configured successfully in the "
"second build")
endif()
string(CONCAT test_build_dir "${CMAKE_CURRENT_BINARY_DIR}/"
"uic_double_build_test${config_path}-build")
run_cmake_build(
BUILD_DIR "${test_build_dir}"
VERBOSE ON
CONFIG "${config_arg}"
OUTPUT_VARIABLE cmake_build_output
ERROR_VARIABLE cmake_build_error
RESULT_VARIABLE cmake_build_result)
if(NOT cmake_build_result EQUAL 0)
message(STATUS "PASS: \"uic_double_build_test\" test in"
"${CMAKE_CURRENT_BINARY_DIR}/uic_double_build_test"
"${config_path}-build failed to build in the first build "
"after changing INCLUDE_PREFIX")
else()
message(FATAL_ERROR "cmake_build_output: ${cmake_build_output}"
"\ncmake_build_error: ${cmake_build_error}\n"
"FAIL: \"uic_double_build_test\" test in "
"${CMAKE_CURRENT_BINARY_DIR}/uic_double_build_test"
"${config_path}-build was built successfully in the first "
"build after changing INCLUDE_PREFIX")
endif()
set(expected_fail_string "No such file or directory|file not found")
expect_string_contains(${cmake_build_output}
"${expected_fail_string}"
SUCCESS_MESSAGE "\"uic_double_build_test\" test in \
${CMAKE_CURRENT_BINARY_DIR}/uic_double_build_test${config_path}\
-build has \"ui_mainwindow.h: No such file or directory\" in \
the first build after changing INCLUDE_PREFIX"
FAILURE_MESSAGE "\"uic_double_build_test\" test in \
${CMAKE_CURRENT_BINARY_DIR}/uic_double_build_test${config_path}\
-build does not have \"ui_mainwindow.h: No such file or \
directory\" in the first build after changing INCLUDE_PREFIX")
endif()
endforeach()
endforeach()