Added qmafw-gst-subtitles-renderer-0.0.55 for Meego Harmattan 1.2
[mafwsubrenderer] / qmafw-gst-subtitles-renderer / unittests / ut_MafwGstRendererVolume / MafwVolumeStubs.cpp
diff --git a/qmafw-gst-subtitles-renderer/unittests/ut_MafwGstRendererVolume/MafwVolumeStubs.cpp b/qmafw-gst-subtitles-renderer/unittests/ut_MafwGstRendererVolume/MafwVolumeStubs.cpp
new file mode 100644 (file)
index 0000000..6715ea9
--- /dev/null
@@ -0,0 +1,271 @@
+#include <QDebug>
+#include <QVariant>
+#include <dbus/dbus.h>
+#include <dbusconnectioneventloop.h>
+#include "MafwStubHelper.h"
+
+char obj_path[] = "/org/pulseaudio/stream_restore1/entry7";
+
+MafwStubHelper* m_stubHelper = 0;
+void* m_user_data;
+DBusHandleMessageFunction m_signalCb;
+DBusPendingCallNotifyFunction m_restoreObjectCb = 0;
+DBusPendingCallNotifyFunction m_volumeCb = 0;
+DBusMessage* m_getVolumeMethodCall = 0;
+DBusMessage* m_setVolumeMethod = 0;
+
+QMap<uint, uint> m_volumes;
+
+void setStubHelper(MafwStubHelper* stubHlp)
+{
+    m_stubHelper = stubHlp;
+}
+
+dbus_bool_t dbus_error_is_set(const DBusError* error)
+{
+    Q_UNUSED(error);
+    return m_stubHelper->getReturn("dbus_error_is_set").toBool();
+}
+
+struct DBusConnection
+{
+  int aField; 
+};
+
+DBusConnection*        dbus_connection_open(const char *address, DBusError *error)
+{
+    DBusConnection* conn = 0;
+
+    if (m_stubHelper->getReturn("dbus_connection_open").toBool())
+    {
+        conn = static_cast<DBusConnection*>( malloc(sizeof(DBusConnection)) );
+    }
+    Q_UNUSED(address);
+    Q_UNUSED(error);
+    return conn;
+}
+
+void dbus_connection_unref(DBusConnection* conn)
+{
+    if (conn)
+    {
+        free(conn);
+    }
+}
+
+bool DBUSConnectionEventLoop::addConnection(DBusConnection* conn)
+{
+    Q_UNUSED(conn);
+
+    return m_stubHelper->getReturn("addConnection").toBool();
+}
+
+void DBUSConnectionEventLoop::removeConnection(DBusConnection* conn)
+{
+    Q_UNUSED(conn);
+
+    m_stubHelper->getReturn("removeConnection");
+}
+
+dbus_bool_t dbus_connection_add_filter(DBusConnection* connection,
+                                       DBusHandleMessageFunction function,
+                                       void* user_data,
+                                       DBusFreeFunction free_data_function)
+{
+    Q_UNUSED(connection);
+    Q_UNUSED(free_data_function);
+    m_signalCb = function;
+    m_user_data = user_data;
+    return true;
+}
+
+void dbus_pending_call_cancel(DBusPendingCall* pending)
+{
+    Q_UNUSED(pending);
+}
+
+dbus_bool_t dbus_set_error_from_message(DBusError* error, DBusMessage* message)
+{
+    Q_UNUSED(error);
+    Q_UNUSED(message);
+    return m_stubHelper->getReturn("dbus_set_error_from_message").toBool();
+}
+
+void signalVolumeUpdated(uint channel, uint value)
+{
+    DBusMessage* message = dbus_message_new_signal(obj_path, "org.PulseAudio.Ext.StreamRestore1.RestoreEntry", "VolumeUpdated");
+
+    DBusMessageIter argument_iterator, variant_iterator, struct_iterator;
+    dbus_message_iter_init_append (message, &argument_iterator);
+    dbus_message_iter_open_container (&argument_iterator,
+                                      DBUS_TYPE_VARIANT,
+                                      "(uu)",
+                                      &variant_iterator);
+    dbus_message_iter_open_container (&variant_iterator,
+                                      DBUS_TYPE_STRUCT,
+                                      NULL,
+                                      &struct_iterator);
+
+    dbus_message_iter_append_basic (&struct_iterator, DBUS_TYPE_UINT32, &channel);
+    dbus_message_iter_append_basic (&struct_iterator, DBUS_TYPE_UINT32, &value);
+
+    dbus_message_iter_close_container (&variant_iterator, &struct_iterator);
+    dbus_message_iter_close_container (&argument_iterator, &variant_iterator);
+
+    DBusConnection* conn = 0;
+    (*m_signalCb)(conn, message, m_user_data);
+    dbus_message_unref(message);
+}
+
+struct DBusPendingCall
+{
+    uint a;
+};
+
+dbus_bool_t dbus_connection_send_with_reply(DBusConnection* connection,
+                                            DBusMessage* message,
+                                            DBusPendingCall ** pending_return,
+                                            int timeout_milliseconds)
+{
+    DBusPendingCall pending;
+    *pending_return = &pending;
+    Q_UNUSED(connection);
+    m_getVolumeMethodCall = message;
+    Q_UNUSED(pending_return);
+    Q_UNUSED(timeout_milliseconds);
+    return true;
+}
+
+// Saves callback function pointer. Assumes that first call gives callback for
+// GetEntryByName and the second one gives callback for Get Volume
+dbus_bool_t dbus_pending_call_set_notify( DBusPendingCall* pending,
+                                          DBusPendingCallNotifyFunction function,
+                                          void* user_data,
+                                          DBusFreeFunction free_user_data)
+{
+    if (!m_restoreObjectCb)
+    {
+        m_restoreObjectCb = function;
+    }
+    else
+    {
+        m_volumeCb = function;
+    }
+
+    Q_UNUSED(pending);
+    Q_UNUSED(user_data);
+    Q_UNUSED(free_user_data);
+    return true;
+}
+
+void giveRestoreEntryReply()
+{
+    DBusPendingCall pending;
+    (*m_restoreObjectCb) (&pending, m_user_data);
+}
+
+void giveVolumeReply(QMap<uint, uint> volumes)
+{
+    DBusPendingCall pending;
+    m_volumes = volumes;
+    (*m_volumeCb) (&pending, m_user_data);
+}
+
+DBusMessage* dbus_pending_call_steal_reply(DBusPendingCall* pending)
+{
+    Q_UNUSED(pending);
+    bool replyForGetVolume = dbus_message_has_member (m_getVolumeMethodCall, "Get");
+    DBusMessage* message = dbus_message_new_method_return(m_getVolumeMethodCall);
+
+    qDebug() << "replyForGetVolume= " << replyForGetVolume;
+    qDebug() << "m_volumes.count()= " << m_volumes.count();
+    if (replyForGetVolume)
+    {
+        qDebug() << "Jee";
+        DBusMessageIter argument_iterator, variant_iterator, array_iterator;
+        dbus_message_iter_init_append (message, &argument_iterator);
+        dbus_message_iter_open_container (&argument_iterator,
+                                          DBUS_TYPE_VARIANT,
+                                          "a(uu)",
+                                          &variant_iterator);
+        dbus_message_iter_open_container (&variant_iterator,
+                                          DBUS_TYPE_ARRAY,
+                                          "(uu)",
+                                          &array_iterator);
+        if (m_volumes.isEmpty())
+        {
+            qDebug() << "Stub is giving an invalid reply";
+        }
+        else
+        {
+            QMapIterator<uint, uint> i(m_volumes);
+            i.toBack();
+            while (i.hasPrevious())
+            {
+                DBusMessageIter iterator;
+                dbus_message_iter_open_container (&array_iterator,
+                                                  DBUS_TYPE_STRUCT,
+                                                  NULL,
+                                                  &iterator);
+                i.previous();
+                dbus_message_iter_append_basic (&iterator, DBUS_TYPE_UINT32, &i.key());
+                dbus_message_iter_append_basic (&iterator, DBUS_TYPE_UINT32, &i.value());
+                dbus_message_iter_close_container (&array_iterator, &iterator);
+            }
+        }
+        dbus_message_iter_close_container (&variant_iterator, &array_iterator);
+        dbus_message_iter_close_container (&argument_iterator, &variant_iterator);
+    }
+    return message;
+}
+
+dbus_uint32_t dbus_message_get_serial(DBusMessage* message)
+{
+    Q_UNUSED(message);
+    return 1;
+}
+
+dbus_bool_t dbus_message_get_args (DBusMessage* message,
+                                   DBusError* error,
+                                   int first_arg_type,
+                                   ...)
+{    
+    qDebug() << "dbus_message_get_args";
+    va_list var_args;
+    va_start (var_args, first_arg_type);
+
+    while (first_arg_type != DBUS_TYPE_INVALID)
+    {        
+        if (first_arg_type == DBUS_TYPE_OBJECT_PATH)
+        {
+            char** str_p;
+            str_p = va_arg (var_args, char**);
+            *str_p = obj_path;
+        }
+        first_arg_type = va_arg(var_args, int);
+    }
+    va_end(var_args);
+    Q_UNUSED(error);
+    Q_UNUSED(message);
+    return true;
+}
+
+dbus_bool_t dbus_connection_send( DBusConnection* connection,
+                                  DBusMessage* message,
+                                  dbus_uint32_t* serial)
+{
+    Q_UNUSED(connection);
+    Q_UNUSED(serial);
+
+    if (dbus_message_has_member (m_getVolumeMethodCall, "Set"))
+    {
+        m_setVolumeMethod = message;
+    }
+
+    return true;
+}
+
+void dbus_connection_flush( DBusConnection* connection)
+{
+    Q_UNUSED(connection);
+}