summaryrefslogtreecommitdiff
path: root/tests/system/shared/project_explorer.py
diff options
context:
space:
mode:
Diffstat (limited to 'tests/system/shared/project_explorer.py')
-rw-r--r--tests/system/shared/project_explorer.py128
1 files changed, 128 insertions, 0 deletions
diff --git a/tests/system/shared/project_explorer.py b/tests/system/shared/project_explorer.py
new file mode 100644
index 0000000000..79e6ec31f6
--- /dev/null
+++ b/tests/system/shared/project_explorer.py
@@ -0,0 +1,128 @@
+import re;
+
+# this class holds some constants for easier usage inside the Projects view
+class ProjectSettings:
+ BUILD = 1
+ RUN = 2
+
+# this class defines some constants for the views of the creator's MainWindow
+class ViewConstants:
+ WELCOME = 0
+ EDIT = 1
+ DESIGN = 2
+ DEBUG = 3
+ PROJECTS = 4
+ ANALYZE = 5
+ HELP = 6
+ # always adjust the following to the highest value of the available ViewConstants when adding new
+ LAST_AVAILABLE = HELP
+
+ # this function returns a regex of the tooltip of the FancyTabBar elements
+ # this is needed because the keyboard shortcut is OS specific
+ # if the provided argument does not match any of the ViewConstants it returns None
+ @staticmethod
+ def getToolTipForViewTab(viewTab):
+ if viewTab == ViewConstants.WELCOME:
+ return ur'Switch to <b>Welcome</b> mode <span style="color: gray; font-size: small">(Ctrl\+|\u2303)1</span>'
+ elif viewTab == ViewConstants.EDIT:
+ return ur'Switch to <b>Edit</b> mode <span style="color: gray; font-size: small">(Ctrl\+|\u2303)2</span>'
+ elif viewTab == ViewConstants.DESIGN:
+ return ur'Switch to <b>Design</b> mode <span style="color: gray; font-size: small">(Ctrl\+|\u2303)3</span>'
+ elif viewTab == ViewConstants.DEBUG:
+ return ur'Switch to <b>Debug</b> mode <span style="color: gray; font-size: small">(Ctrl\+|\u2303)4</span>'
+ elif viewTab == ViewConstants.PROJECTS:
+ return ur'Switch to <b>Projects</b> mode <span style="color: gray; font-size: small">(Ctrl\+|\u2303)5</span>'
+ elif viewTab == ViewConstants.ANALYZE:
+ return ur'Switch to <b>Analyze</b> mode <span style="color: gray; font-size: small">(Ctrl\+|\u2303)6</span>'
+ elif viewTab == ViewConstants.HELP:
+ return ur'Switch to <b>Help</b> mode <span style="color: gray; font-size: small">(Ctrl\+|\u2303)7</span>'
+ else:
+ return None
+
+# this function switches the MainWindow of creator to the specified view
+def switchViewTo(view):
+ if view < ViewConstants.WELCOME or view > ViewConstants.LAST_AVAILABLE:
+ return
+ tabBar = waitForObject("{type='Core::Internal::FancyTabBar' unnamed='1' visible='1' "
+ "window=':Qt Creator_Core::Internal::MainWindow'}")
+ mouseMove(tabBar, 10, 10 + 52 * view)
+ snooze(2)
+ text = str(QToolTip.text())
+ pattern = ViewConstants.getToolTipForViewTab(view)
+ if re.match(pattern, unicode(text), re.UNICODE):
+ test.passes("ToolTip verified")
+ else:
+ test.warning("ToolTip does not match", "Expected pattern: %s\nGot: %s" % (pattern, text))
+ mouseClick(waitForObject("{type='Core::Internal::FancyTabBar' unnamed='1' visible='1' "
+ "window=':Qt Creator_Core::Internal::MainWindow'}"), 5, 5 + 52 * view, 0, Qt.LeftButton)
+
+# this function is used to make sure that simple building prerequisites are met
+# param targetCount specifies how many build targets had been selected (it's important that this one is correct)
+# param currentTarget specifies which target should be selected for the next build (zero based index)
+# param setReleaseBuild defines whether the current target(s) will be set to a Release or a Debug build
+# param disableShadowBuild defines whether to disable shadow build or leave it unchanged (no matter what is defined)
+# param setForAll defines whether to set Release or Debug and ShadowBuild option for all targets or only for the currentTarget
+def prepareBuildSettings(targetCount, currentTarget, setReleaseBuild=True, disableShadowBuild=True, setForAll=True):
+ switchViewTo(ViewConstants.PROJECTS)
+ success = True
+ for current in range(targetCount):
+ if setForAll or current == currentTarget:
+ switchToBuildOrRunSettingsFor(targetCount, current, ProjectSettings.BUILD)
+ qtCombo = waitForObject(":scrollArea.qtVersionComboBox_QComboBox")
+ chooseThis = None
+ wait = False
+ try:
+ if qtCombo.currentText != defaultQtVersion:
+ selectFromCombo(":scrollArea.qtVersionComboBox_QComboBox", defaultQtVersion.replace(".", "\\."))
+ if setReleaseBuild:
+ chooseThis = "%s Release" % defaultQtVersion
+ else:
+ chooseThis = "%s Debug" % defaultQtVersion
+ editBuildCfg = waitForObject("{container={type='QScrollArea' name='scrollArea'} "
+ "leftWidget={container={type='QScrollArea' name='scrollArea'} "
+ "text='Edit build configuration:' type='QLabel'}"
+ "unnamed='1' type='QComboBox' visible='1'}", 20000)
+ if editBuildCfg.currentText != chooseThis:
+ wait = True
+ clickItem(editBuildCfg, chooseThis.replace(".", "\\."), 5, 5, 0, Qt.LeftButton)
+ else:
+ wait = False
+ except:
+ if current == currentTarget:
+ success = False
+ if wait and chooseThis != None:
+ waitFor("editBuildCfg.currentText==chooseThis")
+ ensureChecked("{name='shadowBuildCheckBox' type='QCheckBox' visible='1'}", not disableShadowBuild)
+ # get back to the current target
+ if currentTarget < 0 or currentTarget >= targetCount:
+ test.warning("Parameter currentTarget is out of range - will be ignored this time!")
+ else:
+ switchToBuildOrRunSettingsFor(targetCount, currentTarget, ProjectSettings.BUILD)
+ switchViewTo(ViewConstants.EDIT)
+ return success
+
+# this function switches to the build or the run settings (inside the Projects view)
+# if you haven't already switched to the Projects view this will fail and return False
+# param currentTarget specifies the target for which to switch into the specified settings (zero based index)
+# param targetCount specifies the number of targets currently defined (must be correct!)
+# param projectSettings specifies where to switch to (must be one of ProjectSettings.BUILD or ProjectSettings.RUN)
+def switchToBuildOrRunSettingsFor(targetCount, currentTarget, projectSettings):
+ try:
+ targetSel = waitForObject("{type='ProjectExplorer::Internal::TargetSelector' unnamed='1' "
+ "visible='1' window=':Qt Creator_Core::Internal::MainWindow'}")
+ except LookupError:
+ test.fatal("Wrong (time of) call - must be already at Projects view")
+ return False
+ ADD_BUTTON_WIDTH = 27 # bad... (taken from source)
+ selectorWidth = (targetSel.width - 3 - 2 * (ADD_BUTTON_WIDTH + 1)) / targetCount - 1
+ yToClick = targetSel.height * 3 / 5 + 5
+ if projectSettings == ProjectSettings.RUN:
+ xToClick = ADD_BUTTON_WIDTH + (selectorWidth + 1) * currentTarget - 2 + selectorWidth / 2 + 5
+ elif projectSettings == ProjectSettings.BUILD:
+ xToClick = ADD_BUTTON_WIDTH + (selectorWidth + 1) * currentTarget - 2 + selectorWidth / 2 - 5
+ else:
+ test.fatal("Don't know what you're trying to switch to")
+ return False
+ mouseClick(targetSel, xToClick, yToClick, 0, Qt.LeftButton)
+ return True
+