#include <QtTest/QtTest>

#include <QStringList>
#include <Q3PtrList>

#include "iconset.h"
#include "psiiconset.h"

class TestPsiIconset: public QObject
{
    Q_OBJECT
private:
    PsiIconset *is;

private slots:
    void initTestCase()
    {
        is = new PsiIconset();

        g.pathBase = "../../tools/iconset/unittest";
        g.pathHome = getHomeDir();
        g.pathProfiles = g.pathHome + "/profiles";
    }

    void cleanupTestCase()
    {
        delete is;
    }

    void testLoadSystem()
    {
        QVERIFY(is->loadSystem());
    }

    // this mustn't produce any valgrind errors, so
    // it's pretty safe to generate suppressions
    // from this test: just run "./testpsiiconset testLoadImage"
    void testLoadImage()
    {
        QImage *img = new QImage(":iconsets/system/default/psimain.png");
        delete img;
    }

    void testLoadAll()
    {
        // checking for memory leaks this way
        for (int i = 0; i < 3; i++)
            QVERIFY(is->loadAll());
    }

    void testBasePath()
    {
        Iconset *iconset = new Iconset();
        QVERIFY(iconset->load(g.pathBase + "/iconsets/roster/default.jisp"));
        delete iconset;
    }

    void testChangeOptions()
    {
        Options oldOptions = option;
        option.systemIconset = "crystal_system.jisp";
        option.emoticons = (QStringList() << "puz.jisp");
        option.defaultRosterIconset = "default.jisp";

        QVERIFY(is->optionsChanged(&oldOptions));

        QCOMPARE(is->system().name(),        QString("Crystal (System)"));
        QCOMPARE(is->system().description(), QString("Crystal System Iconset"));
        QCOMPARE(is->system().version(),     QString("0.3"));
        QCOMPARE(is->emoticons.first()->name(), QString("puzazBox"));

        option = oldOptions;
    }
};

QTEST_MAIN(TestPsiIconset)
#include "testpsiiconset.moc"
