/**************************************************************************** ** ** Copyright (C) 2016 The Qt Company Ltd. ** Contact: https://www.qt.io/licensing/ ** ** This file is part of the test suite of the Qt Toolkit. ** ** $QT_BEGIN_LICENSE:GPL-EXCEPT$ ** Commercial License Usage ** Licensees holding valid commercial Qt licenses may use this file in ** accordance with the commercial license agreement provided with the ** Software or, alternatively, in accordance with the terms contained in ** a written agreement between you and The Qt Company. For licensing terms ** and conditions see https://www.qt.io/terms-conditions. For further ** information use the contact form at https://www.qt.io/contact-us. ** ** GNU General Public License Usage ** Alternatively, this file may be used under the terms of the GNU ** General Public License version 3 as published by the Free Software ** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT ** included in the packaging of this file. Please review the following ** information to ensure the GNU General Public License requirements will ** be met: https://www.gnu.org/licenses/gpl-3.0.html. ** ** $QT_END_LICENSE$ ** ****************************************************************************/ #include #include #include #include #include "../../../src/assistant/qhelpgenerator/qhelpprojectdata_p.h" #include "../../../src/assistant/qhelpgenerator/helpgenerator.h" class tst_QHelpGenerator : public QObject { Q_OBJECT private slots: void initTestCase(); void generateHelp(); // Check that two runs of the generator creates the same file twice void generateTwice(); private: void checkNamespace(); void checkFilters(); void checkIndices(); void checkFiles(); void checkMetaData(); QString m_outputFile; QSqlQuery *m_query; }; void tst_QHelpGenerator::initTestCase() { QString path = QLatin1String(SRCDIR); m_outputFile = path + QLatin1String("/data/test.qch"); if (QFile::exists(m_outputFile)) { QDir d; if (!d.remove(m_outputFile)) QFAIL("Cannot remove old output file!"); } } void tst_QHelpGenerator::generateHelp() { // defined in profile QString path = QLatin1String(SRCDIR); QString inputFile(path + "/data/test.qhp"); QHelpProjectData data; if (!data.readData(inputFile)) QFAIL("Cannot read qthp file!"); HelpGenerator generator; QCOMPARE(generator.generate(&data, m_outputFile), true); { QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE", "testdb"); db.setDatabaseName(m_outputFile); if (!db.open()) { QSqlDatabase::removeDatabase("testdb"); QFAIL("Created database seems to be corrupt!"); } m_query = new QSqlQuery(db); checkNamespace(); checkFilters(); checkIndices(); checkFiles(); checkMetaData(); m_query->clear(); delete m_query; } QSqlDatabase::removeDatabase("testdb"); // check if db is still in use... initTestCase(); } void tst_QHelpGenerator::checkNamespace() { m_query->exec("SELECT Id, Name FROM NamespaceTable"); if (m_query->next() && m_query->value(1).toString() == QLatin1String("trolltech.com.1.0.0.test")) return; QFAIL("Namespace Error!"); } void tst_QHelpGenerator::checkFilters() { m_query->exec("SELECT COUNT(Id) FROM FilterAttributeTable"); if (!m_query->next() || m_query->value(0).toInt() != 3) QFAIL("FilterAttribute Error!"); m_query->exec("SELECT a.Name FROM FilterAttributeTable a, FilterTable b, " "FilterNameTable c WHERE c.Id=b.NameId AND b.FilterAttributeID=a.Id " "AND c.Name=\'Custom Filter 2\'"); QStringList lst; while (m_query->next()) lst.append(m_query->value(0).toString()); if (!lst.contains("test") || !lst.contains("filter2")) QFAIL("FilterAttribute Error!"); } void tst_QHelpGenerator::checkIndices() { m_query->exec("SELECT a.Name, b.Anchor FROM FileNameTable a, " "IndexTable b, IndexFilterTable c, FilterAttributeTable d " "WHERE a.FileID=b.FileId AND b.Id=c.IndexId " "AND c.FilterAttributeId=d.Id AND d.Name=\'filter1\' AND b.Name=\'foo\'"); if (!m_query->next() || m_query->value(0).toString() != QLatin1String("test.html") || m_query->value(1).toString() != QLatin1String("foo")) QFAIL("Index Error!"); m_query->exec("SELECT COUNT(a.Id) FROM IndexTable a, " "IndexFilterTable b, FilterAttributeTable c WHERE a.Id=b.IndexId " "AND b.FilterAttributeId=c.Id AND c.Name=\'filter2\'"); if (!m_query->next() || m_query->value(0).toInt() != 3) QFAIL("Index Error!"); } void tst_QHelpGenerator::checkFiles() { m_query->exec("SELECT COUNT(a.FileId) FROM FileNameTable a, FolderTable b " "WHERE a.FolderId=b.Id AND b.Name=\'testFolder\'"); if (!m_query->next() || m_query->value(0).toInt() != 6) QFAIL("File Error!"); QStringList lst; lst << "classic.css" << "test.html" << "people.html" << "sub/about.html"; m_query->exec("SELECT a.Name FROM FileNameTable a, FileFilterTable b, " "FilterAttributeTable c WHERE c.Id=b.FilterAttributeId " "AND b.FileId=a.FileID AND c.Name=\'filter1\'"); while (m_query->next()) lst.removeAll(m_query->value(0).toString()); QCOMPARE(lst.count(), 0); QMap fileAtts; m_query->exec("SELECT a.Id, b.Name FROM FileAttributeSetTable a, " "FilterAttributeTable b WHERE a.FilterAttributeId=b.Id"); while (m_query->next()) { int id = m_query->value(0).toInt(); if (!fileAtts.contains(id)) fileAtts.insert(id, QStringList()); fileAtts[id].append(m_query->value(1).toString()); } QCOMPARE(fileAtts.count(), 2); QVERIFY(fileAtts.value(1).contains("test")); QVERIFY(fileAtts.value(1).contains("filter1")); QVERIFY(!fileAtts.value(1).contains("filter2")); QVERIFY(fileAtts.value(2).contains("test")); QVERIFY(fileAtts.value(2).contains("filter2")); } void tst_QHelpGenerator::checkMetaData() { m_query->exec("SELECT COUNT(Value) FROM MetaDataTable"); if (!m_query->next()) QFAIL("Meta Data Error"); QCOMPARE(m_query->value(0).toInt(), 3); m_query->exec("SELECT Value FROM MetaDataTable WHERE Name=\'author\'"); if (!m_query->next()) QFAIL("Meta Data Error"); QCOMPARE(m_query->value(0).toString(), QString("Digia Plc and/or its subsidiary(-ies)")); } void tst_QHelpGenerator::generateTwice() { // defined in profile QString path = QLatin1String(SRCDIR); QString inputFile(path + "/data/test.qhp"); QHelpProjectData data; if (!data.readData(inputFile)) QFAIL("Cannot read qhp file!"); HelpGenerator generator1; HelpGenerator generator2; QString outputFile1 = path + QLatin1String("/data/test1.qch"); QString outputFile2 = path + QLatin1String("/data/test2.qch"); QCOMPARE(generator1.generate(&data, outputFile1), true); QCOMPARE(generator2.generate(&data, outputFile2), true); QFile f1(outputFile1); QFile f2(outputFile2); QVERIFY(f1.open(QIODevice::ReadOnly)); QVERIFY(f2.open(QIODevice::ReadOnly)); QByteArray arr1 = f1.readAll(); QByteArray arr2 = f2.readAll(); QFile::remove(outputFile1); QFile::remove(outputFile2); QCOMPARE(arr1, arr2); } QTEST_MAIN(tst_QHelpGenerator) #include "tst_qhelpgenerator.moc"