/*
* Copyright (C) 2014 Canonical Ltd.
*
* This program is free software: you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 3, as published
* by the Free Software Foundation.
*
* This program is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranties of
* MERCHANTABILITY, SATISFACTORY QUALITY, or FITNESS FOR A PARTICULAR
* PURPOSE. See the GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License along
* with this program. If not, see .
*/
#include "PageList.h"
#include
#include
#include
#include
#define PAGES_PATH "Wizard/Pages"
class PageListTest: public QObject
{
Q_OBJECT
public:
PageListTest() {};
private Q_SLOTS:
void testCollect();
void testIterate();
void testIgnoreNonNumbered();
void testIgnoreNonQml();
void testIgnoreDuplicates();
void testDisabled();
private:
void fillRoot(const QTemporaryDir &root);
void makeFile(const QTemporaryDir &root, const QString &dir, const QString &filename);
};
void PageListTest::fillRoot(const QTemporaryDir &root)
{
QVERIFY(root.isValid());
QDir rootDir = root.path();
QVERIFY(rootDir.mkpath(QString("a/") + PAGES_PATH));
QVERIFY(rootDir.mkpath(QString("b/") + PAGES_PATH));
QVERIFY(rootDir.mkpath(QString("c/") + PAGES_PATH));
qputenv("XDG_DATA_DIRS", QString(rootDir.path() + "/a:" +
rootDir.path() + "/b:" +
rootDir.path() + "/c").toLatin1());
}
void PageListTest::makeFile(const QTemporaryDir &root, const QString &dir, const QString &filename)
{
QFile file(root.path() + "/" + dir + "/" + PAGES_PATH + "/" + filename);
QVERIFY(file.open(QIODevice::WriteOnly));
file.close();
QVERIFY(file.exists());
}
void PageListTest::testCollect()
{
QTemporaryDir root;
fillRoot(root);
makeFile(root, "a", "3.qml");
makeFile(root, "b", "1.qml");
makeFile(root, "c", "2.qml");
PageList pageList;
QCOMPARE(pageList.entries(), QStringList() << "1.qml" << "2.qml" << "3.qml");
QCOMPARE(pageList.paths(), QStringList() << root.path() + "/b/" + PAGES_PATH + "/1.qml"
<< root.path() + "/c/" + PAGES_PATH + "/2.qml"
<< root.path() + "/a/" + PAGES_PATH + "/3.qml");
}
void PageListTest::testIterate()
{
QTemporaryDir root;
fillRoot(root);
makeFile(root, "a", "1.qml");
makeFile(root, "a", "2.qml");
makeFile(root, "a", "3.qml");
PageList pageList;
QCOMPARE(pageList.index(), -1);
QCOMPARE(pageList.next(), QString(root.path() + "/a/" + PAGES_PATH + "/1.qml"));
QCOMPARE(pageList.prev(), QString());
QCOMPARE(pageList.next(), QString(root.path() + "/a/" + PAGES_PATH + "/2.qml"));
QCOMPARE(pageList.prev(), QString(root.path() + "/a/" + PAGES_PATH + "/1.qml"));
QCOMPARE(pageList.index(), 0);
QCOMPARE(pageList.next(), QString(root.path() + "/a/" + PAGES_PATH + "/2.qml"));
QCOMPARE(pageList.next(), QString(root.path() + "/a/" + PAGES_PATH + "/3.qml"));
QCOMPARE(pageList.index(), 2);
QCOMPARE(pageList.next(), QString());
QCOMPARE(pageList.index(), 2);
}
void PageListTest::testIgnoreNonNumbered()
{
QTemporaryDir root;
fillRoot(root);
makeFile(root, "a", "1.qml");
makeFile(root, "a", "nope.qml");
PageList pageList;
QCOMPARE(pageList.entries(), QStringList() << "1.qml");
}
void PageListTest::testIgnoreNonQml()
{
QTemporaryDir root;
fillRoot(root);
makeFile(root, "a", "1.qml");
makeFile(root, "a", "2");
makeFile(root, "a", "2.txt");
PageList pageList;
QCOMPARE(pageList.entries(), QStringList() << "1.qml");
}
void PageListTest::testIgnoreDuplicates()
{
QTemporaryDir root;
fillRoot(root);
makeFile(root, "a", "1.qml");
makeFile(root, "b", "1.qml");
PageList pageList;
QCOMPARE(pageList.paths(), QStringList() << root.path() + "/a/" + PAGES_PATH + "/1.qml");
}
void PageListTest::testDisabled()
{
QTemporaryDir root;
fillRoot(root);
makeFile(root, "a", "1.qml.disabled"); // before the fact
makeFile(root, "b", "1.qml");
makeFile(root, "b", "2.qml");
makeFile(root, "b", "2.qml.disabled"); // same dir
makeFile(root, "b", "3.qml");
makeFile(root, "b", "4.qml"); // only survivor
makeFile(root, "c", "3.qml.disabled"); // after the fact
PageList pageList;
QCOMPARE(pageList.entries(), QStringList() << "4.qml");
}
QTEST_MAIN(PageListTest)
#include "tst_pagelist.moc"