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