From 034be2038d9316fdc6565f8caaa95bfdad544595 Mon Sep 17 00:00:00 2001 From: Christian Kandeler Date: Tue, 17 Apr 2018 14:17:16 +0200 Subject: API: Make transformer data available Expose transformer information such as the input and output lists and the associated commands to interested parties. In particular, generators might have a need for that. Change-Id: I18f60e3a6fcb7792638b5786dde50e8722d7f417 Reviewed-by: Joerg Bornemann --- .../testdata/transformer-data/transformer-data.qbs | 36 ++++++++++++++++++ tests/auto/api/tst_api.cpp | 43 ++++++++++++++++++++++ tests/auto/api/tst_api.h | 1 + 3 files changed, 80 insertions(+) create mode 100644 tests/auto/api/testdata/transformer-data/transformer-data.qbs (limited to 'tests/auto/api') diff --git a/tests/auto/api/testdata/transformer-data/transformer-data.qbs b/tests/auto/api/testdata/transformer-data/transformer-data.qbs new file mode 100644 index 000000000..b24deebe5 --- /dev/null +++ b/tests/auto/api/testdata/transformer-data/transformer-data.qbs @@ -0,0 +1,36 @@ +import qbs +import qbs.File +import qbs.TextFile + +Product { + type: ["theType"] + Rule { + multiplex: true + Artifact { + filePath: "artifact1" + fileTags: ["type1"] + } + prepare: { + var cmd = new JavaScriptCommand(); + cmd.description = "Creating " + output.fileName; + cmd.sourceCode = function() { + var f = new TextFile(output.filePath, TextFile.WriteOnly); + f.close(); + }; + return [cmd]; + } + } + Rule { + inputs: ["type1"] + Artifact { + filePath: "artifact2" + fileTags: ["theType"] + } + prepare: { + var cmd = new JavaScriptCommand(); + cmd.description = "Creating " + output.fileName; + cmd.sourceCode = function() { File.copy(input.filePath, output.filePath); }; + return [cmd]; + } + } +} diff --git a/tests/auto/api/tst_api.cpp b/tests/auto/api/tst_api.cpp index 4fb2d8a3a..ae2b3b684 100644 --- a/tests/auto/api/tst_api.cpp +++ b/tests/auto/api/tst_api.cpp @@ -2816,6 +2816,49 @@ void TestApi::trackRemoveQObjectHeader() QVERIFY2(isAboutUndefinedSymbols(receiver.output), qPrintable(receiver.output)); } +void TestApi::transformerData() +{ + const qbs::SetupProjectParameters params + = defaultSetupParameters("transformer-data/transformer-data.qbs"); + const std::unique_ptr setupJob(qbs::Project().setupProject(params, + m_logSink, 0)); + QVERIFY(waitForFinished(setupJob.get())); + QVERIFY2(!setupJob->error().hasError(), qPrintable(setupJob->error().toString())); + const qbs::Project project = setupJob->project(); + const std::unique_ptr buildJob(project.buildAllProducts(qbs::BuildOptions())); + QVERIFY(waitForFinished(buildJob.get())); + QVERIFY2(!buildJob->error().hasError(), qPrintable(buildJob->error().toString())); + qbs::ErrorInfo error; + const qbs::ProjectTransformerData projectTData = project.transformerData(&error); + QVERIFY2(!error.hasError(), qPrintable(error.toString())); + QCOMPARE(projectTData.size(), 1); + const qbs::ProductTransformerData productTData = projectTData.first().second; + QCOMPARE(productTData.size(), 2); + bool firstTransformerFound = false; + bool secondTransformerFound = false; + for (const qbs::TransformerData &tData : productTData) { + if (tData.inputs().empty()) { + firstTransformerFound = true; + QCOMPARE(tData.outputs().size(), 1); + QCOMPARE(QFileInfo(tData.outputs().first().filePath()).fileName(), + QString("artifact1")); + QCOMPARE(tData.commands().size(), 1); + QCOMPARE(tData.commands().first().type(), qbs::RuleCommand::JavaScriptCommandType); + } else { + secondTransformerFound = true; + QCOMPARE(tData.inputs().size(), 1); + QCOMPARE(QFileInfo(tData.inputs().first().filePath()).fileName(), QString("artifact1")); + QCOMPARE(tData.outputs().size(), 1); + QCOMPARE(QFileInfo(tData.outputs().first().filePath()).fileName(), + QString("artifact2")); + QCOMPARE(tData.commands().size(), 1); + QCOMPARE(tData.commands().first().type(), qbs::RuleCommand::JavaScriptCommandType); + } + } + QVERIFY(firstTransformerFound); + QVERIFY(secondTransformerFound); +} + void TestApi::transformers() { const qbs::ErrorInfo errorInfo = doBuildProject("transformers/transformers.qbs"); diff --git a/tests/auto/api/tst_api.h b/tests/auto/api/tst_api.h index 3f5b88715..26f6655ad 100644 --- a/tests/auto/api/tst_api.h +++ b/tests/auto/api/tst_api.h @@ -142,6 +142,7 @@ private slots: void toolInModule(); void trackAddQObjectHeader(); void trackRemoveQObjectHeader(); + void transformerData(); void transformers(); void typeChange(); void uic(); -- cgit v1.2.3