146 :
public ::testing::Test,
150 void SetUp ()
override
153 temp_dir_obj = utils::io::make_tmp_dir ();
155 utils::Utf8String::from_qstring (temp_dir_obj->path ()).to_path ();
157 hw_interface = std::make_unique<test_helpers::MockHardwareAudioInterface> ();
159 plugin_format_manager = std::make_shared<juce::AudioPluginFormatManager> ();
160 juce::addDefaultFormatsToManager (*plugin_format_manager);
163 auto mock_backend = std::make_unique<test_helpers::MockSettingsBackend> ();
164 mock_backend_ptr = mock_backend.get ();
167 ON_CALL (*mock_backend_ptr, value (testing::_, testing::_))
168 .WillByDefault (testing::Return (QVariant ()));
171 std::make_unique<utils::AppSettings> (std::move (mock_backend));
174 port_registry = std::make_unique<dsp::PortRegistry> (
nullptr);
175 param_registry = std::make_unique<dsp::ProcessorParameterRegistry> (
176 *port_registry,
nullptr);
177 monitor_fader = utils::make_qobject_unique<dsp::Fader> (
179 .port_registry_ = *port_registry,
180 .param_registry_ = *param_registry,
182 dsp::PortType::Audio,
186 [] (
bool fader_solo_status) {
return false; });
189 juce::AudioSampleBuffer emphasis_sample (2, 512);
190 juce::AudioSampleBuffer normal_sample (2, 512);
191 metronome = utils::make_qobject_unique<dsp::Metronome> (
193 .port_registry_ = *port_registry,
194 .param_registry_ = *param_registry,
196 emphasis_sample, normal_sample,
true, 1.0f,
nullptr);
199 void TearDown ()
override
204 monitor_fader.reset ();
205 param_registry.reset ();
206 port_registry.reset ();
207 app_settings.reset ();
208 plugin_format_manager.reset ();
209 hw_interface.reset ();
212 std::unique_ptr<structure::project::Project> create_minimal_project ()
214 structure::project::Project::ProjectDirectoryPathProvider path_provider =
215 [
this] (
bool for_backup) {
218 return project_dir /
"backups";
223 plugins::PluginHostWindowFactory window_factory =
224 [] (
plugins::Plugin &) -> std::unique_ptr<plugins::IPluginHostWindow> {
228 auto project = std::make_unique<structure::project::Project> (
229 *app_settings, path_provider, *hw_interface, plugin_format_manager,
230 window_factory, *metronome, *monitor_fader);
237 ui_state = utils::make_qobject_unique<structure::project::ProjectUiState> (
238 project, *app_settings);
240 undo_stack = utils::make_qobject_unique<undo::UndoStack> (
241 [&project] (
const std::function<
void ()> &action,
bool recalculate_graph) {
243 action, recalculate_graph);
249 static void assert_valid_uuid (
const std::string &uuid_str)
252 static const std::regex uuid_regex (
253 R
"([0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12})",
254 std::regex_constants::icase);
255 EXPECT_TRUE (std::regex_match (uuid_str, uuid_regex))
256 << "Invalid UUID format: " << uuid_str;
260 static void assert_valid_color (
const std::string &color_str)
262 static const std::regex color_regex (R
"(#[0-9A-Fa-f]{6})");
263 EXPECT_TRUE (std::regex_match (color_str, color_regex))
264 << "Invalid color format: " << color_str;
268 static constexpr utils::Version TEST_APP_VERSION_WITH_PATCH{ 2, 0, 1 };
270 std::unique_ptr<QTemporaryDir> temp_dir_obj;
271 std::filesystem::path project_dir;
272 std::unique_ptr<dsp::IHardwareAudioInterface> hw_interface;
273 std::shared_ptr<juce::AudioPluginFormatManager> plugin_format_manager;
275 std::unique_ptr<utils::AppSettings> app_settings;
276 std::unique_ptr<dsp::PortRegistry> port_registry;
277 std::unique_ptr<dsp::ProcessorParameterRegistry> param_registry;