196 :
public ::testing::Test,
200 void SetUp ()
override
203 temp_dir_obj = utils::io::make_tmp_dir ();
205 utils::Utf8String::from_qstring (temp_dir_obj->path ()).to_path ();
208 audio_device_manager =
209 test_helpers::create_audio_device_manager_with_dummy_device ();
215 plugin_format_manager = std::make_shared<juce::AudioPluginFormatManager> ();
216 plugin_format_manager->addDefaultFormats ();
219 auto mock_backend = std::make_unique<test_helpers::MockSettingsBackend> ();
220 mock_backend_ptr = mock_backend.get ();
223 ON_CALL (*mock_backend_ptr, value (testing::_, testing::_))
224 .WillByDefault (testing::Return (QVariant ()));
227 std::make_unique<utils::AppSettings> (std::move (mock_backend));
230 port_registry = std::make_unique<dsp::PortRegistry> (
nullptr);
231 param_registry = std::make_unique<dsp::ProcessorParameterRegistry> (
232 *port_registry,
nullptr);
233 monitor_fader = utils::make_qobject_unique<dsp::Fader> (
235 .port_registry_ = *port_registry,
236 .param_registry_ = *param_registry,
238 dsp::PortType::Audio,
242 [] (
bool fader_solo_status) {
return false; });
245 juce::AudioSampleBuffer emphasis_sample (2, 512);
246 juce::AudioSampleBuffer normal_sample (2, 512);
247 metronome = utils::make_qobject_unique<dsp::Metronome> (
249 .port_registry_ = *port_registry,
250 .param_registry_ = *param_registry,
252 emphasis_sample, normal_sample,
true, 1.0f,
nullptr);
255 void TearDown ()
override
260 monitor_fader.reset ();
261 param_registry.reset ();
262 port_registry.reset ();
263 app_settings.reset ();
264 plugin_format_manager.reset ();
265 hw_interface.reset ();
268 std::unique_ptr<structure::project::Project> create_minimal_project ()
270 structure::project::Project::ProjectDirectoryPathProvider path_provider =
271 [
this] (
bool for_backup) {
274 return project_dir /
"backups";
279 plugins::PluginHostWindowFactory window_factory =
280 [] (
plugins::Plugin &) -> std::unique_ptr<plugins::IPluginHostWindow> {
284 auto project = std::make_unique<structure::project::Project> (
285 *app_settings, path_provider, *hw_interface, plugin_format_manager,
286 window_factory, *metronome, *monitor_fader);
293 ui_state = utils::make_qobject_unique<structure::project::ProjectUiState> (
294 project, *app_settings);
296 undo_stack = utils::make_qobject_unique<undo::UndoStack> (
297 [&project] (
const std::function<
void ()> &action,
bool recalculate_graph) {
299 action, recalculate_graph);
305 static void assert_valid_uuid (
const std::string &uuid_str)
308 static const std::regex uuid_regex (
309 R
"([0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12})",
310 std::regex_constants::icase);
311 EXPECT_TRUE (std::regex_match (uuid_str, uuid_regex))
312 << "Invalid UUID format: " << uuid_str;
316 static void assert_valid_color (
const std::string &color_str)
318 static const std::regex color_regex (R
"(#[0-9A-Fa-f]{6})");
319 EXPECT_TRUE (std::regex_match (color_str, color_regex))
320 << "Invalid color format: " << color_str;
324 static constexpr utils::Version TEST_APP_VERSION_WITH_PATCH{ 2, 0, 1 };
326 std::unique_ptr<QTemporaryDir> temp_dir_obj;
327 fs::path project_dir;
328 std::shared_ptr<juce::AudioDeviceManager> audio_device_manager;
329 std::unique_ptr<dsp::IHardwareAudioInterface> hw_interface;
330 std::shared_ptr<juce::AudioPluginFormatManager> plugin_format_manager;
332 std::unique_ptr<utils::AppSettings> app_settings;
333 std::unique_ptr<dsp::PortRegistry> port_registry;
334 std::unique_ptr<dsp::ProcessorParameterRegistry> param_registry;