+79
-6
@@ -8,7 +8,9 @@
|
||||
#include <vamp_zero/control.hpp>
|
||||
#include <vamp_zero/library.hpp>
|
||||
#include <vamp_zero/menu_view.hpp>
|
||||
#include <vamp_zero/navigation.hpp>
|
||||
#include <vamp_zero/page_control.hpp>
|
||||
#include <vamp_zero/score_loader.hpp>
|
||||
|
||||
|
||||
namespace {
|
||||
@@ -44,14 +46,14 @@ BOOST_AUTO_TEST_CASE(menu_actions_share_navigation_and_preserve_settings_focus)
|
||||
BOOST_TEST(!state.audio.backing_enabled);
|
||||
state = vamp_zero::apply_menu_action(state, action(state, 2U));
|
||||
BOOST_TEST(state.audio.metronome_enabled);
|
||||
state = vamp_zero::apply_menu_action(state, action(state, 3U));
|
||||
state = vamp_zero::apply_menu_action(state, action(state, vamp_zero::settings_row::tempo));
|
||||
BOOST_TEST(state.audio.tempo_editing);
|
||||
state = vamp_zero::apply_menu_action(state, action(state, 0U));
|
||||
BOOST_CHECK(state.mode == vamp_zero::app_mode::MAIN_MENU);
|
||||
BOOST_TEST(!state.audio.tempo_editing);
|
||||
state = vamp_zero::apply_app_command(state, vamp_protocol::page_command::SELECT);
|
||||
BOOST_CHECK(state.mode == vamp_zero::app_mode::SETTINGS_MENU);
|
||||
BOOST_TEST(state.selected_settings_index == 3U);
|
||||
BOOST_TEST(state.selected_settings_index == vamp_zero::settings_row::tempo);
|
||||
BOOST_TEST(!state.audio.tempo_editing);
|
||||
BOOST_TEST(!state.audio.backing_enabled);
|
||||
BOOST_TEST(state.audio.metronome_enabled);
|
||||
@@ -70,7 +72,7 @@ BOOST_AUTO_TEST_CASE(menu_touch_activates_once_on_release_and_stepper_has_priori
|
||||
BOOST_CHECK(state.mode == vamp_zero::app_mode::SETTINGS_MENU);
|
||||
BOOST_TEST(!state.audio.backing_enabled);
|
||||
BOOST_CHECK(!touch.handle(point_event(luma::touch_phase::UP, point, now), menu_bounds, state));
|
||||
point = row_center(state, 3U, vamp_zero::menu_action_kind::TEMPO_UP);
|
||||
point = row_center(state, vamp_zero::settings_row::tempo, vamp_zero::menu_action_kind::TEMPO_UP);
|
||||
touch.handle(point_event(luma::touch_phase::DOWN, point, now), menu_bounds, state);
|
||||
tapped = touch.handle(point_event(luma::touch_phase::UP, point, now + std::chrono::milliseconds{40}), menu_bounds, state);
|
||||
BOOST_REQUIRE(tapped);
|
||||
@@ -79,11 +81,11 @@ BOOST_AUTO_TEST_CASE(menu_touch_activates_once_on_release_and_stepper_has_priori
|
||||
BOOST_TEST(state.audio.tempo_bpm == 120U);
|
||||
BOOST_TEST(!state.audio.tempo_editing);
|
||||
for (auto i = 0U; i < 100U; ++i) {
|
||||
state = vamp_zero::apply_menu_action(state, action(state, 3U, vamp_zero::menu_action_kind::TEMPO_DOWN));
|
||||
state = vamp_zero::apply_menu_action(state, action(state, vamp_zero::settings_row::tempo, vamp_zero::menu_action_kind::TEMPO_DOWN));
|
||||
}
|
||||
BOOST_TEST(state.audio.tempo_bpm == 60U);
|
||||
for (auto i = 0U; i < 100U; ++i) {
|
||||
state = vamp_zero::apply_menu_action(state, action(state, 3U, vamp_zero::menu_action_kind::TEMPO_UP));
|
||||
state = vamp_zero::apply_menu_action(state, action(state, vamp_zero::settings_row::tempo, vamp_zero::menu_action_kind::TEMPO_UP));
|
||||
}
|
||||
BOOST_TEST(state.audio.tempo_bpm == 120U);
|
||||
}
|
||||
@@ -167,8 +169,79 @@ BOOST_AUTO_TEST_CASE(pico_settings_parser_rejects_invalid_values_without_mutatin
|
||||
auto state = vamp_pico::remote_display_state{};
|
||||
BOOST_REQUIRE(vamp_pico::parse_remote_display_body("mode=settings_menu\nfocus=Backing\nbacking=1\nbpm=135\n", state));
|
||||
auto before = state;
|
||||
for (auto text : {"bpm=0\n", "bpm=401\n", "bpm=-1\n", "editing=yes\n", "backing=2\n", "metronome=true\n", "focus=abcdefghijklmnopqrstuvwxyz0123456789\n"}) {
|
||||
for (auto text : {"bpm=0\n", "bpm=401\n", "bpm=-1\n", "editing=yes\n", "backing=2\n", "metronome=true\n", "solos=2\n", "solos=false\n", "focus=abcdefghijklmnopqrstuvwxyz0123456789\n"}) {
|
||||
BOOST_CHECK(!vamp_pico::parse_remote_display_body(text, state));
|
||||
BOOST_CHECK(state == before);
|
||||
}
|
||||
}
|
||||
|
||||
BOOST_AUTO_TEST_CASE(solos_toggle_selects_variants_and_preserves_global_choice) {
|
||||
auto parts = std::vector<vamp_zero::library_part>{};
|
||||
for (auto song : {"First", "Second"}) {
|
||||
for (auto name : {"Acoustic", "Electric", "Vocal"}) {
|
||||
for (auto enabled : {true, false}) {
|
||||
if (std::string_view{name} == "Vocal" && !enabled) {
|
||||
continue;
|
||||
}
|
||||
parts.push_back({.id = std::string{song} + name + (enabled ? "" : "_improv"), .title = song, .part = name,
|
||||
.total_pages = enabled ? 4U : 2U, .playback_pages = enabled ? 8U : 3U, .solos_enabled = enabled});
|
||||
}
|
||||
}
|
||||
}
|
||||
auto state = vamp_zero::app_state{.catalog = std::make_shared<vamp_zero::catalog const>(vamp_zero::group_ordered_parts(std::move(parts)))};
|
||||
BOOST_TEST(state.solos_enabled);
|
||||
state = vamp_zero::apply_menu_action(state, action(state, 1U));
|
||||
auto touch = vamp_zero::menu_touch{};
|
||||
auto point = row_center(state, vamp_zero::settings_row::solos);
|
||||
auto now = std::chrono::steady_clock::now();
|
||||
touch.handle(point_event(luma::touch_phase::DOWN, point, now), menu_bounds, state);
|
||||
auto tapped = touch.handle(point_event(luma::touch_phase::UP, point, now + std::chrono::milliseconds{40}), menu_bounds, state);
|
||||
BOOST_REQUIRE(tapped);
|
||||
state = vamp_zero::apply_menu_action(state, *tapped);
|
||||
BOOST_TEST(!state.solos_enabled);
|
||||
BOOST_TEST(!state.audio.tempo_editing);
|
||||
BOOST_TEST(vamp_zero::menu_row(state, vamp_zero::settings_row::solos).detail == "Off");
|
||||
auto remote = vamp_pico::remote_display_state{};
|
||||
BOOST_REQUIRE(vamp_pico::parse_remote_display_body(vamp_zero::remote_display_text(state), remote));
|
||||
BOOST_TEST(std::string{remote.focus} == "Solos");
|
||||
BOOST_TEST(!remote.solos);
|
||||
auto before = remote;
|
||||
remote.solos = true;
|
||||
BOOST_CHECK(!(before == remote));
|
||||
state = vamp_zero::apply_menu_action(state, action(state, 0U));
|
||||
state = vamp_zero::apply_menu_action(state, action(state, 0U));
|
||||
for (auto song = 1U; song <= 2U; ++song) {
|
||||
state = vamp_zero::apply_menu_action(state, action(state, song));
|
||||
BOOST_TEST(vamp_zero::menu_count(state) == 4U);
|
||||
for (auto row = 1U; row <= 3U; ++row) {
|
||||
BOOST_TEST(vamp_zero::menu_row(state, row).label == (row == 1U ? "Acoustic" : row == 2U ? "Electric" : "Vocal"));
|
||||
state = vamp_zero::apply_menu_action(state, action(state, row));
|
||||
auto reference = vamp_zero::selected_score_reference(state);
|
||||
BOOST_REQUIRE(reference);
|
||||
BOOST_TEST(reference->id.ends_with("_improv") == (row != 3U));
|
||||
BOOST_TEST(vamp_zero::active_pages(state) == (row == 3U ? 4U : 2U));
|
||||
for (auto i = 0; i < 10; ++i) {
|
||||
state = vamp_zero::apply_app_command(state, vamp_protocol::page_command::NEXT);
|
||||
}
|
||||
BOOST_TEST(state.page_index == vamp_zero::active_pages(state) - 1U);
|
||||
state.audio.metronome_enabled = true;
|
||||
BOOST_TEST(vamp_zero::active_pages(state) == (row == 3U ? 8U : 3U));
|
||||
state = vamp_zero::apply_app_command(state, vamp_protocol::page_command::SELECT);
|
||||
state.audio.metronome_enabled = false;
|
||||
BOOST_TEST(!state.solos_enabled);
|
||||
}
|
||||
state = vamp_zero::apply_menu_action(state, action(state, 0U));
|
||||
}
|
||||
state = vamp_zero::apply_menu_action(state, action(state, 0U));
|
||||
state = vamp_zero::apply_menu_action(state, action(state, 1U));
|
||||
BOOST_TEST(state.selected_settings_index == vamp_zero::settings_row::solos);
|
||||
state = vamp_zero::apply_app_command(state, vamp_protocol::page_command::SELECT);
|
||||
BOOST_TEST(state.solos_enabled);
|
||||
state = vamp_zero::apply_menu_action(state, action(state, 0U));
|
||||
state = vamp_zero::apply_menu_action(state, action(state, 0U));
|
||||
state = vamp_zero::apply_menu_action(state, action(state, 1U));
|
||||
state = vamp_zero::apply_menu_action(state, action(state, 1U));
|
||||
BOOST_TEST(state.active_part_id == "FirstAcoustic");
|
||||
BOOST_REQUIRE(vamp_zero::validate_app_state(state));
|
||||
BOOST_TEST(vamp_zero::app_state{}.solos_enabled);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user