aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChristian Kandeler <christian.kandeler@digia.com>2014-07-15 13:40:58 +0200
committerChristian Kandeler <christian.kandeler@digia.com>2014-07-16 18:02:00 +0200
commit53a95b6f16788c6c248bb695b9ce9ad5e3a031ab (patch)
tree42bcb4bbe1ec84e6836fa8d61fd94abb8a7c26f0
parent68db620a139f7dde967750f577924696405c8104 (diff)
Add missing metatype registration.
The code path where this is relevant has apparently never been taken, so add an autotest as well (and fix the wording of the error message). Change-Id: I314f1cb888264d30920a58f4e9cbbbf01fbcc4e6 Reviewed-by: Joerg Bornemann <joerg.bornemann@digia.com>
-rw-r--r--src/lib/corelib/api/jobs.cpp2
-rw-r--r--src/lib/corelib/api/project.cpp1
-rw-r--r--tests/auto/api/testdata/project-locking/project.qbs4
-rw-r--r--tests/auto/api/tst_api.cpp22
-rw-r--r--tests/auto/api/tst_api.h1
5 files changed, 29 insertions, 1 deletions
diff --git a/src/lib/corelib/api/jobs.cpp b/src/lib/corelib/api/jobs.cpp
index 035a0bf8f..6b8cf702e 100644
--- a/src/lib/corelib/api/jobs.cpp
+++ b/src/lib/corelib/api/jobs.cpp
@@ -120,7 +120,7 @@ bool AbstractJob::lockProject(const TopLevelProjectPtr &project)
// The API is not thread-safe, so we don't need a mutex here, as the API requests come in
// synchronously.
if (project->locked) {
- internalJob()->setError(tr("Cannot start a job while another one is in process."));
+ internalJob()->setError(tr("Cannot start a job while another one is in progress."));
QMetaObject::invokeMethod(this, "finished", Qt::QueuedConnection, Q_ARG(bool, false),
Q_ARG(qbs::AbstractJob *, this));
return false;
diff --git a/src/lib/corelib/api/project.cpp b/src/lib/corelib/api/project.cpp
index 1aa101717..b8706a8d6 100644
--- a/src/lib/corelib/api/project.cpp
+++ b/src/lib/corelib/api/project.cpp
@@ -91,6 +91,7 @@ static void loadPlugins(const QStringList &_pluginPaths, const Logger &logger)
qRegisterMetaType<ErrorInfo>("qbs::ErrorInfo");
qRegisterMetaType<ProcessResult>("qbs::ProcessResult");
qRegisterMetaType<InternalJob *>("Internal::InternalJob *");
+ qRegisterMetaType<AbstractJob *>("qbs::AbstractJob *");
pluginsLoaded = true;
}
diff --git a/tests/auto/api/testdata/project-locking/project.qbs b/tests/auto/api/testdata/project-locking/project.qbs
new file mode 100644
index 000000000..e08b008bc
--- /dev/null
+++ b/tests/auto/api/testdata/project-locking/project.qbs
@@ -0,0 +1,4 @@
+import qbs
+
+Project {
+}
diff --git a/tests/auto/api/tst_api.cpp b/tests/auto/api/tst_api.cpp
index 53674306a..ef3cf9801 100644
--- a/tests/auto/api/tst_api.cpp
+++ b/tests/auto/api/tst_api.cpp
@@ -730,6 +730,28 @@ void TestApi::nonexistingProjectPropertyFromCommandLine()
qPrintable(job->error().toString()));
}
+void TestApi::projectLocking()
+{
+ qbs::SetupProjectParameters setupParams = defaultSetupParameters();
+ const QString projectDirPath = QDir::cleanPath(m_workingDataDir + "/project-locking");
+ setupParams.setProjectFilePath(projectDirPath + "/project.qbs");
+ QScopedPointer<qbs::SetupProjectJob> setupJob(qbs::Project().setupProject(setupParams,
+ m_logSink, 0));
+ waitForFinished(setupJob.data());
+ QVERIFY2(!setupJob->error().hasError(), qPrintable(setupJob->error().toString()));
+ qbs::Project project = setupJob->project();
+ setupJob.reset(project.setupProject(setupParams, m_logSink, 0));
+ QScopedPointer<qbs::SetupProjectJob> setupJob2(project.setupProject(setupParams,
+ m_logSink, 0));
+ waitForFinished(setupJob2.data());
+ QVERIFY(setupJob2->error().hasError());
+ QVERIFY2(setupJob2->error().toString()
+ .contains("Cannot start a job while another one is in progress."),
+ qPrintable(setupJob2->error().toString()));
+ waitForFinished(setupJob.data());
+ QVERIFY2(!setupJob->error().hasError(), qPrintable(setupJob->error().toString()));
+}
+
qbs::SetupProjectParameters TestApi::defaultSetupParameters() const
{
qbs::SetupProjectParameters setupParams;
diff --git a/tests/auto/api/tst_api.h b/tests/auto/api/tst_api.h
index 5e75218ba..756eb1ed3 100644
--- a/tests/auto/api/tst_api.h
+++ b/tests/auto/api/tst_api.h
@@ -61,6 +61,7 @@ private slots:
void multiArch();
void nonexistingProjectPropertyFromProduct();
void nonexistingProjectPropertyFromCommandLine();
+ void projectLocking();
void references();
void sourceFileInBuildDir();