File indexing completed on 2024-06-23 05:49:23

0001 /*
0002     This file is part of the Kasten Framework, made within the KDE community.
0003 
0004     SPDX-FileCopyrightText: 2007-2008 Friedrich W. H. Kossebau <kossebau@kde.org>
0005 
0006     SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL
0007 */
0008 
0009 #include "testdocumentfilesynchronizerfactorytest.hpp"
0010 
0011 // test object
0012 #include <testdocumentfilesynchronizerfactory.hpp>
0013 // lib
0014 #include <testdocument.hpp>
0015 // test utils
0016 #include <util/filesystem.hpp>
0017 // Qt
0018 #include <QTest>
0019 #include <QSignalSpy>
0020 #include <QByteArray>
0021 #include <QFile>
0022 #include <QDataStream>
0023 #include <QUrl>
0024 
0025 static constexpr char TestDirectory[] = "testdocumentfilesynchronizerfactorytest";
0026 static constexpr char TestFileName1[] = "test1.data";
0027 #if 0
0028 static constexpr char TestFileName2[] = "test2.data";
0029 static constexpr char NotExistingFileName[] = "not.existing";
0030 static constexpr char NotExistingUrlName[] = "not://existing";
0031 #endif
0032 static constexpr char TestData1[] = "TestData1";
0033 #if 0
0034 static constexpr char TestData2[] = "TestData2";
0035 static constexpr char Header1[] = "Header1";
0036 static constexpr char Header2[] = "Header2";
0037 #endif
0038 
0039 void TestDocumentFileSynchronizerFactoryTest::writeToFile(const QString& filePath, const QByteArray& data, const QByteArray& header)
0040 {
0041     QFile file;
0042     file.setFileName(filePath);
0043     file.open(QIODevice::WriteOnly);
0044 
0045     QDataStream outStream(&file);
0046     outStream.writeRawData(header.data(), header.size());
0047     outStream.writeRawData(data.data(), data.size());
0048 
0049     file.close();
0050 }
0051 
0052 void TestDocumentFileSynchronizerFactoryTest::initTestCase()
0053 {
0054     mFileSystem = new TestFileSystem(QLatin1String(TestDirectory));
0055 }
0056 
0057 void TestDocumentFileSynchronizerFactoryTest::init()
0058 {
0059     const QByteArray testData(TestData1);
0060     const QString filePath = mFileSystem->createFilePath(QLatin1String(TestFileName1));
0061 
0062     writeToFile(filePath, testData);
0063 }
0064 
0065 void TestDocumentFileSynchronizerFactoryTest::cleanupTestCase()
0066 {
0067     delete mFileSystem;
0068 }
0069 
0070 void TestDocumentFileSynchronizerFactoryTest::checkFileContent(const QUrl& fileUrl, const QByteArray& data,
0071                                                                const QByteArray& header)
0072 {
0073     Q_UNUSED(data)
0074     Q_UNUSED(fileUrl)
0075     auto* factory = new Kasten::TestDocumentFileSynchronizerFactory(header);
0076 #if 0
0077     AbstractDocument* document = factory->loadNewDocument(fileUrl);
0078     Kasten::TestDocument* testDocument = qobject_cast<Kasten::TestDocument*>(document);
0079     QVERIFY(testDocument != 0);
0080     QCOMPARE(*testDocument->data(), data);
0081 
0082     delete document;
0083 #endif
0084     delete factory;
0085 }
0086 
0087 // ------------------------------------------------------------------ tests ----
0088 void TestDocumentFileSynchronizerFactoryTest::testCreate()
0089 {
0090     auto* factory = new Kasten::TestDocumentFileSynchronizerFactory();
0091 
0092     QVERIFY(factory != nullptr);
0093 
0094     delete factory;
0095 }
0096 #if 0
0097 void TestDocumentFileSynchronizerFactoryTest::testLoadFromFile()
0098 {
0099     const QByteArray testData(TestData1);
0100     const QUrl fileUrl = QUrl::fromLocalFile(mFileSystem->createFilePath(QStringLiteral(TestFileName1)));
0101 
0102     Kasten::TestDocumentFileSynchronizerFactory* factory = new Kasten::TestDocumentFileSynchronizerFactory();
0103     AbstractDocument* document = factory->loadNewDocument(fileUrl);
0104 
0105     Kasten::TestDocument* testDocument = qobject_cast<Kasten::TestDocument*>(document);
0106 
0107     QVERIFY(document != 0);
0108     QVERIFY(testDocument != 0);
0109     QVERIFY(document->synchronizer() != 0);
0110     QCOMPARE(document->synchronizer()->document(), document);
0111     QCOMPARE(document->hasLocalChanges(), false);
0112     QCOMPARE(*testDocument->data(), testData);
0113     QCOMPARE(document->synchronizer()->url(), fileUrl);
0114 
0115     delete document;
0116     delete factory;
0117 }
0118 
0119 void TestDocumentFileSynchronizerFactoryTest::testLoadFromNotExistingUrl()
0120 {
0121     const QUrl fileUrl(QString::fromLatin1(NotExistingUrlName));
0122     Kasten::TestDocumentFileSynchronizerFactory* factory = new Kasten::TestDocumentFileSynchronizerFactory();
0123     AbstractDocument* document = factory->loadNewDocument(fileUrl);
0124 
0125     QVERIFY(document == 0);
0126     delete factory;
0127 }
0128 
0129 void TestDocumentFileSynchronizerFactoryTest::testLoadFromNotExistingFile()
0130 {
0131     const QUrl fileUrl = QUrl::fromLocalFile(mFileSystem->createFilePath(QStringLiteral(NotExistingFileName)));
0132     Kasten::TestDocumentFileSynchronizerFactory* factory = new Kasten::TestDocumentFileSynchronizerFactory();
0133     AbstractDocument* document = factory->loadNewDocument(fileUrl);
0134 
0135     QVERIFY(document == 0);
0136     delete factory;
0137 }
0138 
0139 void TestDocumentFileSynchronizerFactoryTest::testLoadSaveFile()
0140 {
0141     const QByteArray otherData(TestData2);
0142     const QUrl fileUrl = QUrl::fromLocalFile(mFileSystem->createFilePath(QStringLiteral(TestFileName1)));
0143 
0144     Kasten::TestDocumentFileSynchronizerFactory* factory = new Kasten::TestDocumentFileSynchronizerFactory();
0145     AbstractDocument* document = factory->loadNewDocument(fileUrl);
0146 
0147     Kasten::TestDocument* testDocument = qobject_cast<Kasten::TestDocument*>(document);
0148     QVERIFY(testDocument != 0);
0149     // change and save
0150     testDocument->setData(otherData);
0151     document->synchronizer()->syncToRemote();
0152 
0153     // now delete document and load new
0154     delete document;
0155     delete factory;
0156 
0157     checkFileContent(fileUrl, otherData);
0158 }
0159 
0160 void TestDocumentFileSynchronizerFactoryTest::testLoadReloadFile()
0161 {
0162     const QByteArray otherData(TestData2);
0163     const QString filePath = mFileSystem->createFilePath(QStringLiteral(TestFileName1));
0164     const QUrl fileUrl = QUrl::fromLocalFile(filePath);
0165 
0166     Kasten::TestDocumentFileSynchronizerFactory* factory = new Kasten::TestDocumentFileSynchronizerFactory();
0167     AbstractDocument* document = factory->loadNewDocument(fileUrl);
0168 
0169     Kasten::TestDocument* testDocument = qobject_cast<Kasten::TestDocument*>(document);
0170     QVERIFY(testDocument != 0);
0171 
0172     // change on disc and reload
0173     writeToFile(filePath, otherData);
0174     // ? use QTest::kWaitForSignal (QObject* obj, const char* signal, int timeout=0)
0175 //     QCOMPARE( document->syncStates(), Kasten::TestDocument::RemoteHasChanges );
0176 
0177     document->synchronizer()->syncFromRemote();
0178 
0179     QCOMPARE(*testDocument->data(), otherData);
0180 
0181     delete document;
0182     delete factory;
0183 }
0184 
0185 void TestDocumentFileSynchronizerFactoryTest::testConnectToFile()
0186 {
0187     const QByteArray otherData(TestData2);
0188     const QUrl fileUrl1 = QUrl::::fromLocalFile(mFileSystem->createFilePath(QStringLiteral(TestFileName1)));
0189     const QString filePath2 = mFileSystem->createFilePath(QStringLiteral(TestFileName2));
0190     const QUrl fileUrl2 = QUrl::fromLocalFile(filePath2);
0191 
0192     Kasten::TestDocumentFileSynchronizerFactory* factory = new Kasten::TestDocumentFileSynchronizerFactory();
0193     Kasten::TestDocument* testDocument = new Kasten::TestDocument();
0194     AbstractDocument* document = testDocument;
0195     testDocument->setData(otherData);
0196 
0197     // file 1
0198     bool result = factory->connectDocument(document, fileUrl1, AbstractModelSynchronizer::ReplaceRemote);
0199     QVERIFY(result);
0200 
0201     // file 2
0202     result = factory->connectDocument(document, fileUrl2, AbstractModelSynchronizer::ReplaceRemote);
0203     QVERIFY(result);
0204 
0205     // now delete document and load new
0206     delete document;
0207     delete factory;
0208 
0209     checkFileContent(fileUrl1, otherData);
0210     checkFileContent(fileUrl2, otherData);
0211 }
0212 #endif
0213 
0214 QTEST_GUILESS_MAIN(TestDocumentFileSynchronizerFactoryTest)
0215 
0216 #include "moc_testdocumentfilesynchronizerfactorytest.cpp"