From 7e0191856b3c76517a2654183b52192713ff5770 Mon Sep 17 00:00:00 2001 From: Christian Kandeler Date: Thu, 22 Jun 2017 16:14:35 +0200 Subject: Executor: Do not convert error objects into strings Command line users do not see a difference, but for IDE users it is important that we keep error message and code location separate in the ErrorInfo objects we hand out via the API. Task-number: QBS-1151 Change-Id: I4aacf2f32ee535c2d37da3d615ab78e2777a351a Reviewed-by: Joerg Bornemann --- src/lib/corelib/buildgraph/executor.cpp | 3 ++- .../build-error-code-location.qbs | 12 ++++++++++++ tests/auto/api/tst_api.cpp | 14 ++++++++++++++ tests/auto/api/tst_api.h | 1 + 4 files changed, 29 insertions(+), 1 deletion(-) create mode 100644 tests/auto/api/testdata/build-error-code-location/build-error-code-location.qbs diff --git a/src/lib/corelib/buildgraph/executor.cpp b/src/lib/corelib/buildgraph/executor.cpp index b95f9ea5a..29b963778 100644 --- a/src/lib/corelib/buildgraph/executor.cpp +++ b/src/lib/corelib/buildgraph/executor.cpp @@ -723,7 +723,8 @@ void Executor::doSanityChecks() void Executor::handleError(const ErrorInfo &error) { - m_error.append(error.toString()); + for (const ErrorItem &ei : error.items()) + m_error.append(ei); if (m_processingJobs.isEmpty()) finish(); else diff --git a/tests/auto/api/testdata/build-error-code-location/build-error-code-location.qbs b/tests/auto/api/testdata/build-error-code-location/build-error-code-location.qbs new file mode 100644 index 000000000..f51e91e1f --- /dev/null +++ b/tests/auto/api/testdata/build-error-code-location/build-error-code-location.qbs @@ -0,0 +1,12 @@ +import qbs + +Product { + name: "p" + type: ["p.out"] + Rule { + multiplex: true + outputFileTags: ["p.out"] + outputArtifacts: { } + prepare: {} + } +} diff --git a/tests/auto/api/tst_api.cpp b/tests/auto/api/tst_api.cpp index 99af1cf52..ef4a6e71c 100644 --- a/tests/auto/api/tst_api.cpp +++ b/tests/auto/api/tst_api.cpp @@ -253,6 +253,20 @@ void TestApi::baseProperties() VERIFY_NO_ERROR(errorInfo); } +void TestApi::buildErrorCodeLocation() +{ + const qbs::ErrorInfo errorInfo + = doBuildProject("build-error-code-location/build-error-code-location.qbs"); + QVERIFY(errorInfo.hasError()); + const qbs::ErrorItem errorItem = errorInfo.items().first(); + QCOMPARE(errorItem.description(), + QString("Rule.outputArtifacts must return an array of objects.")); + const qbs::CodeLocation errorLoc = errorItem.codeLocation(); + QCOMPARE(QFileInfo(errorLoc.filePath()).fileName(), QString("build-error-code-location.qbs")); + QCOMPARE(errorLoc.line(), 9); + QCOMPARE(errorLoc.column(), 26); +} + void TestApi::buildGraphLocking() { qbs::SetupProjectParameters setupParams diff --git a/tests/auto/api/tst_api.h b/tests/auto/api/tst_api.h index c7e4c0670..c78229779 100644 --- a/tests/auto/api/tst_api.h +++ b/tests/auto/api/tst_api.h @@ -59,6 +59,7 @@ private slots: void addQObjectMacroToCppFile(); void addedFilePersistent(); void baseProperties(); + void buildErrorCodeLocation(); void buildGraphLocking(); void buildProject(); void buildProject_data(); -- cgit v1.2.3