diff options
author | Wolf Bergenheim <ext-wolf.2.bergenheim@nokia.com> | 2010-01-29 17:20:56 +0200 |
---|---|---|
committer | Wolf Bergenheim <ext-wolf.2.bergenheim@nokia.com> | 2010-01-29 17:20:56 +0200 |
commit | 0746bbd252fe13ce3c4ae523fc28b0cf27314c05 (patch) | |
tree | 323b3406c6f893f21c7c7820532c0df2a61881cc | |
parent | 27c45e867533ad43bc2b2e64fe577a503b2d05a8 (diff) |
Refactored Resource into multiple classes
-rw-r--r-- | include/resource-factory.h | 38 | ||||
-rw-r--r-- | include/resource-set.h | 290 | ||||
-rw-r--r-- | include/resource.h | 170 | ||||
-rw-r--r-- | libresourceqt.pro | 14 | ||||
-rw-r--r-- | src/libplayback-wrapper.cpp | 163 | ||||
-rw-r--r-- | src/libplayback-wrapper.h | 29 | ||||
-rw-r--r-- | src/resource-library.h | 13 | ||||
-rw-r--r-- | src/resource-set.cpp | 70 | ||||
-rw-r--r-- | src/resource.cpp | 56 | ||||
-rw-r--r-- | tests/mock-resource-library.cpp | 57 | ||||
-rw-r--r-- | tests/mock-resource-library.h | 29 | ||||
-rw-r--r-- | tests/test-libplayback.cpp | 46 | ||||
-rw-r--r-- | tests/test-libplayback.h | 29 | ||||
-rw-r--r-- | tests/test-resource-set.cpp | 180 | ||||
-rw-r--r-- | tests/test-resource-set.h | 24 | ||||
-rw-r--r-- | tests/test-resource.cpp | 278 | ||||
-rw-r--r-- | tests/test-resource.h | 49 | ||||
-rw-r--r-- | tests/test-resource.pro | 4 |
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 |