File indexing completed on 2024-05-12 04:49:41

0001 /****************************************************************************************
0002  * Copyright (c) 2012 Jasneet Singh Bhatti <jazneetbhatti@gmail.com>                    *
0003  * This program is free software; you can redistribute it and/or modify it under        *
0004  * the terms of the GNU General Public License as published by the Free Software        *
0005  * Foundation; either version 2 of the License, or (at your option) any later           *
0006  * version.                                                                             *
0007  *                                                                                      *
0008  * This program is distributed in the hope that it will be useful, but WITHOUT ANY      *
0009  * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A      *
0010  * PARTICULAR PURPOSE. See the GNU General Public License for more details.             *
0011  *                                                                                      *
0012  * You should have received a copy of the GNU General Public License along with         *
0013  * this program.  If not, see <http://www.gnu.org/licenses/>.                           *
0014  ****************************************************************************************/
0015 
0016 #include "TestMetaCapability.h"
0017 
0018 #include "core/capabilities/ActionsCapability.h"
0019 #include "core/capabilities/BookmarkThisCapability.h"
0020 #include "core/capabilities/CollectionScanCapability.h"
0021 #include "core/capabilities/MultiSourceCapability.h"
0022 #include "core/interfaces/MetaCapability.h"
0023 
0024 #include <QString>
0025 
0026 /**
0027  * Ad-hoc mock to test MetaCapability
0028  */
0029 class MetaCapabilityMock : public MetaCapability
0030 {
0031     public:
0032         static Capabilities::ActionsCapability *actionsCapability;
0033         static Capabilities::BookmarkThisCapability *bookmarkThisCapability;
0034 
0035         bool hasCapabilityInterface( Capabilities::Capability::Type type ) const override
0036         {
0037             switch( type )
0038             {
0039             case Capabilities::Capability::Actions:
0040             case Capabilities::Capability::BookmarkThis:
0041                 return true;
0042             default:
0043                 break;
0044             }
0045             return false;
0046         }
0047 
0048         Capabilities::Capability *createCapabilityInterface( Capabilities::Capability::Type type ) override
0049         {
0050             switch( type )
0051             {
0052             case Capabilities::Capability::Actions:
0053                 return actionsCapability;
0054             case Capabilities::Capability::BookmarkThis:
0055                 return bookmarkThisCapability;
0056             default:
0057                 break;
0058             }
0059             return nullptr;
0060         }
0061 
0062     private:
0063         static QAction *action;
0064         static QList<QAction*> actionsList;
0065 };
0066 
0067 QAction *MetaCapabilityMock::action = new QAction( nullptr );
0068 QList<QAction*> MetaCapabilityMock::actionsList;
0069 
0070 // Create the static instances to be returned for testing
0071 Capabilities::ActionsCapability *MetaCapabilityMock::actionsCapability = new Capabilities::ActionsCapability( actionsList );
0072 Capabilities::BookmarkThisCapability *MetaCapabilityMock::bookmarkThisCapability= new Capabilities::BookmarkThisCapability( action );
0073 
0074 QTEST_MAIN( TestMetaCapability )
0075 
0076 TestMetaCapability::TestMetaCapability()
0077 {
0078 }
0079 
0080 void
0081 TestMetaCapability::testHas()
0082 {
0083     MetaCapability *metaCapability = new MetaCapabilityMock();
0084     QVERIFY( metaCapability );
0085 
0086     // these capabilities should be provided
0087     QVERIFY( metaCapability->has<Capabilities::ActionsCapability>() == true );
0088     QVERIFY( metaCapability->has<Capabilities::BookmarkThisCapability>() == true );
0089 
0090     // these should not
0091     QVERIFY( metaCapability->has<Capabilities::CollectionScanCapability>() == false );
0092     QVERIFY( metaCapability->has<Capabilities::MultiSourceCapability>() == false );
0093 }
0094 
0095 void
0096 TestMetaCapability::testCreate()
0097 {
0098     MetaCapability *metaCapability = new MetaCapabilityMock();
0099     QVERIFY( metaCapability );
0100 
0101     // these capabilities should be provided
0102     // check that the correct instances are returned
0103     QVERIFY( metaCapability->create<Capabilities::ActionsCapability>() == MetaCapabilityMock::actionsCapability );
0104     QVERIFY( metaCapability->create<Capabilities::BookmarkThisCapability>() == MetaCapabilityMock::bookmarkThisCapability );
0105 
0106     // these should not
0107     QVERIFY( metaCapability->create<Capabilities::CollectionScanCapability>() == nullptr );
0108     QVERIFY( metaCapability->create<Capabilities::MultiSourceCapability>() == nullptr );
0109 }