summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--dist/changes-3.0.170
-rw-r--r--qtcreator.pri1
-rw-r--r--share/qtcreator/qml/qmlpuppet/qml2puppet/qml2puppet.pro1
-rw-r--r--share/qtcreator/qmldesigner/propertyEditorQmlSources/PropertyTemplates/StringEditorTemplate.template3
-rw-r--r--share/qtcreator/qmldesigner/propertyEditorQmlSources/PropertyTemplates/TemplateTypes.qml2
-rw-r--r--share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick/BorderImageSpecifics.qml2
-rw-r--r--share/qtcreator/translations/qtcreator_ru.ts42
-rw-r--r--share/qtcreator/welcomescreen/widgets/SearchBar.qml25
-rw-r--r--share/qtcreator/welcomescreen/widgets/SideBar.qml2
-rw-r--r--src/libs/utils/filenamevalidatinglineedit.cpp2
-rw-r--r--src/libs/utils/projectnamevalidatinglineedit.cpp2
-rw-r--r--src/plugins/coreplugin/coreconstants.h1
-rw-r--r--src/plugins/coreplugin/mainwindow.cpp6
-rw-r--r--src/plugins/help/helpplugin.cpp20
-rw-r--r--src/plugins/ios/iosrunconfiguration.cpp16
-rw-r--r--src/plugins/ios/iosrunconfiguration.h3
-rw-r--r--src/plugins/qmldesigner/components/propertyeditor/fileresourcesmodel.cpp4
-rw-r--r--src/plugins/qmldesigner/components/stateseditor/stateseditorimageprovider.cpp13
-rw-r--r--src/plugins/qmldesigner/components/stateseditor/stateslist.qml1
-rw-r--r--src/plugins/qnx/qnxdeviceconfigurationwizard.cpp3
-rw-r--r--src/plugins/remotelinux/remotelinuxsignaloperation.cpp2
-rw-r--r--src/qtcreatorplugin.pri22
-rw-r--r--src/shared/proparser/qmakebuiltins.cpp4
-rw-r--r--tests/system/objects.map1
-rw-r--r--tests/system/shared/build_utils.py41
-rw-r--r--tests/system/shared/classes.py9
-rw-r--r--tests/system/shared/hook_utils.py66
-rw-r--r--tests/system/shared/project.py26
-rw-r--r--tests/system/shared/project_explorer.py5
-rw-r--r--tests/system/shared/qtcreator.py6
-rw-r--r--tests/system/shared/utils.py37
-rw-r--r--tests/system/shared/workarounds.py29
-rw-r--r--tests/system/shared_data/qt_squish_mapping.tsv5
-rwxr-xr-xtests/system/suite_CCOM/tst_CCOM01/test.py2
-rw-r--r--tests/system/suite_SCOM/tst_SCOM01/test.py2
-rw-r--r--tests/system/suite_SCOM/tst_SCOM04/test.py2
-rw-r--r--tests/system/suite_SCOM/tst_SCOM05/test.py2
-rw-r--r--tests/system/suite_debugger/tst_build_new_project/test.py4
-rw-r--r--tests/system/suite_debugger/tst_debug_empty_main/test.py2
-rw-r--r--tests/system/suite_debugger/tst_simple_analyze/test.py5
-rw-r--r--tests/system/suite_debugger/tst_simple_debug/test.py4
-rw-r--r--tests/system/suite_editors/tst_qml_editor/test.py4
-rw-r--r--tests/system/suite_general/tst_build_speedcrunch/test.py4
-rw-r--r--tests/system/suite_general/tst_cmake_speedcrunch/test.py2
-rw-r--r--tests/system/suite_general/tst_default_settings/test.py4
-rw-r--r--tests/system/suite_qtquick/tst_qtquick_creation/test.py8
-rw-r--r--tests/system/suite_qtquick/tst_qtquick_creation3/test.py6
-rw-r--r--tests/system/suite_qtquick/tst_qtquick_creation4/test.py2
-rw-r--r--tests/system/suite_tools/tst_designer_autocomplete/test.py6
-rw-r--r--tests/system/suite_tools/tst_designer_goto_slot/test.py6
-rw-r--r--tests/system/suite_tools/tst_git_clone/test.py2
-rw-r--r--tests/system/suite_tools/tst_git_local/test.py25
52 files changed, 352 insertions, 212 deletions
diff --git a/dist/changes-3.0.1 b/dist/changes-3.0.1
new file mode 100644
index 0000000000..1c0227b519
--- /dev/null
+++ b/dist/changes-3.0.1
@@ -0,0 +1,70 @@
+Qt Creator version 3.0.1 is a bugfix release.
+
+The most important changes are listed in this document. For a complete
+list of changes, see the Git log for the Qt Creator sources that
+you can check out from the public Git repository. For example:
+
+git clone git://gitorious.org/qt-creator/qt-creator.git
+git log --cherry-pick --pretty=oneline v3.0.0..v3.0.1
+
+Compilers
+ * MSVC
+ * Added detection of native 64 bit arm toolchain
+ * Fixed issue with duplicate entries
+
+QMake Projects
+ * Fixed issue with duplicate entries when configuring projects
+
+Debugging
+ * GDB and LLDB
+ * Added pretty printer for QTimeZone
+ * Fixed pretty printer for QSharedDataPointer
+ * Fixed display of multiple inheritance from std::list
+ (QTCREATORBUG-11023)
+ * GDB
+ * Fixed inserting breakpoints while application is running
+ (QTCREATORBUG-11084)
+ * Fixed display of std::array<some_struct>
+ * LLDB
+ * Fixed display of bases in case of multiple inheritance
+ (QTCREATORBUG-11109)
+ * CDB
+ * Fixed stepping through sources of Qt 5.2 binary package
+ (QTCREATORBUG-11233)
+
+C++ Support
+ * Fixed selecting project to use for specific file
+ * Fixed completion for nested enums (QTCREATORBUG-5456)
+
+QML Profiler
+ * Improved performance (QTCREATORBUG-10950)
+ * Fixed issue with missing details for bindings in events pane
+
+Qt Quick Designer
+ * Added missing Qt Quick 2 specific properties
+ * Fixed crash when anchoring root item (QTCREATORBUG-11078)
+ * Fixed crash when dragging item from library and imports need to change
+ (QTCREATORBUG-11139)
+ * Fixed crash with invalid anchors (QTCREATORBUG-11255)
+ * Fixed crash when editing text without pressing enter or return key
+ (QTCREATORBUG-11249)
+ * Fixed crash with Anchors > Fill and Qt Quick Controls (QTCREATORBUG-10476)
+ * Fixed updating the UI when switching between states (QTCREATORBUG-10674)
+
+FakeVim
+ * Fixed that user command left editor in overwrite mode (QTCREATORBUG-10460)
+
+Platform Specific
+
+Android
+ * Fixed too short timeouts when calling external tools (QTCREATORBUG-10944)
+ * Fixed issues with build paths with non-latin characters (QTBUG-34316)
+ * Fixed issue with symbol search path for debugging (QTCREATORBUG-10382)
+
+iOS
+ * Improved startup performance of on-device debugging (QTCREATORBUG-10884)
+ * Fixed executable path shown in run configuration UI (QTCREATORBUG-11080)
+ * Fixed handling of control characters in application output
+ (QTCREATORBUG-11219)
+ * Fixed that custom application arguments were lost after restart
+
diff --git a/qtcreator.pri b/qtcreator.pri
index fa636ac210..faa528fc19 100644
--- a/qtcreator.pri
+++ b/qtcreator.pri
@@ -156,6 +156,7 @@ INCLUDEPATH += \
$$IDE_SOURCE_TREE/src/libs \
$$IDE_SOURCE_TREE/tools
+QTC_PLUGIN_DIRS = $$(QTC_PLUGIN_DIRS)
QTC_PLUGIN_DIRS += $$IDE_SOURCE_TREE/src/plugins
for(dir, QTC_PLUGIN_DIRS) {
INCLUDEPATH += $$dir
diff --git a/share/qtcreator/qml/qmlpuppet/qml2puppet/qml2puppet.pro b/share/qtcreator/qml/qmlpuppet/qml2puppet/qml2puppet.pro
index 22f71911f0..71551a476f 100644
--- a/share/qtcreator/qml/qmlpuppet/qml2puppet/qml2puppet.pro
+++ b/share/qtcreator/qml/qmlpuppet/qml2puppet/qml2puppet.pro
@@ -1,6 +1,7 @@
TARGET = qml2puppet
TEMPLATE = app
+CONFIG += console
DESTDIR = $$[QT_INSTALL_BINS]
diff --git a/share/qtcreator/qmldesigner/propertyEditorQmlSources/PropertyTemplates/StringEditorTemplate.template b/share/qtcreator/qmldesigner/propertyEditorQmlSources/PropertyTemplates/StringEditorTemplate.template
index 3619dd5d4e..f770a68636 100644
--- a/share/qtcreator/qmldesigner/propertyEditorQmlSources/PropertyTemplates/StringEditorTemplate.template
+++ b/share/qtcreator/qmldesigner/propertyEditorQmlSources/PropertyTemplates/StringEditorTemplate.template
@@ -4,4 +4,5 @@ Label {
}
LineEdit {
backendValue: backendValues.%2
-} \ No newline at end of file
+ Layout.fillWidth: true
+}
diff --git a/share/qtcreator/qmldesigner/propertyEditorQmlSources/PropertyTemplates/TemplateTypes.qml b/share/qtcreator/qmldesigner/propertyEditorQmlSources/PropertyTemplates/TemplateTypes.qml
index 7c14041197..a4a404bedf 100644
--- a/share/qtcreator/qmldesigner/propertyEditorQmlSources/PropertyTemplates/TemplateTypes.qml
+++ b/share/qtcreator/qmldesigner/propertyEditorQmlSources/PropertyTemplates/TemplateTypes.qml
@@ -1,6 +1,6 @@
AutoTypes {
- imports: [ "import HelperWidgets 2.0", "import QtQuick 2.1" ]
+ imports: [ "import HelperWidgets 2.0", "import QtQuick 2.1", "import QtQuick.Layouts 1.1" ]
Type {
typeNames: ["int"]
diff --git a/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick/BorderImageSpecifics.qml b/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick/BorderImageSpecifics.qml
index e5ea40efd7..18b1ce045f 100644
--- a/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick/BorderImageSpecifics.qml
+++ b/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick/BorderImageSpecifics.qml
@@ -46,7 +46,7 @@ Column {
}
SecondColumnLayout {
- LineEdit {
+ UrlChooser {
backendValue: backendValues.source
implicitWidth: 180
}
diff --git a/share/qtcreator/translations/qtcreator_ru.ts b/share/qtcreator/translations/qtcreator_ru.ts
index 21312796de..5a41433856 100644
--- a/share/qtcreator/translations/qtcreator_ru.ts
+++ b/share/qtcreator/translations/qtcreator_ru.ts
@@ -8,6 +8,10 @@
<translation>Дополнительно</translation>
</message>
<message>
+ <source>Origin</source>
+ <translation>Происхождение</translation>
+ </message>
+ <message>
<source>Scale</source>
<translation>Масштаб</translation>
</message>
@@ -15,6 +19,30 @@
<source>Rotation</source>
<translation>Вращение</translation>
</message>
+ <message>
+ <source>Enabled</source>
+ <translation>Включено</translation>
+ </message>
+ <message>
+ <source>Accept mouse and keyboard events</source>
+ <translation>Принимать события мыши и клавиатуры</translation>
+ </message>
+ <message>
+ <source>Smooth</source>
+ <translation>Сглаживание</translation>
+ </message>
+ <message>
+ <source>Smooth sampling active</source>
+ <translation>Включение сглаживания</translation>
+ </message>
+ <message>
+ <source>Antialiasing</source>
+ <translation>Антиалиасинг</translation>
+ </message>
+ <message>
+ <source>Anti-aliasing active</source>
+ <translation>Включение антиалиасинга</translation>
+ </message>
</context>
<context>
<name>Analyzer</name>
@@ -14905,7 +14933,7 @@ Commit now?</source>
</message>
<message>
<source>Git Reflog &quot;%1&quot;</source>
- <translation type="unfinished">Git - reflog «%1»</translation>
+ <translation>Git - reflog «%1»</translation>
</message>
<message>
<source>Cannot describe &quot;%1&quot;.</source>
@@ -15588,7 +15616,7 @@ Commit now?</source>
</message>
<message>
<source>Reflog</source>
- <translation type="unfinished">Reflog</translation>
+ <translation>Reflog</translation>
</message>
<message>
<source>&amp;Patch</source>
@@ -15660,7 +15688,7 @@ Commit now?</source>
</message>
<message>
<source>Git Gui</source>
- <translation type="unfinished">Git Gui</translation>
+ <translation>Интерфейс Git</translation>
</message>
<message>
<source>Repository Browser</source>
@@ -26374,8 +26402,12 @@ For qmlproject projects, use the importPaths property to add import paths.</sour
<translation>Требуется импорт QtQuick.tooling.</translation>
</message>
<message>
- <source>Expected version 1.1 or lower.</source>
- <translation>Требуется версия 1.1 или ниже.</translation>
+ <source>Major version different from 1 not supported.</source>
+ <translation>Версия с основным номером отличным от 1 не поддерживается.</translation>
+ </message>
+ <message>
+ <source>Reading only version 1.1 parts.</source>
+ <translation>Чтение разделов версии 1.1.</translation>
</message>
<message>
<source>Expected document to contain a single object definition.</source>
diff --git a/share/qtcreator/welcomescreen/widgets/SearchBar.qml b/share/qtcreator/welcomescreen/widgets/SearchBar.qml
index 5e592ed7ff..68690640c7 100644
--- a/share/qtcreator/welcomescreen/widgets/SearchBar.qml
+++ b/share/qtcreator/welcomescreen/widgets/SearchBar.qml
@@ -27,7 +27,9 @@
**
****************************************************************************/
-import QtQuick 2.1
+import QtQuick 2.2
+import QtQuick.Controls 1.1
+import QtQuick.Controls.Styles 1.1
Rectangle {
id: searchBar
@@ -38,10 +40,10 @@ Rectangle {
radius: 6
border.color: "#cccccc"
- property alias placeholderText: placeHolderText.text
+ property alias placeholderText: lineEdit.placeholderText
property alias text: lineEdit.text
- TextInput {
+ TextField {
id: lineEdit
anchors.topMargin: 1
anchors.left: parent.left
@@ -50,18 +52,11 @@ Rectangle {
anchors.leftMargin: 12
anchors.fill: parent
verticalAlignment: Text.AlignVCenter
- renderType: Text.NativeRendering
font.pixelSize: 14
- font.family: "Helvetica"
- }
-
- NativeText {
- id: placeHolderText
- visible: !lineEdit.text.length
- text: qsTr("Search...")
- anchors.fill: lineEdit
- font: lineEdit.font
- verticalAlignment: Text.AlignVCenter
- color: "gray"
+ placeholderText: qsTr("Search...")
+ style: TextFieldStyle {
+ background: Item {
+ }
+ }
}
}
diff --git a/share/qtcreator/welcomescreen/widgets/SideBar.qml b/share/qtcreator/welcomescreen/widgets/SideBar.qml
index c2d4153409..521bf45c5d 100644
--- a/share/qtcreator/welcomescreen/widgets/SideBar.qml
+++ b/share/qtcreator/welcomescreen/widgets/SideBar.qml
@@ -121,7 +121,7 @@ ColumnLayout {
Button {
text: qsTr("Get Started Now")
- onClicked: gettingStarted.openSplitHelp("qthelp://org.qt-project.qtcreator/doc/creator-getting-started.html")
+ onClicked: gettingStarted.openHelp("qthelp://org.qt-project.qtcreator/doc/index.html")
}
Item {
diff --git a/src/libs/utils/filenamevalidatinglineedit.cpp b/src/libs/utils/filenamevalidatinglineedit.cpp
index 8202f03baa..9fea015c5b 100644
--- a/src/libs/utils/filenamevalidatinglineedit.cpp
+++ b/src/libs/utils/filenamevalidatinglineedit.cpp
@@ -98,7 +98,7 @@ void FileNameValidatingLineEdit::setForceFirstCapitalLetter(bool b)
#define SLASHES "/\\"
static const char notAllowedCharsSubDir[] = ",^@=+{}[]~!?:&*\"|#%<>$\"'();`' ";
-static const char notAllowedCharsNoSubDir[] = ",^@=+{}[]~!?:&*\"|#%<>$\"'();`' " SLASHES;
+static const char notAllowedCharsNoSubDir[] = ",^@={}[]~!?:&*\"|#%<>$\"'();`' " SLASHES;
static const char *notAllowedSubStrings[] = {".."};
diff --git a/src/libs/utils/projectnamevalidatinglineedit.cpp b/src/libs/utils/projectnamevalidatinglineedit.cpp
index 3d54c4b574..642f9deed6 100644
--- a/src/libs/utils/projectnamevalidatinglineedit.cpp
+++ b/src/libs/utils/projectnamevalidatinglineedit.cpp
@@ -54,7 +54,7 @@ bool ProjectNameValidatingLineEdit::validateProjectName(const QString &name, QSt
if (name.contains(QLatin1Char('.'))) {
if (errorMessage)
*errorMessage = tr("Invalid character '.'.");
- return false;
+ return false;
}
return true;
}
diff --git a/src/plugins/coreplugin/coreconstants.h b/src/plugins/coreplugin/coreconstants.h
index 547277f7d0..3422518870 100644
--- a/src/plugins/coreplugin/coreconstants.h
+++ b/src/plugins/coreplugin/coreconstants.h
@@ -175,6 +175,7 @@ const char G_WINDOW_OTHER[] = "QtCreator.Group.Window.Other";
// Help groups (global)
const char G_HELP_HELP[] = "QtCreator.Group.Help.Help";
+const char G_HELP_SUPPORT[] = "QtCreator.Group.Help.Supprt";
const char G_HELP_ABOUT[] = "QtCreator.Group.Help.About";
const char ICON_MINUS[] = ":/core/images/minus.png";
diff --git a/src/plugins/coreplugin/mainwindow.cpp b/src/plugins/coreplugin/mainwindow.cpp
index 08e00627c9..383e302ae0 100644
--- a/src/plugins/coreplugin/mainwindow.cpp
+++ b/src/plugins/coreplugin/mainwindow.cpp
@@ -509,6 +509,7 @@ void MainWindow::registerDefaultContainers()
menubar->addMenu(ac, Constants::G_HELP);
ac->menu()->setTitle(tr("&Help"));
ac->appendGroup(Constants::G_HELP_HELP);
+ ac->appendGroup(Constants::G_HELP_SUPPORT);
ac->appendGroup(Constants::G_HELP_ABOUT);
}
@@ -744,6 +745,11 @@ void MainWindow::registerDefaultActions()
mwindow->addMenu(mviews, Constants::G_WINDOW_VIEWS);
mviews->menu()->setTitle(tr("&Views"));
+ // "Help" separators
+ mhelp->addSeparator(globalContext, Constants::G_HELP_SUPPORT);
+ if (!Utils::HostOsInfo::isMacHost())
+ mhelp->addSeparator(globalContext, Constants::G_HELP_ABOUT);
+
// About IDE Action
icon = QIcon::fromTheme(QLatin1String("help-about"));
if (Utils::HostOsInfo::isMacHost())
diff --git a/src/plugins/help/helpplugin.cpp b/src/plugins/help/helpplugin.cpp
index 9dccbc6e59..840a39e42d 100644
--- a/src/plugins/help/helpplugin.cpp
+++ b/src/plugins/help/helpplugin.cpp
@@ -229,7 +229,7 @@ bool HelpPlugin::initialize(const QStringList &arguments, QString *error)
cmd->setDefaultKeySequence(QKeySequence(UseMacShortcuts ? tr("Meta+M") : tr("Ctrl+M")));
connect(action, SIGNAL(triggered()), this, SLOT(addBookmark()));
- // Add Contents, Index, and Context menu items and a separator to the Help menu
+ // Add Contents, Index, and Context menu items
action = new QAction(QIcon::fromTheme(QLatin1String("help-contents")),
tr(SB_CONTENTS), this);
cmd = ActionManager::registerAction(action, "Help.Contents", globalcontext);
@@ -247,30 +247,16 @@ bool HelpPlugin::initialize(const QStringList &arguments, QString *error)
cmd->setDefaultKeySequence(QKeySequence(Qt::Key_F1));
connect(action, SIGNAL(triggered()), this, SLOT(activateContext()));
- if (!Utils::HostOsInfo::isMacHost()) {
- action = new QAction(this);
- action->setSeparator(true);
- cmd = ActionManager::registerAction(action, "Help.Separator", globalcontext);
- ActionManager::actionContainer(Core::Constants::M_HELP)->addAction(cmd, Core::Constants::G_HELP_HELP);
- }
-
action = new QAction(tr("Technical Support"), this);
cmd = ActionManager::registerAction(action, "Help.TechSupport", globalcontext);
- ActionManager::actionContainer(Core::Constants::M_HELP)->addAction(cmd, Core::Constants::G_HELP_HELP);
+ ActionManager::actionContainer(Core::Constants::M_HELP)->addAction(cmd, Core::Constants::G_HELP_SUPPORT);
connect(action, SIGNAL(triggered()), this, SLOT(slotOpenSupportPage()));
action = new QAction(tr("Report Bug..."), this);
cmd = ActionManager::registerAction(action, "Help.ReportBug", globalcontext);
- ActionManager::actionContainer(Core::Constants::M_HELP)->addAction(cmd, Core::Constants::G_HELP_HELP);
+ ActionManager::actionContainer(Core::Constants::M_HELP)->addAction(cmd, Core::Constants::G_HELP_SUPPORT);
connect(action, SIGNAL(triggered()), this, SLOT(slotReportBug()));
- if (!Utils::HostOsInfo::isMacHost()) {
- action = new QAction(this);
- action->setSeparator(true);
- cmd = ActionManager::registerAction(action, "Help.Separator2", globalcontext);
- ActionManager::actionContainer(Core::Constants::M_HELP)->addAction(cmd, Core::Constants::G_HELP_HELP);
- }
-
action = new QAction(this);
ActionManager::registerAction(action, Core::Constants::PRINT, modecontext);
connect(action, SIGNAL(triggered()), m_centralWidget, SLOT(print()));
diff --git a/src/plugins/ios/iosrunconfiguration.cpp b/src/plugins/ios/iosrunconfiguration.cpp
index b4994f4e26..f607d311c9 100644
--- a/src/plugins/ios/iosrunconfiguration.cpp
+++ b/src/plugins/ios/iosrunconfiguration.cpp
@@ -54,6 +54,8 @@ using namespace QmakeProjectManager;
namespace Ios {
namespace Internal {
+const QLatin1String runConfigurationKey("Ios.run_arguments");
+
class IosRunConfigurationWidget : public RunConfigWidget
{
Q_OBJECT
@@ -84,6 +86,7 @@ IosRunConfiguration::IosRunConfiguration(Target *parent, Core::Id id, const QStr
IosRunConfiguration::IosRunConfiguration(Target *parent, IosRunConfiguration *source)
: RunConfiguration(parent, source)
, m_profilePath(source->m_profilePath)
+ , m_arguments(source->m_arguments)
{
init();
}
@@ -194,6 +197,19 @@ Utils::FileName IosRunConfiguration::exePath() const
return bundleDir().appendPath(appName());
}
+bool IosRunConfiguration::fromMap(const QVariantMap &map)
+{
+ m_arguments = map.value(runConfigurationKey).toStringList();
+ return RunConfiguration::fromMap(map);
+}
+
+QVariantMap IosRunConfiguration::toMap() const
+{
+ QVariantMap res = RunConfiguration::toMap();
+ res[runConfigurationKey] = m_arguments;
+ return res;
+}
+
IosRunConfigurationWidget::IosRunConfigurationWidget(IosRunConfiguration *runConfiguration) :
m_ui(new Ui::IosRunConfiguration), m_runConfiguration(runConfiguration)
{
diff --git a/src/plugins/ios/iosrunconfiguration.h b/src/plugins/ios/iosrunconfiguration.h
index 0acf6f8ec1..0c394361fd 100644
--- a/src/plugins/ios/iosrunconfiguration.h
+++ b/src/plugins/ios/iosrunconfiguration.h
@@ -61,6 +61,9 @@ public:
Utils::FileName bundleDir() const;
Utils::FileName exePath() const;
+ bool fromMap(const QVariantMap &map) QTC_OVERRIDE;
+ QVariantMap toMap() const QTC_OVERRIDE;
+
protected:
IosRunConfiguration(ProjectExplorer::Target *parent, IosRunConfiguration *source);
QString defaultDisplayName();
diff --git a/src/plugins/qmldesigner/components/propertyeditor/fileresourcesmodel.cpp b/src/plugins/qmldesigner/components/propertyeditor/fileresourcesmodel.cpp
index 7ebfa5d645..6e3a1e90f8 100644
--- a/src/plugins/qmldesigner/components/propertyeditor/fileresourcesmodel.cpp
+++ b/src/plugins/qmldesigner/components/propertyeditor/fileresourcesmodel.cpp
@@ -29,6 +29,8 @@
#include "fileresourcesmodel.h"
+#include <coreplugin/icore.h>
+
#include <model.h>
#include <QFileDialog>
@@ -130,7 +132,7 @@ void FileResourcesModel::openFileDialog()
if (!QFileInfo(path).exists())
path = modelPath;
- QString newFile = QFileDialog::getOpenFileName(0, tr("Open File"), path, m_filter);
+ QString newFile = QFileDialog::getOpenFileName(Core::ICore::mainWindow(), tr("Open File"), path, m_filter);
if (!newFile.isEmpty()) {
setFileNameStr(newFile);
diff --git a/src/plugins/qmldesigner/components/stateseditor/stateseditorimageprovider.cpp b/src/plugins/qmldesigner/components/stateseditor/stateseditorimageprovider.cpp
index a5febcab8f..6e8d65029d 100644
--- a/src/plugins/qmldesigner/components/stateseditor/stateseditorimageprovider.cpp
+++ b/src/plugins/qmldesigner/components/stateseditor/stateseditorimageprovider.cpp
@@ -42,17 +42,20 @@ StatesEditorImageProvider::StatesEditorImageProvider()
QImage StatesEditorImageProvider::requestImage(const QString &id, QSize *size, const QSize &requestedSize)
{
- if (m_nodeInstanceView.isNull())
- return QImage();
-
- if (!m_nodeInstanceView->model())
- return QImage(); //NodeInstanceView might be detached
QSize newSize = requestedSize;
if (newSize.isEmpty())
newSize = QSize (100, 100);
+ if (m_nodeInstanceView.isNull() || !m_nodeInstanceView->model()) {
+ //NodeInstanceView might be detached
+ //Return white QImage
+ QImage image(newSize, QImage::Format_ARGB32);
+ image.fill(0xFFFFFFFF);
+ return image;
+ }
+
QString imageId = id.split(QLatin1Char('-')).first();
QImage image;
diff --git a/src/plugins/qmldesigner/components/stateseditor/stateslist.qml b/src/plugins/qmldesigner/components/stateseditor/stateslist.qml
index f35376b0d4..c838d13b21 100644
--- a/src/plugins/qmldesigner/components/stateseditor/stateslist.qml
+++ b/src/plugins/qmldesigner/components/stateseditor/stateslist.qml
@@ -397,7 +397,6 @@ Rectangle {
Component {
id: underlay
Item {
- anchors.fill:parent
property variant color: parent.color
clip:true
Rectangle {
diff --git a/src/plugins/qnx/qnxdeviceconfigurationwizard.cpp b/src/plugins/qnx/qnxdeviceconfigurationwizard.cpp
index e7cd6505f8..e052237371 100644
--- a/src/plugins/qnx/qnxdeviceconfigurationwizard.cpp
+++ b/src/plugins/qnx/qnxdeviceconfigurationwizard.cpp
@@ -65,7 +65,8 @@ IDevice::Ptr QnxDeviceConfigurationWizard::device()
sshParams.port = 22;
sshParams.timeout = 10;
sshParams.authenticationType = m_setupPage->authenticationType();
- if (sshParams.authenticationType == QSsh::SshConnectionParameters::AuthenticationTypePassword)
+ if (sshParams.authenticationType == QSsh::SshConnectionParameters::AuthenticationTypeTryAllPasswordBasedMethods
+ || sshParams.authenticationType == QSsh::SshConnectionParameters::AuthenticationTypePassword)
sshParams.password = m_setupPage->password();
else
sshParams.privateKeyFile = m_setupPage->privateKeyFilePath();
diff --git a/src/plugins/remotelinux/remotelinuxsignaloperation.cpp b/src/plugins/remotelinux/remotelinuxsignaloperation.cpp
index a926aafc3c..223a655ca6 100644
--- a/src/plugins/remotelinux/remotelinuxsignaloperation.cpp
+++ b/src/plugins/remotelinux/remotelinuxsignaloperation.cpp
@@ -78,7 +78,7 @@ static QString signalProcessByNameCommandLine(const QString &filePath, int signa
"cd /proc; for pid in `ls -d [0123456789]*`; "
"do "
"if [ \"`readlink /proc/$pid/exe`\" = \"%1\" ]; then "
- " kill %2 $pid;"
+ " kill -%2 $pid;"
"fi; "
"done").arg(filePath).arg(signal);
}
diff --git a/src/qtcreatorplugin.pri b/src/qtcreatorplugin.pri
index 21dc0d78ce..b90b9b9b83 100644
--- a/src/qtcreatorplugin.pri
+++ b/src/qtcreatorplugin.pri
@@ -17,11 +17,29 @@ include(../qtcreator.pri)
# for substitution in the .pluginspec
dependencyList = "<dependencyList>"
for(dep, plugin_deps) {
- include($$PWD/plugins/$$dep/$${dep}_dependencies.pri)
+ dependencies_file =
+ for(dir, QTC_PLUGIN_DIRS) {
+ exists($$dir/$$dep/$${dep}_dependencies.pri) {
+ dependencies_file = $$dir/$$dep/$${dep}_dependencies.pri
+ break()
+ }
+ }
+ isEmpty(dependencies_file): \
+ error("Plugin dependency $$dep not found")
+ include($$dependencies_file)
dependencyList += " <dependency name=\"$$QTC_PLUGIN_NAME\" version=\"$$QTCREATOR_VERSION\"/>"
}
for(dep, plugin_recmds) {
- include($$PWD/plugins/$$dep/$${dep}_dependencies.pri)
+ dependencies_file =
+ for(dir, QTC_PLUGIN_DIRS) {
+ exists($$dir/$$dep/$${dep}_dependencies.pri) {
+ dependencies_file = $$dir/$$dep/$${dep}_dependencies.pri
+ break()
+ }
+ }
+ isEmpty(dependencies_file): \
+ error("Plugin dependency $$dep not found")
+ include($$dependencies_file)
dependencyList += " <dependency name=\"$$QTC_PLUGIN_NAME\" version=\"$$QTCREATOR_VERSION\" type=\"optional\"/>"
}
dependencyList += " </dependencyList>"
diff --git a/src/shared/proparser/qmakebuiltins.cpp b/src/shared/proparser/qmakebuiltins.cpp
index 0cf81ce30c..d51b476d8d 100644
--- a/src/shared/proparser/qmakebuiltins.cpp
+++ b/src/shared/proparser/qmakebuiltins.cpp
@@ -508,7 +508,7 @@ ProStringList QMakeEvaluator::evaluateBuiltinExpand(
QString tmp = args.at(0).toQString(m_tmp1);
for (int i = 1; i < args.count(); ++i)
tmp = tmp.arg(args.at(i).toQString(m_tmp2));
- ret << ProString(tmp);
+ ret << (tmp.isSharedWith(m_tmp1) ? args.at(0) : ProString(tmp).setSource(args.at(0)));
}
break;
case E_FORMAT_NUMBER:
@@ -1526,7 +1526,7 @@ QMakeEvaluator::VisitReturn QMakeEvaluator::evaluateBuiltinConditional(
if (args.count() >= 2) {
const ProStringList &vals = values(args.at(1).toKey());
if (!vals.isEmpty())
- contents = vals.join(fL1S("\n")) + QLatin1Char('\n');
+ contents = vals.join(QLatin1Char('\n')) + QLatin1Char('\n');
if (args.count() >= 3)
if (!args.at(2).toQString(m_tmp1).compare(fL1S("append"), Qt::CaseInsensitive))
mode = QIODevice::Append;
diff --git a/tests/system/objects.map b/tests/system/objects.map
index d7c3c9a7c7..a6777ec688 100644
--- a/tests/system/objects.map
+++ b/tests/system/objects.map
@@ -29,6 +29,7 @@
:Add to Version Control.No_QPushButton {text='No' type='QPushButton' unnamed='1' visible='1' window=':Add to Version Control_QMessageBox'}
:Add to Version Control_QMessageBox {text~='Add the file.*to version control (.*)?' type='QMessageBox' unnamed='1' visible='1'}
:Analyzer Toolbar.AnalyzerManagerToolBox_QComboBox {container=':Qt Creator.Analyzer Toolbar_QDockWidget' name='AnalyzerManagerToolBox' type='QComboBox' visible='1'}
+:Analyzer Toolbar.Clear_QToolButton {container=':Qt Creator.Analyzer Toolbar_QDockWidget' toolTip='Discard data' type='QToolButton' unnamed='1' visible='1'}
:Analyzer Toolbar.Elapsed:_QLabel {container=':Qt Creator.Analyzer Toolbar_QDockWidget' text~='Elapsed: \\\\d+.\\\\d s' type='QLabel' unnamed='1' visible='1'}
:Analyzer Toolbar.Start_QToolButton {container=':Qt Creator.Analyzer Toolbar_QDockWidget' text='Start' type='QToolButton' unnamed='1' visible='1'}
:Behavior.Autocomplete common prefix_QCheckBox {container=':CppTools__Internal__CompletionSettingsPage.Behavior_QGroupBox' name='partiallyComplete' text='Autocomplete common prefix' type='QCheckBox' visible='1'}
diff --git a/tests/system/shared/build_utils.py b/tests/system/shared/build_utils.py
index 83188d5ed7..d5710f970d 100644
--- a/tests/system/shared/build_utils.py
+++ b/tests/system/shared/build_utils.py
@@ -29,38 +29,9 @@
import re;
-# dictionary to hold a list of all installed handler functions for all object-signalSignature pairs
-installedSignalHandlers = {}
-# flag to indicate whether overrideInstallLazySignalHandler() has been called already
-overridenInstallLazySignalHandlers = False
# flag to indicate whether a tasks file should be created when building ends with errors
createTasksFileOnError = True
-# call this function to override installLazySignalHandler()
-def overrideInstallLazySignalHandler():
- global overridenInstallLazySignalHandlers
- if overridenInstallLazySignalHandlers:
- return
- overridenInstallLazySignalHandlers = True
- global installLazySignalHandler
- installLazySignalHandler = __addSignalHandlerDict__(installLazySignalHandler)
-
-# avoids adding a handler to a signal twice or more often
-# do not call this function directly - use overrideInstallLazySignalHandler() instead
-def __addSignalHandlerDict__(lazySignalHandlerFunction):
- global installedSignalHandlers
- def wrappedFunction(name, signalSignature, handlerFunctionName):
- handlers = installedSignalHandlers.get("%s____%s" % (name,signalSignature))
- if handlers == None:
- lazySignalHandlerFunction(name, signalSignature, handlerFunctionName)
- installedSignalHandlers.setdefault("%s____%s" % (name,signalSignature), [handlerFunctionName])
- else:
- if not handlerFunctionName in handlers:
- lazySignalHandlerFunction(name, signalSignature, handlerFunctionName)
- handlers.append(handlerFunctionName)
- installedSignalHandlers.setdefault("%s____%s" % (name,signalSignature), handlers)
- return wrappedFunction
-
# this method checks the last build (if there's one) and logs the number of errors, warnings and
# lines within the Issues output
# optional parameter can be used to tell this function if the build was expected to fail or not
@@ -105,6 +76,13 @@ def compileSucceeded(compileOutput):
return None != re.match(".*exited normally\.\n\d\d:\d\d:\d\d: Elapsed time: "
"(\d:)?\d{2}:\d\d\.$", str(compileOutput), re.S)
+def waitForCompile(timeout=60000):
+ progressBarWait(10000) # avoids switching to Issues pane after checking Compile Output
+ ensureChecked(":Qt Creator_CompileOutput_Core::Internal::OutputPaneToggleButton")
+ output = waitForObject(":Qt Creator.Compile Output_Core::OutputWindow")
+ if not waitFor("re.match('.*Elapsed time: (\d:)?\d{2}:\d\d\.$', str(output.plainText), re.S)", timeout):
+ test.warning("Waiting for compile timed out after %d s." % (timeout / 1000))
+
def dumpBuildIssues(listModel):
issueDump = []
for row in range(listModel.rowCount()):
@@ -254,7 +232,8 @@ def runVerify(checkedTargets):
for kit, config in availableConfigs:
selectBuildConfig(len(checkedTargets), kit, config)
test.log("Using build config '%s'" % config)
- if not runAndCloseApp():
- return
+ if runAndCloseApp() == None:
+ checkCompile()
+ continue
verifyBuildAndRun()
mouseClick(waitForObject(":*Qt Creator.Clear_QToolButton"))
diff --git a/tests/system/shared/classes.py b/tests/system/shared/classes.py
index 5a7e84bbf0..b1f86d9f88 100644
--- a/tests/system/shared/classes.py
+++ b/tests/system/shared/classes.py
@@ -136,13 +136,16 @@ class SubprocessType:
USER_DEFINED=3
@staticmethod
- def getWindowType(subprocessType):
+ def getWindowType(subprocessType, qtQuickVersion=1):
if subprocessType == SubprocessType.QT_WIDGET:
return "QMainWindow"
if subprocessType == SubprocessType.QT_QUICK_APPLICATION:
- return "QmlApplicationViewer"
+ return "QtQuick%dApplicationViewer" % qtQuickVersion
if subprocessType == SubprocessType.QT_QUICK_UI:
- return "QDeclarativeViewer"
+ if qtQuickVersion == 1:
+ return "QDeclarativeViewer"
+ else:
+ return "QQuickView"
if subprocessType == SubprocessType.USER_DEFINED:
return "user-defined"
test.fatal("Could not determine the WindowType for SubprocessType %s" % subprocessType)
diff --git a/tests/system/shared/hook_utils.py b/tests/system/shared/hook_utils.py
index bc1a81b9fe..13800c9a85 100644
--- a/tests/system/shared/hook_utils.py
+++ b/tests/system/shared/hook_utils.py
@@ -68,6 +68,11 @@ def modifyRunSettingsForHookInto(projectName, kitCount, port):
changingVars.append("SQUISH_LIBQTDIR=%s" % replacement)
else:
changingVars.append(varName)
+ elif varName == "DYLD_FRAMEWORK_PATH" and platform.system() == 'Darwin':
+ value = str(model.data(model.index(index.row, 1)).toString())
+ test.log("Adding %s to DYLD_FRAMEWORK_PATH" % qtLibPath)
+ replacement = ":".join(filter(len, [qtLibPath, value]))
+ changingVars.append("%s=%s" % (varName, replacement))
batchEditRunEnvironment(kitCount, 0, changingVars, True)
switchViewTo(ViewConstants.EDIT)
return result
@@ -111,29 +116,12 @@ def modifyRunSettingsForHookIntoQtQuickUI(kitCount, workingDir, projectName, por
executable = os.path.abspath(os.path.dirname(qmake) + "/qmlscene")
if platform.system() in ('Microsoft', 'Windows'):
executable = executable + ".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(":Executable:_Utils::PathChooser")
- 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"
+ args = "--verbose --port=%d %s %s.qml" % (port, executable, projectName)
projectPath = os.path.abspath("%s/%s" % (workingDir, projectName))
- replaceEditorContent(exeLineEd, startAUT)
- replaceEditorContent(argLineEd, "--verbose --port=%d %s %s.qml"
- % (port, executable, projectName))
- replaceEditorContent(wdLineEd, projectPath)
+ __invokeAddCustomExecutable__(startAUT, args, 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) <b>Build Environment</b>'"
@@ -231,27 +219,13 @@ def __configureCustomExecutable__(projectName, port, mkspec, qmakeVersion):
"Failed to find '%s'" % startAUT)
return False
progressBarWait()
- addButton = 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(addButton)
- addMenu = addButton.menu()
- activateItem(waitForObjectItem(addMenu, 'Custom Executable'))
- exePathChooser = waitForObject(":Executable:_Utils::PathChooser", 2000)
- 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'}")
- replaceEditorContent(exeLineEd, startAUT)
# the following is currently only configured for release builds (will be enhanced later)
if platform.system() in ('Microsoft', 'Windows'):
debOrRel = "release" + os.sep
else:
debOrRel = ""
- replaceEditorContent(argLineEd, "--verbose --port=%d %s%s" % (port, debOrRel, projectName))
+ args = "--verbose --port=%d %s%s" % (port, debOrRel, projectName)
+ __invokeAddCustomExecutable__(startAUT, args)
return True
# function that retrieves a specific child object by its class
@@ -424,3 +398,25 @@ def __getSquishServer__():
test.fatal("SQUISH_PREFIX isn't set - leaving test")
return None
return os.path.abspath(squishSrv + "/bin/squishserver")
+
+def __invokeAddCustomExecutable__(exe, args, workingDir=None):
+ addButton = 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(addButton)
+ addMenu = addButton.menu()
+ activateItem(waitForObjectItem(addMenu, 'Custom Executable'))
+ exePathChooser = waitForObject(":Executable:_Utils::PathChooser")
+ 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")
+ replaceEditorContent(exeLineEd, exe)
+ replaceEditorContent(argLineEd, args)
+ if workingDir:
+ replaceEditorContent(wdLineEd, workingDir)
diff --git a/tests/system/shared/project.py b/tests/system/shared/project.py
index 9a541ffe2e..abaf2af374 100644
--- a/tests/system/shared/project.py
+++ b/tests/system/shared/project.py
@@ -397,24 +397,23 @@ def waitForProcessRunning(running=True):
# 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
-def runAndCloseApp(withHookInto=False, executable=None, port=None, function=None, sType=None, userDefinedType=None):
+# returns None if the build failed, False if the subprocess did not start, and True otherwise
+def runAndCloseApp(withHookInto=False, executable=None, port=None, function=None, sType=None, userDefinedType=None, quickVersion=1):
runButton = waitForObject(":*Qt Creator.Run_Core::Internal::FancyToolButton")
clickButton(runButton)
if sType != SubprocessType.QT_QUICK_UI:
- waitForSignal("{type='ProjectExplorer::BuildManager' unnamed='1'}", "buildQueueFinished(bool)", 300000)
+ waitForCompile(300000)
buildSucceeded = checkLastBuild()
ensureChecked(waitForObject(":Qt Creator_AppOutput_Core::Internal::OutputPaneToggleButton"))
if not buildSucceeded:
test.fatal("Build inside run wasn't successful - leaving test")
- invokeMenuItem("File", "Exit")
- return False
+ return None
if not waitForProcessRunning():
test.fatal("Couldn't start application - leaving test")
- invokeMenuItem("File", "Exit")
return False
if sType == SubprocessType.QT_QUICK_UI and os.getenv("SYSTEST_QMLVIEWER_NO_HOOK_INTO", "0") == "1":
withHookInto = False
- if withHookInto and not validType(sType, userDefinedType):
+ if withHookInto and not validType(sType, userDefinedType, quickVersion):
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 "
@@ -425,15 +424,15 @@ def runAndCloseApp(withHookInto=False, executable=None, port=None, function=None
"inside creator to terminate execution of the subprocess.")
withHookInto = False
if withHookInto and not executable in ("", None):
- __closeSubprocessByHookingInto__(executable, port, function, sType, userDefinedType)
+ __closeSubprocessByHookingInto__(executable, port, function, sType, userDefinedType, quickVersion)
else:
__closeSubprocessByPushingStop__(sType)
return True
-def validType(sType, userDef):
+def validType(sType, userDef, quickVersion):
if sType == None:
return False
- ty = SubprocessType.getWindowType(sType)
+ ty = SubprocessType.getWindowType(sType, quickVersion)
return ty != None and not (ty == "user-defined" and (userDef == None or userDef.strip() == ""))
def __closeSubprocessByPushingStop__(sType):
@@ -455,7 +454,7 @@ def __closeSubprocessByPushingStop__(sType):
else:
test.fatal("Subprocess does not seem to have been started.")
-def __closeSubprocessByHookingInto__(executable, port, function, sType, userDefType):
+def __closeSubprocessByHookingInto__(executable, port, function, sType, userDefType, quickVersion):
ensureChecked(":Qt Creator_AppOutput_Core::Internal::OutputPaneToggleButton")
output = waitForObject("{type='Core::OutputWindow' visible='1' windowTitle='Application Output Window'}")
if port == None:
@@ -498,7 +497,7 @@ def __closeSubprocessByHookingInto__(executable, port, function, sType, userDefT
if sType==SubprocessType.USER_DEFINED:
sendEvent("QCloseEvent", "{type='%s' unnamed='1' visible='1'}" % userDefType)
else:
- sendEvent("QCloseEvent", "{type='%s' unnamed='1' visible='1'}" % SubprocessType.getWindowType(sType))
+ sendEvent("QCloseEvent", "{type='%s' unnamed='1' visible='1'}" % SubprocessType.getWindowType(sType, quickVersion))
resetApplicationContextToCreator()
else:
try:
@@ -512,12 +511,15 @@ def __closeSubprocessByHookingInto__(executable, port, function, sType, userDefT
resetApplicationContextToCreator()
__closeSubprocessByPushingStop__(sType)
resetApplicationContextToCreator()
- if not waitForProcessRunning(False) and waitFor("'exited with code' in str(output.plainText)", 10000):
+ if not (waitForProcessRunning(False) and waitFor("'exited with code' in str(output.plainText)", 10000)):
test.warning("Sub-process seems not to have closed properly.")
try:
__closeSubprocessByPushingStop__(sType)
except:
pass
+ if (platform.system() in ('Microsoft', 'Windows') and
+ 'Listening on port %d for incoming connectionsdone' % port not in str(output.plainText)):
+ checkForStillRunningQmlExecutable([executable + ".exe"])
return True
# this helper tries to reset the current application context back
diff --git a/tests/system/shared/project_explorer.py b/tests/system/shared/project_explorer.py
index 07f0fe6af8..f6f0a78635 100644
--- a/tests/system/shared/project_explorer.py
+++ b/tests/system/shared/project_explorer.py
@@ -301,10 +301,7 @@ def invokeContextMenuOnProject(projectName, menuItem):
str(projItem.text).replace("_", "\\_").replace(".", "\\."), 5, 5, 0)
# Hack for Squish 5.0.1 handling menus of Qt5.2 on Mac (avoids crash) - remove asap
if platform.system() == 'Darwin':
- for obj in object.topLevelObjects():
- if (className(obj) == "QMenu" and obj.visible):
- activateItem(waitForObjectItem(obj, menuItem))
- break
+ waitFor("macHackActivateContextMenuItem(menuItem)", 6000)
else:
activateItem(waitForObjectItem("{name='Project.Menu.Project' type='QMenu' visible='1' "
"window=':Qt Creator_Core::Internal::MainWindow'}", menuItem))
diff --git a/tests/system/shared/qtcreator.py b/tests/system/shared/qtcreator.py
index 290d622ce7..086aa9411e 100644
--- a/tests/system/shared/qtcreator.py
+++ b/tests/system/shared/qtcreator.py
@@ -95,7 +95,7 @@ def waitForCleanShutdown(timeOut=10):
shutdownDone = (str(appCtxt)=="")
if platform.system() in ('Windows','Microsoft'):
# cleaning helper for running on the build machines
- __checkForQmlViewerAndQmlScene__()
+ checkForStillRunningQmlExecutable(['qmlviewer.exe', 'qmlscene.exe'])
endtime = datetime.utcnow() + timedelta(seconds=timeOut)
while not shutdownDone:
# following work-around because os.kill() works for win not until python 2.7
@@ -120,8 +120,8 @@ def waitForCleanShutdown(timeOut=10):
if not shutdownDone and datetime.utcnow() > endtime:
break
-def __checkForQmlViewerAndQmlScene__():
- for qmlHelper in ['qmlviewer.exe', 'qmlscene.exe']:
+def checkForStillRunningQmlExecutable(possibleNames):
+ for qmlHelper in possibleNames:
tasks = subprocess.Popen("tasklist /FI \"IMAGENAME eq %s\"" % qmlHelper, shell=True,
stdout=subprocess.PIPE)
output = tasks.communicate()[0]
diff --git a/tests/system/shared/utils.py b/tests/system/shared/utils.py
index 0d7c5f2050..09d5a74c1e 100644
--- a/tests/system/shared/utils.py
+++ b/tests/system/shared/utils.py
@@ -169,43 +169,6 @@ def which(program):
return cf
return None
-signalObjects = {}
-
-# do not call this function directly - it's only a helper
-def __callbackFunction__(object, *args):
- global signalObjects
-# test.log("__callbackFunction__: "+objectMap.realName(object))
- signalObjects[objectMap.realName(object)] += 1
-
-def waitForSignal(object, signal, timeout=30000):
- global signalObjects
- realName = prepareForSignal(object, signal)
- beforeCount = signalObjects[realName]
- waitFor("signalObjects[realName] > beforeCount", timeout)
-
-handledSignal = {}
-
-def prepareForSignal(object, signal):
- global signalObjects
- global handledSignal
- overrideInstallLazySignalHandler()
- realName = objectMap.realName(object)
-# test.log("waitForSignal: "+realName)
- if realName in handledSignal.keys():
- if handledSignal[realName] != signal:
- # The current implementation does not support this.
- # When an object has two different handled signals, waitForSignal() will only wait
- # for the first of them to be emitted.
- test.warning("You are trying to handle two different signals from the same object.",
- "Adding %s to object %s, which already has handled signal %s. "
- "This can lead to unexpected results." % (signal, realName, handledSignal[realName]))
- else:
- handledSignal[realName] = signal
- if not (realName in signalObjects):
- signalObjects[realName] = 0
- installLazySignalHandler(object, signal, "__callbackFunction__")
- return realName
-
# this function removes the user files of given pro file(s)
# can be called with a single string object or a list of strings holding path(s) to
# the pro file(s) returns False if it could not remove all user files or has been
diff --git a/tests/system/shared/workarounds.py b/tests/system/shared/workarounds.py
index 05a413eb57..f1cef9a2b8 100644
--- a/tests/system/shared/workarounds.py
+++ b/tests/system/shared/workarounds.py
@@ -30,6 +30,35 @@
import urllib2
import re
+############ functions not related to issues tracked inside jira ############
+
+def __checkWithoutWidget__(*args):
+ return className(args[0]) == 'QMenu' and args[0].visible
+
+def __checkWithWidget__(*args):
+ return (__checkWithoutWidget__(args[0])
+ and widgetContainsPoint(waitForObject(args[1]), args[0].mapToGlobal(QPoint(0 ,0))))
+
+# hack for activating context menus on Mac because of Squish5/Qt5.2 problems
+# param item a string holding the menu item to invoke (just the label)
+# param widget an object; if provided there will be an additional check if the menu's top left
+# corner is placed on this widget
+def macHackActivateContextMenuItem(item, widget=None):
+ if widget:
+ func = __checkWithWidget__
+ else:
+ func = __checkWithoutWidget__
+ for obj in object.topLevelObjects():
+ try:
+ if func(obj, widget):
+ activateItem(waitForObjectItem(obj, item))
+ return True
+ except:
+ pass
+ return False
+
+################ workarounds for issues tracked inside jira #################
+
JIRA_URL='https://bugreports.qt-project.org/browse'
class JIRA:
diff --git a/tests/system/shared_data/qt_squish_mapping.tsv b/tests/system/shared_data/qt_squish_mapping.tsv
index f535d22373..8f2202f574 100644
--- a/tests/system/shared_data/qt_squish_mapping.tsv
+++ b/tests/system/shared_data/qt_squish_mapping.tsv
@@ -29,3 +29,8 @@
"5.0" "4.8" "macx-g++" "~/QtSDK/src/creator-test-data/Squish5_48_Mac"
"5.0" "4.8" "linux-g++" "~/QtSDK/src/creator-test-data/Squish5_48_Linux32"
"5.0" "4.8" "linux-g++-64" "~/QtSDK/src/creator-test-data/Squish5_48_Linux64"
+"5.0" "5.0" "macx-clang" "~/QtSDK/src/creator-test-data/Squish5_50_Mac"
+"5.0" "5.0" "linux-g++" "~/QtSDK/src/creator-test-data/Squish5_50_Linux32"
+"5.0" "5.0" "linux-g++-64" "~/QtSDK/src/creator-test-data/Squish5_50_Linux64"
+"5.0" "5.0" "win32-g++" "C:\QtSDK\src\creator-test-data\Squish5_50_MinGW"
+"5.0" "5.0" "win32-msvc2010" "C:\QtSDK\src\creator-test-data\Squish5_50_MSVC10"
diff --git a/tests/system/suite_CCOM/tst_CCOM01/test.py b/tests/system/suite_CCOM/tst_CCOM01/test.py
index b8a02903f0..e65bfd737b 100755
--- a/tests/system/suite_CCOM/tst_CCOM01/test.py
+++ b/tests/system/suite_CCOM/tst_CCOM01/test.py
@@ -59,7 +59,7 @@ def main():
# try to build project
test.log("Testing build configuration: " + config)
invokeMenuItem("Build", "Build All")
- waitForSignal("{type='ProjectExplorer::BuildManager' unnamed='1'}", "buildQueueFinished(bool)")
+ waitForCompile()
# verify build successful
ensureChecked(waitForObject(":Qt Creator_CompileOutput_Core::Internal::OutputPaneToggleButton"))
compileOutput = waitForObject(":Qt Creator.Compile Output_Core::OutputWindow")
diff --git a/tests/system/suite_SCOM/tst_SCOM01/test.py b/tests/system/suite_SCOM/tst_SCOM01/test.py
index 7749cf516d..caf82c42e4 100644
--- a/tests/system/suite_SCOM/tst_SCOM01/test.py
+++ b/tests/system/suite_SCOM/tst_SCOM01/test.py
@@ -46,7 +46,7 @@ def main():
# try to compile
test.log("Testing build configuration: " + config)
clickButton(waitForObject(":*Qt Creator.Build Project_Core::Internal::FancyToolButton"))
- waitForSignal("{type='ProjectExplorer::BuildManager' unnamed='1'}", "buildQueueFinished(bool)")
+ waitForCompile()
# check output if build successful
ensureChecked(waitForObject(":Qt Creator_CompileOutput_Core::Internal::OutputPaneToggleButton"))
waitFor("object.exists(':*Qt Creator.Cancel Build_QToolButton')", 20000)
diff --git a/tests/system/suite_SCOM/tst_SCOM04/test.py b/tests/system/suite_SCOM/tst_SCOM04/test.py
index 2d502edad9..7cea5b1c73 100644
--- a/tests/system/suite_SCOM/tst_SCOM04/test.py
+++ b/tests/system/suite_SCOM/tst_SCOM04/test.py
@@ -58,7 +58,7 @@ def main():
test.log("Testing build configuration: " + config)
clickButton(waitForObject(":*Qt Creator.Build Project_Core::Internal::FancyToolButton"))
# wait until build finished
- waitForSignal("{type='ProjectExplorer::BuildManager' unnamed='1'}", "buildQueueFinished(bool)")
+ waitForCompile()
# open issues list view
ensureChecked(waitForObject(":Qt Creator_Issues_Core::Internal::OutputPaneToggleButton"))
issuesView = waitForObject(":Qt Creator.Issues_QListView")
diff --git a/tests/system/suite_SCOM/tst_SCOM05/test.py b/tests/system/suite_SCOM/tst_SCOM05/test.py
index 39f2a3489e..4161697a7a 100644
--- a/tests/system/suite_SCOM/tst_SCOM05/test.py
+++ b/tests/system/suite_SCOM/tst_SCOM05/test.py
@@ -54,7 +54,7 @@ def main():
# build project 2
clickButton(waitForObject(":*Qt Creator.Build Project_Core::Internal::FancyToolButton"))
# wait for build to complete
- waitForSignal("{type='ProjectExplorer::BuildManager' unnamed='1'}", "buildQueueFinished(bool)")
+ waitForCompile()
# check output if build successful
ensureChecked(waitForObject(":Qt Creator_CompileOutput_Core::Internal::OutputPaneToggleButton"))
outputLog = str(waitForObject(":Qt Creator.Compile Output_Core::OutputWindow").plainText)
diff --git a/tests/system/suite_debugger/tst_build_new_project/test.py b/tests/system/suite_debugger/tst_build_new_project/test.py
index 8cded60096..22a669d73b 100644
--- a/tests/system/suite_debugger/tst_build_new_project/test.py
+++ b/tests/system/suite_debugger/tst_build_new_project/test.py
@@ -42,6 +42,6 @@ def main():
for kit, config in availableConfigs:
selectBuildConfig(len(checkedTargets), kit, config)
test.log("Testing build configuration: " + config)
- if not runAndCloseApp():
- return
+ if runAndCloseApp() == None:
+ checkCompile()
invokeMenuItem("File", "Exit")
diff --git a/tests/system/suite_debugger/tst_debug_empty_main/test.py b/tests/system/suite_debugger/tst_debug_empty_main/test.py
index ab5eceea28..0d5c68a260 100644
--- a/tests/system/suite_debugger/tst_debug_empty_main/test.py
+++ b/tests/system/suite_debugger/tst_debug_empty_main/test.py
@@ -103,7 +103,7 @@ def performDebugging(workingDir, projectName, checkedTargets):
verifyBuildConfig(len(checkedTargets), kit, True)
progressBarWait(10000)
invokeMenuItem("Build", "Rebuild All")
- waitForSignal("{type='ProjectExplorer::BuildManager' unnamed='1'}", "buildQueueFinished(bool)")
+ waitForCompile()
isMsvc = isMsvcConfig(len(checkedTargets), kit)
allowAppThroughWinFW(workingDir, projectName, False)
clickButton(waitForObject(":*Qt Creator.Start Debugging_Core::Internal::FancyToolButton"))
diff --git a/tests/system/suite_debugger/tst_simple_analyze/test.py b/tests/system/suite_debugger/tst_simple_analyze/test.py
index 086cdbcec4..d3a5a155db 100644
--- a/tests/system/suite_debugger/tst_simple_analyze/test.py
+++ b/tests/system/suite_debugger/tst_simple_analyze/test.py
@@ -75,8 +75,7 @@ def performTest(workingDir, projectName, targetCount, availableConfigs, disableO
switchViewTo(ViewConstants.EDIT)
# explicitly build before start debugging for adding the executable as allowed program to WinFW
invokeMenuItem("Build", "Rebuild All")
- waitForSignal("{type='ProjectExplorer::BuildManager' unnamed='1'}",
- "buildQueueFinished(bool)")
+ waitForCompile()
if not checkCompile():
test.fatal("Compile had errors... Skipping current build config")
continue
@@ -131,6 +130,8 @@ def performTest(workingDir, projectName, targetCount, availableConfigs, disableO
"For two calls, median and longest time must be the same.")
deleteAppFromWinFW(workingDir, projectName, False)
progressBarWait(15000, False) # wait for "Build" progressbar to disappear
+ clickButton(waitForObject(":Analyzer Toolbar.Clear_QToolButton"))
+ test.verify(waitFor("model.rowCount() == 0", 3000), "Analyzer results cleared.")
def compareEventsTab(model, file):
significantColumns = [0, 1, 4, 9]
diff --git a/tests/system/suite_debugger/tst_simple_debug/test.py b/tests/system/suite_debugger/tst_simple_debug/test.py
index 6b17cd3a38..f1365d6b0c 100644
--- a/tests/system/suite_debugger/tst_simple_debug/test.py
+++ b/tests/system/suite_debugger/tst_simple_debug/test.py
@@ -62,6 +62,7 @@ def main():
{os.path.join(workingDir, projectName, "qml", projectName, "main.qml"):13}]
# Only use 4.7.4 to work around QTBUG-25187
availableConfigs = iterateBuildConfigs(len(checkedTargets), "Debug")
+ progressBarWait()
if not availableConfigs:
test.fatal("Haven't found a suitable Qt version (need Qt 4.7.4) - leaving without debugging.")
for kit, config in availableConfigs:
@@ -70,8 +71,7 @@ def main():
verifyBuildConfig(len(checkedTargets), kit, True, enableQmlDebug=True)
# explicitly build before start debugging for adding the executable as allowed program to WinFW
invokeMenuItem("Build", "Rebuild All")
- waitForSignal("{type='ProjectExplorer::BuildManager' unnamed='1'}",
- "buildQueueFinished(bool)", 300000)
+ waitForCompile(300000)
if not checkCompile():
test.fatal("Compile had errors... Skipping current build config")
continue
diff --git a/tests/system/suite_editors/tst_qml_editor/test.py b/tests/system/suite_editors/tst_qml_editor/test.py
index 4c42760532..7a24659d05 100644
--- a/tests/system/suite_editors/tst_qml_editor/test.py
+++ b/tests/system/suite_editors/tst_qml_editor/test.py
@@ -60,10 +60,6 @@ def testRenameId():
files = ["Core.ContextMenu\\.qml", "Core.GridMenu\\.qml", "Core.ListMenu\\.qml", "focus\\.qml"]
originalTexts = {}
editor = waitForObject(":Qt Creator_QmlJSEditor::QmlJSTextEditorWidget")
- # temporarily store editor content for synchronizing purpose
- # usage of formerTxt is done because I couldn't get waitForSignal() to work
- # it always stored a different object into the signalObjects map as it looked up afterwards
- # although used objectMap.realName() for both
formerTxt = editor.plainText
for file in files:
openDocument("focus.QML.qml.%s" % file)
diff --git a/tests/system/suite_general/tst_build_speedcrunch/test.py b/tests/system/suite_general/tst_build_speedcrunch/test.py
index e5f42d75bc..ec1baab897 100644
--- a/tests/system/suite_general/tst_build_speedcrunch/test.py
+++ b/tests/system/suite_general/tst_build_speedcrunch/test.py
@@ -65,9 +65,9 @@ def main():
continue
test.log("Testing build configuration: " + config)
invokeMenuItem("Build", "Run qmake")
- waitForSignal("{type='ProjectExplorer::BuildManager' unnamed='1'}", "buildQueueFinished(bool)")
+ waitForCompile()
invokeMenuItem("Build", "Rebuild All")
- waitForSignal("{type='ProjectExplorer::BuildManager' unnamed='1'}", "buildQueueFinished(bool)", 300000)
+ waitForCompile(300000)
checkCompile()
checkLastBuild()
diff --git a/tests/system/suite_general/tst_cmake_speedcrunch/test.py b/tests/system/suite_general/tst_cmake_speedcrunch/test.py
index 345fe370e6..6fd6fc94fb 100644
--- a/tests/system/suite_general/tst_cmake_speedcrunch/test.py
+++ b/tests/system/suite_general/tst_cmake_speedcrunch/test.py
@@ -56,7 +56,7 @@ def main():
invokeMenuItem("Build", "Rebuild All")
# Wait for, and test if the build succeeded
- waitForSignal("{type='ProjectExplorer::BuildManager' unnamed='1'}", "buildQueueFinished(bool)", 300000)
+ waitForCompile(300000)
checkCompile()
checkLastBuild()
diff --git a/tests/system/suite_general/tst_default_settings/test.py b/tests/system/suite_general/tst_default_settings/test.py
index cc30717354..635c155931 100644
--- a/tests/system/suite_general/tst_default_settings/test.py
+++ b/tests/system/suite_general/tst_default_settings/test.py
@@ -217,8 +217,8 @@ def __getExpectedDebuggers__():
debuggers = ["gdb", "lldb"]
result.extend(filter(None, map(which, debuggers)))
if platform.system() == 'Darwin':
- xcodeLLDB = "/Applications/Xcode.app/Contents/Developer/usr/bin/lldb"
- if os.path.exists(xcodeLLDB):
+ xcodeLLDB = getOutputFromCmdline("xcrun --find lldb").strip("\n")
+ if xcodeLLDB and os.path.exists(xcodeLLDB) and xcodeLLDB not in result:
result.append(xcodeLLDB)
return result
diff --git a/tests/system/suite_qtquick/tst_qtquick_creation/test.py b/tests/system/suite_qtquick/tst_qtquick_creation/test.py
index 48ba6fb469..ba66e594d0 100644
--- a/tests/system/suite_qtquick/tst_qtquick_creation/test.py
+++ b/tests/system/suite_qtquick/tst_qtquick_creation/test.py
@@ -42,7 +42,7 @@ def main():
% (qVer, Targets.getStringForTarget(targ)))
result = modifyRunSettingsForHookInto(projectName, len(checkedTargets), 11223)
invokeMenuItem("Build", "Build All")
- waitForSignal("{type='ProjectExplorer::BuildManager' unnamed='1'}", "buildQueueFinished(bool)")
+ waitForCompile()
if not checkCompile():
test.fatal("Compile failed")
else:
@@ -54,14 +54,16 @@ def main():
if result:
result = runAndCloseApp(True, projectName, 11223,
"subprocessFunctionQuick%d" % qVer,
- SubprocessType.QT_QUICK_APPLICATION)
+ SubprocessType.QT_QUICK_APPLICATION, quickVersion=qVer)
else:
result = runAndCloseApp(sType=SubprocessType.QT_QUICK_APPLICATION)
removeExecutableAsAttachableAUT(projectName, 11223)
deleteAppFromWinFW(workingDir, projectName)
else:
result = runAndCloseApp()
- if result:
+ if result == None:
+ checkCompile()
+ else:
logApplicationOutput()
invokeMenuItem("File", "Close All Projects and Editors")
diff --git a/tests/system/suite_qtquick/tst_qtquick_creation3/test.py b/tests/system/suite_qtquick/tst_qtquick_creation3/test.py
index 9ef1f8d5c1..645a1b48de 100644
--- a/tests/system/suite_qtquick/tst_qtquick_creation3/test.py
+++ b/tests/system/suite_qtquick/tst_qtquick_creation3/test.py
@@ -45,14 +45,16 @@ def main():
result = addExecutableAsAttachableAUT(qmlViewer, 11223)
allowAppThroughWinFW(qmlViewerPath, qmlViewer, None)
if result:
- result = runAndCloseApp(True, qmlViewer, 11223, sType=SubprocessType.QT_QUICK_UI)
+ result = runAndCloseApp(True, qmlViewer, 11223, sType=SubprocessType.QT_QUICK_UI, quickVersion=quickVersion)
else:
result = runAndCloseApp(sType=SubprocessType.QT_QUICK_UI)
removeExecutableAsAttachableAUT(qmlViewer, 11223)
deleteAppFromWinFW(qmlViewerPath, qmlViewer)
else:
result = runAndCloseApp(sType=SubprocessType.QT_QUICK_UI)
- if result:
+ if result == None:
+ checkCompile()
+ else:
logApplicationOutput()
invokeMenuItem("File", "Close All Projects and Editors")
invokeMenuItem("File", "Exit")
diff --git a/tests/system/suite_qtquick/tst_qtquick_creation4/test.py b/tests/system/suite_qtquick/tst_qtquick_creation4/test.py
index 570d38c643..d9ee75ee9a 100644
--- a/tests/system/suite_qtquick/tst_qtquick_creation4/test.py
+++ b/tests/system/suite_qtquick/tst_qtquick_creation4/test.py
@@ -41,7 +41,7 @@ def main():
test.log("Building project Qt Quick %d Extension Plugin (%s)"
% (quickVer, Targets.getStringForTarget(targ)))
invokeMenuItem("Build","Build All")
- waitForSignal("{type='ProjectExplorer::BuildManager' unnamed='1'}", "buildQueueFinished(bool)")
+ waitForCompile()
checkCompile()
checkLastBuild()
invokeMenuItem("File", "Close All Projects and Editors")
diff --git a/tests/system/suite_tools/tst_designer_autocomplete/test.py b/tests/system/suite_tools/tst_designer_autocomplete/test.py
index 9ccbfc2906..fe3f7896d4 100644
--- a/tests/system/suite_tools/tst_designer_autocomplete/test.py
+++ b/tests/system/suite_tools/tst_designer_autocomplete/test.py
@@ -42,7 +42,11 @@ def main():
if buttonName:
openContextMenu(waitForObject("{container=':*Qt Creator.FormEditorStack_Designer::Internal::FormEditorStack'"
"text='PushButton' type='QPushButton' visible='1'}"), 5, 5, 1)
- activateItem(waitForObjectItem("{type='QMenu' unnamed='1' visible='1'}", "Change objectName..."))
+ # hack for Squish5/Qt5.2 problems of handling menus on Mac - remove asap
+ if platform.system() == 'Darwin':
+ waitFor("macHackActivateContextMenuItem('Change objectName...')", 6000)
+ else:
+ activateItem(waitForObjectItem("{type='QMenu' unnamed='1' visible='1'}", "Change objectName..."))
typeLines(waitForObject(":FormEditorStack_qdesigner_internal::PropertyLineEdit"), buttonName)
else:
# Verify that everything works without ever changing the name
diff --git a/tests/system/suite_tools/tst_designer_goto_slot/test.py b/tests/system/suite_tools/tst_designer_goto_slot/test.py
index b661190778..e11d0afb1d 100644
--- a/tests/system/suite_tools/tst_designer_goto_slot/test.py
+++ b/tests/system/suite_tools/tst_designer_goto_slot/test.py
@@ -47,7 +47,11 @@ def main():
for con in connections:
selectFromLocator("mainwindow.ui")
openContextMenu(waitForObject(con[0]), 5, 5, 0)
- activateItem(waitForObjectItem("{type='QMenu' unnamed='1' visible='1'}", "Go to slot..."))
+ # hack for Squish 5/Qt5.2 problems of handling menus on Mac - remove asap
+ if platform.system() == 'Darwin':
+ waitFor("macHackActivateContextMenuItem('Go to slot...', con[0])", 6000)
+ else:
+ activateItem(waitForObjectItem("{type='QMenu' unnamed='1' visible='1'}", "Go to slot..."))
waitForObjectItem(":Select signal.signalList_QTreeWidget", con[1])
clickItem(":Select signal.signalList_QTreeWidget", con[1], 5, 5, 0, Qt.LeftButton)
clickButton(waitForObject(":Go to slot.OK_QPushButton"))
diff --git a/tests/system/suite_tools/tst_git_clone/test.py b/tests/system/suite_tools/tst_git_clone/test.py
index c9a91b5d87..fc33f75a6c 100644
--- a/tests/system/suite_tools/tst_git_clone/test.py
+++ b/tests/system/suite_tools/tst_git_clone/test.py
@@ -86,7 +86,7 @@ def main():
test.compare(cloneDirEdit.text, "p-qt-labs-jom")
replaceEditorContent(cloneDirEdit, cloneDir)
clickButton(waitForObject(":Next_QPushButton"))
- cloneLog = findObject(":Git Repository Clone.logPlainTextEdit_QPlainTextEdit")
+ cloneLog = waitForObject(":Git Repository Clone.logPlainTextEdit_QPlainTextEdit", 1000)
test.compare(waitForObject(":Git Repository Clone.Result._QLabel").text,
"Cloning started...")
if button == "Cancel immediately":
diff --git a/tests/system/suite_tools/tst_git_local/test.py b/tests/system/suite_tools/tst_git_local/test.py
index 9a01fd630a..a67d24783b 100644
--- a/tests/system/suite_tools/tst_git_local/test.py
+++ b/tests/system/suite_tools/tst_git_local/test.py
@@ -29,6 +29,8 @@
source("../../shared/qtcreator.py")
+# necessary to not use symbolic links for the parent path of the git project
+srcPath = os.path.realpath(srcPath)
projectName = "gitProject"
# TODO: Make selecting changes possible
@@ -38,6 +40,8 @@ def commit(commitMessage, expectedLogMessage):
invokeMenuItem("Tools", "Git", "Local Repository", "Commit...")
replaceEditorContent(waitForObject(":Description.description_Utils::CompletingTextEdit"), commitMessage)
ensureChecked(waitForObject(":Files.Check all_QCheckBox"))
+ checkOrFixCommitterInformation('invalidAuthorLabel', 'authorLineEdit', 'Nobody')
+ checkOrFixCommitterInformation('invalidEmailLabel', 'emailLineEdit', 'nobody@nowhere.com')
clickButton(waitForObject(":splitter.Commit File(s)_VcsBase::QActionPushButton"))
vcsLog = waitForObject("{type='QPlainTextEdit' unnamed='1' visible='1' "
"window=':Qt Creator_Core::Internal::MainWindow'}").plainText
@@ -51,6 +55,22 @@ def verifyItemsInGit(commitMessages):
verifyItemOrder(commitMessages, plainText)
return plainText
+def createLocalGitConfig(path):
+ config = os.path.join(path, "config")
+ test.verify(os.path.exists(config), "Verifying if .git/config exists.")
+ file = open(config, "a")
+ file.write("\n[user]\n\temail = nobody@nowhere.com\n\tname = Nobody\n")
+ file.close()
+
+def checkOrFixCommitterInformation(labelName, lineEditName, expected):
+ lineEd = waitForObject("{name='%s' type='QLineEdit' visible='1'}" % lineEditName)
+ if not (test.compare(lineEd.text, expected, "Verifying commit information matches local config")
+ and test.verify(checkIfObjectExists("{name='%s' type='QLabel' visible='1'}" % labelName,
+ False, 1000),
+ "Verifying invalid label is missing")):
+ test.log("Commit information invalid or missing - entering dummy value (%s)" % expected)
+ replaceEditorContent(lineEd, expected)
+
def verifyClickCommit():
gitEditor = waitForObject(":Qt Creator_Git::Internal::GitEditor")
fileName = waitForObject(":Qt Creator_FilenameQComboBox")
@@ -80,7 +100,7 @@ def verifyClickCommit():
waitFor('len(str(diffShow.plainText)) != 0', 5000)
show = str(diffShow.plainText)
expected = [{"commit %s" % commit:False},
- {"Author: (\w|\s)+ <(\w|[-.])+@(\w|[-.])+>": True},
+ {"Author: Nobody <nobody@nowhere.com>": False},
{"Date:\s+\w{3} \w{3} \d{1,2} \d{2}:\d{2}:\d{2} \d{4}.*":True},
{"Branches: master":False}]
for line, exp in zip(show.splitlines(), expected):
@@ -116,7 +136,7 @@ def main():
if not startedWithoutPluginError():
return
createProject_Qt_GUI(srcPath, projectName, addToVersionControl = "Git")
- if isQt4Build and not object.exists(":Qt Creator_VersionControl_Core::Internal::OutputPaneToggleButton"):
+ if not object.exists(":Qt Creator_VersionControl_Core::Internal::OutputPaneToggleButton"):
clickButton(waitForObject(":Qt Creator_Core::Internal::OutputPaneManageButton"))
activateItem(waitForObjectItem("{type='QMenu' unnamed='1' visible='1'}", "Version Control"))
ensureChecked(waitForObject(":Qt Creator_VersionControl_Core::Internal::OutputPaneToggleButton"))
@@ -125,6 +145,7 @@ def main():
test.verify("Initialized empty Git repository in %s"
% os.path.join(srcPath, projectName, ".git").replace("\\", "/") in str(vcsLog),
"Has initialization of repo been logged:\n%s " % vcsLog)
+ createLocalGitConfig(os.path.join(srcPath, projectName, ".git"))
commitMessages = [commit("Initial Commit", "Committed 5 file(s).")]
clickButton(waitForObject(":*Qt Creator.Clear_QToolButton"))
addCPlusPlusFileToCurrentProject("pointless_header.h", "C++ Header File", addToVCS = "Git")