File indexing completed on 2024-04-21 03:48:17

0001 /*
0002  * SPDX-FileCopyrightText: 2016 Hartmut Riesenbeck <hartmut.riesenbeck@gmx.de>
0003  * SPDX-License-Identifier: GPL-2.0-or-later
0004  */
0005 
0006 #include "keduvocdocument.h"
0007 #include <QTemporaryFile>
0008 #include <QTest>
0009 
0010 namespace KEduVocDocumentTests
0011 {
0012 /** @file
0013  * \brief Various KEduVocDocument tests
0014  * This test class contends various tests for public KEduVocDocument methods.
0015  * They are used to proof expected behavior before and after apply changes to the tested methods.
0016  * @author Hartmut Riesenbeck <hartmut.riesenbeck@gmx.de>
0017  */
0018 
0019 class KEduVocDocumentTest : public QObject
0020 {
0021     Q_OBJECT
0022 
0023 private slots:
0024     void initTestCase();
0025     void testDetectFileType();
0026     void testOpen();
0027 
0028 private:
0029     void createTmpTestFileOfType(KEduVocDocument::FileType fileType);
0030     QString tmpTestFileName() const;
0031     QUrl tmpTestFileUrl() const;
0032 
0033 private:
0034     QTemporaryFile m_tempTestFile;
0035     KEduVocDocument m_documentTemplate;
0036 };
0037 
0038 void KEduVocDocumentTest::initTestCase()
0039 {
0040     if (!m_tempTestFile.open()) {
0041         QFAIL("Temporary test file could not be created.");
0042         return;
0043     }
0044     m_tempTestFile.close();
0045 
0046     KEduVocIdentifier lang;
0047     lang.setName(QStringLiteral("KEduVocDocument Language Name"));
0048     lang.setLocale(QStringLiteral("en"));
0049 
0050     m_documentTemplate.setAuthor(QStringLiteral("KEduVocDocument Tests"));
0051     m_documentTemplate.appendIdentifier(lang);
0052     m_documentTemplate.setGenerator(QStringLiteral("KEduVocDocument Unit Tests"));
0053 }
0054 
0055 void KEduVocDocumentTest::testDetectFileType()
0056 {
0057     KEduVocDocument::FileType resultFileType(KEduVocDocument::KvdNone);
0058 
0059     createTmpTestFileOfType(KEduVocDocument::Kvtml);
0060     resultFileType = KEduVocDocument::detectFileType(tmpTestFileName());
0061     QCOMPARE(resultFileType, KEduVocDocument::Kvtml);
0062 
0063     createTmpTestFileOfType(KEduVocDocument::Csv);
0064     resultFileType = KEduVocDocument::detectFileType(tmpTestFileName());
0065     QCOMPARE(resultFileType, KEduVocDocument::Csv);
0066 }
0067 
0068 void KEduVocDocumentTest::testOpen()
0069 {
0070     KEduVocDocument::ErrorCode openResult(KEduVocDocument::NoError);
0071 
0072     createTmpTestFileOfType(KEduVocDocument::Kvtml);
0073     KEduVocDocument docKvtml;
0074     openResult = docKvtml.open(tmpTestFileUrl(), KEduVocDocument::FileOpenReadOnly);
0075     QCOMPARE(openResult, KEduVocDocument::NoError);
0076 
0077     createTmpTestFileOfType(KEduVocDocument::Csv);
0078     KEduVocDocument docCsv;
0079     openResult = docCsv.open(tmpTestFileUrl(), KEduVocDocument::FileOpenReadOnly);
0080     QCOMPARE(openResult, KEduVocDocument::NoError);
0081 }
0082 
0083 void KEduVocDocumentTest::createTmpTestFileOfType(KEduVocDocument::FileType fileType)
0084 {
0085     KEduVocDocument::ErrorCode result = m_documentTemplate.saveAs(tmpTestFileUrl(), fileType);
0086     if (result != KEduVocDocument::NoError) {
0087         QStringList errorStrings = QStringList() << QStringLiteral("NoError") << QStringLiteral("Unknown") << QStringLiteral("InvalidXml")
0088                                                  << QStringLiteral("FileTypeUnknown") << QStringLiteral("FileCannotWrite") << QStringLiteral("FileWriterFailed")
0089                                                  << QStringLiteral("FileCannotRead") << QStringLiteral("FileReaderFailed") << QStringLiteral("FileDoesNotExist")
0090                                                  << QStringLiteral("FileLocked") << QStringLiteral("FileCannotLock") << QStringLiteral("FileIsReadOnly");
0091         QString failText = QStringLiteral("Temporary test file could not be saved. (Error code = %1)");
0092         failText = failText.arg(errorStrings.value(result));
0093         QFAIL(failText.toLocal8Bit().constData());
0094     }
0095 }
0096 
0097 QString KEduVocDocumentTest::tmpTestFileName() const
0098 {
0099     return m_tempTestFile.fileName();
0100 }
0101 
0102 QUrl KEduVocDocumentTest::tmpTestFileUrl() const
0103 {
0104     return QUrl::fromLocalFile(m_tempTestFile.fileName());
0105 }
0106 
0107 }
0108 
0109 QTEST_MAIN(KEduVocDocumentTests::KEduVocDocumentTest)
0110 
0111 #include "keduvocdocumenttest.moc"