e9c45bbddd
Done-by: Alexandru Croitor <alexandru.croitor@qt.io> Done-by: Frederik Gladhorn <frederik.gladhorn@qt.io> Done-by: Kevin Funk <kevin.funk@kdab.com> Done-by: Mikhail Svetkin <mikhail.svetkin@qt.io> Done-by: Simon Hausmann <simon.hausmann@qt.io> Done-by: Tobias Hunger <tobias.hunger@qt.io> Done-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io> Done-by: Volker Krause <volker.krause@kdab.com> Change-Id: Ida4f8bd190f9a4849a1af7b5b7981337a5df5310 Reviewed-by: Simon Hausmann <simon.hausmann@qt.io> Reviewed-by: Tobias Hunger <tobias.hunger@qt.io> Reviewed-by: Mikhail Svetkin <mikhail.svetkin@qt.io>
163 lines
5.0 KiB
Python
Executable File
163 lines
5.0 KiB
Python
Executable File
#!/usr/bin/env python3
|
|
#############################################################################
|
|
##
|
|
## Copyright (C) 2018 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$
|
|
##
|
|
#############################################################################
|
|
|
|
import os
|
|
from pro2cmake import QmakeParser
|
|
|
|
|
|
_tests_path = os.path.dirname(os.path.abspath(__file__))
|
|
|
|
|
|
def validate_op(key, op, value, to_validate):
|
|
assert key == to_validate['key']
|
|
assert op == to_validate['operation']
|
|
assert value == to_validate['value']
|
|
|
|
|
|
def validate_single_op(key, op, value, to_validate):
|
|
assert len(to_validate) == 1
|
|
validate_op(key, op, value, to_validate[0])
|
|
|
|
|
|
def evaluate_condition(to_validate):
|
|
assert 'condition' in to_validate
|
|
assert 'statements' in to_validate
|
|
|
|
return (to_validate['condition'], to_validate['statements'], to_validate.get('else_statements', {}))
|
|
|
|
|
|
def validate_default_else_test(file_name):
|
|
result = parse_file(file_name)
|
|
assert len(result) == 1
|
|
|
|
(cond, if_branch, else_branch) = evaluate_condition(result[0])
|
|
assert cond == 'qtConfig(timezone)'
|
|
validate_single_op('A', '=', ['1'], if_branch)
|
|
|
|
assert len(else_branch) == 1
|
|
(cond2, if2_branch, else2_branch) = evaluate_condition(else_branch[0])
|
|
assert cond2 == 'win32'
|
|
validate_single_op('B', '=', ['2'], if2_branch)
|
|
validate_single_op('C', '=', ['3'], else2_branch)
|
|
|
|
|
|
def parse_file(file):
|
|
p = QmakeParser(debug=True)
|
|
result = p.parseFile(file).asDict()
|
|
assert len(result) == 1
|
|
|
|
return result['statements']
|
|
|
|
|
|
def test_else():
|
|
result = parse_file(_tests_path + '/data/else.pro')
|
|
assert len(result) == 1
|
|
|
|
(cond, if_branch, else_branch) = evaluate_condition(result[0])
|
|
|
|
assert cond == 'linux'
|
|
validate_single_op('SOURCES', '+=', ['a.cpp'], if_branch)
|
|
validate_single_op('SOURCES', '+=', ['b.cpp'], else_branch)
|
|
|
|
|
|
def test_else2():
|
|
result = parse_file(_tests_path + '/data/else2.pro')
|
|
assert len(result) == 1
|
|
|
|
(cond, if_branch, else_branch) = evaluate_condition(result[0])
|
|
assert cond == 'osx'
|
|
validate_single_op('A', '=', ['1'], if_branch)
|
|
|
|
assert len(else_branch) == 1
|
|
(cond2, if2_branch, else2_branch) = evaluate_condition(else_branch[0])
|
|
assert cond2 == 'win32'
|
|
validate_single_op('B', '=', ['2'], if2_branch)
|
|
|
|
validate_single_op('C', '=', ['3'], else2_branch)
|
|
|
|
|
|
def test_else3():
|
|
validate_default_else_test(_tests_path + '/data/else3.pro')
|
|
|
|
def test_else4():
|
|
validate_default_else_test(_tests_path + '/data/else4.pro')
|
|
|
|
def test_else5():
|
|
validate_default_else_test(_tests_path + '/data/else5.pro')
|
|
|
|
def test_else6():
|
|
validate_default_else_test(_tests_path + '/data/else6.pro')
|
|
|
|
def test_else7():
|
|
result = parse_file(_tests_path + '/data/else7.pro')
|
|
assert len(result) == 1
|
|
|
|
def test_else8():
|
|
validate_default_else_test(_tests_path + '/data/else8.pro')
|
|
|
|
def test_include():
|
|
result = parse_file(_tests_path + '/data/include.pro')
|
|
assert len(result) == 3
|
|
validate_op('A', '=', ['42'], result[0])
|
|
include = result[1]
|
|
assert len(include) == 1
|
|
assert include.get('included', '') == 'foo'
|
|
validate_op('B', '=', ['23'], result[2])
|
|
|
|
def test_load():
|
|
result = parse_file(_tests_path + '/data/load.pro')
|
|
assert len(result) == 3
|
|
validate_op('A', '=', ['42'], result[0])
|
|
load = result[1]
|
|
assert len(load) == 1
|
|
assert load.get('loaded', '') == 'foo'
|
|
validate_op('B', '=', ['23'], result[2])
|
|
|
|
def test_definetest():
|
|
result = parse_file(_tests_path + '/data/definetest.pro')
|
|
assert len(result) == 1
|
|
assert result[0] == []
|
|
|
|
def test_unset():
|
|
result = parse_file(_tests_path + '/data/unset.pro')
|
|
assert len(result) == 1
|
|
assert result[0] == []
|
|
|
|
def test_quoted():
|
|
result = parse_file(_tests_path + '/data/quoted.pro')
|
|
assert len(result) == 1
|
|
|
|
def test_complex_values():
|
|
result = parse_file(_tests_path + '/data/complex_values.pro')
|
|
assert len(result) == 1
|
|
|
|
def test_function_if():
|
|
result = parse_file(_tests_path + '/data/function_if.pro')
|
|
assert len(result) == 1
|