summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJędrzej Nowacki <jedrzej.nowacki@qt.io>2019-03-26 14:12:09 +0100
committerJędrzej Nowacki <jedrzej.nowacki@qt.io>2019-03-28 06:30:32 +0000
commit89f34ee42a6f54e528533e673faa7e5fd371af4f (patch)
treebbf3e632d22bda00bfb2655cd58c85596d50b3da
parent8fa9a987ea7bb25ef96d325a8fbbb8031e9ada63 (diff)
Fix turned logic in RemoveOperation
It is regression caused by a0a94576fae26bcbbf3823a6ee4b554886e84925 ("Fix RemoveOperation"). Add unit test for all operation types to make sure this code actually works:-) Change-Id: I97c94cb3411f05de89422e3fa2222f2217a09e49 Reviewed-by: Tobias Hunger <tobias.hunger@qt.io>
-rwxr-xr-xutil/cmake/pro2cmake.py16
-rwxr-xr-xutil/cmake/tests/test_operations.py57
2 files changed, 67 insertions, 6 deletions
diff --git a/util/cmake/pro2cmake.py b/util/cmake/pro2cmake.py
index e77d6fdcaf9..676ed4b406e 100755
--- a/util/cmake/pro2cmake.py
+++ b/util/cmake/pro2cmake.py
@@ -239,15 +239,19 @@ class RemoveOperation(Operation):
def process(self, input):
input_set = set(input)
- result_set = set(self._value)
+ value_set = set(self._value)
result = []
- for v in self._value:
- if v in input_set:
- continue
- if v in result_set:
+
+ # Add everything that is not going to get removed:
+ for v in input:
+ if v not in value_set:
result += [v,]
- else:
+
+ # Add everything else with removal marker:
+ for v in self._value:
+ if v not in input_set:
result += ['-{}'.format(v), ]
+
return result
def __repr__(self):
diff --git a/util/cmake/tests/test_operations.py b/util/cmake/tests/test_operations.py
new file mode 100755
index 00000000000..3ea2f76a431
--- /dev/null
+++ b/util/cmake/tests/test_operations.py
@@ -0,0 +1,57 @@
+#!/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 AddOperation, SetOperation, UniqueAddOperation, RemoveOperation
+
+def test_add_operation():
+ op = AddOperation(['bar', 'buz'])
+
+ result = op.process(['foo', 'bar'])
+ assert ['foo', 'bar', 'bar', 'buz'] == result
+
+
+def test_uniqueadd_operation():
+ op = UniqueAddOperation(['bar', 'buz'])
+
+ result = op.process(['foo', 'bar'])
+ assert ['foo', 'bar', 'buz'] == result
+
+
+def test_set_operation():
+ op = SetOperation(['bar', 'buz'])
+
+ result = op.process(['foo', 'bar'])
+ assert ['bar', 'buz'] == result
+
+
+def test_remove_operation():
+ op = RemoveOperation(['bar', 'buz'])
+
+ result = op.process(['foo', 'bar'])
+ assert ['foo', '-buz'] == result