diff options
author | Arttu Tarkiainen <arttu.tarkiainen@qt.io> | 2020-03-26 12:05:28 +0200 |
---|---|---|
committer | Arttu Tarkiainen <arttu.tarkiainen@qt.io> | 2020-03-30 14:44:08 +0300 |
commit | 3ed160565686da90f98c23918b57528dfcb6000e (patch) | |
tree | db1d2e97d9df2ab6b2eb3888cced3a3204db23f0 /tests | |
parent | 665ea6eb636dfe60130fcbbc21d5bd29bbe27250 (diff) |
Add unit tests for LineReplaceOperation
Also fix found bug with empty search string causing replacement of
every line in a file.
Task-number: QTIFW-1697
Change-Id: I226aa8aa4cab62befb6828aa8e27d9f83e25e7e6
Reviewed-by: Katja Marttila <katja.marttila@qt.io>
Diffstat (limited to 'tests')
3 files changed, 130 insertions, 0 deletions
diff --git a/tests/auto/installer/installer.pro b/tests/auto/installer/installer.pro index 65dbad19d..9d271fe54 100644 --- a/tests/auto/installer/installer.pro +++ b/tests/auto/installer/installer.pro @@ -26,6 +26,7 @@ SUBDIRS += \ replaceoperation \ brokeninstaller \ cliinterface \ + linereplaceoperation \ metadatajob \ simplemovefileoperation diff --git a/tests/auto/installer/linereplaceoperation/linereplaceoperation.pro b/tests/auto/installer/linereplaceoperation/linereplaceoperation.pro new file mode 100644 index 000000000..7490d8bde --- /dev/null +++ b/tests/auto/installer/linereplaceoperation/linereplaceoperation.pro @@ -0,0 +1,6 @@ +include(../../qttest.pri) + +QT -= gui +QT += testlib + +SOURCES += tst_linereplaceoperation.cpp diff --git a/tests/auto/installer/linereplaceoperation/tst_linereplaceoperation.cpp b/tests/auto/installer/linereplaceoperation/tst_linereplaceoperation.cpp new file mode 100644 index 000000000..67f99baf2 --- /dev/null +++ b/tests/auto/installer/linereplaceoperation/tst_linereplaceoperation.cpp @@ -0,0 +1,123 @@ +/************************************************************************** +** +** Copyright (C) 2020 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the Qt Installer Framework. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +**************************************************************************/ + +#include <linereplaceoperation.h> + +#include <QObject> +#include <QFile> +#include <QTest> + +using namespace KDUpdater; +using namespace QInstaller; + +class tst_linereplaceoperation : public QObject +{ + Q_OBJECT + +private slots: + void initTestCase() + { + m_testFilePath = qApp->applicationDirPath() + QDir::toNativeSeparators("/test"); + } + + void testMissingArguments() + { + LineReplaceOperation op(nullptr); + + op.backup(); + + QVERIFY(op.testOperation()); + QVERIFY(!op.performOperation()); + + QCOMPARE(UpdateOperation::Error(op.error()), UpdateOperation::InvalidArguments); + QCOMPARE(op.errorString(), QString("Invalid arguments in LineReplace: " + "0 arguments given, exactly 3 arguments expected.")); + + op.setArguments(QStringList() << m_testFilePath << "" << "replace"); + QVERIFY(!op.performOperation()); + + QCOMPARE(UpdateOperation::Error(op.error()), UpdateOperation::InvalidArguments); + QCOMPARE(op.errorString(), QString("Invalid argument in LineReplace: " + "Empty search argument is not supported.")); + + op.setArguments(QStringList() << "" << "search" << "replace"); + QTest::ignoreMessage(QtWarningMsg, "QFSFileEngine::open: No file name specified"); + QVERIFY(!op.performOperation()); + + QCOMPARE(UpdateOperation::Error(op.error()), UpdateOperation::UserDefinedError); + QCOMPARE(op.errorString(), QString("Cannot open file \"\" for reading: No file name specified")); + } + + void testSearchReplace_data() + { + QTest::addColumn<QString>("source"); + QTest::addColumn<QString>("search"); + QTest::addColumn<QString>("replace"); + QTest::addColumn<QString>("expected"); + QTest::newRow("Lorem ipsum") << "Lorem ipsum dolore sit amet, consectetur adipiscing elit,\n" + "sed do eiusmod tempor incididunt ut labore et dolore magna aliqua." << "Lorem" << "Replaced" + << "Replaced\nsed do eiusmod tempor incididunt ut labore et dolore magna aliqua.\n"; + QTest::newRow(".ini syntax") << "[section]\na=x\nb=y" << "a=" << "a=y" << "[section]\na=y\nb=y\n"; + QTest::newRow(".xml syntax") << "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Test>\n<Tag></Tag>\n" + "</Test>" << "<Tag></Tag>" << "<Tag>el</Tag>" << "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" + "<Test>\n<Tag>el</Tag>\n</Test>\n"; + } + + void testSearchReplace() + { + QFETCH(QString, source); + QFETCH(QString, search); + QFETCH(QString, replace); + QFETCH(QString, expected); + + QFile file(m_testFilePath); + QVERIFY(file.open(QIODevice::WriteOnly | QIODevice::Text)); + + QTextStream stream(&file); + stream << source << endl; + file.close(); + + LineReplaceOperation op(nullptr); + op.setArguments(QStringList() << m_testFilePath << search << replace); + + QVERIFY2(op.performOperation(), op.errorString().toLatin1()); + + QVERIFY(file.open(QIODevice::ReadOnly | QIODevice::Text)); + QCOMPARE(stream.readAll(), expected); + + file.close(); + QVERIFY(file.remove()); + } + +private: + QString m_testFilePath; +}; + +QTEST_MAIN(tst_linereplaceoperation) + +#include "tst_linereplaceoperation.moc" |