summaryrefslogtreecommitdiff
path: root/util
diff options
context:
space:
mode:
authorJoerg Bornemann <joerg.bornemann@qt.io>2022-03-03 16:25:23 +0100
committerJoerg Bornemann <joerg.bornemann@qt.io>2022-03-08 03:45:30 +0100
commit50f3b1c519bd6570254cba726790e5960b7e9579 (patch)
tree052755587a6e17fba4f79cb2e43a40c045a7da57 /util
parente60c41ac0a40bc14a540bc64d06f5d314c6c312c (diff)
downloadqtbase-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.pro3
-rwxr-xr-xutil/cmake/tests/test_conversion.py73
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)