qt5base-lts/util/cmake/tests/test_logic_mapping.py
Tobias Hunger 8c04d6c967 CMake: pro2cmake.py: Improve condition simplification code
Improve the code that simplifies conditions to take "OS families"
into account. E.g. if a system must be ANDROID, then it is redundant
to express that it is NOT APPLE_OSX.

Change-Id: Ib7e62726c309bf84b9e5e0d6a6e3465511db0ead
Reviewed-by: Albert Astals Cid <albert.astals.cid@kdab.com>
2019-02-27 16:02:58 +00:00

187 lines
5.3 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$
##
#############################################################################
from pro2cmake import simplify_condition
def validate_simplify(input: str, expected: str) -> None:
output = simplify_condition(input)
assert output == expected
def validate_simplify_unchanged(input: str) -> None:
validate_simplify(input, input)
def test_simplify_on():
validate_simplify_unchanged('ON')
def test_simplify_off():
validate_simplify_unchanged('OFF')
def test_simplify_not_on():
validate_simplify('NOT ON', 'OFF')
def test_simplify_not_off():
validate_simplify('NOT OFF', 'ON')
def test_simplify_isEmpty():
validate_simplify_unchanged('isEmpty(foo)')
def test_simplify_not_isEmpty():
validate_simplify_unchanged('NOT isEmpty(foo)')
def test_simplify_simple_and():
validate_simplify_unchanged('QT_FEATURE_bar AND QT_FEATURE_foo')
def test_simplify_simple_or():
validate_simplify_unchanged('QT_FEATURE_bar OR QT_FEATURE_foo')
def test_simplify_simple_not():
validate_simplify_unchanged('NOT QT_FEATURE_foo')
def test_simplify_simple_and_reorder():
validate_simplify('QT_FEATURE_foo AND QT_FEATURE_bar', 'QT_FEATURE_bar AND QT_FEATURE_foo')
def test_simplify_simple_or_reorder():
validate_simplify('QT_FEATURE_foo OR QT_FEATURE_bar', 'QT_FEATURE_bar OR QT_FEATURE_foo')
def test_simplify_unix_or_win32():
validate_simplify('WIN32 OR UNIX', 'ON')
def test_simplify_unix_or_win32_or_foobar_or_barfoo():
validate_simplify('WIN32 OR UNIX OR foobar OR barfoo', 'ON')
def test_simplify_not_not_bar():
validate_simplify(' NOT NOT bar ', 'bar')
def test_simplify_not_unix():
validate_simplify('NOT UNIX', 'WIN32')
def test_simplify_not_win32():
validate_simplify('NOT WIN32', 'UNIX')
def test_simplify_unix_and_win32():
validate_simplify('WIN32 AND UNIX', 'OFF')
def test_simplify_unix_or_win32():
validate_simplify('WIN32 OR UNIX', 'ON')
def test_simplify_unix_and_win32_or_foobar_or_barfoo():
validate_simplify('WIN32 AND foobar AND UNIX AND barfoo', 'OFF')
def test_simplify_watchos_and_win32():
validate_simplify('APPLE_WATCHOS AND WIN32', 'OFF')
def test_simplify_win32_and_watchos():
validate_simplify('WIN32 AND APPLE_WATCHOS', 'OFF')
def test_simplify_apple_and_appleosx():
validate_simplify('APPLE AND APPLE_OSX', 'APPLE_OSX')
def test_simplify_apple_or_appleosx():
validate_simplify('APPLE OR APPLE_OSX', 'APPLE')
def test_simplify_apple_or_appleosx_level1():
validate_simplify('foobar AND (APPLE OR APPLE_OSX )', 'APPLE AND foobar')
def test_simplify_apple_or_appleosx_level1_double():
validate_simplify('foobar AND (APPLE OR APPLE_OSX )', 'APPLE AND foobar')
def test_simplify_apple_or_appleosx_level1_double_with_extra_spaces():
validate_simplify('foobar AND (APPLE OR APPLE_OSX ) '
'AND ( APPLE_OSX OR APPLE )', 'APPLE AND foobar')
def test_simplify_apple_or_appleosx_level2():
validate_simplify('foobar AND ( ( APPLE OR APPLE_WATCHOS ) '
'OR APPLE_OSX ) AND ( APPLE_OSX OR APPLE ) '
'AND ( (WIN32 OR WINRT) OR UNIX) ', 'APPLE AND foobar')
def test_simplify_not_apple_and_appleosx():
validate_simplify('NOT APPLE AND APPLE_OSX', 'OFF')
def test_simplify_unix_and_bar_or_win32():
validate_simplify('WIN32 AND bar AND UNIX', 'OFF')
def test_simplify_unix_or_bar_or_win32():
validate_simplify('WIN32 OR bar OR UNIX', 'ON')
def test_simplify_complex_true():
validate_simplify('WIN32 OR ( APPLE OR UNIX)', 'ON')
def test_simplify_apple_unix_freebsd():
validate_simplify('( APPLE OR ( UNIX OR FREEBSD ))', 'UNIX')
def test_simplify_apple_unix_freebsd_foobar():
validate_simplify('( APPLE OR ( UNIX OR FREEBSD ) OR foobar)',
'UNIX OR foobar')
def test_simplify_complex_false():
validate_simplify('WIN32 AND foobar AND ( '
'APPLE OR ( UNIX OR FREEBSD ))',
'OFF')
def test_simplify_android_not_apple():
validate_simplify('ANDROID AND NOT ANDROID_EMBEDDED AND NOT APPLE_OSX',
'ANDROID AND NOT ANDROID_EMBEDDED')