Zrythm v2.0.0-DEV
a highly automated and intuitive digital audio workstation
Loading...
Searching...
No Matches
mock_track.h
1// SPDX-FileCopyrightText: © 2025 Alexandros Theodotou <alex@zrythm.org>
2// SPDX-License-Identifier: LicenseRef-ZrythmLicense
3
4#pragma once
5
6#include "structure/tracks/track.h"
7
8#include "unit/dsp/graph_helpers.h"
9#include <gmock/gmock.h>
10#include <gtest/gtest.h>
11
12namespace zrythm::structure::tracks
13{
14class MockTrack : public Track
15{
16public:
17 using TrackFeatures = Track::TrackFeatures;
18
19 MockTrack (
20 Type type,
21 PortType in_signal_type,
22 PortType out_signal_type,
23 TrackFeatures features,
24 BaseTrackDependencies dependencies)
25 : Track (type, in_signal_type, out_signal_type, features, std::move (dependencies))
26 {
27 processor_ = make_track_processor (std::nullopt, std::nullopt, std::nullopt);
28 }
29
30 MOCK_METHOD (
31 void,
33 (std::vector<ArrangerObjectPtrVariant> & objects),
34 (const, override));
35};
36
37class MockTrackFactory
38{
39public:
40 MockTrackFactory ()
41 {
42 port_registry_ = std::make_unique<dsp::PortRegistry> ();
43 param_registry_ =
44 std::make_unique<dsp::ProcessorParameterRegistry> (*port_registry_);
45 plugin_registry_ = std::make_unique<plugins::PluginRegistry> ();
46 file_audio_source_registry_ =
47 std::make_unique<dsp::FileAudioSourceRegistry> ();
48 obj_registry_ = std::make_unique<arrangement::ArrangerObjectRegistry> ();
49 tempo_map_ = std::make_unique<dsp::TempoMap> (sample_rate_);
50 tempo_map_wrapper_ = std::make_unique<dsp::TempoMapWrapper> (*tempo_map_);
51 transport_ = std::make_unique<dsp::graph_test::MockTransport> ();
52
53 base_dependencies_ = std::make_unique<BaseTrackDependencies> (
54 *tempo_map_wrapper_, *file_audio_source_registry_, *plugin_registry_,
55 *port_registry_, *param_registry_, *obj_registry_, *transport_,
56 [] { return false; });
57 }
58
59 std::unique_ptr<MockTrack> createMockTrack (
60 Track::Type type,
61 dsp::PortType in_type = dsp::PortType::Audio,
62 dsp::PortType out_type = dsp::PortType::Audio,
63 MockTrack::TrackFeatures features =
64 MockTrack::TrackFeatures::Automation | MockTrack::TrackFeatures::Lanes
65 | MockTrack::TrackFeatures::Modulators
66 | MockTrack::TrackFeatures::Recording)
67 {
68 return std::make_unique<MockTrack> (
69 type, in_type, out_type, features, *base_dependencies_);
70 }
71
72 std::unique_ptr<dsp::PortRegistry> port_registry_;
73 std::unique_ptr<dsp::ProcessorParameterRegistry> param_registry_;
74 std::unique_ptr<plugins::PluginRegistry> plugin_registry_;
75 std::unique_ptr<dsp::FileAudioSourceRegistry> file_audio_source_registry_;
76 std::unique_ptr<arrangement::ArrangerObjectRegistry> obj_registry_;
77 std::unique_ptr<dsp::TempoMap> tempo_map_;
78 std::unique_ptr<dsp::TempoMapWrapper> tempo_map_wrapper_;
79 std::unique_ptr<dsp::graph_test::MockTransport> transport_;
80 std::unique_ptr<BaseTrackDependencies> base_dependencies_;
81
82 units::sample_rate_t sample_rate_{ units::sample_rate (48000) };
83};
84
85}
utils::QObjectUniquePtr< TrackProcessor > processor_
The TrackProcessor, used for processing.
Definition track.h:726
Track(Type type, PortType in_signal_type, PortType out_signal_type, TrackFeatures enabled_features, BaseTrackDependencies dependencies)
Constructor to be used by subclasses.
utils::QObjectUniquePtr< TrackProcessor > make_track_processor(std::optional< TrackProcessor::FillEventsCallback > fill_events_cb=std::nullopt, std::optional< TrackProcessor::TransformMidiInputsFunc > transform_midi_inputs_func=std::nullopt, std::optional< TrackProcessor::AppendMidiInputsToOutputsFunc > append_midi_inputs_to_outputs_func=std::nullopt)
Implementations with a processor must call this in their constructor.
virtual void collect_additional_timeline_objects(std::vector< ArrangerObjectPtrVariant > &objects) const
Called by collect_timeline_objects to collect any additional objects not handled by this class (such ...
Definition track.h:597