File indexing completed on 2024-03-24 16:13:27
0001 /** =========================================================== 0002 * @file 0003 * 0004 * This file is a part of KDE project 0005 * <a href="https://commits.kde.org/libmediawiki">libmediawiki</a> 0006 * 0007 * @date 2011-03-22 0008 * @brief a MediaWiki C++ interface for KDE 0009 * 0010 * @author Copyright (C) 2011 by Manuel Campomanes 0011 * <a href="mailto:campomanes dot manuel at gmail dot com">campomanes dot manuel at gmail dot com</a> 0012 * 0013 * This program is free software; you can redistribute it 0014 * and/or modify it under the terms of the GNU General 0015 * Public License as published by the Free Software Foundation; 0016 * either version 2, or (at your option) 0017 * any later version. 0018 * 0019 * This program is distributed in the hope that it will be useful, 0020 * but WITHOUT ANY WARRANTY; without even the implied warranty of 0021 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 0022 * GNU General Public License for more details. 0023 * 0024 * ============================================================ */ 0025 0026 #ifndef TEST_PARSE_H 0027 #define TEST_PARSE_H 0028 0029 #include <QObject> 0030 #include <QtTest> 0031 0032 #include <KJob> 0033 0034 #include "mediawiki.h" 0035 #include "parse.h" 0036 #include "libmediawikitest/fakeserver.h" 0037 0038 using mediawiki::MediaWiki; 0039 using mediawiki::Parse; 0040 0041 Q_DECLARE_METATYPE(FakeServer::Request) 0042 Q_DECLARE_METATYPE(QVariant) 0043 Q_DECLARE_METATYPE(Parse*) 0044 0045 QString QStringFromFile(const QString& fileName) 0046 { 0047 QFile file( fileName ); 0048 0049 if (!file.open( QFile::ReadOnly )) 0050 return QString(); 0051 0052 QTextStream in(&file); 0053 QString scenario; 0054 // When loading from files we never have the authentication phase 0055 // force jumping directly to authenticated state. 0056 0057 while ( !in.atEnd() ) 0058 { 0059 scenario.append( in.readLine() ); 0060 } 0061 0062 file.close(); 0063 return scenario; 0064 } 0065 0066 class ParseTest : public QObject 0067 { 0068 Q_OBJECT 0069 0070 public Q_SLOTS: 0071 0072 void parseHandle(KJob* job) 0073 { 0074 Q_UNUSED(job) 0075 parseCount++; 0076 } 0077 0078 void resultHandle(const QString& result) 0079 { 0080 parseResult = result; 0081 } 0082 0083 private Q_SLOTS: 0084 0085 void initTestCase() 0086 { 0087 parseCount = 0; 0088 this->m_mediaWiki = new MediaWiki(QUrl(QStringLiteral("http://127.0.0.1:12566"))); 0089 } 0090 0091 void result() 0092 { 0093 QString scenario = QStringFromFile(QStringLiteral("./parsetest_result.rc")); 0094 QString result = QStringFromFile(QStringLiteral("./parsetest_resulttrue.rc")); 0095 0096 Parse* const job = new Parse(*m_mediaWiki, nullptr); 0097 parseCount = 0; 0098 FakeServer fakeserver; 0099 fakeserver.setScenario(scenario); 0100 fakeserver.startAndWait(); 0101 0102 connect(job, SIGNAL(result(QString)), 0103 this, SLOT(resultHandle(QString))); 0104 0105 connect(job, SIGNAL(result(KJob*)), 0106 this, SLOT(parseHandle(KJob*))); 0107 0108 job->exec(); 0109 QCOMPARE(parseResult, result); 0110 QCOMPARE(this->parseCount, 1); 0111 } 0112 0113 void parseSetters() 0114 { 0115 QFETCH(QString, scenario); 0116 QFETCH(QString, request); 0117 QFETCH(Parse*, job); 0118 0119 parseCount = 0; 0120 FakeServer fakeserver; 0121 fakeserver.setScenario(scenario); 0122 fakeserver.startAndWait(); 0123 0124 connect(job, SIGNAL(result(KJob*)), 0125 this, SLOT(parseHandle(KJob*))); 0126 0127 job->exec(); 0128 FakeServer::Request serverrequest = fakeserver.getRequest()[0]; 0129 QCOMPARE(serverrequest.type, QStringLiteral("GET")); 0130 QCOMPARE(serverrequest.value, request); 0131 QCOMPARE(this->parseCount, 1); 0132 } 0133 0134 void parseSetters_data() 0135 { 0136 QTest::addColumn<QString>("scenario"); 0137 QTest::addColumn<QString>("request"); 0138 QTest::addColumn<Parse*>("job"); 0139 0140 Parse* const p1 = new Parse( *m_mediaWiki, nullptr); 0141 p1->setText(QStringLiteral("listedecharacteres")); 0142 0143 QTest::newRow("Text") 0144 << QStringFromFile(QStringLiteral("./parsetest.rc")) 0145 << QStringLiteral("/?format=xml&action=parse&text=listedecharacteres") 0146 << p1; 0147 0148 Parse* const p2 = new Parse( *m_mediaWiki, nullptr); 0149 p2->setPageName(QStringLiteral("listedecharacteres")); 0150 0151 QTest::newRow("Page Name") 0152 << QStringFromFile(QStringLiteral("./parsetest.rc")) 0153 << QStringLiteral("/?format=xml&action=parse&page=listedecharacteres") 0154 << p2; 0155 0156 Parse* const p3 = new Parse( *m_mediaWiki, nullptr); 0157 p3->setTitle(QStringLiteral("listedecharacteres")); 0158 0159 QTest::newRow("Title") 0160 << QStringFromFile(QStringLiteral("./parsetest.rc")) 0161 << QStringLiteral("/?format=xml&action=parse&title=listedecharacteres") 0162 << p3; 0163 0164 Parse* const p4 = new Parse( *m_mediaWiki, nullptr); 0165 p4->setUseLang(QStringLiteral("fr")); 0166 0167 QTest::newRow("User Langue") 0168 << QStringFromFile(QStringLiteral("./parsetest.rc")) 0169 << QStringLiteral("/?format=xml&action=parse&uselang=fr") 0170 << p4; 0171 } 0172 0173 void error() 0174 { 0175 QFETCH(QString, scenario); 0176 QFETCH(int, error); 0177 parseCount = 0; 0178 FakeServer fakeserver; 0179 0180 if(scenario != QStringLiteral("error serveur")) 0181 { 0182 fakeserver.addScenario(scenario); 0183 fakeserver.startAndWait(); 0184 } 0185 0186 Parse* const job = new Parse(*m_mediaWiki); 0187 job->setTitle( QStringLiteral("title") ); 0188 0189 connect(job, SIGNAL(result(KJob*)), 0190 this, SLOT(parseHandle(KJob*))); 0191 0192 job->exec(); 0193 0194 if(scenario != QStringLiteral("error serveur")) 0195 { 0196 QList<FakeServer::Request> requests = fakeserver.getRequest(); 0197 QCOMPARE(requests.size(), 1); 0198 } 0199 0200 QCOMPARE(job->error(), error); 0201 QCOMPARE(parseCount, 1); 0202 0203 if(scenario != QStringLiteral("error serveur")) 0204 { 0205 QVERIFY(fakeserver.isAllScenarioDone()); 0206 } 0207 } 0208 0209 void error_data() 0210 { 0211 QTest::addColumn<QString>("scenario"); 0212 QTest::addColumn<int>("error"); 0213 0214 QTest::newRow("XML") 0215 << QStringLiteral("<?xml version=\"1.0\" encoding=\"utf-8\"?><api><parse><text>") 0216 << int(Parse::XmlError); 0217 0218 QTest::newRow("Network") 0219 << QStringLiteral("error serveur") 0220 << int(Parse::NetworkError); 0221 0222 QTest::newRow("Params") 0223 << QStringLiteral("<api><error code=\"params\" info=\"\"/></api>") 0224 << int(Parse::TooManyParams); 0225 0226 QTest::newRow("Missing Title") 0227 << QStringLiteral("<api><error code=\"missingtitle\" info=\"\"/></api>") 0228 << int(Parse::MissingPage); 0229 } 0230 0231 void cleanupTestCase() 0232 { 0233 delete this->m_mediaWiki; 0234 } 0235 0236 private: 0237 0238 int parseCount; 0239 QString request; 0240 QString parseResult; 0241 MediaWiki* m_mediaWiki; 0242 }; 0243 0244 QTEST_MAIN(ParseTest) 0245 0246 #include "parsetest.moc" 0247 0248 #endif // TEST_PARSE_H