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"