Added qmafw-gst-subtitles-renderer-0.0.55 for Meego Harmattan 1.2
[mafwsubrenderer] / qmafw-gst-subtitles-renderer / unittests / ut_MafwGstRendererPlugin / Ut_MafwGstRendererPlugin.cpp
diff --git a/qmafw-gst-subtitles-renderer/unittests/ut_MafwGstRendererPlugin/Ut_MafwGstRendererPlugin.cpp b/qmafw-gst-subtitles-renderer/unittests/ut_MafwGstRendererPlugin/Ut_MafwGstRendererPlugin.cpp
new file mode 100644 (file)
index 0000000..f6d7174
--- /dev/null
@@ -0,0 +1,285 @@
+/* 
+ * This file is part of QMAFW 
+ *
+ * Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). All rights
+ * reserved.
+ *
+ * Contact: Visa Smolander <visa.smolander@nokia.com>
+ *
+ * This software, including documentation, is protected by copyright controlled
+ * by Nokia Corporation. All rights are reserved. Copying, including
+ * reproducing, storing, adapting or translating, any or all of this material
+ * requires the prior written consent of Nokia Corporation. This material also
+ * contains confidential information which may not be disclosed to others
+ * without the prior written consent of Nokia.
+ *
+ */
+
+#include <MafwInternalRegistry.h>
+#include <MafwRenderer.h>
+#include <QVariant>
+#include <QtTest/QtTest>
+#include <glib-object.h>
+#include <QSettings>
+
+#include "Ut_MafwGstRendererPlugin.h"
+#include "MafwGstRendererPlugin.h"
+#include "MafwGstRenderer.h"
+#include "MafwGstRendererVolume.h"
+#include "MafwGstRendererDolby.h"
+#include "../common/MafwStubHelper.h"
+
+Q_DECLARE_METATYPE(MafwRenderer*)
+
+extern void setStubHelper(MafwStubHelper* stubHlp);
+QMap<QString,QString> renderers;
+int renderer_index = 0;
+
+void Ut_MafwGstRendererPlugin::initTestCase()
+{
+    qRegisterMetaType<MafwRenderer*>();
+    m_stubHelper = new MafwStubHelper;
+    setStubHelper(m_stubHelper);
+
+    m_plugin = new MafwGstRendererPlugin();    
+}
+
+void Ut_MafwGstRendererPlugin::testInProcess()
+{
+    QSignalSpy addedSpy( MafwRegistry::instance(), SIGNAL(rendererAdded(const QString&, const QString&)) );
+    QSignalSpy removedSpy( MafwRegistry::instance(), SIGNAL(rendererRemoved(const QString&, const QString&)) );
+    //MafwBasicRenderer::initialize is called twice:
+    //from its own constructor and from MafwGstRenderer::initialize
+
+    //Basic renderer initialize fails
+    m_stubHelper->expect("initialize", false);
+    m_stubHelper->expect("initialize", false);
+    m_plugin->initialize( MafwInternalRegistry::internalInstance() );
+    QCOMPARE( addedSpy.size(), 0 );
+    addedSpy.clear();
+    removedSpy.clear();
+
+    m_stubHelper->expect("initialize", true);
+    m_stubHelper->expect("initialize", true);
+    m_plugin->initialize( MafwInternalRegistry::internalInstance() );
+    QCOMPARE( addedSpy.size(), 1 );
+    QCOMPARE( removedSpy.size(), 0 );
+    QVariantList arguments = addedSpy.takeFirst();
+
+    QString uuid = arguments.at(0).toString();
+    QCOMPARE(uuid, QString("mafw_gst_renderer"));
+    QCOMPARE(arguments.at(1).toString(), QString("QMAFW GStreamer Renderer"));
+
+    MafwRenderer* rnd = MafwRegistry::instance()->renderer(uuid);
+    QVERIFY(rnd != 0);
+    QCOMPARE(rnd->pluginName(), m_plugin->name());
+
+    MafwInternalRegistry::internalInstance()->removeExtension(uuid);
+    QCOMPARE( removedSpy.size(), 1 );
+}
+
+void Ut_MafwGstRendererPlugin::testOutProcess()
+{
+    QCoreApplication::setApplicationName("qmafw-dbus-wrapper");    
+    //TODO empty settings case
+
+    renderers.insert("mafw-gst-renderer", "Mafw-GStreamer-Renderer");
+    renderers.insert("mafw-gst-video-suite-renderer", "Mafw-GStreamer-Renderer-For-Video");
+
+    QSignalSpy addedSpy( MafwRegistry::instance(), SIGNAL(rendererAdded(const QString&, const QString&)) );
+    QSignalSpy removedSpy( MafwRegistry::instance(), SIGNAL(rendererRemoved(const QString&, const QString&)) );
+    //MafwBasicRenderer::initialize is called twice:
+    //from its own constructor and from MafwGstRenderer::initialize
+
+    //Basic renderer initialize fails
+    m_stubHelper->expect("initialize", false);
+    m_stubHelper->expect("initialize", false);
+    m_stubHelper->expect("initialize", false);
+    m_stubHelper->expect("initialize", false);
+    m_plugin->initialize( MafwInternalRegistry::internalInstance() );
+    QCOMPARE( addedSpy.size(), 0 );
+    addedSpy.clear();
+    removedSpy.clear();
+
+    m_stubHelper->expect("initialize", true);
+    m_stubHelper->expect("initialize", true);
+    m_stubHelper->expect("initialize", true);
+    m_stubHelper->expect("initialize", true);
+    m_plugin->initialize( MafwInternalRegistry::internalInstance() );
+    QCOMPARE( addedSpy.size(), 2 );
+    QCOMPARE( removedSpy.size(), 0 );
+
+    QVariantList arguments = addedSpy.takeFirst();
+    QString uuid1 = arguments.at(0).toString();
+    QString name1 = arguments.at(1).toString();
+    arguments = addedSpy.takeFirst();
+    QString uuid2 = arguments.at(0).toString();
+    QString name2 = arguments.at(1).toString();
+
+    MafwRenderer* rnd1 = MafwRegistry::instance()->renderer(uuid1);
+    QVERIFY(rnd1 != 0);
+    QCOMPARE(rnd1->pluginName(), m_plugin->name());
+    MafwRenderer* rnd2 = MafwRegistry::instance()->renderer(uuid2);
+    QVERIFY(rnd2 != 0);
+    QCOMPARE(rnd2->pluginName(), m_plugin->name());
+
+    QCOMPARE(uuid1, rnd1->uuid());
+    QCOMPARE(name1, rnd1->name());
+    QCOMPARE(uuid2, rnd2->uuid());
+    QCOMPARE(name2, rnd2->name());
+
+    MafwInternalRegistry::internalInstance()->removeExtension(uuid1);
+    MafwInternalRegistry::internalInstance()->removeExtension(uuid2);
+
+    // Test huge amount of renderers
+    renderers.clear();
+    addedSpy.clear();
+    removedSpy.clear();
+    for(int i = 0; i < 100; i++)
+    {
+        QString rndId = QString("rndId %1").arg(i);
+        QString rndName = QString("rndName %1").arg(i);
+        renderers.insert(rndId, rndName);
+        m_stubHelper->expect("initialize", true);
+        m_stubHelper->expect("initialize", true);
+    }
+    m_plugin->initialize( MafwInternalRegistry::internalInstance());
+    QCOMPARE(removedSpy.size(), 0);
+    QCOMPARE(addedSpy.size(), 100);
+
+    // Let's only remove 99 renderers
+    for(int i = 0; i < 99; i++)
+    {
+        QString rndId = QString("rndId %1").arg(i);
+        MafwInternalRegistry::internalInstance()->removeExtension(rndId);
+    }
+    QCOMPARE(removedSpy.size(), 99);
+    // Check that there is still one renderer left
+    MafwRenderer* rnd99 = MafwRegistry::instance()->renderer("rndId 99");
+    QVERIFY(rnd99 != 0);
+    MafwInternalRegistry::internalInstance()->removeExtension("rndId 99");
+
+    addedSpy.clear();
+    removedSpy.clear();
+
+    //Test no renderers
+    renderers.clear();
+    m_plugin->initialize(MafwInternalRegistry::internalInstance());
+    QCOMPARE(addedSpy.size(), 0);
+
+    //Test 2 renderers with same uuid and name
+    renderers.insert("rndId1", "rndName1");
+    renderers.insert("rndId1", "rndName1");
+    m_stubHelper->expect("initialize", true);
+    m_stubHelper->expect("initialize", true);
+    m_stubHelper->expect("initialize", false);
+    m_stubHelper->expect("initialize", false);
+    m_plugin->initialize( MafwInternalRegistry::internalInstance());
+    QCOMPARE(addedSpy.size(), 1);
+
+}
+
+void Ut_MafwGstRendererPlugin::cleanupTestCase()
+{
+    delete m_plugin;
+    while(QCoreApplication::hasPendingEvents())
+    {
+        QCoreApplication::sendPostedEvents();
+        QCoreApplication::sendPostedEvents(0, QEvent::DeferredDelete);
+        QCoreApplication::processEvents();
+    }
+}
+
+void gst_init(int *argc, char **argv[])
+{
+    Q_UNUSED(argc);
+    Q_UNUSED(argv);
+}
+
+QTEST_MAIN(Ut_MafwGstRendererPlugin)
+
+//Volume stub
+MafwGstRendererVolume::MafwGstRendererVolume()
+{
+    qDebug() << "Volume stub ctor";
+}
+
+void MafwGstRendererVolume::connectToPulseAudio()
+{
+}
+
+MafwGstRendererVolume::~MafwGstRendererVolume()
+{
+}
+
+uint MafwGstRendererVolume::getVolume()
+{
+    qDebug(__PRETTY_FUNCTION__);
+    return (uint)1;
+}
+
+bool MafwGstRendererVolume::setVolume (uint value)
+{
+    Q_UNUSED(value);
+    return true;
+}
+
+//QSettings stub
+QSettings::QSettings( const QString&, const QString&, QObject* ){}
+//Hope we will never need below ctor stub, because it is used somehow by unit test framework.
+//QSettings::QSettings(QSettings::Scope, const QString&, const QString&, QObject*){}
+QSettings::QSettings(QSettings::Format, QSettings::Scope, const QString&, const QString&, QObject*){}
+QSettings::QSettings(const QString&, QSettings::Format, QObject*){}
+QSettings::QSettings(QObject*){}
+QSettings::~QSettings(){}
+
+QVariant QSettings::value(const QString& key, const QVariant& ) const
+{
+    if(renderers.size() == 0)
+    {
+        return QString();
+    }
+    QMap<QString, QString>::const_iterator renderers_iterator = renderers.constBegin();
+    for(int i = 0; i < renderer_index; i++)
+    {
+        renderers_iterator++;
+    }
+
+    if(key == "Id")
+    {
+        return renderers_iterator.key();
+    }
+    else
+    {
+        return renderers_iterator.value();
+    }
+}
+
+int QSettings::beginReadArray(const QString&)
+{
+    return renderers.count();
+}
+
+void QSettings::setArrayIndex(int i)
+{
+    renderer_index = i;
+}
+
+void QSettings::endArray()
+{
+}
+
+void QSettings::beginGroup(const QString &prefix)
+{
+    Q_UNUSED(prefix);
+}
+
+void QSettings::endGroup()
+{
+
+}
+
+bool QSettings::contains(const QString &key) const
+{
+    return true;
+}