summaryrefslogtreecommitdiffstats
path: root/tests
diff options
context:
space:
mode:
authorArttu Tarkiainen <arttu.tarkiainen@qt.io>2020-03-26 12:05:28 +0200
committerArttu Tarkiainen <arttu.tarkiainen@qt.io>2020-03-30 14:44:08 +0300
commit3ed160565686da90f98c23918b57528dfcb6000e (patch)
treedb1d2e97d9df2ab6b2eb3888cced3a3204db23f0 /tests
parent665ea6eb636dfe60130fcbbc21d5bd29bbe27250 (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')
-rw-r--r--tests/auto/installer/installer.pro1
-rw-r--r--tests/auto/installer/linereplaceoperation/linereplaceoperation.pro6
-rw-r--r--tests/auto/installer/linereplaceoperation/tst_linereplaceoperation.cpp123
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"