From a161ea60ffb2f55a6abfd44d9670bfcdda4ac536 Mon Sep 17 00:00:00 2001 From: Ivan Komissarov Date: Tue, 25 Jun 2019 23:17:12 -0500 Subject: Fix TestBlackboxApple::infoPlist for tvos/ios/watchos platforms On non-desktop OSes, Info.plist is located in the other folder: infoplist.app/Info.plist instead of infoplist.app/Contents/Info.plist Plus, it uses binary format by default, so convert resulting file to JSON to simplify checking its contents Plus, some properties that are present on macOS are not present on ios/others. Check only common subset plus macOS-specific properties Change-Id: Ic709f6b79a5ecc89c3866ca69ca4004341dfad9f Reviewed-by: Christian Kandeler --- tests/auto/blackbox/tst_blackboxapple.cpp | 37 ++++++++++++++++++++++++++----- 1 file changed, 32 insertions(+), 5 deletions(-) diff --git a/tests/auto/blackbox/tst_blackboxapple.cpp b/tests/auto/blackbox/tst_blackboxapple.cpp index f71cc6aa8..96cd70b58 100644 --- a/tests/auto/blackbox/tst_blackboxapple.cpp +++ b/tests/auto/blackbox/tst_blackboxapple.cpp @@ -33,6 +33,7 @@ #include #include +#include #include #include @@ -718,12 +719,38 @@ void TestBlackboxApple::infoPlist() params.arguments = QStringList() << "-f" << "infoplist.qbs"; QCOMPARE(runQbs(params), 0); - QFile infoplist(relativeProductBuildDir("infoplist") + "/infoplist.app/Contents/Info.plist"); + auto infoplistPath = relativeProductBuildDir("infoplist") + + "/infoplist.app/Contents/Info.plist"; + if (!QFile::exists(infoplistPath)) + infoplistPath = relativeProductBuildDir("infoplist") + "/infoplist.app/Info.plist"; + QVERIFY(QFile::exists(infoplistPath)); + QProcess plutil; + plutil.start("plutil", { + QStringLiteral("-convert"), + QStringLiteral("json"), + infoplistPath + }); + QVERIFY2(plutil.waitForStarted(), qPrintable(plutil.errorString())); + QVERIFY2(plutil.waitForFinished(), qPrintable(plutil.errorString())); + QVERIFY2(plutil.exitCode() == 0, qPrintable(plutil.readAllStandardError().constData())); + + QFile infoplist(infoplistPath); QVERIFY(infoplist.open(QIODevice::ReadOnly)); - const QByteArray fileContents = infoplist.readAll(); - QVERIFY2(fileContents.contains("LSMinimumSystemVersion"), fileContents.constData()); - QVERIFY2(fileContents.contains("10.7"), fileContents.constData()); - QVERIFY2(fileContents.contains("NSPrincipalClass"), fileContents.constData()); + QJsonParseError error; + const auto json = QJsonDocument::fromJson(infoplist.readAll(), &error); + QCOMPARE(error.error, QJsonParseError::NoError); + QVERIFY(json.isObject()); + // common values + QCOMPARE(json.object().value(QStringLiteral("CFBundleIdentifier")), + QStringLiteral("org.example.infoplist")); + QCOMPARE(json.object().value(QStringLiteral("CFBundleName")), QStringLiteral("infoplist")); + QCOMPARE(json.object().value(QStringLiteral("CFBundleExecutable")), + QStringLiteral("infoplist")); + + if (!json.object().contains(QStringLiteral("SDKROOT"))) { // macOS-specific values + QCOMPARE(json.object().value("LSMinimumSystemVersion"), QStringLiteral("10.7")); + QVERIFY(json.object().contains("NSPrincipalClass")); + } } void TestBlackboxApple::objcArc() -- cgit v1.2.3