Revision control

++ // Copyright (C) 2016 The Qt Company Ltd.
++ // SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
++ #include <QtTest/QtTest>
++
++ #include <QtCore/QThread>
++ #include <QtCore/QUrl>
++ #include <QtCore/QFileInfo>
++
++ #include <QtHelp/QHelpEngine>
++ #include <QtHelp/QHelpIndexWidget>
++
++ class SignalWaiter : public QThread
++ {
++ Q_OBJECT
++
++ public:
++ SignalWaiter();
++ void run() override;
++
++ public slots:
++ void stopWaiting();
++
++ private:
++ bool stop;
++ };
++
++ SignalWaiter::SignalWaiter()
++ {
++ stop = false;
++ }
++
++ void SignalWaiter::run()
++ {
++ while (!stop)
++ msleep(500);
++ stop = false;
++ }
++
++ void SignalWaiter::stopWaiting()
++ {
++ stop = true;
++ }
++
++
++ class tst_QHelpIndexModel : public QObject
++ {
++ Q_OBJECT
++
++ private slots:
++ void init();
++
++ void setupIndex();
++ void filter();
++
++ private:
++ QString m_colFile;
++ };
++
++ void tst_QHelpIndexModel::init()
++ {
++ QString path = QLatin1String(SRCDIR);
++
++ m_colFile = path + QLatin1String("/data/col.qhc");
++ if (QFile::exists(m_colFile))
++ QDir::current().remove(m_colFile);
++ if (!QFile::copy(path + "/data/collection.qhc", m_colFile))
++ QFAIL("Cannot copy file!");
++ QFile f(m_colFile);
++ f.setPermissions(QFile::WriteUser|QFile::ReadUser);
++ }
++
++ void tst_QHelpIndexModel::setupIndex()
++ {
++ QHelpEngine h(m_colFile, 0);
++ h.setReadOnly(false);
++ QHelpIndexModel *m = h.indexModel();
++ SignalWaiter w;
++ connect(m, &QHelpIndexModel::indexCreated, &w, &SignalWaiter::stopWaiting);
++ w.start();
++ h.setupData();
++ int i = 0;
++ while (w.isRunning() && i++ < 10)
++ QTest::qWait(500);
++
++ QCOMPARE(h.currentFilter(), QString("unfiltered"));
++ QCOMPARE(m->stringList().size(), 19);
++
++ w.start();
++ h.setCurrentFilter("Custom Filter 1");
++ i = 0;
++ while (w.isRunning() && i++ < 10)
++ QTest::qWait(500);
++
++ QStringList lst;
++ lst << "foo" << "bar" << "bla" << "einstein" << "newton";
++ const auto stringList = m->stringList();
++ QCOMPARE(stringList.size(), 5);
++ for (const QString &s : stringList)
++ lst.removeAll(s);
++ QCOMPARE(lst.isEmpty(), true);
++ }
++
++ void tst_QHelpIndexModel::filter()
++ {
++ QHelpEngine h(m_colFile, 0);
++ h.setReadOnly(false);
++ QHelpIndexModel *m = h.indexModel();
++ SignalWaiter w;
++ connect(m, &QHelpIndexModel::indexCreated, &w, &SignalWaiter::stopWaiting);
++ w.start();
++ h.setupData();
++ int i = 0;
++ while (w.isRunning() && i++ < 10)
++ QTest::qWait(500);
++
++ QCOMPARE(h.currentFilter(), QString("unfiltered"));
++ QCOMPARE(m->stringList().size(), 19);
++
++ m->filter("foo");
++ QCOMPARE(m->stringList().size(), 2);
++
++ m->filter("fo");
++ QCOMPARE(m->stringList().size(), 3);
++
++ m->filter("qmake");
++ QCOMPARE(m->stringList().size(), 11);
++ }
++
++ QTEST_MAIN(tst_QHelpIndexModel)
++ #include "tst_qhelpindexmodel.moc"