1 #pragma once 2 3 #include <gtest/gtest.h> 4 #include <gmock/gmock.h> 5 6 #include <QtDebug> 7 8 #include "preferences/usersettings.h" 9 #include "control/controlobject.h" 10 #include "mixer/deck.h" 11 #include "effects/effectsmanager.h" 12 #include "engine/enginebuffer.h" 13 #include "engine/bufferscalers/enginebufferscale.h" 14 #include "engine/channels/enginechannel.h" 15 #include "engine/channels/enginedeck.h" 16 #include "engine/enginemaster.h" 17 #include "engine/controls/ratecontrol.h" 18 #include "engine/sync/enginesync.h" 19 #include "mixer/deck.h" 20 #include "mixer/previewdeck.h" 21 #include "mixer/sampler.h" 22 #include "test/signalpathtest.h" 23 #include "util/defs.h" 24 #include "util/memory.h" 25 #include "util/sample.h" 26 #include "util/types.h" 27 #include "waveform/guitick.h" 28 29 using ::testing::Return; 30 using ::testing::_; 31 32 class MockScaler : public EngineBufferScale { 33 public: MockScaler()34 MockScaler() 35 : EngineBufferScale(), 36 m_processedTempo(-1), 37 m_processedPitch(-1) { 38 } clear()39 void clear() override { } scaleBuffer(CSAMPLE * pOutput,SINT buf_size)40 double scaleBuffer(CSAMPLE* pOutput, SINT buf_size) override { 41 Q_UNUSED(pOutput); 42 m_processedTempo = m_dTempoRatio; 43 m_processedPitch = m_dPitchRatio; 44 DEBUG_ASSERT((buf_size % 2) == 0); // 2 channels 45 SINT numFrames = buf_size / 2; 46 double framesRead = numFrames * m_dTempoRatio; 47 return framesRead; 48 } 49 getProcessedTempo()50 double getProcessedTempo() { 51 return m_processedTempo; 52 } 53 getProcessedPitch()54 double getProcessedPitch() { 55 return m_processedPitch; 56 } 57 58 private: onSampleRateChanged()59 void onSampleRateChanged() override {} 60 61 double m_processedTempo; 62 double m_processedPitch; 63 }; 64 65 class MockedEngineBackendTest : public BaseSignalPathTest { 66 protected: MockedEngineBackendTest()67 MockedEngineBackendTest() { 68 m_pMockScaleVinyl1 = new MockScaler(); 69 m_pMockScaleKeylock1 = new MockScaler(); 70 m_pMockScaleVinyl2 = new MockScaler(); 71 m_pMockScaleKeylock2 = new MockScaler(); 72 m_pMockScaleVinyl3 = new MockScaler(); 73 m_pMockScaleKeylock3 = new MockScaler(); 74 m_pChannel1->getEngineBuffer()->setScalerForTest(m_pMockScaleVinyl1, 75 m_pMockScaleKeylock1); 76 m_pChannel2->getEngineBuffer()->setScalerForTest(m_pMockScaleVinyl2, 77 m_pMockScaleKeylock2); 78 m_pChannel3->getEngineBuffer()->setScalerForTest(m_pMockScaleVinyl3, 79 m_pMockScaleKeylock3); 80 m_pTrack1 = m_pMixerDeck1->loadFakeTrack(false, 0.0); 81 m_pTrack2 = m_pMixerDeck2->loadFakeTrack(false, 0.0); 82 m_pTrack3 = m_pMixerDeck3->loadFakeTrack(false, 0.0); 83 } 84 ~MockedEngineBackendTest()85 ~MockedEngineBackendTest() override { 86 delete m_pMockScaleVinyl1; 87 delete m_pMockScaleVinyl2; 88 delete m_pMockScaleVinyl3; 89 delete m_pMockScaleKeylock1; 90 delete m_pMockScaleKeylock2; 91 delete m_pMockScaleKeylock3; 92 } 93 94 MockScaler *m_pMockScaleVinyl1, *m_pMockScaleVinyl2, *m_pMockScaleVinyl3; 95 MockScaler *m_pMockScaleKeylock1, *m_pMockScaleKeylock2, *m_pMockScaleKeylock3; 96 TrackPointer m_pTrack1, m_pTrack2, m_pTrack3; 97 }; 98