summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorWolf Bergenheim <ext-wolf.2.bergenheim@nokia.com>2010-01-29 17:20:56 +0200
committerWolf Bergenheim <ext-wolf.2.bergenheim@nokia.com>2010-01-29 17:20:56 +0200
commit0746bbd252fe13ce3c4ae523fc28b0cf27314c05 (patch)
tree323b3406c6f893f21c7c7820532c0df2a61881cc
parent27c45e867533ad43bc2b2e64fe577a503b2d05a8 (diff)
Refactored Resource into multiple classes
-rw-r--r--include/resource-factory.h38
-rw-r--r--include/resource-set.h290
-rw-r--r--include/resource.h170
-rw-r--r--libresourceqt.pro14
-rw-r--r--src/libplayback-wrapper.cpp163
-rw-r--r--src/libplayback-wrapper.h29
-rw-r--r--src/resource-library.h13
-rw-r--r--src/resource-set.cpp70
-rw-r--r--src/resource.cpp56
-rw-r--r--tests/mock-resource-library.cpp57
-rw-r--r--tests/mock-resource-library.h29
-rw-r--r--tests/test-libplayback.cpp46
-rw-r--r--tests/test-libplayback.h29
-rw-r--r--tests/test-resource-set.cpp180
-rw-r--r--tests/test-resource-set.h24
-rw-r--r--tests/test-resource.cpp278
-rw-r--r--tests/test-resource.h49
-rw-r--r--tests/test-resource.pro4
18 files changed, 643 insertions, 896 deletions
diff --git a/include/resource-factory.h b/include/resource-factory.h
deleted file mode 100644
index 22de00a..0000000
--- a/include/resource-factory.h
+++ /dev/null
@@ -1,38 +0,0 @@
-#ifndef RESOURCEFACTORY_H
-#define RESOURCEFACTORY_H
-
-#include <QObject>
-#include <QDBusConnection>
-#include "resource-types.h"
-
-class Resource;
-
-/** This class is a helper class which should be used to create Resources. Note
- * that it will own all resources, and so should not be deleted before all
- * resources are ready to be released. The best way to acchieve this is by
- * makeing the ResourceHandler class own the factory.
- */
-class ResourceFactory: public QObject
-{
- Q_OBJECT
- Q_DISABLE_COPY( ResourceFactory );
-private:
- //! \internal
- QDBusConnection sessionBusConnection;
-public:
- ResourceFactory(QObject *parent = 0);
- ~ResourceFactory();
- /** This method creates a new \ref Resource object.
- * @param applicationClass The application class to tell the Resource Policy.
- * @param requestedResources A bit mask of the resources tha this application
- * wats as a set. If more than one resource is set in this bit mask, then
- * that set is treated as a whole, and cannot be separated. If the application
- * needs at times say only audio and at times audio and video, then several
- * \ref Resource objects need to be created.
- * @return Returns a pointer to a new Resource, or NULL if there is an error.
- */
- Resource * createResource(enum ResourceTypes::ResourceClass applicationClass,
- quint16 requestedResources=ResourceTypes::AudioResource);
-};
-
-#endif
diff --git a/include/resource-set.h b/include/resource-set.h
index 8d94a44..1f515ee 100644
--- a/include/resource-set.h
+++ b/include/resource-set.h
@@ -1,7 +1,7 @@
#ifndef RESOURCE_SET_H
#define RESOURCE_SET_H
-#include "resource.h"
+#include "resources.h"
#include <QString>
#include <QObject>
#include <QVector>
@@ -22,15 +22,15 @@
* \ref Resource objects like this (given as an example of what a media player
* might want/need):
* \code
- * ResourcePolicy::Resource audioResource(AudioPlaybackResource);
- * ResourcePolicy::Resource videoResource(VideoPlaybackResource);
- * videoResource.setOptional();
+ * ResourcePolicy::AudioResource *audioResource = new ResourcePolicy::AudioResource();
+ * ResourcePolicy::VideoResource *audioResource = new ResourcePolicy::AudioResource();
+ * videoResource->setOptional();
* \endcode
* Then you need to create a \ref ResourcePolicy::ResourceSet like this:
* \code
* ResourcePolicy::ResourceSet *resources = new ResourcePolicy::ResourceSet("player");
- * resources.addResource(audioResource);
- * resources.addResource(videoResource);
+ * resources->addResource(audioResource);
+ * resources->addResource(videoResource);
* resources->initialize();
* QObject::connect(resources, SIGNAL(connectedToManager), this, SLOT(connectedHandler()));
* resources->connectToManager();
@@ -50,147 +50,157 @@
*/
namespace ResourcePolicy
{
- /**
- * The resourceSet repesents a set of attributes. Each set can only contain
- * a single Resource of a given type. That is one AudioPlaybackResource, etc.
- *
- * Internally the set is stored as a QVector of \ref Resource objects.
- */
- class ResourceSet: public QObject
- {
- Q_OBJECT
- Q_DISABLE_COPY( ResourceSet )
- public:
- /**
- * The constructor.
- * \param applicationClass This parameter defines the application class.
- * The application class is used to determine the priority order of the
- * application.
- * \param parent The optional parent of of this class.
- */
- ResourceSet(const QString &applicationClass, QObject *parent=NULL);
- /**
- * The destructor
- */
- ~ResourceSet();
- /**
- * Initializes the underlaying communications library.
- * \return true if initialization is successful.
- */
- bool initialize();
-
- /**
- * This method adds a resource to the set. A set contains only a single
- * instance of a given resource. If the ResourceSet already contains a
- * resource of the given type it will be overridden.
- * \param resource The resource to add to the set.
- */
- void addResource(const Resource &resource);
- /**
- * This method adds (and replaces) the list of resource to the set.
- * \param resources The list of resources to add to the set.
- */
- void addResources(const QList<Resource> &resources);
- /**
- * This method clears the old resources and replaces the set with the
- * resources from the given list.
- * \param resources The list of resources that the set should contain.
- */
- void setResources(const QList<Resource> &resources);
+ /**
+ * The resourceSet repesents a set of attributes. Each set can only contain
+ * a single Resource of a given type. That is one AudioPlaybackResource, etc.
+ *
+ * Internally the set is stored as a QVector of \ref Resource objects.
+ */
+ class ResourceSet: public QObject
+ {
+ Q_OBJECT
+ Q_DISABLE_COPY( ResourceSet )
+ public:
+ /**
+ * The constructor.
+ * \param applicationClass This parameter defines the application class.
+ * The application class is used to determine the priority order of the
+ * application.
+ * \param parent The optional parent of of this class.
+ */
+ ResourceSet(const QString &applicationClass, QObject *parent=NULL);
+ /**
+ * The destructor
+ */
+ ~ResourceSet();
+ /**
+ * Initializes the underlaying communications library.
+ * \return true if initialization is successful.
+ */
+ bool initialize();
- /**
- * This method returns a list of all resource in the set.
- * \return a QList of all resources in the set.
- */
- QList<Resource> resources();
+ /**
+ * This method adds a resource to the set. A set contains only a single
+ * instance of a given resource. If the ResourceSet already contains a
+ * resource of the given type it will be overridden.
+ * \param resource The resource to add to the set. A copy of this object
+ * is stored in the Set.
+ */
+ void addResource(const Resource *resource);
+ /**
+ * This method adds all resources in the list to the set.
+ * A set contains only a single instance of a given resource. If the
+ * ResourceSet already contains a resource of the given type it will be
+ * overridden.
+ * \param resources The list of resources to add to the set. These will
+ * be copied.
+ */
+ void addResources(const QList<Resource *>resources);
+ /**
+ * This method removes the resource of the given type
+ * \param type The type of the resource to remove from the set.
+ */
+ void delResource(ResourceType type);
- /**
- * Checks if the \ref ResourceSet contains the given \ref Resource
- * \param resource The Resource to look for
- * \return true if the \ref Resource is defined in this \ref ResourceSet
- */
- bool contains(const Resource &resource) const;
+ /**
+ * This method returns a list of all resource in the set.
+ * \return a QList of all resources in the set.
+ */
+ QList<Resource *> resources();
+ /**
+ * This method returns a const pointer to a resource of a specific type.
+ * \type The type of resource we are interested in.
+ * \return a pointer to the Resource if it is defined NULL otherwise.
+ */
+ Resource * resource(ResourceType type) const;
+ /**
+ * Checks if the \ref ResourceSet contains the given \ref Resource
+ * \param type The Resource to look for
+ * \return true if the \ref Resource is defined in this \ref ResourceSet
+ */
+ bool contains(ResourceType type) const;
- /**
- * Checks if the \ref ResourceSet contains all given resources.
- * \param resources A list of resources to check for
- * \return true if \b all given resources are defined in the ResourceSet.
- */
- bool contains(const QList<Resource> &resources) const;
+ /**
+ * Checks if the \ref ResourceSet contains all given resources.
+ * \param types A list of resources to check for
+ * \return true if \b all given resources are defined in the ResourceSet.
+ */
+ bool contains(const QList<ResourceType> &types) const;
- quint32 id() const;
+ quint32 id() const;
- /**
- * Connects to the Resource Policy Manager. The connected() signal is sent
- * when the connection has been established. Acquiring the ResourceSet can
- * be attempted at any time after this, but not before.
- * \return true if the connection request was successfully sent.
- * \param reconnectOnDisconnect. Set to true to automatically reconnect on
- * lost connection to the Policy Resource Manager. This optional parameter
- * defaults to true.
- */
- bool connectToManager(bool reconnectOnDisconnect);
- /**
- * Disconnects from the Resource Policy Manager. Further attempts at acquiring
- * the \ref ResourceSet will fail.
- */
- void disconnectFromManager();
- /**
- * Checks whether the ResourceSet is connected or not.
- */
- bool isConnectedToManager();
- /**
- * Attempt to acquire the ResourceSet. The response is returned as the
- * resourcesAcquired() signal.
- */
- bool acquire();
- /**
- * Release the acquired resources.
- */
- bool release();
- /**
- * Commit changes to the \ref ResourceSet to the Manager.
- */
- bool update();
+ /**
+ * Connects to the Resource Policy Manager. The connected() signal is sent
+ * when the connection has been established. Acquiring the ResourceSet can
+ * be attempted at any time after this, but not before.
+ * \return true if the connection request was successfully sent.
+ * \param reconnectOnDisconnect. Set to true to automatically reconnect on
+ * lost connection to the Policy Resource Manager. This optional parameter
+ * defaults to true.
+ */
+ bool connectToManager(bool reconnectOnDisconnect);
+ /**
+ * Disconnects from the Resource Policy Manager. Further attempts at acquiring
+ * the \ref ResourceSet will fail.
+ */
+ void disconnectFromManager();
+ /**
+ * Checks whether the ResourceSet is connected or not.
+ */
+ bool isConnectedToManager();
+ /**
+ * Attempt to acquire the ResourceSet. The response is returned as the
+ * resourcesAcquired() signal.
+ */
+ bool acquire();
+ /**
+ * Release the acquired resources.
+ */
+ bool release();
+ /**
+ * Commit changes to the \ref ResourceSet to the Manager.
+ */
+ bool update();
- signals:
- /**
- * This signal is emited when the Resource Policy Manager notifies that
- * the given resources have become available.
- * \param availableResources A list of available resources.
- */
- void resourcesBecameAvailable(QList<Resource> availableResources);
- /**
- * This signal is emited as a response to the acquire() request.
- * \param grantedResources The list of granted resources.
- */
- void resourcesAcquired(QList<Resource> grantedResources);
- /**
- * This signal is emited as a response to the acquire() request, in the
- * case where we are not granted any requests.
- */
- void resourcesDenied();
- /**
- * This signal is emited when some other program with a higher priority
- * superseeds us, and as a result we loose our resources.
- */
- void lostResources();
- /**
- * This signal is emited when we have successfully connected to the manager.
- */
- void connectedToManager();
- /**
- * This signal is emited when we loose the connection to the manager.
- * A reconnect is automatically attempted.
- */
- void disconnectedFromManager();
-
+ signals:
+ /**
+ * This signal is emited when the Resource Policy Manager notifies that
+ * the given resources have become available.
+ * \param availableResources A list of available resources.
+ */
+ void resourcesBecameAvailable(QList<Resource *> availableResources);
+ /**
+ * This signal is emited as a response to the acquire() request.
+ * \param grantedResources The list of granted optional resources.
+ */
+ void resourcesGranted(QList<Resource *> grantedOptionalResources);
+ /**
+ * This signal is emited as a response to the acquire() request, in the
+ * case where we are not granted any requests.
+ */
+ void resourcesDenied();
+ /**
+ * This signal is emited when some other program with a higher priority
+ * superseeds us, and as a result we loose our resources.
+ */
+ void lostResources();
+ /**
+ * This signal is emited when we have successfully connected to the manager.
+ */
+ void connectedToManager();
+ /**
+ * This signal is emited when we loose the connection to the manager.
+ * A reconnect is automatically attempted.
+ */
+ void disconnectedFromManager();
- private:
- quint32 identifier;
- const QString applicationClass;
- QVector<Resource> resourceSet;
- };
+
+ private:
+ quint32 identifier;
+ const QString applicationClass;
+ Resource* resourceSet[NumberOfTypes];
+ };
}
#endif
+
diff --git a/include/resource.h b/include/resource.h
index ef3290c..13265d5 100644
--- a/include/resource.h
+++ b/include/resource.h
@@ -3,114 +3,78 @@
#include <QtCore>
-
namespace ResourcePolicy {
- /**
- * This enum defines the different resources that an application can use.
- */
- enum ResourceType {
- InvalidResource = 0,
- AudioPlaybackResource,
- VideoPlaybackResource,
- AudioRecorderResource,
- VideoRecorderResource,
- ResourceGuard
- };
+ enum ResourceType {
+ AudioPlaybackType = 0,
+ VideoPlaybackType,
+ AudioRecorderType,
+ VideoRecorderType,
+ VibraType,
+ LedsType,
+ BacklightType,
+ SystemButtonType,
+ LockButtonType,
+ ScaleButtonType,
+ SnapButtonType,
+ LensCoverType,
+ NumberOfTypes
+ };
- /**
- * This class represents a resource which can be acquired. The main use of
- * Resources is to use then in a ResourceSet.
- *
- * Other Resource types can be added later, these reflect the resources found
- * in the Policy configuration.
- *
- * \b Examples:
- * This example shows how to make a resource which represents an optional
- * audio requirement.
- * \code
- * Resource audioResource(AudioPlaybackResource);
- * audioResource->setOptional();
- * \endcode
- * This example shows how to create the resources used by a video player
- * \code
- * Resource audioResource(AudioPlaybackResource);
- * Resource videoResource(VideoPlaybackResource);
- * \endcode
+ /**
+ * This class is the super class for all resources. It represents a generic
+ * \ref Resource. The type specific resource classes should be used.
*/
- class Resource
- {
- public:
- /**
- * Constructor. Creates a new identifier. The new identifier defaults to
- * not optional, and not shared. The default type is undefined and
- * \ref setType() needs to be called to set the type. Optionally a
- * resource type may be given to the constructor, to avoid having to
- * call the setType() method.
- */
- Resource(enum ResourceType type=InvalidResource);
- /**
- * Copy constructor. Copies also the identifier.
- * \param other The source to copy from.
- */
- Resource(const Resource &other);
- /**
- * Assignement operator. Works like the copy constructor.
- * \param other The source to assign from.
- */
- Resource &operator=(const Resource &other);
- //! Destructor.
- ~Resource();
+ class Resource
+ {
+ public:
+ /**
+ * Whether or not this resource is optional, in that it doesn't need to
+ * be available for the set to be acquired.
+ * \return true when this resource is optional.
+ */
+ bool isOptional() const;
+ /**
+ * Set the resource to be optional or mandatory.
+ * \param resourceIsOptional This optional parameter defaults to true.
+ * The default, true, results in the resource becoming optional. When it
+ * is set to false the resource becomes mandatory.
+ */
+ void setOptional(bool resourceIsOptional=true);
+ /**
+ * Whether or not the resource to be shared. If it is shared then other
+ * programs are allowed to share this resource.
+ * \return true when this resource is shared.
+ */
+ bool isShared() const;
+ /**
+ * Sets the resource to be shared/private.
+ * \param resourceIsShared This optional parameter defaults to true.
+ * When it is set to true (de default) the resource is shared with
+ * other programs. Setting it to false makes this resource exclusive.
+ */
+ void setShared(bool resourceIsShared=true);
+ /**
+ * Whether or not this resource has been granted.
+ * \return true if this resource has been granted.
+ */
+ bool isGranted() const;
+ void setGranted();
+ void unsetGranted();
- /**
- * Returns the type of the resource.
- * \return the type of the resource.
- */
- ResourceType type() const;
- /**
- * Sets the resource type.
- * \param type The type to set to.
- * \return true if the type is valid.
- */
- bool setType(enum ResourceType type);
- /**
- * Whether or not this resource is optional, in that it doesn't need to
- * be available for the set to be acquired.
- * \return true when this resource is optional.
- */
- bool isOptional() const;
- /**
- * Set the resource to be optional or mandatory.
- * \param resourceIsOptional This optional parameter defaults to true.
- * The default, true, results in the resource becoming optional. When it
- * is set to false the resource becomes mandatory.
- */
- void setOptional(bool resourceIsOptional=true);
- /**
- * Whether or not the resource to be shared. If it is shared then other
- * programs are allowed to share this resource.
- * \return true when this resource is shared.
- */
- bool isShared() const;
- /**
- * Sets the resource to be shared/private.
- * \param resourceIsShared This optional parameter defaults to true.
- * When it is set to true (de default) the resource is shared with
- * other programs. Setting it to false makes this resource exclusive.
- */
- void setShared(bool resourceIsShared=true);
- /**
- * Compares two resources and returns true if both are of the same \b type.
- * \param other The resrouce to compare to.
- * \return true if the types of both resources are of the same type.
- */
- bool operator==(const Resource &other) const;
- private:
- ResourceType resourceType;
- bool optional;
- bool shared;
- quint32 identifier;
- };
+ virtual ResourceType type() const = 0;
+ virtual Resource * clone() const = 0;
+ virtual ~Resource();
+ protected:
+ Resource();
+ Resource(const Resource &other);
+ ResourceType resourceType;
+ bool optional;
+ bool shared;
+ quint32 identifier;
+ bool granted;
+ };
}
#endif
+
diff --git a/libresourceqt.pro b/libresourceqt.pro
index 125282d..e76299d 100644
--- a/libresourceqt.pro
+++ b/libresourceqt.pro
@@ -3,20 +3,23 @@ VERSION = 1.0.0
TARGET = resourceqt
DESTDIR = build
DEPENDPATH += include src
-INCLUDEPATH += src include
+INCLUDEPATH += src include ../libresource/src
# Input
-PUBLIC_HEADERS = include/resource.h
+PUBLIC_HEADERS = include/resource.h include/resource-set.h include/resources.h
-HEADERS += $$PUBLIC_HEADERS
+HEADERS += $$PUBLIC_HEADERS src/resource-engine.h
-SOURCES += src/resource.cpp
+SOURCES += src/resource.cpp \
+ src/resource-set.cpp \
+ src/resource-engine.cpp \
+ src/resources.cpp
OBJECTS_DIR = build
MOC_DIR = build
CONFIG += qt link_pkgconfig dll
-QT = core dbus
+QT = core
PKGCONFIG += dbus-1
# Install directives
@@ -26,3 +29,4 @@ target.path = $$INSTALLBASE/lib
headers.path = $$INSTALLBASE/include/resource/qt4
INSTALLS = target headers
+
diff --git a/src/libplayback-wrapper.cpp b/src/libplayback-wrapper.cpp
deleted file mode 100644
index ce3a43d..0000000
--- a/src/libplayback-wrapper.cpp
+++ /dev/null
@@ -1,163 +0,0 @@
-#include "libplayback-wrapper.h"
-
-using namespace ResourceTypes;
-static inline enum pb_class_e resourceClassToLibPlaybackClass(enum ResourceClass resourceClass);
-static inline quint16 resourceFlagsToLibPlaybackFlags(quint16 resourceFlags);
-static inline enum ResourceState libPlaybackStateToResourceState(enum pb_state_e libPlaybackState);
-static void libPlaybackStateHandler(pb_playback_t *libPlaybackHandler, enum pb_state_e newState,
- pb_req_t* playbackRequest, void *data);
-static void libPlaybackStateHintHandler(pb_playback_t *libPlaybackHandler, const int allowedStates[], void *data);
-
-LibPlaybackWrapper::LibPlaybackWrapper(Resource *res)
- : QObject(res), dbusConnection(NULL), libPlaybackHandle(NULL)
-{
- resource = res;
-}
-
-LibPlaybackWrapper::~LibPlaybackWrapper()
-{
- pb_playback_destroy(libPlaybackHandle);
-}
-
-bool LibPlaybackWrapper::initialize()
-{
- DBusError dbusError;
- dbus_error_init(&dbusError);
- dbusConnection = dbus_bus_get(DBUS_BUS_SESSION, &dbusError);
- qDebug("dbusConnection=%p", dbusConnection);
- if (dbus_error_is_set(&dbusError)) {
- qDebug("D-Bus Connection Error (%s)\n", dbusError.message);
- dbus_error_free(&dbusError);
- return false;
- }
- if(dbusConnection == NULL) {
- qDebug("Unable to connect to dbus, dbusConnection == NULL!");
- return false;
- }
- return true;
-}
-
-bool LibPlaybackWrapper::connectToServer()
-{
- enum pb_class_e libPlaybackClass = resourceClassToLibPlaybackClass(resource->applicationClass());
- quint16 libPlaybackFlags = resourceFlagsToLibPlaybackFlags(resource->resources());
-
- qDebug("libPlaybackFlags=%02x resources=%02x",libPlaybackFlags, resource->resources());
- qDebug("dbusConnection=%p", dbusConnection);
-
- libPlaybackHandle = pb_playback_new_2(dbusConnection, libPlaybackClass, libPlaybackFlags,
- PB_STATE_STOP, libPlaybackStateHandler, this);
- if(libPlaybackHandle == NULL) {
- return false;
- }
- return true;
-}
-
-inline enum pb_class_e resourceClassToLibPlaybackClass(enum ResourceClass resourceClass)
-{
- switch(resourceClass) {
- case InvalidClass:
- return PB_CLASS_NONE;
- case CallClass:
- return PB_CLASS_CALL;
- case MediaClass:
- return PB_CLASS_MEDIA;
- case BackgroundClass:
- return PB_CLASS_BACKGROUND;
- case RingtoneClass:
- return PB_CLASS_RINGTONE;
- case VoiceUIClass:
- return PB_CLASS_VOICEUI;
- case CameraClass:
- return PB_CLASS_CAMERA;
- case GameClass:
- return PB_CLASS_GAME;
- case AlarmClass:
- return PB_CLASS_ALARM;
- case FlashClass:
- return PB_CLASS_FLASH;
- case SystemClass:
- return PB_CLASS_SYSTEM;
- case InputClass:
- return PB_CLASS_INPUT;
- default:
- return PB_CLASS_NONE;
- }
-}
-
-inline quint16 resourceFlagsToLibPlaybackFlags(quint16 resourceFlags)
-{
- quint16 libPlaybackFlags = 0;
- for (int flag=AudioResource;flag<VideoRecorderResource;flag=flag<<1) {
- if((resourceFlags & flag) == flag) {
- switch(flag) {
- case AudioResource:
- libPlaybackFlags += PB_FLAG_AUDIO;
- break;
- case VideoResource:
- libPlaybackFlags += PB_FLAG_VIDEO;
- break;
- case AudioRecorderResource:
- libPlaybackFlags += PB_FLAG_AUDIO_RECORDING;
- break;
- case VideoRecorderResource:
- libPlaybackFlags += PB_FLAG_VIDEO_RECORDING;
- break;
- }
- }
- }
- return libPlaybackFlags;
-}
-
-void libPlaybackStateHandler(pb_playback_t *libPlaybackHandler, enum pb_state_e newState,
- pb_req_t* playbackRequest, void *data)
-{
- LibPlaybackWrapper *libPlaybackWrapper = static_cast<LibPlaybackWrapper*>(data);
-
- pb_playback_req_completed(libPlaybackHandler, playbackRequest);
- libPlaybackWrapper->stateChanged(newState);
-}
-
-void LibPlaybackWrapper::stateChanged(enum pb_state_e newState)
-{
- enum ResourceState resourceState;
- resourceState = libPlaybackStateToResourceState(newState);
-
- resource->handleStateChange(resourceState);
-}
-
-inline enum ResourceState libPlaybackStateToResourceState(enum pb_state_e libPlaybackState)
-{
- switch(libPlaybackState) {
- case PB_STATE_STOP:
- return NotOwnedState;
- case PB_STATE_PLAY:
- return OwnedState;
- default:
- return UnknownState;
- }
-}
-
-static void libPlaybackStateHintHandler(pb_playback_t *libPlaybackHandler, const int allowedStates[], void *data)
-{
- LibPlaybackWrapper *libPlaybackWrapper = static_cast<LibPlaybackWrapper*>(data);
-
- libPlaybackWrapper->hintReceived(allowedStates);
-}
-
-void LibPlaybackWrapper::hintReceived(const int allowedStates[])
-{
- if(allowedStates[PB_STATE_PLAY]) {
- resource->emitReservable();
- }
- // Ignore PB_STATE_STOP
-/* else if(allowedStates[PB_STATE_STOP]) {
-
- }
-*/
-}
-
-bool LibPlaybackWrapper::reserve()
-{
- return false;
-}
diff --git a/src/libplayback-wrapper.h b/src/libplayback-wrapper.h
deleted file mode 100644
index 9a473fe..0000000
--- a/src/libplayback-wrapper.h
+++ /dev/null
@@ -1,29 +0,0 @@
-#ifndef LIBPLAYBACKWRAPPER_H
-#define LIBPLAYBACKWRAPPER_H
-
-#include "resource-library.h"
-#include "resource.h"
-#include <libplayback/playback.h>
-
-class LibPlaybackWrapper: public QObject, public ResourceLibrary
-{
- Q_OBJECT
- Q_DISABLE_COPY( LibPlaybackWrapper );
-private:
- DBusConnection *dbusConnection;
- pb_playback_t *libPlaybackHandle;
- Resource *resource;
-
-public:
- LibPlaybackWrapper(Resource *resource);
- ~LibPlaybackWrapper();
- bool initialize();
- bool connectToServer();
-
- bool reserve();
-
- void stateChanged(enum pb_state_e newState);
- void hintReceived(const int allowedStates[]);
-};
-
-#endif
diff --git a/src/resource-library.h b/src/resource-library.h
deleted file mode 100644
index 9f9c303..0000000
--- a/src/resource-library.h
+++ /dev/null
@@ -1,13 +0,0 @@
-#ifndef RESOURCELIBRARY_H
-#define RESOURCELIBRARY_H
-
-class ResourceLibrary
-{
-public:
- virtual ~ResourceLibrary() {}
- virtual bool initialize() = 0;
- virtual bool connectToServer() = 0;
- virtual bool reserve() = 0;
-};
-
-#endif
diff --git a/src/resource-set.cpp b/src/resource-set.cpp
index 8f6431b..73a4bc4 100644
--- a/src/resource-set.cpp
+++ b/src/resource-set.cpp
@@ -3,55 +3,47 @@ using namespace ResourcePolicy;
ResourceSet::ResourceSet(const QString &applicationClass, QObject * parent)
- : QObject(parent), applicationClass(applicationClass),
- resourceSet(ResourceGuard)
+ : QObject(parent), applicationClass(applicationClass)
{
identifier = (quint32)this;
+ memset(resourceSet, 0, sizeof(QPointer<Resource>)*NumberOfTypes);
}
ResourceSet::~ResourceSet()
{
+ for(int i=0;i<NumberOfTypes;i++) {
+ delete resourceSet[i];
+ }
}
-void ResourceSet::addResource(const Resource &resource)
-{
- resourceSet.insert(resource.type(), resource);
-}
-
-void ResourceSet::addResources(const QList<Resource> &resources)
+void ResourceSet::addResource(const Resource *resource)
{
- for(int i=0; i < resources.size(); i++) {
- addResource(resources.at(i));
- }
+ resourceSet[resource->type()] = resource->clone();
}
-void ResourceSet::setResources(const QList<Resource> &resources)
+void ResourceSet::addResources(const QList<Resource *>resources)
{
- Resource invalidResource;
- resourceSet.clear();
- resourceSet.resize(ResourceGuard);
for(int i=0; i < resources.size(); i++) {
- addResource(resources.at(i));
+ addResource(resources.at(i));
}
}
-bool ResourceSet::contains(const Resource &resource) const
+bool ResourceSet::contains(ResourceType type) const
{
- if(resourceSet.at(resource.type()) == resource)
- return true;
+ if((type < NumberOfTypes) && (resourceSet[type] != NULL))
+ return true;
else
- return false;
+ return false;
}
-bool ResourceSet::contains(const QList<Resource> &resources) const
+bool ResourceSet::contains(const QList<ResourceType> &types) const
{
- bool containsAll=false;
- for(int i=0; i<resources.size(); i++) {
- containsAll = contains(resources.at(i));
- if(!containsAll) {
- break;
- }
- }
+ bool containsAll=true;
+ int i=0;
+ do {
+ containsAll = contains(types.at(i));
+ i++;
+ } while((i < NumberOfTypes) && containsAll);
return containsAll;
}
@@ -60,17 +52,26 @@ quint32 ResourceSet::id() const
return identifier;
}
-QList<Resource> ResourceSet::resources()
+QList<Resource *> ResourceSet::resources()
{
- QList<Resource> listOfResources;
- for(int i=0; i < resourceSet.size(); i++) {
- if(resourceSet.at(i).type() != InvalidResource) {
- listOfResources.append(resourceSet.at(i));
- }
+ QList<Resource *> listOfResources;
+ for(int i=0; i < NumberOfTypes; i++) {
+ if(resourceSet[i] != NULL) {
+ Resource *clone = resourceSet[i]->clone();
+ listOfResources.append(clone);
+ }
}
return listOfResources;
}
+Resource * ResourceSet::resource(ResourceType type) const
+{
+ if(contains(type))
+ return resourceSet[type]->clone();
+ else
+ return NULL;
+}
+
bool ResourceSet::connectToManager(bool reconnectOnDisconnect)
{
return false;
@@ -99,3 +100,4 @@ bool ResourceSet::update()
{
return false;
}
+
diff --git a/src/resource.cpp b/src/resource.cpp
index 72ac24e..8207b66 100644
--- a/src/resource.cpp
+++ b/src/resource.cpp
@@ -2,44 +2,21 @@
using namespace ResourcePolicy;
-Resource::Resource(enum ResourceType type)
- : resourceType(type), optional(false), shared(false)
-{
-}
-
-Resource::~Resource()
+Resource::Resource()
+ : optional(false), shared(false),
+ identifier(0), granted(false)
{
+ identifier = (quint32)this;
}
Resource::Resource(const Resource &other)
- : resourceType(other.resourceType), optional(other.optional),
- shared(other.shared)
-{
-}
-
-Resource & Resource::operator=(const Resource &other)
-{
- resourceType = other.resourceType;
- optional = other.optional;
- shared = other.shared;
-
- return *this;
-}
-
-ResourceType Resource::type() const
+ : optional(other.optional), shared(other.shared),
+ identifier(other.identifier), granted(other.granted)
{
- return resourceType;
}
-bool Resource::setType(ResourceType type)
+Resource::~Resource()
{
- if(type != InvalidResource) {
- resourceType = type;
- return true;
- }
- else {
- return false;
- }
}
bool Resource::isOptional() const
@@ -62,10 +39,19 @@ void Resource::setShared(bool shared)
this->shared = shared;
}
-bool Resource::operator==(const Resource &other) const
+bool Resource::isGranted() const
+{
+ return granted;
+}
+
+void Resource::setGranted()
{
- if(resourceType != other.resourceType) {
- return false;
- }
- return true;
+ granted = true;
}
+
+void Resource::unsetGranted()
+{
+ granted = false;
+}
+
+
diff --git a/tests/mock-resource-library.cpp b/tests/mock-resource-library.cpp
deleted file mode 100644
index 565e745..0000000
--- a/tests/mock-resource-library.cpp
+++ /dev/null
@@ -1,57 +0,0 @@
-#include "mock-resource-library.h"
-
-MockResourceLibrary::MockResourceLibrary(Resource *resource,
- bool makeInitializationFail,
- bool makeConnectingToServerFail,
- bool makeReserveFail)
- : QObject(resource), initializeFails(makeInitializationFail),
- connectToServerFails(makeConnectingToServerFail),
- reserveFails(makeReserveFail)
-{
- this->resource = resource;
-}
-
-MockResourceLibrary::~MockResourceLibrary()
-{
-}
-
-void MockResourceLibrary::makeInitializeFail()
-{
- initializeFails = true;
-}
-
-bool MockResourceLibrary::initialize()
-{
- if(initializeFails==false)
- return true;
- else
- return false;
-}
-
-void MockResourceLibrary::makeServerConnectFail()
-{
- connectToServerFails = true;
-}
-
-bool MockResourceLibrary::connectToServer()
-{
- if(connectToServerFails == false)
- return true;
- else
- return false;
-}
-
-bool MockResourceLibrary::reserve()
-{
- if(!reserveFails) {
- resource->handleStateChange(OwnedState);
- }
- else {
- resource->handleStateChange(NotOwnedState);
- }
-}
-
-void MockResourceLibrary::makeReserveFail()
-{
- reserveFails = true;
-}
diff --git a/tests/mock-resource-library.h b/tests/mock-resource-library.h
deleted file mode 100644
index 1d3d17d..0000000
--- a/tests/mock-resource-library.h
+++ /dev/null
@@ -1,29 +0,0 @@
-#ifndef MOCK_RESOURCE_LIBRARY_H
-#define MOCK_RESOURCE_LIBRARY_H
-
-#include <QObject>
-#include "resource-library.h"
-#include "resource.h"
-
-class MockResourceLibrary: public QObject, public ResourceLibrary
-{
- Q_OBJECT
-private:
- bool initializeFails;
- bool connectToServerFails;
- Resource *resource;
- bool reserveFails;
-public:
- MockResourceLibrary(Resource *resource=0,bool makeInitializationFail=false,
- bool makeConnectingToServerFail=false, bool makeReserveFail=false);
- virtual ~MockResourceLibrary();
- void makeInitializeFail();
- void makeServerConnectFail();
- bool initialize();
- bool connectToServer();
-
- bool reserve();
- void makeReserveFail();
-};
-
-#endif
diff --git a/tests/test-libplayback.cpp b/tests/test-libplayback.cpp
deleted file mode 100644
index ac4107c..0000000
--- a/tests/test-libplayback.cpp
+++ /dev/null
@@ -1,46 +0,0 @@
-#include "test-libplayback.h"
-
-using namespace ResourceTypes;
-
-TestLibplayback::TestLibplayback()
-{
- resourceFactory=NULL;
- resource=NULL;
- loop=NULL;
- timer=NULL;
-}
-
-TestLibplayback::~TestLibplayback()
-{
-}
-
-void TestLibplayback::init()
-{
- loop = new QEventLoop(this);
- timer = new QTimer(this);
- resourceFactory = new ResourceFactory(this);
- QVERIFY(resourceFactory != NULL);
- resource = resourceFactory->createResource(MediaClass, AudioResource|VideoResource);
- QVERIFY(resource != NULL);
-
- timer->setInterval(3000);
- timer->setSingleShot(true);
-}
-
-void TestLibplayback::testConnectToServer()
-{
- connect(timer, SIGNAL(timeout()), loop, SLOT(quit()));
-
- qDebug("connecting to server...");
- resource->connectToServer();
-
- loop->exec();
-}
-
-void TestLibplayback::timeout()
-{
- qDebug("Timeout!");
- loop->exit(0);
-}
-
-QTEST_MAIN(TestLibplayback)
diff --git a/tests/test-libplayback.h b/tests/test-libplayback.h
deleted file mode 100644
index 03ffc4a..0000000
--- a/tests/test-libplayback.h
+++ /dev/null
@@ -1,29 +0,0 @@
-#ifndef TEST_RESOURCE_FACTORY_H
-#define TEST_RESOURCE_FACTORY_H
-
-#include <QtTest/QTest>
-#include <QEventLoop>
-#include <QTimer>
-#include "resource-factory.h"
-#include "resource.h"
-
-class TestLibplayback: public QObject
-{
- Q_OBJECT
-private:
- ResourceFactory *resourceFactory;
- Resource *resource;
- QEventLoop *loop;
- QTimer *timer;
-public:
- TestLibplayback();
- ~TestLibplayback();
-public slots:
- void timeout();
-private slots:
- void init();
-
- void testConnectToServer();
-};
-
-#endif
diff --git a/tests/test-resource-set.cpp b/tests/test-resource-set.cpp
index a2834c7..e9ee74b 100644
--- a/tests/test-resource-set.cpp
+++ b/tests/test-resource-set.cpp
@@ -1,17 +1,69 @@
#include "test-resource-set.h"
+Resource * TestResourceSet::resourceFromType(ResourceType type)
+{
+ switch(type) {
+ case AudioPlaybackType:
+ return audioResource;
+ case AudioRecorderType:
+ return audioRecorderResource;
+ case VideoPlaybackType:
+ return videoResource;
+ case VideoRecorderType:
+ return videoRecorderResource;
+ case VibraType:
+ return vibraResource;
+ case LedsType:
+ return ledsResource;
+ case BacklightType:
+ return backlightResource;
+ case SystemButtonType:
+ return systemButtonResource;
+ case LockButtonType:
+ return lockButtonResource;
+ case ScaleButtonType:
+ return scaleButtonResource;
+ case SnapButtonType:
+ return snapButtonResource;
+ case LensCoverType:
+ return lensCoverResource;
+ default:
+ return NULL;
+ }
+}
+
using namespace ResourcePolicy;
TestResourceSet::TestResourceSet()
{
- audioPlayback.setType(AudioPlaybackResource);
- videoPlayback.setType(VideoPlaybackResource);
- audioRecorder.setType(AudioRecorderResource);
- videoRecorder.setType(VideoRecorderResource);
+ audioResource = new AudioResource;
+ audioRecorderResource = new AudioRecorderResource;
+ videoResource = new VideoResource;
+ videoRecorderResource = new VideoRecorderResource;
+ vibraResource = new VibraResource;
+ ledsResource = new LedsResource;
+ backlightResource = new BacklightResource;
+ systemButtonResource = new SystemButtonResource;
+ lockButtonResource = new LockButtonResource;
+ scaleButtonResource = new ScaleButtonResource;
+ snapButtonResource = new SnapButtonResource;
+ lensCoverResource = new LensCoverResource;
}
TestResourceSet::~TestResourceSet()
{
+ delete audioResource;
+ delete audioRecorderResource;
+ delete videoResource;
+ delete videoRecorderResource;
+ delete vibraResource;
+ delete ledsResource;
+ delete backlightResource;
+ delete systemButtonResource;
+ delete lockButtonResource;
+ delete scaleButtonResource;
+ delete snapButtonResource;
+ delete lensCoverResource;
}
void TestResourceSet::init()
@@ -36,113 +88,85 @@ void TestResourceSet::testIdentifier()
void TestResourceSet::testAddResource()
{
- Resource resource;
- resource.setType(AudioPlaybackResource);
-
- resourceSet->addResource(resource);
-
- QList<Resource> resourcesInSet = resourceSet->resources();
- QVERIFY(resourcesInSet.contains(resource));
+ for(int i=0;i<NumberOfTypes;i++) {
+ ResourceType type = (ResourceType)i;
+ Resource *resource = resourceFromType(type);
+ resourceSet->addResource(resource);
+ bool setContainsGivenResource = resourceSet->contains(type);
+ QVERIFY(setContainsGivenResource);
+ }
}
void TestResourceSet::testAddResources()
{
- QList<Resource> resources;
+ resourceSet->addResource(audioResource);
- resources << audioPlayback << videoPlayback;
+ bool setContainsAudioResource = resourceSet->contains(AudioPlaybackType);
+ QVERIFY(setContainsAudioResource);
+ QList<Resource *> resources;
+
+ resources << audioResource << videoResource;
resourceSet->addResources(resources);
- QList<Resource> resourcesInSet = resourceSet->resources();
- bool resultContainsAllItems = false;
- for(int i=0; i<resourcesInSet.size(); i++) {
- resultContainsAllItems = resources.contains(resourcesInSet.at(i));
- if(!resultContainsAllItems) {
- qDebug("resources doesn't contain Resource 0x%02x", resourcesInSet.at(i).type());
- break;
- }
- }
- QVERIFY(resultContainsAllItems);
- for(int i=0; i<resources.size(); i++) {
- resultContainsAllItems = resourcesInSet.contains(resources.at(i));
- if(!resultContainsAllItems) {
- break;
- }
- }
- QVERIFY(resultContainsAllItems);
+ QVERIFY(resourceSet->contains(AudioPlaybackType));
+ QVERIFY(resourceSet->contains(VideoPlaybackType));
}
-void TestResourceSet::testSetResources()
+void TestResourceSet::testDelResource()
{
- QList<Resource> resources, newResources;
-
- newResources << audioPlayback << videoPlayback;
- resources << audioPlayback << videoPlayback << audioRecorder << videoRecorder;
- resourceSet->setResources(resources);
- QList<Resource> resourcesInSet = resourceSet->resources();
-
- resourceSet->setResources(newResources);
-
- QList<Resource> resourcesInNewSet = resourceSet->resources();
- bool resultContainsAllItems = false;
- for(int i=0; i<resourcesInNewSet.size(); i++) {
- resultContainsAllItems = newResources.contains(resourcesInNewSet.at(i));
- if(!resultContainsAllItems) {
- qDebug("newResources doesn't contain Resource 0x%02x", resourcesInNewSet.at(i).type());
- break;
- }
- }
- QVERIFY(resultContainsAllItems);
- for(int i=0; i<newResources.size(); i++) {
- resultContainsAllItems = resourcesInNewSet.contains(newResources.at(i));
- if(!resultContainsAllItems) {
- qDebug("newResources doesn't contain Resource 0x%02x", resourcesInNewSet.at(i).type());
- break;
- }
- }
- QVERIFY(resultContainsAllItems);
+ resourceSet->addResource(audioResource);
+ resourceSet->addResource(vibraResource);
+ resourceSet->delResource(AudioPlaybackType);
+
+ bool setDoesNotContainAudioResource = !resourceSet->contains(AudioPlaybackType);
+ QVERIFY(setDoesNotContainAudioResource);
+ QVERIFY(resourceSet->contains(VibraType));
}
void TestResourceSet::testContainsSingle()
{
- QList<Resource> resources;
+ QList<Resource *> resources;
- resources << audioPlayback << videoPlayback << audioRecorder;
- resourceSet->setResources(resources);
- QList<Resource> resourcesInSet = resourceSet->resources();
- resourceSet->setResources(resources);
+ resources << audioResource << videoResource << audioRecorderResource;
+ resourceSet->addResources(resources);
+ QList<Resource *> resourcesInSet = resourceSet->resources();
- bool containsVideoPlayback = resourceSet->contains(videoPlayback);
+ bool containsVideoPlayback = resourceSet->contains(VideoPlaybackType);
QVERIFY(containsVideoPlayback);
}
void TestResourceSet::testDoesNotContainSingle()
{
- QList<Resource> resources;
+ QList<Resource *> resources;
- resources << audioPlayback << videoPlayback;
- resourceSet->setResources(resources);
- QList<Resource> resourcesInSet = resourceSet->resources();
- resourceSet->setResources(resources);
+ resources << audioResource << videoResource;
+ resourceSet->addResources(resources);
+ QList<Resource *> resourcesInSet = resourceSet->resources();
- bool containsVideoRecorder = resourceSet->contains(videoRecorder);
- QEXPECT_FAIL("", "This should fail since searched resource should NOT be in set", Continue);
- QVERIFY(containsVideoRecorder);
+ bool doesNotContainVideoRecorder = !resourceSet->contains(VideoRecorderType);
+ QVERIFY(doesNotContainVideoRecorder);
}
void TestResourceSet::testContainsSet()
{
- QList<Resource> resources, subset;
+ QList<ResourceType> types, subset;
+ QList<Resource *> resources;
+
+ types << AudioPlaybackType << VideoPlaybackType
+ << AudioRecorderType << VideoRecorderType << LensCoverType;
+ subset << AudioPlaybackType << VideoPlaybackType << LensCoverType;
- resources << audioPlayback << videoPlayback << audioRecorder << videoRecorder;
- subset << audioPlayback << videoPlayback;
+ resources << audioResource << videoResource
+ << audioRecorderResource << videoRecorderResource << lensCoverResource;
- resourceSet->setResources(resources);
- QList<Resource> resourcesInSet = resourceSet->resources();
- resourceSet->setResources(resources);
+ resourceSet->addResources(resources);
+ bool containsAll = resourceSet->contains(types);
bool containsSubset = resourceSet->contains(subset);
+ QVERIFY(containsAll);
QVERIFY(containsSubset);
}
QTEST_MAIN(TestResourceSet)
+
diff --git a/tests/test-resource-set.h b/tests/test-resource-set.h
index fa80df1..0a3eeef 100644
--- a/tests/test-resource-set.h
+++ b/tests/test-resource-set.h
@@ -10,12 +10,22 @@ class TestResourceSet: public QObject
{
Q_OBJECT
private:
- ResourceSet *resourceSet;
- Resource audioPlayback;
- Resource videoPlayback;
- Resource videoRecorder;
- Resource audioRecorder;
-
+ ResourceSet *resourceSet;
+
+ AudioResource *audioResource;
+ AudioRecorderResource *audioRecorderResource;
+ Resource *videoResource;
+ Resource *videoRecorderResource;
+ Resource *vibraResource;
+ Resource *ledsResource;
+ Resource *backlightResource;
+ Resource *systemButtonResource;
+ Resource *lockButtonResource;
+ Resource *scaleButtonResource;
+ Resource *snapButtonResource;
+ Resource *lensCoverResource;
+
+ Resource * resourceFromType(ResourceType type);
public:
TestResourceSet();
~TestResourceSet();
@@ -30,7 +40,7 @@ private slots:
void testAddResource();
void testAddResources();
- void testSetResources();
+ void testDelResource();
void testContainsSingle();
void testDoesNotContainSingle();
diff --git a/tests/test-resource.cpp b/tests/test-resource.cpp
index e5c60bd..2098a88 100644
--- a/tests/test-resource.cpp
+++ b/tests/test-resource.cpp
@@ -3,139 +3,279 @@
using namespace ResourcePolicy;
-TestResource::TestResource()
+Resource * TestResource::resourceFromType(ResourceType type)
{
+ switch(type) {
+ case AudioPlaybackType:
+ return audioResource;
+ case AudioRecorderType:
+ return audioRecorderResource;
+ case VideoPlaybackType:
+ return videoResource;
+ case VideoRecorderType:
+ return videoRecorderResource;
+ case VibraType:
+ return vibraResource;
+ case LedsType:
+ return ledsResource;
+ case BacklightType:
+ return backlightResource;
+ case SystemButtonType:
+ return systemButtonResource;
+ case LockButtonType:
+ return lockButtonResource;
+ case ScaleButtonType:
+ return scaleButtonResource;
+ case SnapButtonType:
+ return snapButtonResource;
+ case LensCoverType:
+ return lensCoverResource;
+ default:
+ return NULL;
+ }
}
-TestResource::~TestResource()
+const char * TestResource::stringFromType(ResourceType type)
{
+ switch(type) {
+ case AudioPlaybackType:
+ return "AudioPlaybackType";
+ case AudioRecorderType:
+ return "AudioRecorderType";
+ case VideoPlaybackType:
+ return "VideoPlaybackType";
+ case VideoRecorderType:
+ return "VideoRecorderType";
+ case VibraType:
+ return "VibraType";
+ case LedsType:
+ return "LedsType";
+ case BacklightType:
+ return "BacklightType";
+ case SystemButtonType:
+ return "SystemButtonType";
+ case LockButtonType:
+ return "LockButtonType";
+ case ScaleButtonType:
+ return "ScaleButtonType";
+ case SnapButtonType:
+ return "SnapButtonType";
+ case LensCoverType:
+ return "LensCoverType";
+ default:
+ qDebug("Unknown Type 0x%02x requested", type);
+ return NULL;
+ }
}
-void TestResource::init()
+TestResource::TestResource()
{
- resource = new Resource();
}
-void TestResource::cleanup()
+TestResource::~TestResource()
{
- delete resource;
}
-void TestResource::testType_data()
+void TestResource::init()
{
- QTest::addColumn<ResourceType>("type");
- QTest::addColumn<ResourceType>("expected");
+ audioResource = new AudioResource;
+ audioRecorderResource = new AudioRecorderResource;
+ videoResource = new VideoResource;
+ videoRecorderResource = new VideoRecorderResource;
+ vibraResource = new VibraResource;
+ ledsResource = new LedsResource;
+ backlightResource = new BacklightResource;
+ systemButtonResource = new SystemButtonResource;
+ lockButtonResource = new LockButtonResource;
+ scaleButtonResource = new ScaleButtonResource;
+ snapButtonResource = new SnapButtonResource;
+ lensCoverResource = new LensCoverResource;
+}
- QTest::newRow("AudioPlayback") << AudioPlaybackResource << AudioPlaybackResource;
- QTest::newRow("VideoPlayback") << VideoPlaybackResource << VideoPlaybackResource;
- QTest::newRow("AudioRecorder") << AudioRecorderResource << AudioRecorderResource;
- QTest::newRow("VideoRecorder") << VideoRecorderResource << VideoRecorderResource;
- QTest::newRow("Invalid") << InvalidResource << InvalidResource;
+void TestResource::cleanup()
+{
+ delete audioResource;
+ delete audioRecorderResource;
+ delete videoResource;
+ delete videoRecorderResource;
+ delete vibraResource;
+ delete ledsResource;
+ delete backlightResource;
+ delete systemButtonResource;
+ delete lockButtonResource;
+ delete scaleButtonResource;
+ delete snapButtonResource;
+ delete lensCoverResource;
}
void TestResource::testType()
{
- QFETCH(ResourceType, type);
- QFETCH(ResourceType, expected);
- bool setWasSuccessfull = resource->setType(type);
- ResourceType result = resource->type();
-
- if(expected == InvalidResource) {
- QEXPECT_FAIL("", "Expecting to fail since type == InvalidResource", Continue);
+ for(quint32 type=AudioPlaybackType; type < NumberOfTypes; type++) {
+ ResourceType expected = (ResourceType)type;
+ Resource *resource = resourceFromType(expected);
+ if(resource->type() != expected) {
+ qDebug("expected ResourceType = %s, got %s",
+ stringFromType(expected), stringFromType(resource->type()));
+ }
+ QVERIFY(resource->type() == expected);
}
- QVERIFY(setWasSuccessfull);
- QCOMPARE(result, expected);
}
void TestResource::testOptional_data()
{
+ QTest::addColumn<ResourceType>("type");
QTest::addColumn<bool>("optional");
QTest::addColumn<bool>("expected");
- QTest::newRow("Resource is optional") << true << true;
- QTest::newRow("Resource is not optional") << false << false;
+ QTest::newRow("Resource is optional") << AudioPlaybackType << true << true;
+ QTest::newRow("Resource is not optional") << AudioPlaybackType << false << false;
+ QTest::newRow("Resource is optional") << AudioRecorderType << true << true;
+ QTest::newRow("Resource is not optional") << AudioRecorderType << false << false;
+ QTest::newRow("Resource is optional") << VideoPlaybackType << true << true;
+ QTest::newRow("Resource is not optional") << VideoPlaybackType << false << false;
+ QTest::newRow("Resource is optional") << VideoRecorderType << true << true;
+ QTest::newRow("Resource is not optional") << VideoRecorderType << false << false;
+ QTest::newRow("Resource is optional") << VibraType << true << true;
+ QTest::newRow("Resource is not optional") << VibraType<< false << false;
+ QTest::newRow("Resource is optional") << BacklightType << true << true;
+ QTest::newRow("Resource is not optional") << BacklightType << false << false;
+ QTest::newRow("Resource is optional") << SystemButtonType << true << true;
+ QTest::newRow("Resource is not optional") << SystemButtonType << false << false;
+ QTest::newRow("Resource is optional") << LedsType << true << true;
+ QTest::newRow("Resource is not optional") << LedsType << false << false;
+ QTest::newRow("Resource is optional") << LockButtonType << true << true;
+ QTest::newRow("Resource is not optional") << LockButtonType << false << false;
+ QTest::newRow("Resource is optional") << ScaleButtonType << true << true;
+ QTest::newRow("Resource is not optional") << ScaleButtonType << false << false;
+ QTest::newRow("Resource is optional") << SnapButtonType << true << true;
+ QTest::newRow("Resource is not optional") << SnapButtonType << false << false;
+ QTest::newRow("Resource is optional") << LensCoverType << true << true;
+ QTest::newRow("Resource is not optional") << LensCoverType << false << false;
}
void TestResource::testOptional()
{
+ QFETCH(ResourceType, type);
QFETCH(bool, optional);
QFETCH(bool, expected);
- resource->setType(AudioPlaybackResource);
+ Resource *resource = resourceFromType(type);
+
resource->setOptional(optional);
bool result = resource->isOptional();
- QCOMPARE(result, expected);
+ QVERIFY(result == expected);
}
void TestResource::testShared_data()
{
- QTest::addColumn<bool>("optional");
+ QTest::addColumn<ResourceType>("type");
+ QTest::addColumn<bool>("shared");
QTest::addColumn<bool>("expected");
- QTest::newRow("Resource is shared") << true << true;
- QTest::newRow("Resource is not shared") << false << false;
+ QTest::newRow("Resource is shared") << AudioPlaybackType << true << true;
+ QTest::newRow("Resource is not shared") << AudioPlaybackType << false << false;
+ QTest::newRow("Resource is shared") << AudioRecorderType << true << true;
+ QTest::newRow("Resource is not shared") << AudioRecorderType << false << false;
+ QTest::newRow("Resource is shared") << VideoPlaybackType << true << true;
+ QTest::newRow("Resource is not shared") << VideoPlaybackType << false << false;
+ QTest::newRow("Resource is shared") << VideoRecorderType << true << true;
+ QTest::newRow("Resource is not shared") << VideoRecorderType << false << false;
+ QTest::newRow("Resource is shared") << VibraType << true << true;
+ QTest::newRow("Resource is not shared") << VibraType<< false << false;
+ QTest::newRow("Resource is shared") << BacklightType << true << true;
+ QTest::newRow("Resource is not shared") << BacklightType << false << false;
+ QTest::newRow("Resource is shared") << SystemButtonType << true << true;
+ QTest::newRow("Resource is not shared") << SystemButtonType << false << false;
+ QTest::newRow("Resource is shared") << LedsType << true << true;
+ QTest::newRow("Resource is not shared") << LedsType << false << false;
+ QTest::newRow("Resource is shared") << LockButtonType << true << true;
+ QTest::newRow("Resource is not shared") << LockButtonType << false << false;
+ QTest::newRow("Resource is shared") << ScaleButtonType << true << true;
+ QTest::newRow("Resource is not shared") << ScaleButtonType << false << false;
+ QTest::newRow("Resource is shared") << SnapButtonType << true << true;
+ QTest::newRow("Resource is not shared") << SnapButtonType << false << false;
+ QTest::newRow("Resource is shared") << LensCoverType << true << true;
+ QTest::newRow("Resource is not shared") << LensCoverType << false << false;
}
void TestResource::testShared()
{
- QFETCH(bool, optional);
+ QFETCH(ResourceType, type);
+ QFETCH(bool, shared);
QFETCH(bool, expected);
- resource->setType(AudioPlaybackResource);
- resource->setShared(optional);
+ Resource *resource = resourceFromType(type);
+ resource->setShared(shared);
+
bool result = resource->isShared();
QCOMPARE(result, expected);
}
-void TestResource::testCopy()
+void TestResource::testGranted_data()
{
- Resource copy;
- resource->setType(AudioPlaybackResource);
- resource->setOptional();
-
- copy = *resource;
-
- QCOMPARE(copy.isOptional(), resource->isOptional());
- QCOMPARE(copy.isShared(), resource->isShared());
- QCOMPARE(copy.type(), resource->type());
+ QTest::addColumn<ResourceType>("type");
+ QTest::addColumn<bool>("granted");
+ QTest::addColumn<bool>("expected");
+
+ QTest::newRow("Resource is granted") << AudioPlaybackType << true << true;
+ QTest::newRow("Resource is denied") << AudioPlaybackType << false << false;
+ QTest::newRow("Resource is granted") << AudioRecorderType << true << true;
+ QTest::newRow("Resource is denied") << AudioRecorderType << false << false;
+ QTest::newRow("Resource is granted") << VideoPlaybackType << true << true;
+ QTest::newRow("Resource is denied") << VideoPlaybackType << false << false;
+ QTest::newRow("Resource is granted") << VideoRecorderType << true << true;
+ QTest::newRow("Resource is denied") << VideoRecorderType << false << false;
+ QTest::newRow("Resource is granted") << VibraType << true << true;
+ QTest::newRow("Resource is denied") << VibraType<< false << false;
+ QTest::newRow("Resource is granted") << BacklightType << true << true;
+ QTest::newRow("Resource is denied") << BacklightType << false << false;
+ QTest::newRow("Resource is granted") << SystemButtonType << true << true;
+ QTest::newRow("Resource is denied") << SystemButtonType << false << false;
+ QTest::newRow("Resource is granted") << LedsType << true << true;
+ QTest::newRow("Resource is denied") << LedsType << false << false;
+ QTest::newRow("Resource is granted") << LockButtonType << true << true;
+ QTest::newRow("Resource is denied") << LockButtonType << false << false;
+ QTest::newRow("Resource is granted") << ScaleButtonType << true << true;
+ QTest::newRow("Resource is denied") << ScaleButtonType << false << false;
+ QTest::newRow("Resource is granted") << SnapButtonType << true << true;
+ QTest::newRow("Resource is denied") << SnapButtonType << false << false;
+ QTest::newRow("Resource is granted") << LensCoverType << true << true;
+ QTest::newRow("Resource is denied") << LensCoverType << false << false;
}
-void TestResource::testCopyConstructor()
+void TestResource::testGranted()
{
- resource->setType(AudioPlaybackResource);
- resource->setOptional();
- Resource copy(*resource);
+ QFETCH(ResourceType, type);
+ QFETCH(bool, granted);
+ QFETCH(bool, expected);
- QCOMPARE(copy.isOptional(), resource->isOptional());
- QCOMPARE(copy.isShared(), resource->isShared());
- QCOMPARE(copy.type(), resource->type());
-}
+ Resource *resource = resourceFromType(type);
-void TestResource::testEqualsOperator()
-{
- Resource copy;
- resource->setType(AudioPlaybackResource);
- copy = *resource;
+ if(granted)
+ resource->setGranted();
+ else
+ resource->unsetGranted();
+ bool result = resource->isGranted();
- resource->setOptional();
- resource->setShared();
-
- QVERIFY(copy == *resource);
+ QVERIFY(result == expected);
}
-void TestResource::testEqualsOperatorWithDifferentTypes()
+void TestResource::testClone()
{
- Resource copy;
- resource->setType(AudioPlaybackResource);
- copy = *resource;
-
- resource->setOptional();
- copy.setType(VideoPlaybackResource);
+ for(quint32 type=AudioPlaybackType; type < NumberOfTypes; type++) {
+ Resource *resource = resourceFromType((ResourceType)type);
+ resource->setOptional();
+ Resource *copy = resource->clone();
- QEXPECT_FAIL("", "Expecting to fail since different types.", Continue);
- QVERIFY(copy == *resource);
+ QCOMPARE(copy->isOptional(), resource->isOptional());
+ QCOMPARE(copy->isShared(), resource->isShared());
+ QCOMPARE(copy->isGranted(), resource->isGranted());
+ QCOMPARE(copy->type(), resource->type());
+ delete copy;
+ }
}
QTEST_MAIN(TestResource)
+
diff --git a/tests/test-resource.h b/tests/test-resource.h
index b0e6964..fc04c47 100644
--- a/tests/test-resource.h
+++ b/tests/test-resource.h
@@ -3,7 +3,7 @@
#include <QtTest/QTest>
#include <QMetaType>
-#include "resource.h"
+#include "resources.h"
Q_DECLARE_METATYPE(ResourcePolicy::ResourceType)
@@ -11,33 +11,44 @@ using namespace ResourcePolicy;
class TestResource: public QObject
{
- Q_OBJECT
+ Q_OBJECT
private:
- Resource *resource;
-
+ AudioResource *audioResource;
+ AudioRecorderResource *audioRecorderResource;
+ Resource *videoResource;
+ Resource *videoRecorderResource;
+ Resource *vibraResource;
+ Resource *ledsResource;
+ Resource *backlightResource;
+ Resource *systemButtonResource;
+ Resource *lockButtonResource;
+ Resource *scaleButtonResource;
+ Resource *snapButtonResource;
+ Resource *lensCoverResource;
+
+ Resource * resourceFromType(ResourceType type);
+ const char * stringFromType(ResourceType type);
public:
- TestResource();
- ~TestResource();
+ TestResource();
+ ~TestResource();
private slots:
- void init();
- void cleanup();
+ void init();
+ void cleanup();
+
+ void testType();
- void testType_data();
- void testType();
-
- void testOptional_data();
- void testOptional();
+ void testOptional_data();
+ void testOptional();
- void testShared_data();
- void testShared();
+ void testShared_data();
+ void testShared();
- void testCopy();
- void testCopyConstructor();
+ void testGranted_data();
+ void testGranted();
- void testEqualsOperator();
- void testEqualsOperatorWithDifferentTypes();
+ void testClone();
};
#endif
diff --git a/tests/test-resource.pro b/tests/test-resource.pro
index bb4da4c..7ab2678 100644
--- a/tests/test-resource.pro
+++ b/tests/test-resource.pro
@@ -6,8 +6,8 @@ DEPENDPATH += $${BASE}/include $${BASE}/src .
INCLUDEPATH += $${BASE}/src $${BASE}/include
# Input
-HEADERS += $${BASE}/include/resource.h test-resource.h
-SOURCES += $${BASE}/src/resource.cpp test-resource.cpp
+HEADERS += $${BASE}/include/resource.h $${BASE}/include/resources.h test-resource.h
+SOURCES += $${BASE}/src/resource.cpp $${BASE}/src/resources.cpp test-resource.cpp
OBJECTS_DIR = build
MOC_DIR = build