| 
									
										
										
										
											2016-01-15 14:55:33 +01:00
										 |  |  | ############################################################################ | 
					
						
							|  |  |  | # | 
					
						
							|  |  |  | # Copyright (C) 2016 The Qt Company Ltd. | 
					
						
							|  |  |  | # Contact: https://www.qt.io/licensing/ | 
					
						
							|  |  |  | # | 
					
						
							|  |  |  | # 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 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. | 
					
						
							|  |  |  | # | 
					
						
							|  |  |  | ############################################################################ | 
					
						
							| 
									
										
										
										
											2013-05-15 13:17:33 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-06-12 17:16:41 +02:00
										 |  |  | import __builtin__ | 
					
						
							| 
									
										
										
										
											2012-02-17 17:10:53 +01:00
										 |  |  | import re | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-08-29 16:32:24 +02:00
										 |  |  | def openQbsProject(projectPath): | 
					
						
							|  |  |  |     cleanUpUserFiles(projectPath) | 
					
						
							|  |  |  |     invokeMenuItem("File", "Open File or Project...") | 
					
						
							|  |  |  |     selectFromFileDialog(projectPath) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-04-05 16:58:06 +02:00
										 |  |  | def openQmakeProject(projectPath, targets=Targets.desktopTargetClasses(), fromWelcome=False): | 
					
						
							| 
									
										
										
										
											2012-03-20 11:49:37 +01:00
										 |  |  |     cleanUpUserFiles(projectPath) | 
					
						
							| 
									
										
										
										
											2012-09-18 12:48:40 +02:00
										 |  |  |     if fromWelcome: | 
					
						
							| 
									
										
										
										
											2015-07-27 16:14:08 +02:00
										 |  |  |         if isQt54Build: | 
					
						
							|  |  |  |             welcomePage = ":WelcomePageStyledBar.WelcomePage_QQuickView" | 
					
						
							|  |  |  |         else: | 
					
						
							|  |  |  |             welcomePage = ":Qt Creator.WelcomePage_QQuickWidget" | 
					
						
							|  |  |  |         mouseClick(waitForObject("{clip='false' container='%s' enabled='true' text='Open Project' " | 
					
						
							|  |  |  |                                  "type='Button' unnamed='1' visible='true'}" % welcomePage), | 
					
						
							|  |  |  |                    5, 5, 0, Qt.LeftButton) | 
					
						
							| 
									
										
										
										
											2012-09-18 12:48:40 +02:00
										 |  |  |     else: | 
					
						
							|  |  |  |         invokeMenuItem("File", "Open File or Project...") | 
					
						
							| 
									
										
										
										
											2012-01-11 17:04:20 +01:00
										 |  |  |     selectFromFileDialog(projectPath) | 
					
						
							| 
									
										
										
										
											2012-03-20 11:49:37 +01:00
										 |  |  |     try: | 
					
						
							|  |  |  |         # handle update generated files dialog | 
					
						
							| 
									
										
										
										
											2012-04-05 14:57:13 +02:00
										 |  |  |         waitForObject("{type='QLabel' name='qt_msgbox_label' visible='1' " | 
					
						
							|  |  |  |                       "text?='The following files are either outdated or have been modified*' " | 
					
						
							|  |  |  |                       "window={type='QMessageBox' unnamed='1' visible='1'}}", 3000) | 
					
						
							| 
									
										
										
										
											2012-03-20 11:49:37 +01:00
										 |  |  |         clickButton(waitForObject("{text='Yes' type='QPushButton' unnamed='1' visible='1'}")) | 
					
						
							|  |  |  |     except: | 
					
						
							|  |  |  |         pass | 
					
						
							| 
									
										
										
										
											2013-01-18 16:31:48 +01:00
										 |  |  |     checkedTargets = __chooseTargets__(targets) | 
					
						
							| 
									
										
										
										
											2012-02-06 14:21:54 +01:00
										 |  |  |     configureButton = waitForObject("{text='Configure Project' type='QPushButton' unnamed='1' visible='1'" | 
					
						
							| 
									
										
										
										
											2012-11-02 19:34:38 +01:00
										 |  |  |                                     "window=':Qt Creator_Core::Internal::MainWindow'}") | 
					
						
							| 
									
										
										
										
											2012-02-06 14:21:54 +01:00
										 |  |  |     clickButton(configureButton) | 
					
						
							| 
									
										
										
										
											2013-01-18 16:31:48 +01:00
										 |  |  |     return checkedTargets | 
					
						
							| 
									
										
										
										
											2011-10-06 20:16:15 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-01-26 22:46:25 +01:00
										 |  |  | def openCmakeProject(projectPath, buildDir): | 
					
						
							| 
									
										
										
										
											2015-10-26 18:26:50 +01:00
										 |  |  |     def additionalFunction(): | 
					
						
							|  |  |  |         pChooser = waitForObject("{leftWidget={text='Default' type='QCheckBox' unnamed='1' " | 
					
						
							|  |  |  |                                  "visible='1'} type='Utils::PathChooser' unnamed='1' visible='1'}") | 
					
						
							|  |  |  |         lineEdit = getChildByClass(pChooser, "Utils::FancyLineEdit") | 
					
						
							|  |  |  |         replaceEditorContent(lineEdit, buildDir) | 
					
						
							|  |  |  |         # disable all build configurations except "Default" | 
					
						
							|  |  |  |         configs = ['Debug', 'Release', 'Release with Debug Information', 'Minimum Size Release'] | 
					
						
							|  |  |  |         for checkbox in configs: | 
					
						
							|  |  |  |             ensureChecked(waitForObject("{text='%s' type='QCheckBox' unnamed='1' visible='1' " | 
					
						
							|  |  |  |                                         "window=':Qt Creator_Core::Internal::MainWindow'}" | 
					
						
							|  |  |  |                                         % checkbox), False) | 
					
						
							|  |  |  |         ensureChecked(waitForObject("{text='Default' type='QCheckBox' unnamed='1' visible='1' " | 
					
						
							|  |  |  |                       "window=':Qt Creator_Core::Internal::MainWindow'}"), True) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-10-06 20:16:15 +02:00
										 |  |  |     invokeMenuItem("File", "Open File or Project...") | 
					
						
							| 
									
										
										
										
											2012-01-11 17:04:20 +01:00
										 |  |  |     selectFromFileDialog(projectPath) | 
					
						
							| 
									
										
										
										
											2015-10-26 18:26:50 +01:00
										 |  |  |     __chooseTargets__(0) # uncheck all | 
					
						
							|  |  |  |     __chooseTargets__(Targets.DESKTOP_480_DEFAULT, additionalFunc=additionalFunction) | 
					
						
							|  |  |  |     clickButton(waitForObject("{text='Configure Project' type='QPushButton' unnamed='1' visible='1'" | 
					
						
							|  |  |  |                               "window=':Qt Creator_Core::Internal::MainWindow'}")) | 
					
						
							| 
									
										
										
										
											2013-08-22 16:26:44 +02:00
										 |  |  |     return __handleCmakeWizardPage__() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | def __handleCmakeWizardPage__(): | 
					
						
							| 
									
										
										
										
											2014-05-12 14:23:29 +02:00
										 |  |  |     generatorText = "Unix Generator (Desktop 480 GCC)" | 
					
						
							|  |  |  |     if platform.system() in ('Windows', 'Microsoft'): | 
					
						
							| 
									
										
										
										
											2015-03-18 15:31:36 +01:00
										 |  |  |         generatorText = "NMake Generator (Desktop 480 MSVC2010)" | 
					
						
							| 
									
										
										
										
											2015-10-26 18:39:11 +01:00
										 |  |  |     selectFromCombo(waitForObject(":Generator:_QComboBox"), generatorText) | 
					
						
							| 
									
										
										
										
											2012-11-02 19:34:38 +01:00
										 |  |  |     clickButton(waitForObject(":CMake Wizard.Run CMake_QPushButton")) | 
					
						
							| 
									
										
										
										
											2012-01-24 11:59:54 +01:00
										 |  |  |     try: | 
					
						
							|  |  |  |         clickButton(waitForObject(":CMake Wizard.Finish_QPushButton", 60000)) | 
					
						
							|  |  |  |     except LookupError: | 
					
						
							|  |  |  |         cmakeOutput = waitForObject("{type='QPlainTextEdit' unnamed='1' visible='1' " | 
					
						
							|  |  |  |                                     "window=':CMake Wizard_CMakeProjectManager::Internal::CMakeOpenProjectWizard'}") | 
					
						
							|  |  |  |         test.warning("Error while executing cmake - see details for cmake output.", | 
					
						
							|  |  |  |                      str(cmakeOutput.plainText)) | 
					
						
							|  |  |  |         clickButton(waitForObject(":CMake Wizard.Cancel_QPushButton")) | 
					
						
							|  |  |  |         return False | 
					
						
							|  |  |  |     return True | 
					
						
							| 
									
										
										
										
											2011-10-06 20:16:15 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-02-16 12:57:24 +01:00
										 |  |  | # this function returns a list of available targets - this is not 100% error proof | 
					
						
							|  |  |  | # because the Simulator target is added for some cases even when Simulator has not | 
					
						
							|  |  |  | # been set up inside Qt versions/Toolchains | 
					
						
							|  |  |  | # this list can be used in __chooseTargets__() | 
					
						
							| 
									
										
										
										
											2012-10-09 14:02:18 +02:00
										 |  |  | def __createProjectOrFileSelectType__(category, template, fromWelcome = False, isProject=True): | 
					
						
							| 
									
										
										
										
											2012-09-18 12:48:40 +02:00
										 |  |  |     if fromWelcome: | 
					
						
							| 
									
										
										
										
											2015-07-27 16:14:08 +02:00
										 |  |  |         if isQt54Build: | 
					
						
							|  |  |  |             welcomePage = ":WelcomePageStyledBar.WelcomePage_QQuickView" | 
					
						
							|  |  |  |         else: | 
					
						
							|  |  |  |             welcomePage = ":Qt Creator.WelcomePage_QQuickWidget" | 
					
						
							|  |  |  |         mouseClick(waitForObject("{clip='false' container='%s' enabled='true' text='New Project' " | 
					
						
							|  |  |  |                                  "type='Button' unnamed='1' visible='true'}" % welcomePage), | 
					
						
							|  |  |  |                    5, 5, 0, Qt.LeftButton) | 
					
						
							| 
									
										
										
										
											2012-09-18 12:48:40 +02:00
										 |  |  |     else: | 
					
						
							|  |  |  |         invokeMenuItem("File", "New File or Project...") | 
					
						
							| 
									
										
										
										
											2014-09-17 15:06:39 +02:00
										 |  |  |     categoriesView = waitForObject(":New.templateCategoryView_QTreeView") | 
					
						
							| 
									
										
										
										
											2012-10-09 14:02:18 +02:00
										 |  |  |     if isProject: | 
					
						
							|  |  |  |         clickItem(categoriesView, "Projects." + category, 5, 5, 0, Qt.LeftButton) | 
					
						
							|  |  |  |     else: | 
					
						
							|  |  |  |         clickItem(categoriesView, "Files and Classes." + category, 5, 5, 0, Qt.LeftButton) | 
					
						
							| 
									
										
										
										
											2012-11-02 19:34:38 +01:00
										 |  |  |     templatesView = waitForObject("{name='templatesView' type='QListView'}") | 
					
						
							| 
									
										
										
										
											2011-11-01 13:56:37 +01:00
										 |  |  |     clickItem(templatesView, template, 5, 5, 0, Qt.LeftButton) | 
					
						
							| 
									
										
										
										
											2012-02-16 12:57:24 +01:00
										 |  |  |     text = waitForObject("{type='QTextBrowser' name='templateDescription' visible='1'}").plainText | 
					
						
							| 
									
										
										
										
											2012-11-02 19:34:38 +01:00
										 |  |  |     clickButton(waitForObject("{text='Choose...' type='QPushButton' unnamed='1' visible='1'}")) | 
					
						
							| 
									
										
										
										
											2013-07-18 17:34:27 +02:00
										 |  |  |     return __getSupportedPlatforms__(str(text), template)[0] | 
					
						
							| 
									
										
										
										
											2011-11-01 13:56:37 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-04-24 16:50:29 +02:00
										 |  |  | def __createProjectSetNameAndPath__(path, projectName = None, checks = True, libType = None): | 
					
						
							| 
									
										
										
										
											2014-02-14 17:07:48 +01:00
										 |  |  |     directoryEdit = waitForObject("{type='Utils::FancyLineEdit' unnamed='1' visible='1' " | 
					
						
							|  |  |  |                                   "toolTip?='Full path: *'}") | 
					
						
							| 
									
										
										
										
											2011-10-28 21:42:12 +02:00
										 |  |  |     replaceEditorContent(directoryEdit, path) | 
					
						
							|  |  |  |     projectNameEdit = waitForObject("{name='nameLineEdit' visible='1' " | 
					
						
							| 
									
										
										
										
											2015-05-18 19:05:49 +02:00
										 |  |  |                                     "type='Utils::FancyLineEdit'}") | 
					
						
							| 
									
										
										
										
											2011-10-28 21:42:12 +02:00
										 |  |  |     if projectName == None: | 
					
						
							|  |  |  |         projectName = projectNameEdit.text | 
					
						
							|  |  |  |     else: | 
					
						
							|  |  |  |         replaceEditorContent(projectNameEdit, projectName) | 
					
						
							|  |  |  |     if checks: | 
					
						
							|  |  |  |         stateLabel = findObject("{type='QLabel' name='stateLabel'}") | 
					
						
							|  |  |  |         labelCheck = stateLabel.text=="" and stateLabel.styleSheet == "" | 
					
						
							|  |  |  |         test.verify(labelCheck, "Project name and base directory without warning or error") | 
					
						
							|  |  |  |     # make sure this is not set as default location | 
					
						
							| 
									
										
										
										
											2011-11-08 13:20:24 +01:00
										 |  |  |     ensureChecked("{type='QCheckBox' name='projectsDirectoryCheckBox' visible='1'}", False) | 
					
						
							| 
									
										
										
										
											2014-04-24 16:50:29 +02:00
										 |  |  |     if libType != None: | 
					
						
							|  |  |  |         selectFromCombo(waitForObject("{leftWidget={text='Type' type='QLabel' unnamed='1' " | 
					
						
							|  |  |  |                                       "visible='1'} type='QComboBox' unnamed='1' visible='1'}"), | 
					
						
							|  |  |  |                         LibType.getStringForLib(libType)) | 
					
						
							| 
									
										
										
										
											2011-10-28 21:42:12 +02:00
										 |  |  |     clickButton(waitForObject(":Next_QPushButton")) | 
					
						
							| 
									
										
										
										
											2011-11-09 16:40:35 +01:00
										 |  |  |     return str(projectName) | 
					
						
							| 
									
										
										
										
											2011-10-28 21:42:12 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-06-19 14:25:55 +02:00
										 |  |  | def __createProjectHandleQtQuickSelection__(minimumQtVersion): | 
					
						
							|  |  |  |     comboBox = waitForObject("{buddy=':Minimal required Qt version:_QLabel' name='QtVersion' " | 
					
						
							|  |  |  |                              "type='Utils::TextFieldComboBox' visible='1'}") | 
					
						
							| 
									
										
										
										
											2014-05-15 13:43:57 +02:00
										 |  |  |     try: | 
					
						
							| 
									
										
										
										
											2015-06-19 14:25:55 +02:00
										 |  |  |         selectFromCombo(comboBox, "Qt %s" % minimumQtVersion) | 
					
						
							| 
									
										
										
										
											2014-05-15 13:43:57 +02:00
										 |  |  |     except: | 
					
						
							|  |  |  |         t,v = sys.exc_info()[:2] | 
					
						
							| 
									
										
										
										
											2015-06-19 14:25:55 +02:00
										 |  |  |         test.fatal("Exception while trying to select Qt version", "%s (%s)" % (str(t), str(v))) | 
					
						
							| 
									
										
										
										
											2013-11-01 15:39:00 +01:00
										 |  |  |     clickButton(waitForObject(":Next_QPushButton")) | 
					
						
							| 
									
										
										
										
											2015-06-19 14:25:55 +02:00
										 |  |  |     return minimumQtVersion | 
					
						
							| 
									
										
										
										
											2013-11-01 15:39:00 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-01-17 15:39:57 +01:00
										 |  |  | # Selects the Qt versions for a project | 
					
						
							|  |  |  | # param checks turns tests in the function on if set to True | 
					
						
							| 
									
										
										
										
											2012-02-16 12:57:24 +01:00
										 |  |  | # param available a list holding the available targets | 
					
						
							| 
									
										
										
										
											2012-06-27 19:12:18 +02:00
										 |  |  | def __selectQtVersionDesktop__(checks, available=None): | 
					
						
							| 
									
										
										
										
											2013-04-05 16:58:06 +02:00
										 |  |  |     checkedTargets = __chooseTargets__(Targets.desktopTargetClasses(), available) | 
					
						
							| 
									
										
										
										
											2012-06-27 19:12:18 +02:00
										 |  |  |     if checks: | 
					
						
							| 
									
										
										
										
											2014-03-19 09:16:53 +01:00
										 |  |  |         for target in checkedTargets: | 
					
						
							|  |  |  |             detailsWidget = waitForObject("{type='Utils::DetailsWidget' unnamed='1' visible='1' " | 
					
						
							|  |  |  |                                           "summaryText='%s'}" % Targets.getStringForTarget(target)) | 
					
						
							|  |  |  |             detailsButton = getChildByClass(detailsWidget, "Utils::DetailsButton") | 
					
						
							|  |  |  |             if test.verify(detailsButton != None, "Verifying if 'Details' button could be found"): | 
					
						
							|  |  |  |                 clickButton(detailsButton) | 
					
						
							|  |  |  |                 cbObject = ("{type='QCheckBox' text='%s' unnamed='1' visible='1' " | 
					
						
							|  |  |  |                             "container=%s}") | 
					
						
							|  |  |  |                 verifyChecked(cbObject % ("Debug", objectMap.realName(detailsWidget))) | 
					
						
							|  |  |  |                 verifyChecked(cbObject % ("Release", objectMap.realName(detailsWidget))) | 
					
						
							|  |  |  |                 clickButton(detailsButton) | 
					
						
							| 
									
										
										
										
											2011-12-13 19:46:10 +01:00
										 |  |  |     clickButton(waitForObject(":Next_QPushButton")) | 
					
						
							| 
									
										
										
										
											2013-01-18 16:31:48 +01:00
										 |  |  |     return checkedTargets | 
					
						
							| 
									
										
										
										
											2011-12-13 19:46:10 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-08-31 17:27:11 +02:00
										 |  |  | def __createProjectHandleLastPage__(expectedFiles=[], addToVersionControl="<None>", addToProject=None): | 
					
						
							|  |  |  |     if len(expectedFiles): | 
					
						
							| 
									
										
										
										
											2013-12-13 15:59:06 +01:00
										 |  |  |         summary = waitForObject("{name='filesLabel' text?='<qt>Files to be added in<pre>*</pre>' " | 
					
						
							|  |  |  |                                 "type='QLabel' visible='1'}").text | 
					
						
							|  |  |  |         verifyItemOrder(expectedFiles, summary) | 
					
						
							|  |  |  |     if addToProject: | 
					
						
							|  |  |  |         selectFromCombo(":projectComboBox_QComboBox", addToProject) | 
					
						
							|  |  |  |     selectFromCombo(":addToVersionControlComboBox_QComboBox", addToVersionControl) | 
					
						
							| 
									
										
										
										
											2012-11-02 19:34:38 +01:00
										 |  |  |     clickButton(waitForObject("{type='QPushButton' text~='(Finish|Done)' visible='1'}")) | 
					
						
							| 
									
										
										
										
											2011-10-14 16:29:46 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-12-13 19:46:10 +01:00
										 |  |  | def __verifyFileCreation__(path, expectedFiles): | 
					
						
							|  |  |  |     for filename in expectedFiles: | 
					
						
							|  |  |  |         if filename != path: | 
					
						
							|  |  |  |             filename = os.path.join(path, filename) | 
					
						
							|  |  |  |         test.verify(os.path.exists(filename), "Checking if '" + filename + "' was created") | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-11-21 14:23:33 +01:00
										 |  |  | def __modifyAvailableTargets__(available, requiredQt, asStrings=False): | 
					
						
							|  |  |  |     threeDigits = re.compile("\d{3}") | 
					
						
							|  |  |  |     requiredQtVersion = requiredQt.replace(".", "") + "0" | 
					
						
							|  |  |  |     tmp = list(available) # we need a deep copy | 
					
						
							|  |  |  |     for currentItem in tmp: | 
					
						
							|  |  |  |         if asStrings: | 
					
						
							|  |  |  |             item = currentItem | 
					
						
							|  |  |  |         else: | 
					
						
							|  |  |  |             item = Targets.getStringForTarget(currentItem) | 
					
						
							|  |  |  |         found = threeDigits.search(item) | 
					
						
							|  |  |  |         if found: | 
					
						
							|  |  |  |             if found.group(0) < requiredQtVersion: | 
					
						
							|  |  |  |                 # Quick 1.1 supports 4.7.4 only for running, debugging is unsupported | 
					
						
							|  |  |  |                 # so the least required version is 4.8, but 4.7.4 will be still listed | 
					
						
							|  |  |  |                 if not (requiredQtVersion == "480" and found.group(0) == "474"): | 
					
						
							|  |  |  |                     available.remove(currentItem) | 
					
						
							|  |  |  |             if requiredQtVersion > "480": | 
					
						
							|  |  |  |                 toBeRemoved = [Targets.EMBEDDED_LINUX, Targets.SIMULATOR] | 
					
						
							|  |  |  |                 if asStrings: | 
					
						
							|  |  |  |                     toBeRemoved = Targets.getTargetsAsStrings(toBeRemoved) | 
					
						
							|  |  |  |                 for t in toBeRemoved: | 
					
						
							|  |  |  |                     if t in available: | 
					
						
							|  |  |  |                         available.remove(t) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-01-17 15:39:57 +01:00
										 |  |  | # Creates a Qt GUI project | 
					
						
							|  |  |  | # param path specifies where to create the project | 
					
						
							|  |  |  | # param projectName is the name for the new project | 
					
						
							|  |  |  | # param checks turns tests in the function on if set to True | 
					
						
							| 
									
										
										
										
											2013-12-13 15:59:06 +01:00
										 |  |  | def createProject_Qt_GUI(path, projectName, checks = True, addToVersionControl = "<None>"): | 
					
						
							| 
									
										
										
										
											2013-10-23 18:04:41 +02:00
										 |  |  |     template = "Qt Widgets Application" | 
					
						
							| 
									
										
										
										
											2014-09-17 15:06:39 +02:00
										 |  |  |     available = __createProjectOrFileSelectType__("  Application", template) | 
					
						
							| 
									
										
										
										
											2011-11-01 15:58:45 +01:00
										 |  |  |     __createProjectSetNameAndPath__(path, projectName, checks) | 
					
						
							| 
									
										
										
										
											2013-01-18 16:31:48 +01:00
										 |  |  |     checkedTargets = __selectQtVersionDesktop__(checks, available) | 
					
						
							| 
									
										
										
										
											2011-10-05 13:18:42 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  |     if checks: | 
					
						
							|  |  |  |         exp_filename = "mainwindow" | 
					
						
							|  |  |  |         h_file = exp_filename + ".h" | 
					
						
							|  |  |  |         cpp_file = exp_filename + ".cpp" | 
					
						
							|  |  |  |         ui_file = exp_filename + ".ui" | 
					
						
							|  |  |  |         pro_file = projectName + ".pro" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         waitFor("object.exists(':headerFileLineEdit_Utils::FileNameValidatingLineEdit')", 20000) | 
					
						
							|  |  |  |         waitFor("object.exists(':sourceFileLineEdit_Utils::FileNameValidatingLineEdit')", 20000) | 
					
						
							|  |  |  |         waitFor("object.exists(':formFileLineEdit_Utils::FileNameValidatingLineEdit')", 20000) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         test.compare(findObject(":headerFileLineEdit_Utils::FileNameValidatingLineEdit").text, h_file) | 
					
						
							|  |  |  |         test.compare(findObject(":sourceFileLineEdit_Utils::FileNameValidatingLineEdit").text, cpp_file) | 
					
						
							|  |  |  |         test.compare(findObject(":formFileLineEdit_Utils::FileNameValidatingLineEdit").text, ui_file) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-12-13 19:46:10 +01:00
										 |  |  |     clickButton(waitForObject(":Next_QPushButton")) | 
					
						
							| 
									
										
										
										
											2011-10-05 13:18:42 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-08-31 17:27:11 +02:00
										 |  |  |     expectedFiles = [] | 
					
						
							| 
									
										
										
										
											2011-10-05 13:18:42 +02:00
										 |  |  |     if checks: | 
					
						
							| 
									
										
										
										
											2011-12-13 19:46:10 +01:00
										 |  |  |         if platform.system() in ('Windows', 'Microsoft'): | 
					
						
							|  |  |  |             path = os.path.abspath(path) | 
					
						
							| 
									
										
										
										
											2011-12-13 13:54:14 +01:00
										 |  |  |         path = os.path.join(path, projectName) | 
					
						
							| 
									
										
										
										
											2012-03-09 17:17:34 +01:00
										 |  |  |         expectedFiles = [path] | 
					
						
							| 
									
										
										
										
											2012-04-05 19:19:01 +02:00
										 |  |  |         expectedFiles.extend(__sortFilenamesOSDependent__(["main.cpp", cpp_file, h_file, ui_file, pro_file])) | 
					
						
							| 
									
										
										
										
											2013-12-13 15:59:06 +01:00
										 |  |  |     __createProjectHandleLastPage__(expectedFiles, addToVersionControl) | 
					
						
							| 
									
										
										
										
											2011-10-05 13:18:42 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-04-25 19:08:55 +02:00
										 |  |  |     progressBarWait(20000) | 
					
						
							| 
									
										
										
										
											2014-05-19 12:20:57 +02:00
										 |  |  |     if checks: | 
					
						
							|  |  |  |         __verifyFileCreation__(path, expectedFiles) | 
					
						
							| 
									
										
										
										
											2013-01-18 16:31:48 +01:00
										 |  |  |     return checkedTargets | 
					
						
							| 
									
										
										
										
											2011-12-13 19:46:10 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-01-31 15:49:59 +01:00
										 |  |  | # Creates a Qt Console project | 
					
						
							|  |  |  | # param path specifies where to create the project | 
					
						
							|  |  |  | # param projectName is the name for the new project | 
					
						
							|  |  |  | # param checks turns tests in the function on if set to True | 
					
						
							| 
									
										
										
										
											2012-06-27 19:12:18 +02:00
										 |  |  | def createProject_Qt_Console(path, projectName, checks = True): | 
					
						
							| 
									
										
										
										
											2014-09-17 15:06:39 +02:00
										 |  |  |     available = __createProjectOrFileSelectType__("  Application", "Qt Console Application") | 
					
						
							| 
									
										
										
										
											2011-12-13 19:46:10 +01:00
										 |  |  |     __createProjectSetNameAndPath__(path, projectName, checks) | 
					
						
							| 
									
										
										
										
											2013-01-18 16:31:48 +01:00
										 |  |  |     checkedTargets = __selectQtVersionDesktop__(checks, available) | 
					
						
							| 
									
										
										
										
											2011-10-05 13:18:42 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-08-31 17:27:11 +02:00
										 |  |  |     expectedFiles = [] | 
					
						
							| 
									
										
										
										
											2011-12-13 19:46:10 +01:00
										 |  |  |     if checks: | 
					
						
							|  |  |  |         if platform.system() in ('Windows', 'Microsoft'): | 
					
						
							|  |  |  |             path = os.path.abspath(path) | 
					
						
							|  |  |  |         path = os.path.join(path, projectName) | 
					
						
							|  |  |  |         cpp_file = "main.cpp" | 
					
						
							|  |  |  |         pro_file = projectName + ".pro" | 
					
						
							| 
									
										
										
										
											2012-04-05 19:19:01 +02:00
										 |  |  |         expectedFiles = [path] | 
					
						
							|  |  |  |         expectedFiles.extend(__sortFilenamesOSDependent__([cpp_file, pro_file])) | 
					
						
							| 
									
										
										
										
											2011-12-13 19:46:10 +01:00
										 |  |  |     __createProjectHandleLastPage__(expectedFiles) | 
					
						
							| 
									
										
										
										
											2011-10-05 13:18:42 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-04-25 19:08:55 +02:00
										 |  |  |     progressBarWait(10000) | 
					
						
							| 
									
										
										
										
											2014-05-19 12:20:57 +02:00
										 |  |  |     if checks: | 
					
						
							|  |  |  |         __verifyFileCreation__(path, expectedFiles) | 
					
						
							| 
									
										
										
										
											2013-01-18 16:31:48 +01:00
										 |  |  |     return checkedTargets | 
					
						
							| 
									
										
										
										
											2011-10-07 15:05:55 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-11-01 15:39:00 +01:00
										 |  |  | def createNewQtQuickApplication(workingDir, projectName = None, | 
					
						
							| 
									
										
										
										
											2015-06-19 14:25:55 +02:00
										 |  |  |                                 targets=Targets.desktopTargetClasses(), minimumQtVersion="5.3", | 
					
						
							| 
									
										
										
										
											2015-06-24 12:27:01 +02:00
										 |  |  |                                 withControls = False, fromWelcome=False): | 
					
						
							|  |  |  |     if withControls: | 
					
						
							|  |  |  |         template = "Qt Quick Controls Application" | 
					
						
							|  |  |  |     else: | 
					
						
							|  |  |  |         template = "Qt Quick Application" | 
					
						
							|  |  |  |     available = __createProjectOrFileSelectType__("  Application", template, fromWelcome) | 
					
						
							| 
									
										
										
										
											2012-02-16 12:57:24 +01:00
										 |  |  |     projectName = __createProjectSetNameAndPath__(workingDir, projectName) | 
					
						
							| 
									
										
										
										
											2015-06-19 14:25:55 +02:00
										 |  |  |     requiredQt = __createProjectHandleQtQuickSelection__(minimumQtVersion) | 
					
						
							| 
									
										
										
										
											2013-11-21 14:23:33 +01:00
										 |  |  |     __modifyAvailableTargets__(available, requiredQt) | 
					
						
							| 
									
										
										
										
											2013-01-18 16:31:48 +01:00
										 |  |  |     checkedTargets = __chooseTargets__(targets, available) | 
					
						
							| 
									
										
										
										
											2011-10-07 15:05:55 +02:00
										 |  |  |     snooze(1) | 
					
						
							| 
									
										
										
										
											2015-06-24 12:27:01 +02:00
										 |  |  |     if len(checkedTargets): | 
					
						
							|  |  |  |         clickButton(waitForObject(":Next_QPushButton")) | 
					
						
							|  |  |  |         __createProjectHandleLastPage__() | 
					
						
							|  |  |  |         progressBarWait(10000) | 
					
						
							|  |  |  |     else: | 
					
						
							|  |  |  |         clickButton(waitForObject("{type='QPushButton' text='Cancel' visible='1'}")) | 
					
						
							| 
									
										
										
										
											2013-02-07 20:48:00 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-01-18 16:31:48 +01:00
										 |  |  |     return checkedTargets, projectName | 
					
						
							| 
									
										
										
										
											2011-10-13 14:29:51 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-06-24 12:27:01 +02:00
										 |  |  | def createNewQtQuickUI(workingDir, qtVersion = "5.3", withControls = False): | 
					
						
							|  |  |  |     if withControls: | 
					
						
							|  |  |  |         template = 'Qt Quick Controls UI' | 
					
						
							|  |  |  |     else: | 
					
						
							|  |  |  |         template = 'Qt Quick UI' | 
					
						
							| 
									
										
										
										
											2015-07-03 07:33:18 +02:00
										 |  |  |     __createProjectOrFileSelectType__("  Other Project", template) | 
					
						
							| 
									
										
										
										
											2011-10-13 14:29:51 +02:00
										 |  |  |     if workingDir == None: | 
					
						
							|  |  |  |         workingDir = tempDir() | 
					
						
							| 
									
										
										
										
											2011-11-29 16:00:18 +01:00
										 |  |  |     projectName = __createProjectSetNameAndPath__(workingDir) | 
					
						
							| 
									
										
										
										
											2015-06-24 12:27:01 +02:00
										 |  |  |     __createProjectHandleQtQuickSelection__(qtVersion) | 
					
						
							| 
									
										
										
										
											2011-11-01 15:58:45 +01:00
										 |  |  |     __createProjectHandleLastPage__() | 
					
						
							| 
									
										
										
										
											2015-06-24 12:27:01 +02:00
										 |  |  |     progressBarWait(10000) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-11-29 16:00:18 +01:00
										 |  |  |     return projectName | 
					
						
							| 
									
										
										
										
											2011-10-13 14:29:51 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-08-26 11:30:54 +02:00
										 |  |  | def createNewQmlExtension(workingDir, targets=Targets.DESKTOP_474_GCC, qtQuickVersion=1): | 
					
						
							| 
									
										
										
										
											2014-09-17 15:06:39 +02:00
										 |  |  |     available = __createProjectOrFileSelectType__("  Library", "Qt Quick %d Extension Plugin" | 
					
						
							| 
									
										
										
										
											2013-08-26 11:30:54 +02:00
										 |  |  |                                                   % qtQuickVersion) | 
					
						
							| 
									
										
										
										
											2011-10-13 14:29:51 +02:00
										 |  |  |     if workingDir == None: | 
					
						
							|  |  |  |         workingDir = tempDir() | 
					
						
							| 
									
										
										
										
											2011-11-01 15:58:45 +01:00
										 |  |  |     __createProjectSetNameAndPath__(workingDir) | 
					
						
							| 
									
										
										
										
											2013-08-26 11:30:54 +02:00
										 |  |  |     checkedTargets = __chooseTargets__(targets, available) | 
					
						
							| 
									
										
										
										
											2011-10-28 21:42:12 +02:00
										 |  |  |     nextButton = waitForObject(":Next_QPushButton") | 
					
						
							| 
									
										
										
										
											2011-10-13 14:29:51 +02:00
										 |  |  |     clickButton(nextButton) | 
					
						
							| 
									
										
										
										
											2013-05-16 16:58:25 +02:00
										 |  |  |     nameLineEd = waitForObject("{buddy={type='QLabel' text='Object class-name:' unnamed='1' visible='1'} " | 
					
						
							| 
									
										
										
										
											2012-11-02 19:34:38 +01:00
										 |  |  |                                "type='QLineEdit' unnamed='1' visible='1'}") | 
					
						
							| 
									
										
										
										
											2011-10-13 14:29:51 +02:00
										 |  |  |     replaceEditorContent(nameLineEd, "TestItem") | 
					
						
							|  |  |  |     uriLineEd = waitForObject("{buddy={type='QLabel' text='URI:' unnamed='1' visible='1'} " | 
					
						
							| 
									
										
										
										
											2012-11-02 19:34:38 +01:00
										 |  |  |                               "type='QLineEdit' unnamed='1' visible='1'}") | 
					
						
							| 
									
										
										
										
											2012-10-09 12:47:18 +02:00
										 |  |  |     replaceEditorContent(uriLineEd, "org.qt-project.test.qmlcomponents") | 
					
						
							| 
									
										
										
										
											2011-10-13 14:29:51 +02:00
										 |  |  |     clickButton(nextButton) | 
					
						
							| 
									
										
										
										
											2011-11-01 15:58:45 +01:00
										 |  |  |     __createProjectHandleLastPage__() | 
					
						
							| 
									
										
										
										
											2013-01-18 16:31:48 +01:00
										 |  |  |     return checkedTargets | 
					
						
							| 
									
										
										
										
											2011-11-29 16:00:18 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-08-22 16:26:44 +02:00
										 |  |  | def createEmptyQtProject(workingDir=None, projectName=None, targets=Targets.desktopTargetClasses()): | 
					
						
							| 
									
										
										
										
											2014-11-04 10:13:35 +01:00
										 |  |  |     __createProjectOrFileSelectType__("  Other Project", "Empty qmake Project") | 
					
						
							| 
									
										
										
										
											2013-08-22 16:26:44 +02:00
										 |  |  |     if workingDir == None: | 
					
						
							|  |  |  |         workingDir = tempDir() | 
					
						
							|  |  |  |     projectName = __createProjectSetNameAndPath__(workingDir, projectName) | 
					
						
							|  |  |  |     checkedTargets = __chooseTargets__(targets) | 
					
						
							|  |  |  |     snooze(1) | 
					
						
							|  |  |  |     clickButton(waitForObject(":Next_QPushButton")) | 
					
						
							|  |  |  |     __createProjectHandleLastPage__() | 
					
						
							|  |  |  |     return projectName, checkedTargets | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | def createNewNonQtProject(workingDir=None, projectName=None, target=Targets.DESKTOP_474_GCC, | 
					
						
							| 
									
										
										
										
											2015-06-26 15:03:10 +02:00
										 |  |  |                           plainC=False, cmake=False, qbs=False): | 
					
						
							| 
									
										
										
										
											2013-08-22 16:26:44 +02:00
										 |  |  |     if plainC: | 
					
						
							| 
									
										
										
										
											2015-06-26 15:03:10 +02:00
										 |  |  |         template = "Plain C Application" | 
					
						
							| 
									
										
										
										
											2013-08-22 16:26:44 +02:00
										 |  |  |     else: | 
					
						
							| 
									
										
										
										
											2015-06-26 15:03:10 +02:00
										 |  |  |         template = "Plain C++ Application" | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-08-22 16:26:44 +02:00
										 |  |  |     available = __createProjectOrFileSelectType__("  Non-Qt Project", template) | 
					
						
							|  |  |  |     if workingDir == None: | 
					
						
							|  |  |  |         workingDir = tempDir() | 
					
						
							|  |  |  |     projectName = __createProjectSetNameAndPath__(workingDir, projectName) | 
					
						
							| 
									
										
										
										
											2015-06-26 15:03:10 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  |     buildSystem = "qmake" | 
					
						
							|  |  |  |     if qbs: | 
					
						
							|  |  |  |         buildSystem = "Qbs" | 
					
						
							|  |  |  |         if cmake: | 
					
						
							|  |  |  |             test.warning("Unsupported combination, at least one of parameters cmake and qbs must " | 
					
						
							|  |  |  |                          "be False, ignoring the value of cmake") | 
					
						
							|  |  |  |     elif cmake: | 
					
						
							|  |  |  |         buildSystem = "CMake" | 
					
						
							|  |  |  |     selectFromCombo("{name='BuildSystem' type='Utils::TextFieldComboBox' visible='1'}", buildSystem) | 
					
						
							|  |  |  |     clickButton(waitForObject(":Next_QPushButton")) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     __chooseTargets__(target, availableTargets=available) | 
					
						
							|  |  |  |     clickButton(waitForObject(":Next_QPushButton")) | 
					
						
							|  |  |  |     __createProjectHandleLastPage__() | 
					
						
							| 
									
										
										
										
											2013-08-22 16:26:44 +02:00
										 |  |  |     return projectName | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-04-24 16:50:29 +02:00
										 |  |  | def createNewCPPLib(projectDir = None, projectName = None, className = None, fromWelcome = False, | 
					
						
							|  |  |  |                     target = Targets.DESKTOP_474_GCC, isStatic = False, modules = ["QtCore"]): | 
					
						
							| 
									
										
										
										
											2014-09-17 15:06:39 +02:00
										 |  |  |     available = __createProjectOrFileSelectType__("  Library", "C++ Library", fromWelcome, True) | 
					
						
							| 
									
										
										
										
											2014-04-24 16:50:29 +02:00
										 |  |  |     if isStatic: | 
					
						
							|  |  |  |         libType = LibType.STATIC | 
					
						
							|  |  |  |     else: | 
					
						
							|  |  |  |         libType = LibType.SHARED | 
					
						
							|  |  |  |     if projectDir == None: | 
					
						
							|  |  |  |         projectDir = tempDir() | 
					
						
							|  |  |  |     projectName = __createProjectSetNameAndPath__(projectDir, projectName, False, libType) | 
					
						
							|  |  |  |     checkedTargets = __chooseTargets__(target, available) | 
					
						
							|  |  |  |     snooze(1) | 
					
						
							|  |  |  |     clickButton(waitForObject(":Next_QPushButton")) | 
					
						
							|  |  |  |     __createProjectHandleModuleSelection__(modules) | 
					
						
							|  |  |  |     className = __createProjectHandleClassInformation__(className) | 
					
						
							|  |  |  |     __createProjectHandleLastPage__() | 
					
						
							|  |  |  |     return checkedTargets, projectName, className | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | def createNewQtPlugin(projectDir=None, projectName=None, className=None, fromWelcome=False, | 
					
						
							|  |  |  |                       target=Targets.DESKTOP_474_GCC, baseClass="QGenericPlugin"): | 
					
						
							| 
									
										
										
										
											2014-09-17 15:06:39 +02:00
										 |  |  |     available = __createProjectOrFileSelectType__("  Library", "C++ Library", fromWelcome, True) | 
					
						
							| 
									
										
										
										
											2014-04-24 16:50:29 +02:00
										 |  |  |     if projectDir == None: | 
					
						
							|  |  |  |         projectDir = tempDir() | 
					
						
							|  |  |  |     projectName = __createProjectSetNameAndPath__(projectDir, projectName, False, LibType.QT_PLUGIN) | 
					
						
							|  |  |  |     checkedTargets = __chooseTargets__(target, available) | 
					
						
							|  |  |  |     snooze(1) | 
					
						
							|  |  |  |     clickButton(waitForObject(":Next_QPushButton")) | 
					
						
							|  |  |  |     className = __createProjectHandleClassInformation__(className, baseClass) | 
					
						
							|  |  |  |     __createProjectHandleLastPage__() | 
					
						
							|  |  |  |     return checkedTargets, projectName, className | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-04-05 16:58:06 +02:00
										 |  |  | # parameter target can be an OR'd value of Targets | 
					
						
							| 
									
										
										
										
											2013-08-22 16:26:44 +02:00
										 |  |  | # parameter availableTargets should be the result of __createProjectOrFileSelectType__() | 
					
						
							| 
									
										
										
										
											2012-02-16 12:57:24 +01:00
										 |  |  | #           or use None as a fallback | 
					
						
							| 
									
										
										
										
											2015-10-26 18:26:50 +01:00
										 |  |  | # parameter additionalFunc function to be executed inside the detailed view of each chosen kit | 
					
						
							|  |  |  | #           if present, 'Details' button will be clicked, function will be executed, | 
					
						
							|  |  |  | #           'Details' button will be clicked again | 
					
						
							|  |  |  | def __chooseTargets__(targets=Targets.DESKTOP_474_GCC, availableTargets=None, additionalFunc=None): | 
					
						
							| 
									
										
										
										
											2012-02-16 12:57:24 +01:00
										 |  |  |     if availableTargets != None: | 
					
						
							|  |  |  |         available = availableTargets | 
					
						
							|  |  |  |     else: | 
					
						
							|  |  |  |         # following targets depend on the build environment - added for further/later tests | 
					
						
							| 
									
										
										
										
											2015-03-31 15:48:03 +02:00
										 |  |  |         available = list(Targets.ALL_TARGETS) | 
					
						
							| 
									
										
										
										
											2012-02-16 12:57:24 +01:00
										 |  |  |         if platform.system() in ('Windows', 'Microsoft'): | 
					
						
							| 
									
										
										
										
											2013-04-05 16:58:06 +02:00
										 |  |  |             available.remove(Targets.EMBEDDED_LINUX) | 
					
						
							| 
									
										
										
										
											2015-03-19 17:22:12 +01:00
										 |  |  |         elif platform.system() == 'Darwin': | 
					
						
							|  |  |  |             available.remove(Targets.DESKTOP_541_GCC) | 
					
						
							| 
									
										
										
										
											2013-01-18 16:31:48 +01:00
										 |  |  |     checkedTargets = [] | 
					
						
							| 
									
										
										
										
											2011-11-29 16:00:18 +01:00
										 |  |  |     for current in available: | 
					
						
							|  |  |  |         mustCheck = targets & current == current | 
					
						
							|  |  |  |         try: | 
					
						
							| 
									
										
										
										
											2013-04-05 16:58:06 +02:00
										 |  |  |             ensureChecked("{type='QCheckBox' text='%s' visible='1'}" % Targets.getStringForTarget(current), | 
					
						
							| 
									
										
										
										
											2012-07-13 11:37:56 +02:00
										 |  |  |                           mustCheck, 3000) | 
					
						
							| 
									
										
										
										
											2015-10-26 18:26:50 +01:00
										 |  |  |             if mustCheck: | 
					
						
							| 
									
										
										
										
											2013-01-18 16:31:48 +01:00
										 |  |  |                 checkedTargets.append(current) | 
					
						
							| 
									
										
										
										
											2015-10-26 18:26:50 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  |                 # perform additional function on detailed kits view | 
					
						
							|  |  |  |                 if additionalFunc: | 
					
						
							|  |  |  |                     detailsWidget = waitForObject("{type='Utils::DetailsWidget' unnamed='1' " | 
					
						
							|  |  |  |                                                   "window=':Qt Creator_Core::Internal::MainWindow' " | 
					
						
							|  |  |  |                                                   "toolTip?='<html><body><h3>%s</h3>*' visible='1'}" | 
					
						
							|  |  |  |                                                   % Targets.getStringForTarget(current)) | 
					
						
							|  |  |  |                     detailsButton = getChildByClass(detailsWidget, "Utils::DetailsButton") | 
					
						
							|  |  |  |                     clickButton(detailsButton) | 
					
						
							|  |  |  |                     additionalFunc() | 
					
						
							|  |  |  |                     clickButton(detailsButton) | 
					
						
							| 
									
										
										
										
											2011-11-29 16:00:18 +01:00
										 |  |  |         except LookupError: | 
					
						
							|  |  |  |             if mustCheck: | 
					
						
							| 
									
										
										
										
											2013-04-05 16:58:06 +02:00
										 |  |  |                 test.fail("Failed to check target '%s'." % Targets.getStringForTarget(current)) | 
					
						
							| 
									
										
										
										
											2012-01-30 17:03:41 +01:00
										 |  |  |             else: | 
					
						
							| 
									
										
										
										
											2012-02-16 12:57:24 +01:00
										 |  |  |                 # Simulator has been added without knowing whether configured or not - so skip warning here? | 
					
						
							| 
									
										
										
										
											2013-04-12 18:10:10 +02:00
										 |  |  |                 if current != Targets.SIMULATOR: | 
					
						
							| 
									
										
										
										
											2013-04-05 16:58:06 +02:00
										 |  |  |                     test.warning("Target '%s' is not set up correctly." % Targets.getStringForTarget(current)) | 
					
						
							| 
									
										
										
										
											2013-01-18 16:31:48 +01:00
										 |  |  |     return checkedTargets | 
					
						
							| 
									
										
										
										
											2011-11-29 16:00:18 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-04-24 16:50:29 +02:00
										 |  |  | def __createProjectHandleModuleSelection__(modules): | 
					
						
							|  |  |  |     modulesPage = waitForObject("{type='QmakeProjectManager::Internal::ModulesPage' unnamed='1' " | 
					
						
							|  |  |  |                                 "visible='1'}") | 
					
						
							|  |  |  |     chckBoxes = filter(lambda x: className(x) == 'QCheckBox', object.children(modulesPage)) | 
					
						
							|  |  |  |     chckBoxLabels = set([str(cb.text) for cb in chckBoxes]) | 
					
						
							|  |  |  |     if not set(modules).issubset(chckBoxLabels): | 
					
						
							|  |  |  |         test.fatal("You want to check module(s) not available at 'Module Selection' page.", | 
					
						
							|  |  |  |                    "Not available: %s" % str(set(modules).difference(chckBoxLabels))) | 
					
						
							|  |  |  |     for checkBox in chckBoxes: | 
					
						
							|  |  |  |         test.log("(Un)Checking module checkbox '%s'" % str(checkBox.text)) | 
					
						
							|  |  |  |         ensureChecked(checkBox, str(checkBox.text) in modules, 3000) | 
					
						
							|  |  |  |     clickButton(waitForObject(":Next_QPushButton")) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | def __createProjectHandleClassInformation__(className, baseClass=None): | 
					
						
							|  |  |  |     if baseClass: | 
					
						
							|  |  |  |         selectFromCombo("{name='baseClassComboBox' type='QComboBox' visible='1'}", baseClass) | 
					
						
							|  |  |  |     classLineEd = waitForObject("{name='classLineEdit' type='Utils::ClassNameValidatingLineEdit' " | 
					
						
							|  |  |  |                                 "visible='1'}") | 
					
						
							|  |  |  |     result = str(classLineEd.text) | 
					
						
							|  |  |  |     if className: | 
					
						
							|  |  |  |         replaceEditorContent(classLineEd, className) | 
					
						
							|  |  |  |     try: | 
					
						
							|  |  |  |         waitForObject("{text='The class name contains invalid characters.' type='QLabel' " | 
					
						
							|  |  |  |                      "unnamed='1' visible='1'}", 1000) | 
					
						
							|  |  |  |         test.fatal("Class name contains invalid characters - using default.") | 
					
						
							|  |  |  |         replaceEditorContent(classLineEd, result) | 
					
						
							|  |  |  |     except: | 
					
						
							|  |  |  |         result = className | 
					
						
							|  |  |  |     clickButton(waitForObject(":Next_QPushButton")) | 
					
						
							|  |  |  |     return result | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-01-20 12:48:35 +01:00
										 |  |  | def waitForProcessRunning(running=True): | 
					
						
							| 
									
										
										
										
											2014-01-06 16:13:17 +01:00
										 |  |  |     outputButton = waitForObject(":Qt Creator_AppOutput_Core::Internal::OutputPaneToggleButton") | 
					
						
							|  |  |  |     if not waitFor("outputButton.checked", 10000): | 
					
						
							|  |  |  |         ensureChecked(outputButton) | 
					
						
							|  |  |  |     waitFor("object.exists(':Qt Creator.ReRun_QToolButton')", 20000) | 
					
						
							|  |  |  |     reRunButton = findObject(":Qt Creator.ReRun_QToolButton") | 
					
						
							|  |  |  |     waitFor("object.exists(':Qt Creator.Stop_QToolButton')", 20000) | 
					
						
							|  |  |  |     stopButton = findObject(":Qt Creator.Stop_QToolButton") | 
					
						
							| 
									
										
										
										
											2014-01-20 12:48:35 +01:00
										 |  |  |     return waitFor("(reRunButton.enabled != running) and (stopButton.enabled == running)", 10000) | 
					
						
							| 
									
										
										
										
											2014-01-06 16:13:17 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-11-29 16:00:18 +01:00
										 |  |  | # run and close an application | 
					
						
							|  |  |  | # withHookInto - if set to True the function tries to attach to the sub-process instead of simply pressing Stop inside Creator | 
					
						
							|  |  |  | # executable - must be defined when using hook-into | 
					
						
							|  |  |  | # port - must be defined when using hook-into | 
					
						
							|  |  |  | # function - can be a string holding a function name or a reference to the function itself - this function will be called on | 
					
						
							|  |  |  | # the sub-process when hooking-into has been successful - if its missing simply closing the Qt Quick app will be done | 
					
						
							|  |  |  | # sType the SubprocessType - is nearly mandatory - except when using the function parameter | 
					
						
							|  |  |  | # userDefinedType - if you set sType to SubprocessType.USER_DEFINED you must(!) specify the WindowType for hooking into | 
					
						
							|  |  |  | # by yourself (or use the function parameter) | 
					
						
							|  |  |  | # ATTENTION! Make sure this function won't fail and the sub-process will end when the function returns | 
					
						
							| 
									
										
										
										
											2014-01-23 16:29:05 +01:00
										 |  |  | # returns None if the build failed, False if the subprocess did not start, and True otherwise | 
					
						
							| 
									
										
										
										
											2014-02-14 13:04:07 +01:00
										 |  |  | def runAndCloseApp(withHookInto=False, executable=None, port=None, function=None, sType=None, userDefinedType=None, quickVersion="1.1"): | 
					
						
							| 
									
										
										
										
											2013-04-23 12:39:05 +02:00
										 |  |  |     runButton = waitForObject(":*Qt Creator.Run_Core::Internal::FancyToolButton") | 
					
						
							| 
									
										
										
										
											2011-11-29 16:00:18 +01:00
										 |  |  |     clickButton(runButton) | 
					
						
							|  |  |  |     if sType != SubprocessType.QT_QUICK_UI: | 
					
						
							| 
									
										
										
										
											2014-01-21 17:29:35 +01:00
										 |  |  |         waitForCompile(300000) | 
					
						
							| 
									
										
										
										
											2011-11-29 16:00:18 +01:00
										 |  |  |         buildSucceeded = checkLastBuild() | 
					
						
							| 
									
										
										
										
											2014-01-06 16:13:17 +01:00
										 |  |  |         ensureChecked(waitForObject(":Qt Creator_AppOutput_Core::Internal::OutputPaneToggleButton")) | 
					
						
							| 
									
										
										
										
											2011-11-29 16:00:18 +01:00
										 |  |  |         if not buildSucceeded: | 
					
						
							|  |  |  |             test.fatal("Build inside run wasn't successful - leaving test") | 
					
						
							| 
									
										
										
										
											2014-01-23 16:29:05 +01:00
										 |  |  |             return None | 
					
						
							| 
									
										
										
										
											2014-01-20 12:48:35 +01:00
										 |  |  |     if not waitForProcessRunning(): | 
					
						
							| 
									
										
										
										
											2011-11-29 16:00:18 +01:00
										 |  |  |         test.fatal("Couldn't start application - leaving test") | 
					
						
							|  |  |  |         return False | 
					
						
							| 
									
										
										
										
											2012-04-02 13:33:10 +02:00
										 |  |  |     if sType == SubprocessType.QT_QUICK_UI and os.getenv("SYSTEST_QMLVIEWER_NO_HOOK_INTO", "0") == "1": | 
					
						
							| 
									
										
										
										
											2012-01-23 11:19:01 +01:00
										 |  |  |         withHookInto = False | 
					
						
							| 
									
										
										
										
											2014-01-22 09:39:04 +01:00
										 |  |  |     if withHookInto and not validType(sType, userDefinedType, quickVersion): | 
					
						
							| 
									
										
										
										
											2011-11-29 16:00:18 +01:00
										 |  |  |         if function != None: | 
					
						
							|  |  |  |             test.warning("You did not provide a valid value for the SubprocessType value - sType, but you have " | 
					
						
							|  |  |  |                          "provided a function to execute on the subprocess. Please ensure that your function " | 
					
						
							|  |  |  |                          "closes the subprocess before exiting, or this test will not complete.") | 
					
						
							|  |  |  |         else: | 
					
						
							|  |  |  |             test.warning("You did not provide a valid value for the SubprocessType value - sType, nor a " | 
					
						
							|  |  |  |                          "function to execute on the subprocess. Falling back to pushing the STOP button " | 
					
						
							|  |  |  |                          "inside creator to terminate execution of the subprocess.") | 
					
						
							|  |  |  |             withHookInto = False | 
					
						
							|  |  |  |     if withHookInto and not executable in ("", None): | 
					
						
							| 
									
										
										
										
											2014-01-22 09:39:04 +01:00
										 |  |  |         __closeSubprocessByHookingInto__(executable, port, function, sType, userDefinedType, quickVersion) | 
					
						
							| 
									
										
										
										
											2011-11-29 16:00:18 +01:00
										 |  |  |     else: | 
					
						
							|  |  |  |         __closeSubprocessByPushingStop__(sType) | 
					
						
							|  |  |  |     return True | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-01-22 09:39:04 +01:00
										 |  |  | def validType(sType, userDef, quickVersion): | 
					
						
							| 
									
										
										
										
											2011-11-29 16:00:18 +01:00
										 |  |  |     if sType == None: | 
					
						
							|  |  |  |         return False | 
					
						
							| 
									
										
										
										
											2014-01-22 09:39:04 +01:00
										 |  |  |     ty = SubprocessType.getWindowType(sType, quickVersion) | 
					
						
							| 
									
										
										
										
											2011-11-29 16:00:18 +01:00
										 |  |  |     return ty != None and not (ty == "user-defined" and (userDef == None or userDef.strip() == "")) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | def __closeSubprocessByPushingStop__(sType): | 
					
						
							| 
									
										
										
										
											2011-12-12 13:58:18 +01:00
										 |  |  |     ensureChecked(":Qt Creator_AppOutput_Core::Internal::OutputPaneToggleButton") | 
					
						
							| 
									
										
										
										
											2012-04-05 18:35:59 +02:00
										 |  |  |     try: | 
					
						
							|  |  |  |         waitForObject(":Qt Creator.Stop_QToolButton", 5000) | 
					
						
							|  |  |  |     except: | 
					
						
							|  |  |  |         pass | 
					
						
							| 
									
										
										
										
											2011-11-29 16:00:18 +01:00
										 |  |  |     playButton = verifyEnabled(":Qt Creator.ReRun_QToolButton", False) | 
					
						
							|  |  |  |     stopButton = verifyEnabled(":Qt Creator.Stop_QToolButton") | 
					
						
							|  |  |  |     if stopButton.enabled: | 
					
						
							|  |  |  |         clickButton(stopButton) | 
					
						
							| 
									
										
										
										
											2014-01-08 10:48:00 +01:00
										 |  |  |         test.verify(waitFor("playButton.enabled", 5000), "Play button should be enabled") | 
					
						
							|  |  |  |         test.compare(stopButton.enabled, False, "Stop button should be disabled") | 
					
						
							| 
									
										
										
										
											2011-11-29 16:00:18 +01:00
										 |  |  |         if sType == SubprocessType.QT_QUICK_UI and platform.system() == "Darwin": | 
					
						
							| 
									
										
										
										
											2012-02-14 12:24:14 +01:00
										 |  |  |             waitFor("stopButton.enabled==False") | 
					
						
							| 
									
										
										
										
											2011-11-29 16:00:18 +01:00
										 |  |  |             snooze(2) | 
					
						
							|  |  |  |             nativeType("<Escape>") | 
					
						
							|  |  |  |     else: | 
					
						
							|  |  |  |         test.fatal("Subprocess does not seem to have been started.") | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-01-22 09:39:04 +01:00
										 |  |  | def __closeSubprocessByHookingInto__(executable, port, function, sType, userDefType, quickVersion): | 
					
						
							| 
									
										
										
										
											2011-12-12 13:58:18 +01:00
										 |  |  |     ensureChecked(":Qt Creator_AppOutput_Core::Internal::OutputPaneToggleButton") | 
					
						
							| 
									
										
										
										
											2012-11-02 19:34:38 +01:00
										 |  |  |     output = waitForObject("{type='Core::OutputWindow' visible='1' windowTitle='Application Output Window'}") | 
					
						
							| 
									
										
										
										
											2011-11-29 16:00:18 +01:00
										 |  |  |     if port == None: | 
					
						
							|  |  |  |         test.warning("I need a port number or attaching might fail.") | 
					
						
							|  |  |  |     else: | 
					
						
							|  |  |  |         waitFor("'Listening on port %d for incoming connectionsdone' in str(output.plainText)" % port, 5000) | 
					
						
							|  |  |  |     try: | 
					
						
							|  |  |  |         attachToApplication(executable) | 
					
						
							|  |  |  |     except: | 
					
						
							|  |  |  |         resetApplicationContextToCreator() | 
					
						
							| 
									
										
										
										
											2014-03-27 17:45:32 +01:00
										 |  |  |         if ("Loading Qt Wrapper failed" in str(output.plainText) | 
					
						
							|  |  |  |             or "Failed to assign process to job object" in str(output.plainText)): | 
					
						
							| 
									
										
										
										
											2013-02-25 16:42:57 +01:00
										 |  |  |             test.warning("Loading of Qt Wrapper failed - probably different Qt versions.", | 
					
						
							|  |  |  |                          "Resetting hook-into settings to continue.") | 
					
						
							|  |  |  |             # assuming we're still on the build settings of the current project (TODO) | 
					
						
							|  |  |  |             switchViewTo(ViewConstants.PROJECTS) | 
					
						
							|  |  |  |             if sType == SubprocessType.QT_QUICK_UI: | 
					
						
							| 
									
										
										
										
											2013-11-01 15:39:00 +01:00
										 |  |  |                 if "qmlscene" in executable: | 
					
						
							|  |  |  |                     selectConfig = "QML Scene" | 
					
						
							|  |  |  |                 else: | 
					
						
							|  |  |  |                     selectConfig = "QML Viewer" | 
					
						
							| 
									
										
										
										
											2013-02-25 16:42:57 +01:00
										 |  |  |             else: | 
					
						
							|  |  |  |                 selectConfig = executable | 
					
						
							|  |  |  |             selectFromCombo(waitForObject("{buddy={text='Run configuration:' type='QLabel' " | 
					
						
							|  |  |  |                                           "unnamed='1' visible='1'} type='QComboBox' unnamed='1' " | 
					
						
							|  |  |  |                                           "visible='1'}"), selectConfig) | 
					
						
							|  |  |  |             switchViewTo(ViewConstants.EDIT) | 
					
						
							| 
									
										
										
										
											2013-04-23 12:39:05 +02:00
										 |  |  |             runButton = waitForObject(":*Qt Creator.Run_Core::Internal::FancyToolButton") | 
					
						
							| 
									
										
										
										
											2013-02-25 16:42:57 +01:00
										 |  |  |             clickButton(runButton) | 
					
						
							| 
									
										
										
										
											2014-01-20 12:48:35 +01:00
										 |  |  |             if not waitForProcessRunning(): | 
					
						
							| 
									
										
										
										
											2013-02-25 16:42:57 +01:00
										 |  |  |                 test.fatal("Something seems to be really wrong.", "Application output:" | 
					
						
							|  |  |  |                            % str(output.plainText)) | 
					
						
							|  |  |  |                 return False | 
					
						
							|  |  |  |             else: | 
					
						
							|  |  |  |                 test.log("Application seems to be started without hooking-into.") | 
					
						
							|  |  |  |         else: | 
					
						
							|  |  |  |             test.warning("Could not attach to '%s' - using fallback of pushing STOP inside Creator." % executable) | 
					
						
							| 
									
										
										
										
											2011-11-29 16:00:18 +01:00
										 |  |  |         __closeSubprocessByPushingStop__(sType) | 
					
						
							|  |  |  |         return False | 
					
						
							|  |  |  |     if function == None: | 
					
						
							|  |  |  |         if sType==SubprocessType.USER_DEFINED: | 
					
						
							|  |  |  |             sendEvent("QCloseEvent", "{type='%s' unnamed='1' visible='1'}" % userDefType) | 
					
						
							|  |  |  |         else: | 
					
						
							| 
									
										
										
										
											2014-01-22 09:39:04 +01:00
										 |  |  |             sendEvent("QCloseEvent", "{type='%s' unnamed='1' visible='1'}" % SubprocessType.getWindowType(sType, quickVersion)) | 
					
						
							| 
									
										
										
										
											2011-11-29 16:00:18 +01:00
										 |  |  |         resetApplicationContextToCreator() | 
					
						
							|  |  |  |     else: | 
					
						
							|  |  |  |         try: | 
					
						
							|  |  |  |             if isinstance(function, (str, unicode)): | 
					
						
							|  |  |  |                 globals()[function]() | 
					
						
							|  |  |  |             else: | 
					
						
							|  |  |  |                 function() | 
					
						
							|  |  |  |         except: | 
					
						
							|  |  |  |             test.fatal("Function to execute on sub-process could not be found.", | 
					
						
							|  |  |  |                        "Using fallback of pushing STOP inside Creator.") | 
					
						
							|  |  |  |             resetApplicationContextToCreator() | 
					
						
							|  |  |  |             __closeSubprocessByPushingStop__(sType) | 
					
						
							| 
									
										
										
										
											2014-01-20 12:48:35 +01:00
										 |  |  |     resetApplicationContextToCreator() | 
					
						
							| 
									
										
										
										
											2014-01-21 16:59:09 +01:00
										 |  |  |     if not (waitForProcessRunning(False) and waitFor("'exited with code' in str(output.plainText)", 10000)): | 
					
						
							| 
									
										
										
										
											2011-11-29 16:00:18 +01:00
										 |  |  |         test.warning("Sub-process seems not to have closed properly.") | 
					
						
							|  |  |  |         try: | 
					
						
							|  |  |  |             __closeSubprocessByPushingStop__(sType) | 
					
						
							|  |  |  |         except: | 
					
						
							|  |  |  |             pass | 
					
						
							| 
									
										
										
										
											2014-01-24 10:57:56 +01:00
										 |  |  |         if (platform.system() in ('Microsoft', 'Windows') and | 
					
						
							|  |  |  |             'Listening on port %d for incoming connectionsdone' % port not in str(output.plainText)): | 
					
						
							|  |  |  |             checkForStillRunningQmlExecutable([executable + ".exe"]) | 
					
						
							| 
									
										
										
										
											2011-11-29 16:00:18 +01:00
										 |  |  |     return True | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | # this helper tries to reset the current application context back | 
					
						
							|  |  |  | # to creator - this strange work-around is needed _sometimes_ on MacOS | 
					
						
							|  |  |  | def resetApplicationContextToCreator(): | 
					
						
							|  |  |  |     appCtxt = applicationContext("qtcreator") | 
					
						
							|  |  |  |     if appCtxt.name == "": | 
					
						
							|  |  |  |         appCtxt = applicationContext("Qt Creator") | 
					
						
							|  |  |  |     setApplicationContext(appCtxt) | 
					
						
							| 
									
										
										
										
											2012-02-16 12:57:24 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  | # helper that examines the text (coming from the create project wizard) | 
					
						
							|  |  |  | # to figure out which available targets we have | 
					
						
							|  |  |  | # Simulator must be handled in a special way, because this depends on the | 
					
						
							|  |  |  | # configured Qt versions and Toolchains and cannot be looked up the same way | 
					
						
							| 
									
										
										
										
											2012-02-17 17:10:53 +01:00
										 |  |  | # if you set getAsStrings to True this function returns a list of strings instead | 
					
						
							| 
									
										
										
										
											2013-04-05 16:58:06 +02:00
										 |  |  | # of the constants defined in Targets | 
					
						
							| 
									
										
										
										
											2013-07-18 17:34:27 +02:00
										 |  |  | def __getSupportedPlatforms__(text, templateName, getAsStrings=False): | 
					
						
							| 
									
										
										
										
											2012-02-17 17:10:53 +01:00
										 |  |  |     reqPattern = re.compile("requires qt (?P<version>\d+\.\d+(\.\d+)?)", re.IGNORECASE) | 
					
						
							|  |  |  |     res = reqPattern.search(text) | 
					
						
							|  |  |  |     if res: | 
					
						
							|  |  |  |         version = res.group("version") | 
					
						
							|  |  |  |     else: | 
					
						
							|  |  |  |         version = None | 
					
						
							| 
									
										
										
										
											2012-02-16 12:57:24 +01:00
										 |  |  |     if 'Supported Platforms' in text: | 
					
						
							|  |  |  |         supports = text[text.find('Supported Platforms'):].split(":")[1].strip().split(" ") | 
					
						
							|  |  |  |         result = [] | 
					
						
							|  |  |  |         if 'Desktop' in supports: | 
					
						
							| 
									
										
										
										
											2013-08-26 11:17:33 +02:00
										 |  |  |             if version == None or version < "5.0": | 
					
						
							|  |  |  |                 result.append(Targets.DESKTOP_474_GCC) | 
					
						
							| 
									
										
										
										
											2015-03-18 15:31:36 +01:00
										 |  |  |                 result.append(Targets.DESKTOP_480_DEFAULT) | 
					
						
							| 
									
										
										
										
											2013-08-26 11:17:33 +02:00
										 |  |  |                 if platform.system() in ("Linux", "Darwin"): | 
					
						
							|  |  |  |                     result.append(Targets.EMBEDDED_LINUX) | 
					
						
							| 
									
										
										
										
											2014-07-28 16:01:11 +02:00
										 |  |  |             result.extend([Targets.DESKTOP_521_DEFAULT, Targets.DESKTOP_531_DEFAULT]) | 
					
						
							| 
									
										
										
										
											2015-02-20 13:54:44 +01:00
										 |  |  |             if platform.system() != 'Darwin': | 
					
						
							|  |  |  |                 result.append(Targets.DESKTOP_541_GCC) | 
					
						
							| 
									
										
										
										
											2015-07-13 17:07:39 +02:00
										 |  |  |         if not templateName == "Qt Creator Plugin" and (version == None or version < "5.0"): | 
					
						
							| 
									
										
										
										
											2013-04-05 16:58:06 +02:00
										 |  |  |             result.append(Targets.SIMULATOR) | 
					
						
							| 
									
										
										
										
											2012-02-16 12:57:24 +01:00
										 |  |  |     elif 'Platform independent' in text: | 
					
						
							| 
									
										
										
										
											2015-03-31 15:48:03 +02:00
										 |  |  |         result = list(Targets.ALL_TARGETS) | 
					
						
							| 
									
										
										
										
											2015-03-19 17:22:12 +01:00
										 |  |  |         result.remove(Targets.EMBEDDED_LINUX) | 
					
						
							|  |  |  |         if platform.system() == 'Darwin': | 
					
						
							|  |  |  |             result.remove(Targets.DESKTOP_541_GCC) | 
					
						
							| 
									
										
										
										
											2012-02-16 12:57:24 +01:00
										 |  |  |     else: | 
					
						
							|  |  |  |         test.warning("Returning None (__getSupportedPlatforms__())", | 
					
						
							|  |  |  |                      "Parsed text: '%s'" % text) | 
					
						
							| 
									
										
										
										
											2015-06-25 16:06:48 +02:00
										 |  |  |         return [], None | 
					
						
							| 
									
										
										
										
											2012-02-17 17:10:53 +01:00
										 |  |  |     if getAsStrings: | 
					
						
							| 
									
										
										
										
											2013-04-05 16:58:06 +02:00
										 |  |  |         result = Targets.getTargetsAsStrings(result) | 
					
						
							| 
									
										
										
										
											2012-02-17 17:10:53 +01:00
										 |  |  |     return result, version | 
					
						
							| 
									
										
										
										
											2012-04-05 14:29:13 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  | # copy example project (sourceExample is path to project) to temporary directory inside repository | 
					
						
							| 
									
										
										
										
											2016-01-21 16:22:44 +01:00
										 |  |  | def prepareTemplate(sourceExample, deploymentDir=None): | 
					
						
							| 
									
										
										
										
											2012-04-05 14:29:13 +02:00
										 |  |  |     templateDir = os.path.abspath(tempDir() + "/template") | 
					
						
							| 
									
										
										
										
											2012-10-09 15:00:17 +02:00
										 |  |  |     try: | 
					
						
							|  |  |  |         shutil.copytree(sourceExample, templateDir) | 
					
						
							|  |  |  |     except: | 
					
						
							|  |  |  |         test.fatal("Error while copying '%s' to '%s'" % (sourceExample, templateDir)) | 
					
						
							|  |  |  |         return None | 
					
						
							| 
									
										
										
										
											2016-01-21 16:22:44 +01:00
										 |  |  |     if deploymentDir: | 
					
						
							|  |  |  |         shutil.copytree(os.path.abspath(sourceExample + deploymentDir), | 
					
						
							|  |  |  |                         os.path.abspath(templateDir + deploymentDir)) | 
					
						
							| 
									
										
										
										
											2012-04-05 14:29:13 +02:00
										 |  |  |     return templateDir | 
					
						
							| 
									
										
										
										
											2012-04-05 19:19:01 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-04-22 16:02:37 +02:00
										 |  |  | # check and copy files of given dataset to an existing templateDir | 
					
						
							|  |  |  | def checkAndCopyFiles(dataSet, fieldName, templateDir): | 
					
						
							|  |  |  |     files = map(lambda record: | 
					
						
							|  |  |  |                 os.path.normpath(os.path.join(srcPath, testData.field(record, fieldName))), | 
					
						
							|  |  |  |                 dataSet) | 
					
						
							|  |  |  |     for currentFile in files: | 
					
						
							|  |  |  |         if not neededFilePresent(currentFile): | 
					
						
							|  |  |  |             return [] | 
					
						
							|  |  |  |     return copyFilesToDir(files, templateDir) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | # copy a list of files to an existing targetDir | 
					
						
							|  |  |  | def copyFilesToDir(files, targetDir): | 
					
						
							|  |  |  |     result = [] | 
					
						
							|  |  |  |     for filepath in files: | 
					
						
							|  |  |  |         dst = os.path.join(targetDir, os.path.basename(filepath)) | 
					
						
							|  |  |  |         shutil.copyfile(filepath, dst) | 
					
						
							|  |  |  |         result.append(dst) | 
					
						
							|  |  |  |     return result | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-04-05 19:19:01 +02:00
										 |  |  | def __sortFilenamesOSDependent__(filenames): | 
					
						
							|  |  |  |     if platform.system() in ('Windows', 'Microsoft'): | 
					
						
							|  |  |  |         filenames.sort(key=str.lower) | 
					
						
							|  |  |  |     else: | 
					
						
							|  |  |  |         filenames.sort() | 
					
						
							|  |  |  |     return filenames | 
					
						
							| 
									
										
										
										
											2012-07-19 09:16:52 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-06-12 17:16:41 +02:00
										 |  |  | def __iterateChildren__(model, parent, nestingLevel=0): | 
					
						
							|  |  |  |     children = [] | 
					
						
							| 
									
										
										
										
											2012-10-25 12:59:03 +02:00
										 |  |  |     for currentIndex in dumpIndices(model, parent): | 
					
						
							| 
									
										
										
										
											2012-06-12 17:16:41 +02:00
										 |  |  |         children.append([str(currentIndex.text), nestingLevel]) | 
					
						
							|  |  |  |         if model.hasChildren(currentIndex): | 
					
						
							|  |  |  |             children.extend(__iterateChildren__(model, currentIndex, nestingLevel + 1)) | 
					
						
							|  |  |  |     return children | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | # This will write the data to a file which can then be used for comparing | 
					
						
							|  |  |  | def __writeProjectTreeFile__(projectTree, filename): | 
					
						
							|  |  |  |     f = open(filename, "w+") | 
					
						
							|  |  |  |     f.write('"text"\t"nestinglevel"\n') | 
					
						
							|  |  |  |     for elem in projectTree: | 
					
						
							|  |  |  |         f.write('"%s"\t"%s"\n' % (elem[0], elem[1])) | 
					
						
							|  |  |  |     f.close() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | def __getTestData__(record): | 
					
						
							|  |  |  |     return [testData.field(record, "text"), | 
					
						
							|  |  |  |             __builtin__.int(testData.field(record, "nestinglevel"))] | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | def compareProjectTree(rootObject, dataset): | 
					
						
							|  |  |  |     root = waitForObject(rootObject) | 
					
						
							|  |  |  |     tree = __iterateChildren__(root.model(), root) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     # __writeProjectTreeFile__(tree, dataset) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     for i, current in enumerate(map(__getTestData__, testData.dataset(dataset))): | 
					
						
							|  |  |  |         try: | 
					
						
							|  |  |  |             # Just removing everything up to the found item | 
					
						
							|  |  |  |             # Writing a pass would result in truly massive logs | 
					
						
							|  |  |  |             tree = tree[tree.index(current) + 1:] | 
					
						
							|  |  |  |         except ValueError: | 
					
						
							|  |  |  |             test.fail('Could not find "%s" with nesting level %s' % tuple(current), | 
					
						
							|  |  |  |                       'Line %s in dataset' % str(i + 1)) | 
					
						
							|  |  |  |             return | 
					
						
							|  |  |  |     test.passes("No errors found in project tree") | 
					
						
							| 
									
										
										
										
											2012-10-09 15:00:17 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-08-31 17:27:11 +02:00
										 |  |  | # creates C++ file(s) and adds them to the current project if one is open | 
					
						
							|  |  |  | # name                  name of the created object: filename for files, classname for classes | 
					
						
							|  |  |  | # template              "C++ Class", "C++ Header File" or "C++ Source File" | 
					
						
							|  |  |  | # forceOverwrite        bool: force overwriting existing files? | 
					
						
							|  |  |  | # addToVCS              name of VCS to add the file(s) to | 
					
						
							|  |  |  | # newBasePath           path to create the file(s) at | 
					
						
							|  |  |  | # expectedSourceName    expected name of created source file | 
					
						
							|  |  |  | # expectedHeaderName    expected name of created header file | 
					
						
							|  |  |  | def addCPlusPlusFileToCurrentProject(name, template, forceOverwrite=False, addToVCS="<None>", | 
					
						
							|  |  |  |                                      newBasePath=None, expectedSourceName=None, expectedHeaderName=None): | 
					
						
							| 
									
										
										
										
											2012-10-09 15:00:17 +02:00
										 |  |  |     if name == None: | 
					
						
							|  |  |  |         test.fatal("File must have a name - got None.") | 
					
						
							|  |  |  |         return | 
					
						
							|  |  |  |     __createProjectOrFileSelectType__("  C++", template, isProject=False) | 
					
						
							| 
									
										
										
										
											2014-10-08 12:31:37 +02:00
										 |  |  |     window = "{type='ProjectExplorer::JsonWizard' unnamed='1' visible='1'}" | 
					
						
							| 
									
										
										
										
											2015-08-31 17:27:11 +02:00
										 |  |  |     basePathEdit = waitForObject("{type='Utils::FancyLineEdit' unnamed='1' visible='1' " | 
					
						
							|  |  |  |                                  "window=%s}" % window) | 
					
						
							|  |  |  |     if newBasePath: | 
					
						
							|  |  |  |         replaceEditorContent(basePathEdit, newBasePath) | 
					
						
							|  |  |  |     basePath = str(basePathEdit.text) | 
					
						
							|  |  |  |     lineEdit = None | 
					
						
							|  |  |  |     if template == "C++ Class": | 
					
						
							|  |  |  |         lineEdit = waitForObject("{name='Class' type='QLineEdit' visible='1'}") | 
					
						
							|  |  |  |     else: | 
					
						
							|  |  |  |         lineEdit = waitForObject("{name='nameLineEdit' type='Utils::FileNameValidatingLineEdit' " | 
					
						
							|  |  |  |                                  "visible='1' window=%s}" % window) | 
					
						
							| 
									
										
										
										
											2012-10-09 15:00:17 +02:00
										 |  |  |     replaceEditorContent(lineEdit, name) | 
					
						
							| 
									
										
										
										
											2015-08-31 17:27:11 +02:00
										 |  |  |     expectedFiles = [] | 
					
						
							|  |  |  |     if expectedSourceName: | 
					
						
							|  |  |  |         expectedFiles += [expectedSourceName] | 
					
						
							|  |  |  |         if template == "C++ Class": | 
					
						
							|  |  |  |             test.compare(str(waitForObject("{name='SrcFileName' type='QLineEdit' visible='1'}").text), | 
					
						
							|  |  |  |                          expectedSourceName) | 
					
						
							|  |  |  |     if expectedHeaderName: | 
					
						
							|  |  |  |         expectedFiles += [expectedHeaderName] | 
					
						
							|  |  |  |         if template == "C++ Class": | 
					
						
							|  |  |  |             test.compare(str(waitForObject("{name='HdrFileName' type='QLineEdit' visible='1'}").text), | 
					
						
							|  |  |  |                          expectedHeaderName) | 
					
						
							| 
									
										
										
										
											2012-10-09 15:00:17 +02:00
										 |  |  |     clickButton(waitForObject(":Next_QPushButton")) | 
					
						
							| 
									
										
										
										
											2016-02-11 14:13:30 +01:00
										 |  |  |     fileExistedBefore = False | 
					
						
							|  |  |  |     if template == "C++ Class": | 
					
						
							|  |  |  |         fileExistedBefore = (os.path.exists(os.path.join(basePath, name.lower() + ".cpp")) | 
					
						
							|  |  |  |                              or os.path.exists(os.path.join(basePath, name.lower() + ".h"))) | 
					
						
							|  |  |  |     else: | 
					
						
							|  |  |  |         fileExistedBefore = os.path.exists(os.path.join(basePath, name)) | 
					
						
							| 
									
										
										
										
											2015-08-31 17:27:11 +02:00
										 |  |  |     __createProjectHandleLastPage__(expectedFiles, addToVersionControl=addToVCS) | 
					
						
							| 
									
										
										
										
											2013-09-11 23:17:28 +02:00
										 |  |  |     if (fileExistedBefore): | 
					
						
							| 
									
										
										
										
											2016-02-11 14:13:30 +01:00
										 |  |  |         overwriteDialog = "{type='Core::PromptOverwriteDialog' unnamed='1' visible='1'}" | 
					
						
							| 
									
										
										
										
											2012-10-09 15:00:17 +02:00
										 |  |  |         waitForObject(overwriteDialog) | 
					
						
							|  |  |  |         if forceOverwrite: | 
					
						
							|  |  |  |             buttonToClick = 'OK' | 
					
						
							|  |  |  |         else: | 
					
						
							|  |  |  |             buttonToClick = 'Cancel' | 
					
						
							|  |  |  |         clickButton("{text='%s' type='QPushButton' unnamed='1' visible='1' window=%s}" | 
					
						
							|  |  |  |                     % (buttonToClick, overwriteDialog)) |