195 :
public ::testing::Test,
199 void SetUp ()
override
202 temp_dir_obj = utils::io::make_tmp_dir ();
204 utils::Utf8String::from_qstring (temp_dir_obj->path ()).to_path ();
206 hw_interface = std::make_unique<test_helpers::MockHardwareAudioInterface> ();
208 plugin_format_manager = std::make_shared<juce::AudioPluginFormatManager> ();
209 juce::addDefaultFormatsToManager (*plugin_format_manager);
212 auto mock_backend = std::make_unique<test_helpers::MockSettingsBackend> ();
213 mock_backend_ptr = mock_backend.get ();
216 ON_CALL (*mock_backend_ptr, value (testing::_, testing::_))
217 .WillByDefault (testing::Return (QVariant ()));
220 std::make_unique<utils::AppSettings> (std::move (mock_backend));
223 port_registry = std::make_unique<dsp::PortRegistry> (
nullptr);
224 param_registry = std::make_unique<dsp::ProcessorParameterRegistry> (
225 *port_registry,
nullptr);
226 monitor_fader = utils::make_qobject_unique<dsp::Fader> (
228 .port_registry_ = *port_registry,
229 .param_registry_ = *param_registry,
231 dsp::PortType::Audio,
235 [] (
bool fader_solo_status) {
return false; });
238 juce::AudioSampleBuffer emphasis_sample (2, 512);
239 juce::AudioSampleBuffer normal_sample (2, 512);
240 metronome = utils::make_qobject_unique<dsp::Metronome> (
242 .port_registry_ = *port_registry,
243 .param_registry_ = *param_registry,
245 emphasis_sample, normal_sample,
true, 1.0f,
nullptr);
248 void TearDown ()
override
253 monitor_fader.reset ();
254 param_registry.reset ();
255 port_registry.reset ();
256 app_settings.reset ();
257 plugin_format_manager.reset ();
258 hw_interface.reset ();
261 std::unique_ptr<structure::project::Project> create_minimal_project ()
263 structure::project::Project::ProjectDirectoryPathProvider path_provider =
264 [
this] (
bool for_backup) {
267 return project_dir /
"backups";
272 plugins::PluginHostWindowFactory window_factory =
273 [] (
plugins::Plugin &) -> std::unique_ptr<plugins::IPluginHostWindow> {
277 auto project = std::make_unique<structure::project::Project> (
278 *app_settings, path_provider, *hw_interface, plugin_format_manager,
279 window_factory, *metronome, *monitor_fader);
286 ui_state = utils::make_qobject_unique<structure::project::ProjectUiState> (
287 project, *app_settings);
289 undo_stack = utils::make_qobject_unique<undo::UndoStack> (
290 [&project] (
const std::function<
void ()> &action,
bool recalculate_graph) {
292 action, recalculate_graph);
298 static void assert_valid_uuid (
const std::string &uuid_str)
301 static const std::regex uuid_regex (
302 R
"([0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12})",
303 std::regex_constants::icase);
304 EXPECT_TRUE (std::regex_match (uuid_str, uuid_regex))
305 << "Invalid UUID format: " << uuid_str;
309 static void assert_valid_color (
const std::string &color_str)
311 static const std::regex color_regex (R
"(#[0-9A-Fa-f]{6})");
312 EXPECT_TRUE (std::regex_match (color_str, color_regex))
313 << "Invalid color format: " << color_str;
317 static constexpr utils::Version TEST_APP_VERSION_WITH_PATCH{ 2, 0, 1 };
319 std::unique_ptr<QTemporaryDir> temp_dir_obj;
320 fs::path project_dir;
321 std::unique_ptr<dsp::IHardwareAudioInterface> hw_interface;
322 std::shared_ptr<juce::AudioPluginFormatManager> plugin_format_manager;
324 std::unique_ptr<utils::AppSettings> app_settings;
325 std::unique_ptr<dsp::PortRegistry> port_registry;
326 std::unique_ptr<dsp::ProcessorParameterRegistry> param_registry;