149 :
public ::testing::Test,
153 void SetUp ()
override
156 temp_dir_obj = utils::io::make_tmp_dir ();
158 utils::Utf8String::from_qstring (temp_dir_obj->path ()).to_path ();
160 hw_interface = std::make_unique<test_helpers::MockHardwareAudioInterface> ();
162 plugin_format_manager = std::make_shared<juce::AudioPluginFormatManager> ();
163 juce::addDefaultFormatsToManager (*plugin_format_manager);
166 auto mock_backend = std::make_unique<test_helpers::MockSettingsBackend> ();
167 mock_backend_ptr = mock_backend.get ();
170 ON_CALL (*mock_backend_ptr, value (testing::_, testing::_))
171 .WillByDefault (testing::Return (QVariant ()));
174 std::make_unique<utils::AppSettings> (std::move (mock_backend));
177 monitor_fader = utils::make_qobject_unique<dsp::Fader> (
178 registry_, dsp::PortType::Audio,
182 [] (
bool fader_solo_status) {
return false; });
185 juce::AudioSampleBuffer emphasis_sample (2, 512);
186 juce::AudioSampleBuffer normal_sample (2, 512);
187 metronome = utils::make_qobject_unique<dsp::Metronome> (
188 registry_, emphasis_sample, normal_sample,
true, 1.0f,
nullptr);
191 void TearDown ()
override
196 monitor_fader.reset ();
197 app_settings.reset ();
198 plugin_format_manager.reset ();
199 hw_interface.reset ();
202 std::unique_ptr<structure::project::Project> create_minimal_project ()
204 structure::project::Project::ProjectDirectoryPathProvider path_provider =
205 [
this] (
bool for_backup) {
208 return project_dir /
"backups";
213 plugins::PluginHostWindowFactory window_factory =
214 [] (
plugins::Plugin &) -> std::unique_ptr<plugins::IPluginHostWindow> {
218 auto project = std::make_unique<structure::project::Project> (
219 *app_settings, path_provider, *hw_interface, midi_interface_,
220 plugin_format_manager, window_factory, *metronome, *monitor_fader);
222 project->install_recording_callback (
225 const dsp::ITransport &, std::optional<std::span<const dsp::MidiEvent>>,
226 std::optional<structure::tracks::TrackProcessor::ConstStereoPortPair>,
227 units::sample_u32_t) { });
234 ui_state = utils::make_qobject_unique<structure::project::ProjectUiState> (
235 project, *app_settings);
237 undo_stack = utils::make_qobject_unique<undo::UndoStack> (
238 [&project] (
const std::function<
void ()> &action,
bool recalculate_graph) {
240 action, recalculate_graph);
246 static void assert_valid_uuid (
const std::string &uuid_str)
249 static const std::regex uuid_regex (
250 R
"([0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12})",
251 std::regex_constants::icase);
252 EXPECT_TRUE (std::regex_match (uuid_str, uuid_regex))
253 << "Invalid UUID format: " << uuid_str;
257 static void assert_valid_color (
const std::string &color_str)
259 static const std::regex color_regex (R
"(#[0-9A-Fa-f]{6})");
260 EXPECT_TRUE (std::regex_match (color_str, color_regex))
261 << "Invalid color format: " << color_str;
265 static constexpr utils::Version TEST_APP_VERSION_WITH_PATCH{ 2, 0, 1 };
267 std::unique_ptr<QTemporaryDir> temp_dir_obj;
268 std::filesystem::path project_dir;
269 std::unique_ptr<dsp::IHardwareAudioInterface> hw_interface;
271 std::shared_ptr<juce::AudioPluginFormatManager> plugin_format_manager;
273 std::unique_ptr<utils::AppSettings> app_settings;