summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorOswald Buddenhagen <oswald.buddenhagen@nokia.com>2010-01-06 11:36:35 (GMT)
committerOswald Buddenhagen <oswald.buddenhagen@nokia.com>2010-01-06 18:16:22 (GMT)
commitb1b6b0aae294def9b7d04a1fea387d82ed852026 (patch)
tree053f7c8f0ea999ac140f36982a3c30d60b78dd90
parent40e3c68a38152ecdc354a2d503490f9b0ff49740 (diff)
downloadQt-b1b6b0aae294def9b7d04a1fea387d82ed852026.zip
Qt-b1b6b0aae294def9b7d04a1fea387d82ed852026.tar.gz
Qt-b1b6b0aae294def9b7d04a1fea387d82ed852026.tar.bz2
make the lupdate tests more verbose in case of failure
on the way, replace the convoluted TestLUpdate class with a few QProcess calls.
-rw-r--r--tests/auto/linguist/lupdate/lupdate.pro3
-rw-r--r--tests/auto/linguist/lupdate/testlupdate.cpp150
-rw-r--r--tests/auto/linguist/lupdate/testlupdate.h85
-rw-r--r--tests/auto/linguist/lupdate/tst_lupdate.cpp50
4 files changed, 37 insertions, 251 deletions
diff --git a/tests/auto/linguist/lupdate/lupdate.pro b/tests/auto/linguist/lupdate/lupdate.pro
index 19259dc..bcaaf66 100644
--- a/tests/auto/linguist/lupdate/lupdate.pro
+++ b/tests/auto/linguist/lupdate/lupdate.pro
@@ -2,6 +2,5 @@ CONFIG += qttest_p4
TARGET = tst_lupdate
-HEADERS += testlupdate.h
-SOURCES += tst_lupdate.cpp testlupdate.cpp
+SOURCES += tst_lupdate.cpp
diff --git a/tests/auto/linguist/lupdate/testlupdate.cpp b/tests/auto/linguist/lupdate/testlupdate.cpp
deleted file mode 100644
index 877959a..0000000
--- a/tests/auto/linguist/lupdate/testlupdate.cpp
+++ /dev/null
@@ -1,150 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
-** All rights reserved.
-** Contact: Nokia Corporation (qt-info@nokia.com)
-**
-** This file is part of the Qt Linguist of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** No Commercial Usage
-** This file contains pre-release code and may not be distributed.
-** You may use this file in accordance with the terms and conditions
-** contained in the Technology Preview License Agreement accompanying
-** this package.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, 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.
-**
-** If you have questions regarding the use of this file, please contact
-** Nokia at qt-info@nokia.com.
-**
-**
-**
-**
-**
-**
-**
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#include "testlupdate.h"
-#include <stdlib.h>
-#include <QtGui/QApplication>
-#include <QtCore/QProcess>
-#include <QtCore/QTimer>
-#include <QtCore/QDir>
-
-#ifdef Q_OS_WIN32
-# include <windows.h>
-#endif
-
-#include <QtTest/QtTest>
-
-
-TestLUpdate::TestLUpdate()
-{
- childProc = 0;
- QString binPath = QLibraryInfo::location(QLibraryInfo::BinariesPath);
- m_cmdLupdate = binPath + QLatin1String("/lupdate");
-}
-
-TestLUpdate::~TestLUpdate()
-{
- if (childProc)
- delete childProc;
-}
-
-void TestLUpdate::setWorkingDirectory(const QString &workDir)
-{
- m_workDir = workDir;
- QDir::setCurrent(m_workDir);
-}
-
-void TestLUpdate::addMakeResult( const QString &result )
-{
- make_result.append( result );
-}
-
-bool TestLUpdate::runChild( bool showOutput, const QString &program, const QStringList &argList)
-{
- make_result.clear();
- exit_ok = FALSE;
- if (childProc)
- delete childProc;
-
- child_show = showOutput;
- if ( showOutput ) {
- QString S = argList.join(" ");
- addMakeResult( program + QLatin1String(" ") + S );
- }
-
- childProc = new QProcess();
- Q_ASSERT(childProc);
-
- childProc->setWorkingDirectory(m_workDir);
- connect(childProc, SIGNAL(finished(int)), this, SLOT(childReady(int)));
- childProc->setProcessChannelMode(QProcess::MergedChannels);
- if (argList.isEmpty()) {
- childProc->start( program, QIODevice::ReadWrite | QIODevice::Text );
- } else {
- childProc->start( program, argList, QIODevice::ReadWrite | QIODevice::Text );
- }
- bool ok;
-
- ok = childProc->waitForStarted();
-
- if (ok)
- ok = childProc->waitForFinished();
-
- if (!ok)
- addMakeResult( "Error executing '" + program + "'." );
-
- childReady(ok ? 0 : -1);
-
- return ok;
-}
-
-void TestLUpdate::childReady(int /*exitCode*/)
-{
- if (childProc != 0) {
- childHasData();
- exit_ok = childProc->state() == QProcess::NotRunning
- && childProc->exitStatus() == 0;
- childProc->deleteLater();
- }
- childProc = 0;
-}
-
-void TestLUpdate::childHasData()
-{
- //QByteArray ba = childProc->readAllStandardError();
- //qDebug() << "ERROR:" << ba;
- QString stdoutput = childProc->readAllStandardOutput();
- stdoutput = stdoutput.replace("\t", " ");
- if (child_show)
- addMakeResult(stdoutput);
-}
-
-bool TestLUpdate::run(const QString &commandline)
-{
- return runChild(true, m_cmdLupdate + QLatin1String(" ") + commandline);
-}
-
-
-bool TestLUpdate::updateProFile(const QString &arguments)
-{
- QStringList args = arguments.split(QChar(' '));
- return runChild( true, m_cmdLupdate, args );
-}
diff --git a/tests/auto/linguist/lupdate/testlupdate.h b/tests/auto/linguist/lupdate/testlupdate.h
deleted file mode 100644
index 153d7ba..0000000
--- a/tests/auto/linguist/lupdate/testlupdate.h
+++ /dev/null
@@ -1,85 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
-** All rights reserved.
-** Contact: Nokia Corporation (qt-info@nokia.com)
-**
-** This file is part of the Qt Linguist of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** No Commercial Usage
-** This file contains pre-release code and may not be distributed.
-** You may use this file in accordance with the terms and conditions
-** contained in the Technology Preview License Agreement accompanying
-** this package.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, 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.
-**
-** If you have questions regarding the use of this file, please contact
-** Nokia at qt-info@nokia.com.
-**
-**
-**
-**
-**
-**
-**
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#ifndef TESTLUPDATE_H
-#define TESTLUPDATE_H
-
-#include <QObject>
-#include <QProcess>
-#include <QStringList>
-
-class TestLUpdate : public QObject
-{
- Q_OBJECT
-
-public:
- TestLUpdate();
- virtual ~TestLUpdate();
-
- void setWorkingDirectory( const QString &workDir);
- bool run( const QString &commandline);
- bool updateProFile( const QString &arguments);
- QStringList getErrorMessages() {
- return make_result;
- }
- void clearResult() {
- make_result.clear();
- }
-private:
- QString m_cmdLupdate;
- QString m_workDir;
- QProcess *childProc;
- QStringList env_list;
- QStringList make_result;
-
- bool child_show;
- bool qws_mode;
- bool exit_ok;
-
- bool runChild( bool showOutput, const QString &program, const QStringList &argList = QStringList());
- void addMakeResult( const QString &result );
- void childHasData();
-
-private slots:
- void childReady(int exitCode);
-};
-
-#endif // TESTLUPDATE_H
diff --git a/tests/auto/linguist/lupdate/tst_lupdate.cpp b/tests/auto/linguist/lupdate/tst_lupdate.cpp
index 02bb71e..80c8f4f 100644
--- a/tests/auto/linguist/lupdate/tst_lupdate.cpp
+++ b/tests/auto/linguist/lupdate/tst_lupdate.cpp
@@ -39,7 +39,6 @@
**
****************************************************************************/
-#include "testlupdate.h"
#if CHECK_SIMTEXTH
#include "../shared/simtexth.h"
#endif
@@ -55,7 +54,7 @@ class tst_lupdate : public QObject
{
Q_OBJECT
public:
- tst_lupdate() { m_basePath = QDir::currentPath() + QLatin1String("/testdata/"); }
+ tst_lupdate();
private slots:
void good_data();
@@ -68,7 +67,7 @@ private slots:
#endif
private:
- TestLUpdate m_lupdate;
+ QString m_cmdLupdate;
QString m_basePath;
void doCompare(const QStringList &actual, const QString &expectedFn, bool err);
@@ -76,10 +75,17 @@ private:
};
+tst_lupdate::tst_lupdate()
+{
+ QString binPath = QLibraryInfo::location(QLibraryInfo::BinariesPath);
+ m_cmdLupdate = binPath + QLatin1String("/lupdate");
+ m_basePath = QDir::currentPath() + QLatin1String("/testdata/");
+}
+
void tst_lupdate::doCompare(const QStringList &actual, const QString &expectedFn, bool err)
{
QFile file(expectedFn);
- QVERIFY(file.open(QIODevice::ReadOnly | QIODevice::Text));
+ QVERIFY2(file.open(QIODevice::ReadOnly | QIODevice::Text), qPrintable(expectedFn));
QStringList expected = QString(file.readAll()).trimmed().split('\n');
int i = 0, ei = expected.size(), gi = actual.size();
@@ -140,7 +146,7 @@ void tst_lupdate::doCompare(const QStringList &actual, const QString &expectedFn
void tst_lupdate::doCompare(const QString &actualFn, const QString &expectedFn, bool err)
{
QFile afile(actualFn);
- QVERIFY(afile.open(QIODevice::ReadOnly | QIODevice::Text));
+ QVERIFY2(afile.open(QIODevice::ReadOnly | QIODevice::Text), qPrintable(actualFn));
QStringList actual = QString(afile.readAll()).trimmed().split('\n');
doCompare(actual, expectedFn, err);
@@ -169,14 +175,13 @@ void tst_lupdate::good()
qDebug() << "Checking...";
- QString generatedtsfile(QLatin1String("project.ts"));
+ QString generatedtsfile(dir + QLatin1String("/project.ts"));
- m_lupdate.setWorkingDirectory(dir);
// look for a command
QString lupdatecmd;
QFile file(dir + "/lupdatecmd");
if (file.exists()) {
- QVERIFY(file.open(QIODevice::ReadOnly | QIODevice::Text));
+ QVERIFY2(file.open(QIODevice::ReadOnly | QIODevice::Text), qPrintable(file.fileName()));
while (!file.atEnd()) {
QByteArray cmdstring = file.readLine().simplified();
if (cmdstring.startsWith('#'))
@@ -201,14 +206,24 @@ void tst_lupdate::good()
if (lupdatecmd.isEmpty())
lupdatecmd = QLatin1String("project.pro");
lupdatecmd.prepend("-silent ");
- m_lupdate.updateProFile(lupdatecmd);
+
+ QProcess proc;
+ proc.setWorkingDirectory(dir);
+ proc.setProcessChannelMode(QProcess::MergedChannels);
+ proc.start(m_cmdLupdate + ' ' + lupdatecmd, QIODevice::ReadWrite | QIODevice::Text);
+ QVERIFY2(proc.waitForFinished(5000), qPrintable(lupdatecmd));
+ QByteArray output = proc.readAll().trimmed();
+ QVERIFY2(proc.exitStatus() == QProcess::NormalExit,
+ "\"lupdate " + lupdatecmd.toLatin1() + "\" crashed\n" + output);
+ QVERIFY2(!proc.exitCode(),
+ "\"lupdate " + lupdatecmd.toLatin1() + "\" exited with code " +
+ QByteArray::number(proc.exitCode()) + "\n" + proc.readAll());
// If the file expectedoutput.txt exists, compare the
// console output with the content of that file
QFile outfile(dir + "/expectedoutput.txt");
if (outfile.exists()) {
- QString errs = m_lupdate.getErrorMessages().at(1).trimmed();
- QStringList errslist = errs.split(QLatin1Char('\n'));
+ QStringList errslist = QString::fromLatin1(output).split(QLatin1Char('\n'));
doCompare(errslist, outfile.fileName(), true);
if (QTest::currentTestFailed())
return;
@@ -238,14 +253,21 @@ void tst_lupdate::commandline()
QFETCH(QString, generatedtsfile);
QFETCH(QString, expectedtsfile);
- m_lupdate.setWorkingDirectory(m_basePath + currentPath);
QString generated =
m_basePath + currentPath + QLatin1Char('/') + generatedtsfile;
QFile gen(generated);
if (gen.exists())
QVERIFY(gen.remove());
- if (!m_lupdate.run("-silent " + commandline))
- qDebug() << m_lupdate.getErrorMessages().last();
+ QProcess proc;
+ proc.setWorkingDirectory(m_basePath + currentPath);
+ proc.setProcessChannelMode(QProcess::MergedChannels);
+ proc.start(m_cmdLupdate + " -silent " + commandline, QIODevice::ReadWrite | QIODevice::Text);
+ QVERIFY2(proc.waitForFinished(5000), qPrintable(commandline));
+ QVERIFY2(proc.exitStatus() == QProcess::NormalExit,
+ "\"lupdate -silent " + commandline.toLatin1() + "\" crashed\n" + proc.readAll());
+ QVERIFY2(!proc.exitCode(),
+ "\"lupdate -silent " + commandline.toLatin1() + "\" exited with code " +
+ QByteArray::number(proc.exitCode()) + "\n" + proc.readAll());
doCompare(generated, m_basePath + currentPath + QLatin1Char('/') + expectedtsfile, false);
}