| /**************************************************************************** |
| ** |
| ** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). |
| ** All rights reserved. |
| ** Contact: Nokia Corporation (qt-info@nokia.com) |
| ** |
| ** This file is part of the tools applications of the Qt Toolkit. |
| ** |
| ** $QT_BEGIN_LICENSE:LGPL$ |
| ** GNU Lesser General Public License Usage |
| ** This file may be used under the terms of the GNU Lesser General Public |
| ** License version 2.1 as published by the Free Software Foundation and |
| ** appearing in the file LICENSE.LGPL included in the packaging of this |
| ** file. Please review the following information to ensure the GNU Lesser |
| ** General Public License version 2.1 requirements will be met: |
| ** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. |
| ** |
| ** In addition, as a special exception, Nokia gives you certain additional |
| ** rights. These rights are described in the Nokia Qt LGPL Exception |
| ** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. |
| ** |
| ** GNU General Public License Usage |
| ** Alternatively, this file may be used under the terms of the GNU General |
| ** Public License version 3.0 as published by the Free Software Foundation |
| ** and appearing in the file LICENSE.GPL included in the packaging of this |
| ** file. Please review the following information to ensure the GNU General |
| ** Public License version 3.0 requirements will be met: |
| ** http://www.gnu.org/copyleft/gpl.html. |
| ** |
| ** Other Usage |
| ** Alternatively, this file may be used in accordance with the terms and |
| ** conditions contained in a signed written agreement between you and Nokia. |
| ** |
| ** |
| ** |
| ** |
| ** |
| ** $QT_END_LICENSE$ |
| ** |
| ****************************************************************************/ |
| #include <QtCore> |
| #include <QtTest/QTest> |
| #include <shared.h> |
| |
| class tst_deployment_mac : public QObject |
| { |
| Q_OBJECT |
| private slots: |
| void testParseOtoolLibraryLine(); |
| void testgetQtFrameworks(); |
| void testFindAppBinarty(); |
| }; |
| |
| void tst_deployment_mac::testParseOtoolLibraryLine() |
| { |
| { |
| QString line = " /Users/foo/build/qt-4.4/lib/QtGui.framework/Versions/4/QtGui (compatibility version 4.4.0, current version 4.4.0)"; |
| FrameworkInfo info = parseOtoolLibraryLine(line); |
| // qDebug() << info; |
| QCOMPARE(info.frameworkDirectory, QLatin1String("/Users/foo/build/qt-4.4/lib/")); |
| QCOMPARE(info.frameworkName, QLatin1String("QtGui.framework")); |
| QCOMPARE(info.frameworkPath, QLatin1String("/Users/foo/build/qt-4.4/lib/QtGui.framework")); |
| QCOMPARE(info.binaryDirectory, QLatin1String("Versions/4")); |
| QCOMPARE(info.binaryName, QLatin1String("QtGui")); |
| QCOMPARE(info.binaryPath, QLatin1String("/Versions/4/QtGui")); |
| QCOMPARE(info.version, QLatin1String("4")); |
| QCOMPARE(info.installName, QLatin1String("/Users/foo/build/qt-4.4/lib/QtGui.framework/Versions/4/QtGui")); |
| QCOMPARE(info.deployedInstallName, QLatin1String("@executable_path/../Frameworks/QtGui.framework/Versions/4/QtGui")); |
| QCOMPARE(info.sourceFilePath, QLatin1String("/Users/foo/build/qt-4.4/lib/QtGui.framework/Versions/4/QtGui")); |
| QCOMPARE(info.destinationDirectory, QLatin1String("Contents/Frameworks/QtGui.framework/Versions/4")); |
| } |
| { |
| QString line = " /Users/foo/build/qt-4.4/lib/phonon.framework/Versions/4/phonon (compatibility version 4.1.0, current version 4.1.0)"; |
| FrameworkInfo info = parseOtoolLibraryLine(line); |
| // qDebug() << info; |
| QCOMPARE(info.frameworkDirectory, QLatin1String("/Users/foo/build/qt-4.4/lib/")); |
| QCOMPARE(info.frameworkName, QLatin1String("phonon.framework")); |
| QCOMPARE(info.frameworkPath, QLatin1String("/Users/foo/build/qt-4.4/lib/phonon.framework")); |
| QCOMPARE(info.binaryDirectory, QLatin1String("Versions/4")); |
| QCOMPARE(info.binaryName, QLatin1String("phonon")); |
| QCOMPARE(info.binaryPath, QLatin1String("/Versions/4/phonon")); |
| QCOMPARE(info.version, QLatin1String("4")); |
| QCOMPARE(info.installName, QLatin1String("/Users/foo/build/qt-4.4/lib/phonon.framework/Versions/4/phonon")); |
| QCOMPARE(info.deployedInstallName, QLatin1String("@executable_path/../Frameworks/phonon.framework/Versions/4/phonon")); |
| QCOMPARE(info.sourceFilePath, QLatin1String("/Users/foo/build/qt-4.4/lib/phonon.framework/Versions/4/phonon")); |
| QCOMPARE(info.destinationDirectory, QLatin1String("Contents/Frameworks/phonon.framework/Versions/4")); |
| } |
| |
| { |
| QString line = " /usr/local/Trolltech/Qt-4.4.0/lib/phonon.framework/Versions/4/phonon (compatibility version 4.1.0, current version 4.1.0)"; |
| FrameworkInfo info = parseOtoolLibraryLine(line); |
| // qDebug() << info; |
| QCOMPARE(info.frameworkDirectory, QLatin1String("/usr/local/Trolltech/Qt-4.4.0/lib/")); |
| QCOMPARE(info.frameworkName, QLatin1String("phonon.framework")); |
| QCOMPARE(info.frameworkPath, QLatin1String("/usr/local/Trolltech/Qt-4.4.0/lib/phonon.framework")); |
| QCOMPARE(info.binaryDirectory, QLatin1String("Versions/4")); |
| QCOMPARE(info.binaryName, QLatin1String("phonon")); |
| QCOMPARE(info.binaryPath, QLatin1String("/Versions/4/phonon")); |
| QCOMPARE(info.version, QLatin1String("4")); |
| QCOMPARE(info.installName, QLatin1String("/usr/local/Trolltech/Qt-4.4.0/lib/phonon.framework/Versions/4/phonon")); |
| QCOMPARE(info.deployedInstallName, QLatin1String("@executable_path/../Frameworks/phonon.framework/Versions/4/phonon")); |
| QCOMPARE(info.sourceFilePath, QLatin1String("/usr/local/Trolltech/Qt-4.4.0/lib/phonon.framework/Versions/4/phonon")); |
| QCOMPARE(info.destinationDirectory, QLatin1String("Contents/Frameworks/phonon.framework/Versions/4")); |
| } |
| |
| { |
| QString line = " QtGui.framework/Versions/4/QtGui (compatibility version 4.1.0, current version 4.1.0)"; |
| FrameworkInfo info = parseOtoolLibraryLine(line); |
| // qDebug() << info; |
| QCOMPARE(info.frameworkDirectory, QLatin1String("/Library/Frameworks/")); |
| QCOMPARE(info.frameworkName, QLatin1String("QtGui.framework")); |
| QCOMPARE(info.frameworkPath, QLatin1String("/Library/Frameworks/QtGui.framework")); |
| QCOMPARE(info.binaryDirectory, QLatin1String("Versions/4")); |
| QCOMPARE(info.binaryName, QLatin1String("QtGui")); |
| QCOMPARE(info.binaryPath, QLatin1String("/Versions/4/QtGui")); |
| QCOMPARE(info.version, QLatin1String("4")); |
| QCOMPARE(info.installName, QLatin1String("QtGui.framework/Versions/4/QtGui")); |
| QCOMPARE(info.deployedInstallName, QLatin1String("@executable_path/../Frameworks/QtGui.framework/Versions/4/QtGui")); |
| QCOMPARE(info.sourceFilePath, QLatin1String("/Library/Frameworks/QtGui.framework/Versions/4/QtGui")); |
| QCOMPARE(info.destinationDirectory, QLatin1String("Contents/Frameworks/QtGui.framework/Versions/4")); |
| } |
| |
| { |
| QString line = " phonon.framework/Versions/4/QtGui (compatibility version 4.1.0, current version 4.1.0)"; |
| FrameworkInfo info = parseOtoolLibraryLine(line); |
| // qDebug() << info; |
| QCOMPARE(info.frameworkDirectory, QLatin1String("/Library/Frameworks/")); |
| QCOMPARE(info.frameworkName, QLatin1String("phonon.framework")); |
| QCOMPARE(info.frameworkPath, QLatin1String("/Library/Frameworks/phonon.framework")); |
| QCOMPARE(info.binaryDirectory, QLatin1String("Versions/4")); |
| QCOMPARE(info.binaryName, QLatin1String("phonon")); |
| QCOMPARE(info.binaryPath, QLatin1String("/Versions/4/phonon")); |
| QCOMPARE(info.version, QLatin1String("4")); |
| QCOMPARE(info.installName, QLatin1String("phonon.framework/Versions/4/phonon")); |
| QCOMPARE(info.deployedInstallName, QLatin1String("@executable_path/../Frameworks/phonon.framework/Versions/4/phonon")); |
| QCOMPARE(info.sourceFilePath, QLatin1String("/Library/Frameworks/phonon.framework/Versions/4/phonon")); |
| QCOMPARE(info.destinationDirectory, QLatin1String("Contents/Frameworks/phonon.framework/Versions/4")); |
| } |
| |
| { |
| QString line = " /Users/foo/build/qt-4.4/lib/libQtCLucene.4.dylib (compatibility version 4.4.0, current version 4.4.0)"; |
| FrameworkInfo info = parseOtoolLibraryLine(line); |
| // qDebug() << info; |
| QCOMPARE(info.frameworkDirectory, QLatin1String("/Users/foo/build/qt-4.4/lib/")); |
| QCOMPARE(info.binaryName, QLatin1String("libQtCLucene.4.dylib")); |
| QCOMPARE(info.frameworkName, QLatin1String("libQtCLucene.4.dylib")); |
| QCOMPARE(info.frameworkPath, QLatin1String("/Users/foo/build/qt-4.4/lib/libQtCLucene.4.dylib")); |
| QCOMPARE(info.installName, QLatin1String("/Users/foo/build/qt-4.4/lib/libQtCLucene.4.dylib")); |
| QCOMPARE(info.deployedInstallName, QLatin1String("@executable_path/../Frameworks/libQtCLucene.4.dylib")); |
| QCOMPARE(info.sourceFilePath, QLatin1String("/Users/foo/build/qt-4.4/lib/libQtCLucene.4.dylib")); |
| QCOMPARE(info.destinationDirectory, QLatin1String("Contents/Frameworks/")); |
| } |
| { |
| QString line = "libQtCLucene.4.dylib (compatibility version 4.4.0, current version 4.4.0)"; |
| FrameworkInfo info = parseOtoolLibraryLine(line); |
| // qDebug() << info; |
| QCOMPARE(info.frameworkDirectory, QLatin1String("/usr/lib/")); |
| QCOMPARE(info.binaryName, QLatin1String("libQtCLucene.4.dylib")); |
| QCOMPARE(info.frameworkName, QLatin1String("libQtCLucene.4.dylib")); |
| QCOMPARE(info.frameworkPath, QLatin1String("/usr/lib/libQtCLucene.4.dylib")); |
| QCOMPARE(info.installName, QLatin1String("libQtCLucene.4.dylib")); |
| QCOMPARE(info.deployedInstallName, QLatin1String("@executable_path/../Frameworks/libQtCLucene.4.dylib")); |
| QCOMPARE(info.sourceFilePath, QLatin1String("/usr/lib/libQtCLucene.4.dylib")); |
| QCOMPARE(info.destinationDirectory, QLatin1String("Contents/Frameworks/")); |
| } |
| { |
| QString line = "/foo"; //invalid |
| FrameworkInfo info = parseOtoolLibraryLine(line); |
| QCOMPARE(info.frameworkName, QString()); |
| } |
| |
| } |
| |
| void tst_deployment_mac::testgetQtFrameworks() |
| { |
| { |
| QStringList otool = QStringList() |
| << "/Users/foo/build/qt-4.4/lib/phonon.framework/Versions/4/phonon (compatibility version 4.1.0, current version 4.1.0)" |
| << "/Users/foo/build/qt-4.4/lib/QtGui.framework/Versions/4/QtGui (compatibility version 4.4.0, current version 4.4.0)" |
| << "/System/Library/Frameworks/Carbon.framework/Versions/A/Carbon (compatibility version 2.0.0, current version 136.0.0)" |
| << "/System/Library/Frameworks/AppKit.framework/Versions/C/AppKit (compatibility version 45.0.0, current version 949.27.0)" |
| << "/Users/foo/build/qt-4.4/lib/QtCore.framework/Versions/4/QtCore (compatibility version 4.4.0, current version 4.4.0)" |
| << "/usr/lib/libz.1.dylib (compatibility version 1.0.0, current version 1.2.3)" |
| << "/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 111.0.0)" |
| << "/usr/lib/libstdc++.6.dylib (compatibility version 7.0.0, current version 7.4.0)" |
| << "/usr/lib/libgcc_s.1.dylib (compatibility version 1.0.0, current version 1.0.0)" |
| << " " |
| ; |
| |
| QList<FrameworkInfo> frameworks = getQtFrameworks(otool); |
| QCOMPARE(frameworks.count(), 3); |
| QCOMPARE(frameworks.at(0).binaryName, QLatin1String("phonon")); |
| QCOMPARE(frameworks.at(1).binaryName, QLatin1String("QtGui")); |
| QCOMPARE(frameworks.at(2).binaryName, QLatin1String("QtCore")); |
| } |
| { |
| QStringList otool = QStringList() |
| << "QtHelp.framework/Versions/4/QtHelp (compatibility version 4.4.0, current version 4.4.0)" |
| << "libQtCLucene.4.dylib (compatibility version 4.4.0, current version 4.4.0)" |
| << "QtSql.framework/Versions/4/QtSql (compatibility version 4.4.0, current version 4.4.0)" |
| << "QtXml.framework/Versions/4/QtXml (compatibility version 4.4.0, current version 4.4.0)" |
| << "QtGui.framework/Versions/4/QtGui (compatibility version 4.4.0, current version 4.4.0)" |
| << "/System/Library/Frameworks/Carbon.framework/Versions/A/Carbon (compatibility version 2.0.0, current version 128.0.0)" |
| << "/System/Library/Frameworks/AppKit.framework/Versions/C/AppKit (compatibility version 45.0.0, current version 824.42.0)" |
| << "QtNetwork.framework/Versions/4/QtNetwork (compatibility version 4.4.0, current version 4.4.0)" |
| << "QtCore.framework/Versions/4/QtCore (compatibility version 4.4.0, current version 4.4.0)" |
| << "/usr/lib/libz.1.dylib (compatibility version 1.0.0, current version 1.2.3)" |
| << "/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 88.3.6)" |
| << "/usr/lib/libstdc++.6.dylib (compatibility version 7.0.0, current version 7.4.0)" |
| << "/usr/lib/libgcc_s.1.dylib (compatibility version 1.0.0, current version 1.0.0)" |
| ; |
| |
| QList<FrameworkInfo> frameworks = getQtFrameworks(otool); |
| QCOMPARE(frameworks.count(), 7); |
| QCOMPARE(frameworks.at(0).binaryName, QLatin1String("QtHelp")); |
| QCOMPARE(frameworks.at(1).binaryName, QLatin1String("libQtCLucene.4.dylib")); |
| QCOMPARE(frameworks.at(2).binaryName, QLatin1String("QtSql")); |
| QCOMPARE(frameworks.at(3).binaryName, QLatin1String("QtXml")); |
| QCOMPARE(frameworks.at(4).binaryName, QLatin1String("QtGui")); |
| QCOMPARE(frameworks.at(5).binaryName, QLatin1String("QtNetwork")); |
| QCOMPARE(frameworks.at(6).binaryName, QLatin1String("QtCore")); |
| } |
| |
| } |
| |
| void tst_deployment_mac::testFindAppBinarty() |
| { |
| QCOMPARE(findAppBinary("tst_deployment_mac.app"), QLatin1String("tst_deployment_mac.app/Contents/MacOS/tst_deployment_mac")); |
| } |
| |
| QTEST_MAIN(tst_deployment_mac) |
| |
| #include "tst_deployment_mac.moc" |