feat(plugins): qualify host VST3 chains and refresh the DAW gallery (phase 89)
This commit is contained in:
parent
a3858b1c82
commit
26ace28bb5
73 changed files with 344 additions and 18 deletions
|
|
@ -259,6 +259,22 @@ int track_insert_tests()
|
|||
CHECK(xtc_project_get_chain(s->project(),track,&chain)==XTC_OK && chain.count==1);
|
||||
auto *preset_before=s->project();CHECK(panel->load_preset("/missing/preset.xtc")!=XTC_OK && s->project()==preset_before);
|
||||
unlink("/tmp/xtc-inserts-preset.xtc");
|
||||
for(const char *variable:{"XTC_TEST_PLUGIN","XTC_TEST_CLAP","XTC_TEST_VST2","XTC_TEST_VST3"}) {
|
||||
if(const char *binary=std::getenv(variable)) {
|
||||
CHECK(window.add_track_effect(track,binary,0)==XTC_OK);
|
||||
CHECK(xtc_project_get_chain(s->project(),track,&chain)==XTC_OK && chain.count==2);
|
||||
CHECK(window.undo()==XTC_OK);panel->refresh(true);
|
||||
}
|
||||
}
|
||||
CHECK(xtc_project_get_chain(s->project(),track,&chain)==XTC_OK);
|
||||
auto restored_chain=chain;for(size_t i=1;i<XTC_TRACK_INSERTS;++i)chain.slots[i]=chain.slots[0];chain.count=XTC_TRACK_INSERTS;
|
||||
for(auto &slot:chain.slots){slot.enabled=1;slot.wet=.5f;}
|
||||
CHECK(window.set_track_chain(track,chain)==XTC_OK);
|
||||
auto *insert_canvas=graph_canvas(panel);auto *insert_scroll=dynamic_cast<Fl_Scroll *>(insert_canvas->parent());
|
||||
CHECK(insert_scroll && insert_canvas->w()>insert_scroll->w());
|
||||
insert_scroll->scroll_to(insert_canvas->w()-insert_scroll->w(),0);CHECK(insert_scroll->xposition()>0);
|
||||
const auto *full_before=s->project();CHECK(window.add_track_effect(track,XTC_BUILTIN_PATH,2)==XTC_ERR_CAPACITY && s->project()==full_before);
|
||||
CHECK(window.set_track_chain(track,restored_chain)==XTC_OK);
|
||||
CHECK(window.save_project("/tmp/xtc-inserts-gui.xtc")==XTC_OK && window.new_project()==XTC_OK && window.open_project("/tmp/xtc-inserts-gui.xtc")==XTC_OK);
|
||||
CHECK(xtc_project_get_chain(s->project(),track,&chain)==XTC_OK && chain.count==1);unlink("/tmp/xtc-inserts-gui.xtc");
|
||||
window.do_callback();puts("Track inserts GUI adoption/undo/rollback/reload passed.");return failures ? 1 : 0;
|
||||
|
|
|
|||
|
|
@ -83,6 +83,26 @@ with tempfile.TemporaryDirectory(prefix="xtc-inspect-") as directory:
|
|||
):
|
||||
project.write_text(malformed)
|
||||
check("--validate", project, 1)
|
||||
# V17 track-chain dependency inspection must not dlopen the readable fake module.
|
||||
for number, name, identity in ((1, "CLAP", "org.xtc.fixture"), (2, "VST2", ""),
|
||||
(3, "VST3", "0123456789abcdef0123456789abcdef")):
|
||||
chain = ("CHAINS 1\nCHAIN 0 1 3f800000\n"
|
||||
f"INSERT 1 3f800000 {number} 0 42 1 120000 {b'effect'.hex()}\n"
|
||||
f"MODULE {str(module).encode().hex()}\nIDENTITY {identity.encode().hex() if identity else '-'}\n"
|
||||
"CONTROLS 0\nPARAMETERS 0\n")
|
||||
document = base.replace("XTC_PROJECT 10", "XTC_PROJECT 17").replace(
|
||||
"END\n", "TRACK_INSTRUMENTS 0\nLIVE_INSTRUMENT 18446744073709551615\nMARKERS 0\n" + chain + "END\n")
|
||||
project.write_text(document)
|
||||
check("--inspect", project, 0, name + " insert track 0 slot 1", "no plugin code executed", "missing/unreadable: 0")
|
||||
for malformed in (document.replace("CHAIN 0 1", "CHAIN 0 9"),
|
||||
document.replace("INSERT 1 3f800000", "INSERT 1 7f800000"),
|
||||
document.replace("CHAIN 0 1", "CHAIN 99 1")):
|
||||
project.write_text(malformed)
|
||||
check("--validate", project, 1)
|
||||
project.write_text(document.replace(str(module).encode().hex(), b"/missing/effect.so".hex()))
|
||||
check("--inspect", project, 2, name + " insert track 0", "missing/unreadable: 1")
|
||||
project.write_text(document.replace("XTC_PROJECT 17", "XTC_PROJECT 16").replace(chain, ""))
|
||||
check("--validate", project, 0, "metadata valid")
|
||||
for text, messages in [
|
||||
(base.replace("XTC_PROJECT 10", "XTC_PROJECT 999"), ("line 1", "999", "1..17")),
|
||||
("XTC_PROJECT 10\n", ("line 2", "APP")),
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue