1 #pragma once 2 3 #include <gtest/gtest.h> 4 #include <gmock/gmock.h> 5 6 #include <QScopedPointer> 7 8 #include "effects/effectchain.h" 9 #include "effects/effect.h" 10 #include "effects/effectsmanager.h" 11 #include "effects/effectmanifest.h" 12 #include "effects/effectsbackend.h" 13 #include "effects/effectinstantiator.h" 14 #include "effects/effectprocessor.h" 15 16 17 #include "test/mixxxtest.h" 18 19 class TestEffectBackend : public EffectsBackend { 20 public: TestEffectBackend()21 TestEffectBackend() : EffectsBackend(NULL, EffectBackendType::Unknown) { 22 } 23 24 // Expose as public registerEffect(const QString & id,EffectManifestPointer pManifest,EffectInstantiatorPointer pInstantiator)25 void registerEffect(const QString& id, 26 EffectManifestPointer pManifest, 27 EffectInstantiatorPointer pInstantiator) { 28 EffectsBackend::registerEffect(id, pManifest, pInstantiator); 29 } 30 }; 31 32 class MockEffectProcessor : public EffectProcessor { 33 public: MockEffectProcessor()34 MockEffectProcessor() {} 35 36 MOCK_METHOD3(initialize, void(const QSet<ChannelHandleAndGroup>& activeInputChannels, 37 EffectsManager* pEffectsManager, 38 const mixxx::EngineParameters& bufferParameters)); 39 MOCK_METHOD1(createState, EffectState*(const mixxx::EngineParameters& bufferParameters)); 40 MOCK_METHOD2(loadStatesForInputChannel, bool(const ChannelHandle* inputChannel, 41 const EffectStatesMap* pStatesMap)); 42 MOCK_METHOD1(deleteStatesForInputChannel, void(const ChannelHandle* inputChannel)); 43 MOCK_METHOD7(process, void(const ChannelHandle& inputHandle, 44 const ChannelHandle& outputHandle, 45 const CSAMPLE* pInput, 46 CSAMPLE* pOutput, 47 const mixxx::EngineParameters& bufferParameters, 48 const EffectEnableState enableState, 49 const GroupFeatureState& groupFeatures)); 50 51 }; 52 53 class MockEffectInstantiator : public EffectInstantiator { 54 public: MockEffectInstantiator()55 MockEffectInstantiator() {} 56 MOCK_METHOD2(instantiate, EffectProcessor*(EngineEffect* pEngineEffect, 57 EffectManifestPointer pManifest)); 58 }; 59 60 61 class BaseEffectTest : public MixxxTest { 62 protected: BaseEffectTest()63 BaseEffectTest() 64 : m_pChannelHandleFactory(std::make_shared<ChannelHandleFactory>()), 65 m_pTestBackend(nullptr), 66 m_pEffectsManager(new EffectsManager(nullptr, config(), m_pChannelHandleFactory)) { 67 } 68 registerTestBackend()69 void registerTestBackend() { 70 m_pTestBackend = new TestEffectBackend(); 71 m_pEffectsManager->addEffectsBackend(m_pTestBackend); 72 } 73 74 void registerTestEffect(EffectManifestPointer pManifest, bool willAddToEngine); 75 76 ChannelHandleFactoryPointer m_pChannelHandleFactory; 77 78 // Deleted by EffectsManager. Do not delete. 79 TestEffectBackend* m_pTestBackend; 80 QScopedPointer<EffectsManager> m_pEffectsManager; 81 }; 82