diff --git a/tests/system/objects.map b/tests/system/objects.map
index c8df65ecf5a..028ceba9e14 100644
--- a/tests/system/objects.map
+++ b/tests/system/objects.map
@@ -54,13 +54,17 @@
:Qt Gui Application.scrollArea_QScrollArea {name='scrollArea' type='QScrollArea' visible='1'}
:Qt Gui Application_Qt4ProjectManager::Internal::GuiAppWizardDialog {type='Qt4ProjectManager::Internal::GuiAppWizardDialog' unnamed='1' visible='1' windowTitle='Qt Gui Application'}
:QtSupport__Internal__QtVersionManager.QLabel {container=':qt_tabwidget_stackedwidget.QtSupport__Internal__QtVersionManager_QtSupport::Internal::QtOptionsPageWidget' type='QLabel' unnamed='1' visible='1'}
+:QtSupport__Internal__QtVersionManager.qmake_QLabel {container=':qt_tabwidget_stackedwidget.QtSupport__Internal__QtVersionManager_QtSupport::Internal::QtOptionsPageWidget' name='qmakePath' type='QLabel' visible='1'}
:QtSupport__Internal__QtVersionManager.qtdirList_QTreeWidget {container=':qt_tabwidget_stackedwidget.QtSupport__Internal__QtVersionManager_QtSupport::Internal::QtOptionsPageWidget' name='qtdirList' type='QTreeWidget' visible='1'}
:Symbol Server_Utils::CheckableMessageBox {type='Utils::CheckableMessageBox' unnamed='1' visible='1' windowTitle='Symbol Server'}
+:Targets_QTreeView {container=':qt_tabwidget_stackedwidget_QWidget' type='QTreeView' unnamed='1' visible='1'}
+:Targets_QtVersion_QComboBox {container=':qt_tabwidget_stackedwidget_QWidget' occurrence='4' type='QComboBox' unnamed='1' visible='1'}
:addToVersionControlComboBox_QComboBox {name='addToVersionControlComboBox' type='QComboBox' visible='1'}
:formFileLineEdit_Utils::FileNameValidatingLineEdit {buddy=':Qt Gui Application.Form file:_QLabel' name='formFileLineEdit' type='Utils::FileNameValidatingLineEdit' visible='1'}
:frame.templateDescription_QTextBrowser {container=':New.frame_QFrame' name='templateDescription' type='QTextBrowser' visible='1'}
:headerFileLineEdit_Utils::FileNameValidatingLineEdit {buddy=':Qt Gui Application.Header file:_QLabel' name='headerFileLineEdit' type='Utils::FileNameValidatingLineEdit' visible='1'}
:qt_tabwidget_stackedwidget.QtSupport__Internal__QtVersionManager_QtSupport::Internal::QtOptionsPageWidget {container=':Options.qt_tabwidget_stackedwidget_QStackedWidget' name='QtSupport__Internal__QtVersionManager' type='QtSupport::Internal::QtOptionsPageWidget' visible='1'}
+:qt_tabwidget_stackedwidget_QWidget {container=':Options.qt_tabwidget_stackedwidget_QStackedWidget' type='QWidget' unnamed='1' visible='1'}
:scrollArea.Create Build Configurations:_QComboBox_2 {container=':Qt Gui Application.scrollArea_QScrollArea' leftWidget=':scrollArea.Create Build Configurations:_QLabel_2' type='QComboBox' unnamed='1' visible='1'}
:scrollArea.Create Build Configurations:_QLabel_2 {container=':Qt Gui Application.scrollArea_QScrollArea' text='Create build configurations:' type='QLabel' unnamed='1' visible='1'}
:scrollArea.Details_Utils::DetailsButton {text='Details' type='Utils::DetailsButton' unnamed='1' visible='1' window=':Qt Creator_Core::Internal::MainWindow'}
diff --git a/tests/system/shared/hook_utils.py b/tests/system/shared/hook_utils.py
index 30a1a87a47f..ced6286c62e 100644
--- a/tests/system/shared/hook_utils.py
+++ b/tests/system/shared/hook_utils.py
@@ -59,79 +59,80 @@ def modifyRunSettingsForHookIntoQtQuickUI(projectName, port):
global workingDir
switchViewTo(ViewConstants.PROJECTS)
switchToBuildOrRunSettingsFor(1, 0, ProjectSettings.RUN, True)
- qtVersionCombo = waitForObject("{leftWidget={type='QLabel' text='Qt version:' unnamed='1' visible='1'} "
- "type='QComboBox' unnamed='1' visible='1' window=':Qt Creator_Core::Internal::MainWindow'}", 5000)
- currentQtVersion = qtVersionCombo.currentText
- qmake = getQMakeFromQtVersion(currentQtVersion)
- if qmake != None:
- mkspec = __getMkspecFromQmake__(qmake)
- if mkspec != None:
- qtVer = getOutputFromCmdline("%s -query QT_VERSION" % qmake).strip()
- squishPath = getSquishPath(mkspec, qtVer)
- if squishPath == None:
- test.warning("Could not determine the Squish path for %s/%s" % (qtVer, mkspec),
- "Using fallback of pushing STOP inside Creator.")
- return None
- test.log("Using (QtVersion/mkspec) %s/%s with SquishPath %s" % (qtVer, mkspec, squishPath))
- if platform.system() == "Darwin":
- qmlViewer = os.path.abspath(os.path.dirname(qmake) + "/QMLViewer.app")
- else:
- qmlViewer = os.path.abspath(os.path.dirname(qmake) + "/qmlviewer")
- if platform.system() in ('Microsoft', 'Windows'):
- qmlViewer = qmlViewer + ".exe"
- addRunConfig = waitForObject("{type='QPushButton' text='Add' unnamed='1' visible='1' "
- "window=':Qt Creator_Core::Internal::MainWindow' occurrence='2'}")
- clickButton(addRunConfig)
- activateItem(waitForObject("{type='QMenu' visible='1' unnamed='1'}"), "Custom Executable")
- exePathChooser = waitForObject("{buddy={window=':Qt Creator_Core::Internal::MainWindow' text='Command:' "
- "type='QLabel' unnamed='1' visible='1'} type='Utils::PathChooser' "
- "unnamed='1' visible='1'}")
- exeLineEd = getChildByClass(exePathChooser, "Utils::BaseValidatingLineEdit")
- argLineEd = waitForObject("{buddy={window=':Qt Creator_Core::Internal::MainWindow' type='QLabel' "
- "text='Arguments:' visible='1'} type='QLineEdit' unnamed='1' visible='1'}")
- wdPathChooser = waitForObject("{buddy={window=':Qt Creator_Core::Internal::MainWindow' text='Working directory:' "
- "type='QLabel'} type='Utils::PathChooser' unnamed='1' visible='1'}")
- wdLineEd = getChildByClass(wdPathChooser, "Utils::BaseValidatingLineEdit")
- startAUT = os.path.abspath(squishPath + "/bin/startaut")
- if platform.system() in ('Microsoft', 'Windows'):
- startAUT = startAUT + ".exe"
- projectPath = os.path.abspath("%s/%s" % (workingDir, projectName))
- replaceEditorContent(exeLineEd, startAUT)
- replaceEditorContent(argLineEd, "--verbose --port=%d %s %s.qml" % (port, qmlViewer, projectName))
- replaceEditorContent(wdLineEd, projectPath)
- clickButton(waitForObject("{text='Details' type='Utils::DetailsButton' unnamed='1' visible='1' "
- "window=':Qt Creator_Core::Internal::MainWindow' "
- "leftWidget={type='QLabel' text~='Us(e|ing) Build Environment' unnamed='1' visible='1'}}"))
- qtLibPath = os.path.abspath(os.path.dirname(qmake))
- if not platform.system() in ('Microsoft', 'Windows'):
- qtLibPath = os.path.abspath(qtLibPath+"/../lib")
- row = 0
- for varName in ("PATH", "SQUISH_LIBQTDIR"):
- __addVariableToRunEnvironment__(varName, qtLibPath, row)
- row = row + 1
- if not platform.system() in ('Microsoft', 'Windows', 'Darwin'):
- __addVariableToRunEnvironment__("LD_LIBRARY_PATH", qtLibPath, 0)
- if platform.system() == "Darwin":
- __addVariableToRunEnvironment__("DYLD_FRAMEWORK_PATH", qtLibPath, 0)
- if not platform.system() in ('Microsoft', 'Windows'):
- __addVariableToRunEnvironment__("DISPLAY", ":0.0", 0)
- result = qmlViewer
- else:
- result = None
+
+ qtVersion, mkspec, qtLibPath, qmake = getQtInformationForQmlProject()
+ if None in (qtVersion, mkspec, qtLibPath, qmake):
+ test.fatal("At least one of the Qt information returned None - leaving...",
+ "Qt version: %s, mkspec: %s, Qt LibPath: %s, qmake: '%s'"
+ % (qtVersion, mkspec, qtLibPath, qmake))
+ return None
+
+ squishPath = getSquishPath(mkspec, qtVersion)
+ if squishPath == None:
+ test.warning("Could not determine the Squish path for %s/%s" % (qtVersion, mkspec),
+ "Using fallback of pushing STOP inside Creator.")
+ return None
+ test.log("Using (QtVersion/mkspec) %s/%s with SquishPath %s" % (qtVersion, mkspec, squishPath))
+ if platform.system() == "Darwin":
+ qmlViewer = os.path.abspath(os.path.dirname(qmake) + "/QMLViewer.app")
else:
- result = None
+ qmlViewer = os.path.abspath(os.path.dirname(qmake) + "/qmlviewer")
+ if platform.system() in ('Microsoft', 'Windows'):
+ qmlViewer = qmlViewer + ".exe"
+ addRunConfig = waitForObject("{container={window=':Qt Creator_Core::Internal::MainWindow' "
+ "type='ProjectExplorer::Internal::RunSettingsWidget' unnamed='1' "
+ "visible='1'} occurrence='2' text='Add' type='QPushButton' "
+ "unnamed='1' visible='1'}")
+ clickButton(addRunConfig)
+ activateItem(waitForObject("{type='QMenu' visible='1' unnamed='1'}"), "Custom Executable")
+ exePathChooser = waitForObject("{buddy={window=':Qt Creator_Core::Internal::MainWindow' "
+ "text='Command:' type='QLabel' unnamed='1' visible='1'} "
+ "type='Utils::PathChooser' unnamed='1' visible='1'}")
+ exeLineEd = getChildByClass(exePathChooser, "Utils::BaseValidatingLineEdit")
+ argLineEd = waitForObject("{buddy={window=':Qt Creator_Core::Internal::MainWindow' "
+ "type='QLabel' text='Arguments:' visible='1'} type='QLineEdit' "
+ "unnamed='1' visible='1'}")
+ wdPathChooser = waitForObject("{buddy={window=':Qt Creator_Core::Internal::MainWindow' "
+ "text='Working directory:' type='QLabel'} "
+ "type='Utils::PathChooser' unnamed='1' visible='1'}")
+ wdLineEd = getChildByClass(wdPathChooser, "Utils::BaseValidatingLineEdit")
+ startAUT = os.path.abspath(squishPath + "/bin/startaut")
+ if platform.system() in ('Microsoft', 'Windows'):
+ startAUT = startAUT + ".exe"
+ projectPath = os.path.abspath("%s/%s" % (workingDir, projectName))
+ replaceEditorContent(exeLineEd, startAUT)
+ replaceEditorContent(argLineEd, "--verbose --port=%d %s %s.qml"
+ % (port, qmlViewer, projectName))
+ replaceEditorContent(wdLineEd, projectPath)
+ clickButton(waitForObject("{text='Details' type='Utils::DetailsButton' unnamed='1' visible='1' "
+ "window=':Qt Creator_Core::Internal::MainWindow' "
+ "leftWidget={type='QLabel' text~='Us(e|ing) Build Environment'"
+ " unnamed='1' visible='1'}}"))
+ row = 0
+ for varName in ("PATH", "SQUISH_LIBQTDIR"):
+ __addVariableToRunEnvironment__(varName, qtLibPath, row)
+ row = row + 1
+ if not platform.system() in ('Microsoft', 'Windows', 'Darwin'):
+ __addVariableToRunEnvironment__("LD_LIBRARY_PATH", qtLibPath, 0)
+ if platform.system() == "Darwin":
+ __addVariableToRunEnvironment__("DYLD_FRAMEWORK_PATH", qtLibPath, 0)
+ if not platform.system() in ('Microsoft', 'Windows'):
+ __addVariableToRunEnvironment__("DISPLAY", ":0.0", 0)
+ result = qmlViewer
switchViewTo(ViewConstants.EDIT)
return result
# this helper method must be called on the run settings page of a Qt Quick UI with DetailsWidget
# for the run settings already opened - it won't work on other views because of a different layout
def __addVariableToRunEnvironment__(name, value, row):
- clickButton(waitForObject("{occurrence='3' text='Add' type='QPushButton' unnamed='1' visible='1' "
- "window=':Qt Creator_Core::Internal::MainWindow'}"))
+ clickButton(waitForObject("{text='Add' type='QPushButton' unnamed='1' visible='1' "
+ "container={window=':Qt Creator_Core::Internal::MainWindow' "
+ "type='Utils::DetailsWidget' unnamed='1' visible='1' occurrence='2'}}"))
varNameLineEd = waitForObject("{type='QExpandingLineEdit' visible='1' unnamed='1'}")
replaceEditorContent(varNameLineEd, name)
valueLineEd = __doubleClickQTableView__(":Qt Creator_QTableView", row, 1)
replaceEditorContent(valueLineEd, value)
+ type(valueLineEd, "")
def __getMkspecFromQMakeConf__(qmakeConf):
if qmakeConf==None or not os.path.exists(qmakeConf):
diff --git a/tests/system/shared/project_explorer.py b/tests/system/shared/project_explorer.py
index 43d5530c9da..aa33d160d12 100644
--- a/tests/system/shared/project_explorer.py
+++ b/tests/system/shared/project_explorer.py
@@ -144,6 +144,75 @@ def getQtInformationForBuildSettings(alreadyOnProjectsBuildSettings=False, after
test.warning("Don't know where you trying to switch to (%s)" % afterSwitchTo)
return qtVersion, mkspec, qtBinPath, qtLibPath
+def getQtInformationForQmlProject():
+ fancyToolButton = waitForObject(":*Qt Creator_Core::Internal::FancyToolButton")
+ target = __getTargetFromToolTip__(str(fancyToolButton.toolTip))
+ if not target:
+ test.fatal("Could not figure out which target you're using...")
+ return None, None, None, None
+ test.log("Searching for Qt information for target '%s'" % target)
+ invokeMenuItem("Tools", "Options...")
+ waitForObjectItem(":Options_QListView", "Build & Run")
+ clickItem(":Options_QListView", "Build & Run", 14, 15, 0, Qt.LeftButton)
+ clickTab(waitForObject(":Options.qt_tabwidget_tabbar_QTabBar"), "Targets")
+ targetsTreeView = waitForObject(":Targets_QTreeView")
+ if not __selectTreeItemOnBuildAndRun__(targetsTreeView, "%s(\s\(default\))?" % target, True):
+ test.fatal("Found no matching target - this shouldn't happen.")
+ clickButton(waitForObject(":Options.Cancel_QPushButton"))
+ return None, None, None, None
+ qtVersionStr = str(waitForObject(":Targets_QtVersion_QComboBox").currentText)
+ test.log("Target '%s' uses Qt Version '%s'" % (target, qtVersionStr))
+ clickTab(waitForObject(":Options.qt_tabwidget_tabbar_QTabBar"), "Qt Versions")
+ treeWidget = waitForObject(":QtSupport__Internal__QtVersionManager.qtdirList_QTreeWidget")
+ if not __selectTreeItemOnBuildAndRun__(treeWidget, qtVersionStr):
+ test.fatal("Found no matching Qt Version for target - this shouldn't happen.")
+ clickButton(waitForObject(":Options.Cancel_QPushButton"))
+ return None, None, None, None
+ qmake = str(waitForObject(":QtSupport__Internal__QtVersionManager.qmake_QLabel").text)
+ test.log("Qt Version '%s' uses qmake at '%s'" % (qtVersionStr, qmake))
+ qtDir = os.path.dirname(os.path.dirname(qmake))
+ qtVersion = getQtInformationByQMakeCall(qtDir, QtInformation.QT_VERSION)
+ qtLibPath = getQtInformationByQMakeCall(qtDir, QtInformation.QT_LIBPATH)
+ mkspec = __getMkspecFromQmake__(qmake)
+ clickButton(waitForObject(":Options.Cancel_QPushButton"))
+ return qtVersion, mkspec, qtLibPath, qmake
+
+def __selectTreeItemOnBuildAndRun__(treeViewOrWidget, itemText, isRegex=False):
+ model = treeViewOrWidget.model()
+ test.compare(model.rowCount(), 2, "Verifying expected target section count")
+ autoDetected = model.index(0, 0)
+ test.compare(autoDetected.data().toString(), "Auto-detected",
+ "Verifying label for target section")
+ manual = model.index(1, 0)
+ test.compare(manual.data().toString(), "Manual", "Verifying label for target section")
+ if isRegex:
+ pattern = re.compile(itemText)
+ found = False
+ for section in [autoDetected, manual]:
+ for index in [section.child(i, 0) for i in range(model.rowCount(section))]:
+ if (isRegex and pattern.match(str(index.data().toString()))
+ or itemText == (str(index.data().toString()))):
+ found = True
+ item = ".".join([str(section.data().toString()),
+ str(index.data().toString()).replace(".", "\\.")])
+ clickItem(treeViewOrWidget, item, 5, 5, 0, Qt.LeftButton)
+ break
+ if found:
+ break
+ return found
+
+def __getTargetFromToolTip__(toolTip):
+ if toolTip == None or not isinstance(toolTip, (str, unicode)):
+ test.warning("Parameter toolTip must be of type str or unicode and can't be None!")
+ return None
+ pattern = re.compile(".*Target:(.*)Deploy.*")
+ target = pattern.match(toolTip)
+ if target == None:
+ test.fatal("UI seems to have changed - expected ToolTip does not match.",
+ "ToolTip: '%s'" % toolTip)
+ return None
+ return target.group(1).split("
")[0].strip()
+
def __getMkspecFromQMakeCall__(qmakeCall):
qCall = qmakeCall.split("")[1].strip()
tmp = qCall.split()