From 4d8002a973715be85a668087cfd768b17cd2bbe3 Mon Sep 17 00:00:00 2001 From: Robert Loehning Date: Thu, 25 Sep 2014 13:52:20 +0200 Subject: Squish: Add shared file for clang-related code Change-Id: I2eaa39afbfeb0031f191ce9adead80c0d0960542 Reviewed-by: Christian Stenger --- tests/system/shared/clang.py | 79 ++++++++++++++++++++++++++++++ tests/system/shared/qtcreator.py | 3 +- tests/system/suite_CSUP/tst_CSUP06/test.py | 52 ++++---------------- 3 files changed, 91 insertions(+), 43 deletions(-) create mode 100644 tests/system/shared/clang.py diff --git a/tests/system/shared/clang.py b/tests/system/shared/clang.py new file mode 100644 index 0000000000..dee70a0e6a --- /dev/null +++ b/tests/system/shared/clang.py @@ -0,0 +1,79 @@ +############################################################################# +## +## Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies). +## Contact: http://www.qt-project.org/legal +## +## This file is part of Qt Creator. +## +## 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 Digia. For licensing terms and +## conditions see http://qt.digia.com/licensing. For further information +## use the contact form at http://qt.digia.com/contact-us. +## +## GNU Lesser General Public License Usage +## Alternatively, this file may be used under the terms of the GNU Lesser +## General Public License version 2.1 as published by the Free Software +## Foundation and appearing in the file LICENSE.LGPL included in the +## packaging of this file. Please review the following information to +## ensure the GNU Lesser General Public License version 2.1 requirements +## will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +## +## In addition, as a special exception, Digia gives you certain additional +## rights. These rights are described in the Digia Qt LGPL Exception +## version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +## +############################################################################# + +def startCreatorTryingClang(): + try: + # start Qt Creator with enabled ClangCodeModel plugin (without modifying settings) + startApplication("qtcreator -load ClangCodeModel" + SettingsPath) + errorMsg = "{type='QMessageBox' unnamed='1' visible='1' windowTitle='Qt Creator'}" + errorOK = "{text='OK' type='QPushButton' unnamed='1' visible='1' window=%s}" % errorMsg + if waitFor("object.exists(errorOK)", 5000): + clickButton(errorOK) # Error message + clickButton(errorOK) # Help message + raise Exception("ClangCodeModel not found.") + return True + except: + # ClangCodeModel plugin has not been built - start without it + test.warning("ClangCodeModel plugin not available - performing test without.") + startApplication("qtcreator" + SettingsPath) + return False + +def __openCodeModelOptions__(): + invokeMenuItem("Tools", "Options...") + waitForObjectItem(":Options_QListView", "C++") + clickItem(":Options_QListView", "C++", 14, 15, 0, Qt.LeftButton) + clickOnTab(":Options.qt_tabwidget_tabbar_QTabBar", "Code Model") + +def iterateAvailableCodeModels(): + __openCodeModelOptions__() + cppChooser = findObject("{type='QComboBox' name='cppChooser' visible='1'}") + models = [str(cppChooser.currentText)] # Make sure default is first in list + if cppChooser.count > 1: + furtherModels = dumpItems(cppChooser.model()) + furtherModels.remove(models[0]) + models.extend(furtherModels) + clickButton(waitForObject(":Options.OK_QPushButton")) + return models + +def selectCodeModel(codeModel): + __openCodeModelOptions__() + expectedObjNames = ['cChooser', 'cppChooser', 'objcChooser', 'objcppChooser', 'hChooser'] + for exp in expectedObjNames: + test.verify(checkIfObjectExists("{type='QComboBox' name='%s' visible='1'}" % exp), + "Verifying whether combobox '%s' exists." % exp) + combo = findObject("{type='QComboBox' name='%s' visible='1'}" % exp) + try: + selectFromCombo(combo, codeModel) + except: + test.fatal("Could not find code model '%s'. Canceling dialog." % codeModel) + clickButton(waitForObject(":Options.Cancel_QPushButton")) + return + test.verify(verifyChecked("{name='ignorePCHCheckBox' type='QCheckBox' visible='1'}"), + "Verifying whether 'Ignore pre-compiled headers' is checked by default.") + clickButton(waitForObject(":Options.OK_QPushButton")) diff --git a/tests/system/shared/qtcreator.py b/tests/system/shared/qtcreator.py index 086aa9411e..ee54ebe858 100644 --- a/tests/system/shared/qtcreator.py +++ b/tests/system/shared/qtcreator.py @@ -54,7 +54,8 @@ source("../../shared/editor_utils.py") source("../../shared/project_explorer.py") source("../../shared/hook_utils.py") source("../../shared/debugger.py") -source("../../shared/workarounds.py") +source("../../shared/clang.py") +source("../../shared/workarounds.py") # include this at last # ATTENTION: if a test case calls startApplication("qtcreator...") for several times this # function must be called BEFORE any call except the first (which is done always automatically) diff --git a/tests/system/suite_CSUP/tst_CSUP06/test.py b/tests/system/suite_CSUP/tst_CSUP06/test.py index 03076d1843..7d313ca6ee 100644 --- a/tests/system/suite_CSUP/tst_CSUP06/test.py +++ b/tests/system/suite_CSUP/tst_CSUP06/test.py @@ -29,28 +29,6 @@ source("../../shared/qtcreator.py") -def makeClangDefaultCodeModel(pluginAvailable): - invokeMenuItem("Tools", "Options...") - waitForObjectItem(":Options_QListView", "C++") - clickItem(":Options_QListView", "C++", 14, 15, 0, Qt.LeftButton) - clickOnTab(":Options.qt_tabwidget_tabbar_QTabBar", "Code Model") - expectedObjNames = ['cChooser', 'cppChooser', 'objcChooser', 'objcppChooser', 'hChooser'] - for exp in expectedObjNames: - test.verify(checkIfObjectExists("{type='QComboBox' name='%s' visible='1'}" % exp), - "Verifying whether combobox '%s' exists." % exp) - combo = findObject("{type='QComboBox' name='%s' visible='1'}" % exp) - if test.verify(combo.enabled == pluginAvailable, "Verifying whether combobox is enabled."): - if test.compare(combo.currentText, "Qt Creator Built-in", - "Verifying whether default is Qt Creator's builtin code model"): - items = dumpItems(combo.model()) - if (pluginAvailable and - test.verify("Clang" in items, - "Verifying whether clang code model can be chosen.")): - selectFromCombo(combo, "Clang") - test.verify(verifyChecked("{name='ignorePCHCheckBox' type='QCheckBox' visible='1'}"), - "Verifying whether 'Ignore pre-compiled headers' is checked by default.") - clickButton(waitForObject(":Options.OK_QPushButton")) - def moveDownToNextNonEmptyLine(editor): currentLine = "" # there's no do-while in python - so use empty line which fails while not currentLine: @@ -176,30 +154,22 @@ def main(): examplePath = os.path.join(srcPath, "creator", "tests", "manual", "cplusplus-tools") if not neededFilePresent(os.path.join(examplePath, "cplusplus-tools.pro")): return - try: - # start Qt Creator with enabled ClangCodeModel plugin (without modifying settings) - startApplication("qtcreator -load ClangCodeModel" + SettingsPath) - errorMsg = "{type='QMessageBox' unnamed='1' visible='1' windowTitle='Qt Creator'}" - errorOK = "{text='OK' type='QPushButton' unnamed='1' visible='1' window=%s}" % errorMsg - if waitFor("object.exists(errorOK)", 5000): - clickButton(errorOK) # Error message - clickButton(errorOK) # Help message - raise Exception("ClangCodeModel not found.") - clangCodeModelPluginAvailable = True - models = ["builtin", "clang"] - except: - # ClangCodeModel plugin has not been built - start without it - test.warning("ClangCodeModel plugin not available - performing test without.") - startApplication("qtcreator" + SettingsPath) - clangCodeModelPluginAvailable = False - models = ["builtin"] + clangLoaded = startCreatorTryingClang() if not startedWithoutPluginError(): return templateDir = prepareTemplate(examplePath) examplePath = os.path.join(templateDir, "cplusplus-tools.pro") openQmakeProject(examplePath, Targets.DESKTOP_531_DEFAULT) + models = iterateAvailableCodeModels() + test.compare(len(models), 1 + clangLoaded, "Verifying number of available code models") + test.compare("Qt Creator Built-in", models[0], + "Verifying whether default is Qt Creator's builtin code model") + test.compare("Clang" in models, clangLoaded, + "Verifying whether clang code model can be chosen.") for current in models: + if current != models[0]: + selectCodeModel(current) test.log("Testing code model: %s" % current) if not openDocument("cplusplus-tools.Sources.main\\.cpp"): earlyExit("Failed to open main.cpp.") @@ -207,11 +177,9 @@ def main(): editor = getEditorForFileSuffix("main.cpp") if editor: checkIncludeCompletion(editor) - checkSymbolCompletion(editor, current != "builtin") + checkSymbolCompletion(editor, current == "Clang") invokeMenuItem('File', 'Revert "main.cpp" to Saved') clickButton(waitForObject(":Revert to Saved.Proceed_QPushButton")) - if current == "builtin": - makeClangDefaultCodeModel(clangCodeModelPluginAvailable) snooze(1) # 'Close "main.cpp"' might still be disabled # editor must be closed to get the second code model applied on re-opening the file invokeMenuItem('File', 'Close "main.cpp"') -- cgit v1.2.1