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