diff options
Diffstat (limited to 'tests/auto/cmake/test_qt_extract_metatypes')
12 files changed, 244 insertions, 0 deletions
diff --git a/tests/auto/cmake/test_qt_extract_metatypes/CMakeLists.txt b/tests/auto/cmake/test_qt_extract_metatypes/CMakeLists.txt new file mode 100644 index 0000000000..26944b1192 --- /dev/null +++ b/tests/auto/cmake/test_qt_extract_metatypes/CMakeLists.txt @@ -0,0 +1,109 @@ +# Copyright (C) 2022 The Qt Company Ltd. +# SPDX-License-Identifier: BSD-3-Clause + +cmake_minimum_required(VERSION 3.16) + +project(test_qt_extract_metatypes VERSION 0.1 LANGUAGES CXX) + +set(test_project_source_dir "${CMAKE_CURRENT_SOURCE_DIR}/test_qt_extract_metatypes_project") +set(test_project_build_dir "${CMAKE_CURRENT_BINARY_DIR}/build_qt_extract_metatypes_test_project") + +# Make sure that file paths are 'real' paths +get_filename_component(test_project_source_dir "${test_project_source_dir}" REALPATH) +get_filename_component(test_project_build_dir "${test_project_build_dir}" REALPATH) + +get_cmake_property(is_multi_config GENERATOR_IS_MULTI_CONFIG) +if (CMAKE_BUILD_TYPE AND NOT is_multi_config) + string(TOLOWER "qt6metatypetest_${CMAKE_BUILD_TYPE}" metatypes_file_basename) +else() + string(TOLOWER "qt6metatypetest" metatypes_file_basename) +endif() +set(meta_types_file + "${test_project_build_dir}/meta_types/${metatypes_file_basename}_metatypes.json") + +file(REMOVE_RECURSE "${test_project_build_dir}") +file(MAKE_DIRECTORY "${test_project_build_dir}") + +find_package(Qt6 COMPONENTS Core REQUIRED) + +include("${_Qt6CTestMacros}") + +macro(try_build) + execute_process(COMMAND + "${CMAKE_COMMAND}" + --build "${test_project_build_dir}" + RESULT_VARIABLE result + ) + if(NOT result EQUAL 0) + message(FATAL_ERROR "Unable to build test project") + endif() +endmacro() + +macro(copy_test_header header) + file(COPY "${test_project_source_dir}/testdata/${header}" + DESTINATION "${test_project_build_dir}") + file(RENAME "${test_project_build_dir}/${header}" "${test_project_build_dir}/MetaType.h") + file(TOUCH "${test_project_build_dir}/MetaType.h") +endmacro() + +macro(check_generated_metatypes_file reference expect) + set(reference_meta_types_file "${test_project_source_dir}/testdata/${reference}") + execute_process(COMMAND + "${CMAKE_COMMAND}" + -E compare_files "${meta_types_file}" "${reference_meta_types_file}" + RESULT_VARIABLE compare_result + ) + if(NOT compare_result EQUAL ${expect}) + message(FATAL_ERROR "${meta_types_file} and ${reference_meta_types_file} content differs") + endif() + unset(reference_meta_types_file) +endmacro() + +copy_test_header(MetaTypeQ_OBJECT.h) + +_qt_internal_get_cmake_test_configure_options(option_list) +execute_process(COMMAND + "${CMAKE_COMMAND}" + "-DCMAKE_PREFIX_PATH=${CMAKE_PREFIX_PATH}" + "-G${CMAKE_GENERATOR}" + ${option_list} + -B "${test_project_build_dir}" + -S "${test_project_source_dir}" + RESULT_VARIABLE result +) +if(NOT result EQUAL 0) + message(FATAL_ERROR "Unable to configure test project") +endif() + +try_build() +check_generated_metatypes_file(qt6metatypetest_metatypesQ_OBJECT.json 0) + +copy_test_header(MetaTypeQ_OBJECTandQ_PROPERTY.h) +try_build() +check_generated_metatypes_file(qt6metatypetest_metatypesQ_OBJECTandQ_PROPERTY.json 0) + +copy_test_header(MetaTypeEmpty.h) +try_build() +check_generated_metatypes_file(qt6metatypetest_metatypesEmpty.json 0) +file(TIMESTAMP "${meta_types_file}" metatypes_timestamp) + +copy_test_header(MetaTypeEmptyWithComment.h) +try_build() +check_generated_metatypes_file(qt6metatypetest_metatypesEmpty.json 0) + +file(TIMESTAMP "${meta_types_file}" new_metatypes_timestamp) + +# Depending on the way how qt_extract_metatypes executes automoc it might or might not +# change the resulting .json file content. +set(extract_metatypes_uses_dep_files FALSE) +if(CMAKE_VERSION VERSION_GREATER_EQUAL "3.17") # Requires automoc changes present only in 3.17 + if(CMAKE_GENERATOR STREQUAL "Ninja" OR CMAKE_GENERATOR STREQUAL "Ninja Multi-Config") + set(extract_metatypes_uses_dep_files TRUE) + endif() +endif() + +if(extract_metatypes_uses_dep_files) + if(NOT metatypes_timestamp STREQUAL new_metatypes_timestamp) + message(FATAL_ERROR "${meta_types_file} timestamp is changed but should not") + endif() +endif() diff --git a/tests/auto/cmake/test_qt_extract_metatypes/test_qt_extract_metatypes_project/CMakeLists.txt b/tests/auto/cmake/test_qt_extract_metatypes/test_qt_extract_metatypes_project/CMakeLists.txt new file mode 100644 index 0000000000..328f20aaab --- /dev/null +++ b/tests/auto/cmake/test_qt_extract_metatypes/test_qt_extract_metatypes_project/CMakeLists.txt @@ -0,0 +1,24 @@ +# Copyright (C) 2022 The Qt Company Ltd. +# SPDX-License-Identifier: BSD-3-Clause + +cmake_minimum_required(VERSION 3.16) + +project(qt_extract_metatypes_test_project VERSION 0.1 LANGUAGES CXX) + +set(CMAKE_CXX_STANDARD 11) +set(CMAKE_CXX_STANDARD_REQUIRED ON) + +find_package(Qt6 COMPONENTS Core REQUIRED) + +set(CMAKE_AUTOUIC ON) +set(CMAKE_AUTOMOC ON) +set(CMAKE_AUTORCC ON) + +qt_add_executable(MetaTypeTest + MetaType.cpp + "${CMAKE_CURRENT_BINARY_DIR}/MetaType.h" + main.cpp +) +target_include_directories(MetaTypeTest PRIVATE "${CMAKE_CURRENT_BINARY_DIR}") +qt_extract_metatypes(MetaTypeTest) +target_link_libraries(MetaTypeTest PRIVATE Qt6::Core) diff --git a/tests/auto/cmake/test_qt_extract_metatypes/test_qt_extract_metatypes_project/MetaType.cpp b/tests/auto/cmake/test_qt_extract_metatypes/test_qt_extract_metatypes_project/MetaType.cpp new file mode 100644 index 0000000000..40fb1dffbe --- /dev/null +++ b/tests/auto/cmake/test_qt_extract_metatypes/test_qt_extract_metatypes_project/MetaType.cpp @@ -0,0 +1,4 @@ +// Copyright (C) 2021 The Qt Company Ltd. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only + +#include "MetaType.h" diff --git a/tests/auto/cmake/test_qt_extract_metatypes/test_qt_extract_metatypes_project/main.cpp b/tests/auto/cmake/test_qt_extract_metatypes/test_qt_extract_metatypes_project/main.cpp new file mode 100644 index 0000000000..b141c894ab --- /dev/null +++ b/tests/auto/cmake/test_qt_extract_metatypes/test_qt_extract_metatypes_project/main.cpp @@ -0,0 +1,7 @@ +// Copyright (C) 2021 The Qt Company Ltd. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only + +int main(int argc, char *argv[]) +{ + return 0; +} diff --git a/tests/auto/cmake/test_qt_extract_metatypes/test_qt_extract_metatypes_project/testdata/.gitattributes b/tests/auto/cmake/test_qt_extract_metatypes/test_qt_extract_metatypes_project/testdata/.gitattributes new file mode 100644 index 0000000000..8f4efb84e5 --- /dev/null +++ b/tests/auto/cmake/test_qt_extract_metatypes/test_qt_extract_metatypes_project/testdata/.gitattributes @@ -0,0 +1 @@ +*.json text eol=lf diff --git a/tests/auto/cmake/test_qt_extract_metatypes/test_qt_extract_metatypes_project/testdata/MetaTypeEmpty.h b/tests/auto/cmake/test_qt_extract_metatypes/test_qt_extract_metatypes_project/testdata/MetaTypeEmpty.h new file mode 100644 index 0000000000..bcd7594d9a --- /dev/null +++ b/tests/auto/cmake/test_qt_extract_metatypes/test_qt_extract_metatypes_project/testdata/MetaTypeEmpty.h @@ -0,0 +1,10 @@ +// Copyright (C) 2021 The Qt Company Ltd. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only + +#pragma once + +#include <QObject> + +class MetaType : public QObject +{ +}; diff --git a/tests/auto/cmake/test_qt_extract_metatypes/test_qt_extract_metatypes_project/testdata/MetaTypeEmptyWithComment.h b/tests/auto/cmake/test_qt_extract_metatypes/test_qt_extract_metatypes_project/testdata/MetaTypeEmptyWithComment.h new file mode 100644 index 0000000000..1c38ae2f5e --- /dev/null +++ b/tests/auto/cmake/test_qt_extract_metatypes/test_qt_extract_metatypes_project/testdata/MetaTypeEmptyWithComment.h @@ -0,0 +1,11 @@ +// Copyright (C) 2021 The Qt Company Ltd. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only + +#pragma once + +#include <QObject> + +class MetaType : public QObject +{ +// Changes of no value to automoc +}; diff --git a/tests/auto/cmake/test_qt_extract_metatypes/test_qt_extract_metatypes_project/testdata/MetaTypeQ_OBJECT.h b/tests/auto/cmake/test_qt_extract_metatypes/test_qt_extract_metatypes_project/testdata/MetaTypeQ_OBJECT.h new file mode 100644 index 0000000000..104dd6d7a9 --- /dev/null +++ b/tests/auto/cmake/test_qt_extract_metatypes/test_qt_extract_metatypes_project/testdata/MetaTypeQ_OBJECT.h @@ -0,0 +1,10 @@ +// Copyright (C) 2021 The Qt Company Ltd. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only + +#pragma once +#include <QObject> + +class MetaType : public QObject +{ + Q_OBJECT +}; diff --git a/tests/auto/cmake/test_qt_extract_metatypes/test_qt_extract_metatypes_project/testdata/MetaTypeQ_OBJECTandQ_PROPERTY.h b/tests/auto/cmake/test_qt_extract_metatypes/test_qt_extract_metatypes_project/testdata/MetaTypeQ_OBJECTandQ_PROPERTY.h new file mode 100644 index 0000000000..f3a9ececb7 --- /dev/null +++ b/tests/auto/cmake/test_qt_extract_metatypes/test_qt_extract_metatypes_project/testdata/MetaTypeQ_OBJECTandQ_PROPERTY.h @@ -0,0 +1,13 @@ +// Copyright (C) 2021 The Qt Company Ltd. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only + +#pragma once + +#include <QObject> + +class MetaType : public QObject +{ + Q_OBJECT + Q_PROPERTY(int test READ test) + int test() { return 0; } +}; diff --git a/tests/auto/cmake/test_qt_extract_metatypes/test_qt_extract_metatypes_project/testdata/qt6metatypetest_metatypesEmpty.json b/tests/auto/cmake/test_qt_extract_metatypes/test_qt_extract_metatypes_project/testdata/qt6metatypetest_metatypesEmpty.json new file mode 100644 index 0000000000..0d4f101c7a --- /dev/null +++ b/tests/auto/cmake/test_qt_extract_metatypes/test_qt_extract_metatypes_project/testdata/qt6metatypetest_metatypesEmpty.json @@ -0,0 +1,2 @@ +[ +] diff --git a/tests/auto/cmake/test_qt_extract_metatypes/test_qt_extract_metatypes_project/testdata/qt6metatypetest_metatypesQ_OBJECT.json b/tests/auto/cmake/test_qt_extract_metatypes/test_qt_extract_metatypes_project/testdata/qt6metatypetest_metatypesQ_OBJECT.json new file mode 100644 index 0000000000..9393eda2df --- /dev/null +++ b/tests/auto/cmake/test_qt_extract_metatypes/test_qt_extract_metatypes_project/testdata/qt6metatypetest_metatypesQ_OBJECT.json @@ -0,0 +1,19 @@ +[ + { + "classes": [ + { + "className": "MetaType", + "object": true, + "qualifiedClassName": "MetaType", + "superClasses": [ + { + "access": "public", + "name": "QObject" + } + ] + } + ], + "inputFile": "MetaType.h", + "outputRevision": 68 + } +] diff --git a/tests/auto/cmake/test_qt_extract_metatypes/test_qt_extract_metatypes_project/testdata/qt6metatypetest_metatypesQ_OBJECTandQ_PROPERTY.json b/tests/auto/cmake/test_qt_extract_metatypes/test_qt_extract_metatypes_project/testdata/qt6metatypetest_metatypesQ_OBJECTandQ_PROPERTY.json new file mode 100644 index 0000000000..f6a901952d --- /dev/null +++ b/tests/auto/cmake/test_qt_extract_metatypes/test_qt_extract_metatypes_project/testdata/qt6metatypetest_metatypesQ_OBJECTandQ_PROPERTY.json @@ -0,0 +1,34 @@ +[ + { + "classes": [ + { + "className": "MetaType", + "object": true, + "properties": [ + { + "constant": false, + "designable": true, + "final": false, + "index": 0, + "name": "test", + "read": "test", + "required": false, + "scriptable": true, + "stored": true, + "type": "int", + "user": false + } + ], + "qualifiedClassName": "MetaType", + "superClasses": [ + { + "access": "public", + "name": "QObject" + } + ] + } + ], + "inputFile": "MetaType.h", + "outputRevision": 68 + } +] |