File indexing completed on 2023-10-03 06:52:06

0001 /* GCompris - FileTest.cpp
0002  *
0003  * SPDX-FileCopyrightText: 2018 Himanshu Vishwakarma <himvish997@gmail.com>
0004  * GCompris  (C) 2018 GCompris Developers  <gcompris-devel@kde.org>
0005  *
0006  * Authors:
0007  *   Himanshu Vishwakarma <himvish997@gmail.com>
0008  *
0009  *   SPDX-License-Identifier: GPL-3.0-or-later
0010  */
0011 
0012 /* This file is used for the unit tests */
0013 
0014 #include <QtTest>
0015 #include <QObject>
0016 #include <QFile>
0017 
0018 #include "src/core/File.h"
0019 
0020 class CoreFileTest : public QObject
0021 {
0022     Q_OBJECT
0023 private slots:
0024     void cleanup();
0025     void FileExistsTest();
0026     void ReadWriteErrorsTest();
0027     void ReadWriteErrorsTest_data();
0028     void ReadWriteTest();
0029     void NameTest();
0030 };
0031 
0032 static const char *tempFilename = "./dummy_test_files.txt";
0033 static const char *fakeFilename = "-_/fezagvvx&V/d;-ùlc";
0034 
0035 void CoreFileTest::FileExistsTest()
0036 {
0037     QFile tempFile(tempFilename);
0038     // open in write mode to create the file if does not exist
0039     tempFile.open(QIODevice::ReadWrite);
0040     tempFile.close();
0041 
0042     QVERIFY(File::exists(tempFilename));
0043 }
0044 
0045 void CoreFileTest::ReadWriteErrorsTest_data()
0046 {
0047     QTest::addColumn<QString>("filename");
0048     QTest::addColumn<QString>("readError");
0049     QTest::addColumn<QString>("writeError");
0050     QTest::newRow("empty file") << ""
0051                                 << QStringLiteral("source is empty")
0052                                 << QStringLiteral("source is empty");
0053 
0054     QTest::newRow("non existing file") << fakeFilename
0055                                        << QStringLiteral("Unable to open the file")
0056                                        << QStringLiteral("could not open file ") + fakeFilename;
0057 }
0058 
0059 void CoreFileTest::ReadWriteErrorsTest()
0060 {
0061     QFETCH(QString, filename);
0062     QFETCH(QString, readError);
0063     QFETCH(QString, writeError);
0064 
0065     const QString fileContent = QStringLiteral("this is going to test the class File in the core");
0066 
0067     File file;
0068     QSignalSpy spyError(&file, &File::error);
0069     QVERIFY(spyError.isValid());
0070     QVERIFY(spyError.count() == 0);
0071     // we can't read
0072     QVERIFY(file.read(filename).isEmpty());
0073     QVERIFY(spyError.count() == 1);
0074     QString error = qvariant_cast<QString>(spyError.at(0).at(0));
0075     QCOMPARE(error, readError);
0076     // we can't write
0077     QVERIFY(!file.write(fileContent, filename));
0078     QVERIFY(spyError.count() == 2);
0079     error = qvariant_cast<QString>(spyError.at(1).at(0));
0080     QCOMPARE(error, writeError);
0081     // we can't append
0082     QVERIFY(!file.append(fileContent, filename));
0083     QVERIFY(spyError.count() == 3);
0084     error = qvariant_cast<QString>(spyError.at(2).at(0));
0085     QCOMPARE(error, writeError);
0086 }
0087 
0088 void CoreFileTest::ReadWriteTest()
0089 {
0090     QFile tempFile(tempFilename);
0091     // open in write mode to create the file if does not exist
0092     tempFile.open(QIODevice::ReadWrite);
0093     tempFile.close();
0094 
0095     File file;
0096     const QString fileContent = QStringLiteral("this is going to test the class File in the core");
0097     // normal use case, file exists
0098     QVERIFY(file.write(fileContent, tempFilename));
0099     QCOMPARE(file.read(), fileContent);
0100 
0101     // append to the file
0102     const QString appendedText = QStringLiteral("appended text.");
0103     QVERIFY(file.append(appendedText, tempFilename));
0104     QCOMPARE(file.read(), fileContent+appendedText);
0105 }
0106 
0107 void CoreFileTest::NameTest()
0108 {
0109     File file;
0110     QSignalSpy spyName(&file, &File::nameChanged);
0111     QVERIFY(spyName.isValid());
0112     QVERIFY(spyName.count() == 0);
0113     file.setName(tempFilename);
0114     QVERIFY(spyName.count() == 1);
0115     QCOMPARE(file.name(), QString(tempFilename));
0116     // test sanitizeUrl
0117     const QString sameNameUnsanitized = QStringLiteral("file://")+tempFilename;
0118     file.setName(sameNameUnsanitized);
0119     // no update triggered as same name after sanitization
0120     QVERIFY(spyName.count() == 1);
0121     QCOMPARE(file.name(), QString(tempFilename));
0122 
0123     const QString filenameUnsanitized = QStringLiteral("qrc:/")+tempFilename;
0124     file.setName(filenameUnsanitized);
0125     // no update triggered as same name after sanitization
0126     QVERIFY(spyName.count() == 2);
0127     QCOMPARE(file.name(), QStringLiteral(":/")+tempFilename);
0128 }
0129 
0130 void CoreFileTest::cleanup()
0131 {
0132     QFile::remove("./dummy_test_files.txt");
0133 }
0134 
0135 QTEST_MAIN(CoreFileTest)
0136 #include "FileTest.moc"