diff options
author | Joerg Bornemann <joerg.bornemann@qt.io> | 2022-03-03 16:25:23 +0100 |
---|---|---|
committer | Joerg Bornemann <joerg.bornemann@qt.io> | 2022-03-08 03:45:30 +0100 |
commit | 50f3b1c519bd6570254cba726790e5960b7e9579 (patch) | |
tree | 052755587a6e17fba4f79cb2e43a40c045a7da57 /util | |
parent | e60c41ac0a40bc14a540bc64d06f5d314c6c312c (diff) | |
download | qtbase-50f3b1c519bd6570254cba726790e5960b7e9579.tar.gz |
pro2cmake: Add a blackbox test for converting from qmake to CMake
If you can set the environment variable DEBUG_PRO2CMAKE_TEST_CONVERSION
to 1, the output of pro2cmake is written to the temp directory. This
helps analysing test failures.
Change-Id: Ida42c5b76a67172d00ce0d2488adc7fb376c6b11
Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
Diffstat (limited to 'util')
-rw-r--r-- | util/cmake/tests/data/conversion/required_qt_modules.pro | 3 | ||||
-rwxr-xr-x | util/cmake/tests/test_conversion.py | 73 |
2 files changed, 76 insertions, 0 deletions
diff --git a/util/cmake/tests/data/conversion/required_qt_modules.pro b/util/cmake/tests/data/conversion/required_qt_modules.pro new file mode 100644 index 0000000000..287bb46831 --- /dev/null +++ b/util/cmake/tests/data/conversion/required_qt_modules.pro @@ -0,0 +1,3 @@ +TARGET = myapp +QT = core network widgets +SOURCES = main.cpp diff --git a/util/cmake/tests/test_conversion.py b/util/cmake/tests/test_conversion.py new file mode 100755 index 0000000000..62afdc8eff --- /dev/null +++ b/util/cmake/tests/test_conversion.py @@ -0,0 +1,73 @@ +#!/usr/bin/env python3 +############################################################################# +## +## Copyright (C) 2022 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the plugins of the Qt Toolkit. +## +## $QT_BEGIN_LICENSE:GPL-EXCEPT$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 as published by the Free Software +## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +from pro2cmake import Scope, SetOperation, merge_scopes, recursive_evaluate_scope +from tempfile import TemporaryDirectory + +import os +import pathlib +import pytest +import re +import shutil +import subprocess +import tempfile +import typing + +debug_mode = bool(os.environ.get("DEBUG_PRO2CMAKE_TEST_CONVERSION")) +test_script_dir = pathlib.Path(__file__).parent.resolve() +pro2cmake_dir = test_script_dir.parent.resolve() +pro2cmake_py = pro2cmake_dir.joinpath("pro2cmake.py") +test_data_dir = test_script_dir.joinpath("data", "conversion") + + +def convert(base_name: str): + pro_file_name = str(base_name) + ".pro" + pro_file_path = test_data_dir.joinpath(pro_file_name) + assert(pro_file_path.exists()) + with TemporaryDirectory(prefix="testqmake2cmake") as tmp_dir_str: + tmp_dir = pathlib.Path(tmp_dir_str) + output_file_path = tmp_dir.joinpath("CMakeLists.txt") + exit_code = subprocess.call([pro2cmake_py, "--is-example", "-o", output_file_path, pro_file_path]) + assert(exit_code == 0) + if debug_mode: + shutil.copyfile(output_file_path, tempfile.gettempdir() + "/pro2cmake/CMakeLists.txt") + f = open(output_file_path, "r") + assert(f) + content = f.read() + assert(content) + return content + + +def test_qt_modules(): + output = convert("required_qt_modules") + find_package_lines = [] + for line in output.split("\n"): + if "find_package(" in line: + find_package_lines.append(line.strip()) + assert(["find_package(Qt6 REQUIRED COMPONENTS Core Network Widgets)"] == find_package_lines) |