Phase 17: add undoable duplication, naming, ordering and timeline commands
This commit is contained in:
parent
7fac0a4f6a
commit
440e98f2b5
10 changed files with 231 additions and 5 deletions
|
|
@ -457,6 +457,28 @@ int main(int argc, char **argv)
|
|||
window.do_callback();
|
||||
}
|
||||
CHECK(alive == 0U);
|
||||
reset();
|
||||
{
|
||||
MainWindow window(false); auto *s = timeline(&window);
|
||||
CHECK(s->add_track() == XTC_OK && s->rename_selection("Keys") == XTC_OK);
|
||||
CHECK(s->add_region() == XTC_OK && s->rename_selection("Verse") == XTC_OK);
|
||||
CHECK(s->grid(120) == XTC_OK && s->grid() == 120 && s->grid(0) == XTC_ERR_INVALID_ARGUMENT);
|
||||
CHECK(s->handle(FL_FOCUS) == 1);
|
||||
int old_key = Fl::e_keysym, old_state = Fl::e_state;
|
||||
Fl::e_keysym = 'd'; Fl::e_state = FL_CTRL;
|
||||
CHECK(s->handle(FL_KEYDOWN) == 1);
|
||||
Fl::e_keysym = old_key; Fl::e_state = old_state;
|
||||
size_t tracks, clips; xtc_project_get_counts(s->project(),&tracks,&clips);
|
||||
CHECK(clips == 2);
|
||||
xtc_clip_info c{}; CHECK(xtc_project_get_clip(s->project(),1,&c) == XTC_OK && c.start_tick == 3840 && !std::strcmp(c.name,"Verse"));
|
||||
CHECK(window.undo(false) == XTC_OK); xtc_project_get_counts(s->project(),&tracks,&clips); CHECK(clips == 1);
|
||||
CHECK(window.undo(true) == XTC_OK); xtc_project_get_counts(s->project(),&tracks,&clips); CHECK(clips == 2);
|
||||
CHECK(s->add_track() == XTC_OK && s->rename_selection("Bass") == XTC_OK && s->move_track(-1) == XTC_OK);
|
||||
xtc_track_info t{}; CHECK(xtc_project_get_track(s->project(),0,&t) == XTC_OK && !std::strcmp(t.name,"Bass"));
|
||||
CHECK(window.undo(false) == XTC_OK);
|
||||
CHECK(xtc_project_get_track(s->project(),0,&t) == XTC_OK && !std::strcmp(t.name,"Keys"));
|
||||
window.do_callback();
|
||||
}
|
||||
if (const char *module = std::getenv("XTC_TEST_PLUGIN")) {
|
||||
reset();
|
||||
MainWindow window(false);
|
||||
|
|
|
|||
42
tests/unit/test_editing.c
Normal file
42
tests/unit/test_editing.c
Normal file
|
|
@ -0,0 +1,42 @@
|
|||
#include "xtc/xtc_midi.h"
|
||||
#include "xtc/xtc_mixer.h"
|
||||
#include <assert.h>
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
int main(void)
|
||||
{
|
||||
xtc_project *p = NULL, *undo = NULL; xtc_history *h = NULL;
|
||||
uint64_t track, second, clip, duplicate, note; size_t notes, tracks, clips;
|
||||
xtc_clip_info c; xtc_note_info n, original;
|
||||
assert(xtc_project_create(&p) == XTC_OK);
|
||||
assert(xtc_project_add_track(p,"Keys",&track) == XTC_OK && xtc_project_add_track(p,"Bass",&second) == XTC_OK);
|
||||
assert(xtc_project_add_midi_clip(p,track,0,3840,&clip) == XTC_OK);
|
||||
assert(xtc_project_add_note(p,clip,0,960,69,100,1,¬e) == XTC_OK);
|
||||
assert(xtc_project_edit_clip(p,clip,track,960,1920,960) == XTC_OK);
|
||||
assert(xtc_project_get_note(p,0,&original) == XTC_OK);
|
||||
assert(xtc_history_create(p,&h) == XTC_OK);
|
||||
assert(xtc_project_duplicate_clip(p,clip,second,3840,&duplicate) == XTC_OK && duplicate != clip);
|
||||
assert(xtc_project_find_clip(p,duplicate,&c) == XTC_OK && c.offset_tick == 960 && c.source_length_tick == 3840 && c.midi);
|
||||
assert(xtc_project_get_note(p,1,&n) == XTC_OK && n.clip_id == duplicate && n.id != original.id && n.start_tick == original.start_tick);
|
||||
assert(xtc_project_rename_clip(p,duplicate,"Chorus ä") == XTC_OK);
|
||||
assert(xtc_project_rename_track(p,second,"Bass 2") == XTC_OK);
|
||||
assert(xtc_project_move_track(p,second,0) == XTC_OK);
|
||||
assert(xtc_history_record(h,p) == XTC_OK && xtc_history_checkout(h,0,&undo) == XTC_OK);
|
||||
assert(xtc_project_find_clip(undo,duplicate,&c) == XTC_ERR_NOT_FOUND);
|
||||
assert(xtc_project_get_counts(undo,&tracks,&clips) == XTC_OK && clips == 1);
|
||||
xtc_project_destroy(undo);
|
||||
assert(xtc_project_duplicate_clip(p,clip,track,XTC_PROJECT_MAX_TICK,&duplicate) == XTC_ERR_INVALID_ARGUMENT);
|
||||
assert(xtc_project_rename_track(p,track,"Bad\n") == XTC_ERR_INVALID_ARGUMENT);
|
||||
assert(xtc_project_clone(p,&undo) == XTC_OK);
|
||||
xtc_project_destroy(undo);
|
||||
for (;;) {
|
||||
assert(xtc_project_note_count(p,¬es) == XTC_OK);
|
||||
if (notes == XTC_PROJECT_MAX_NOTES) break;
|
||||
assert(xtc_project_add_note(p,clip,0,1,60,100,0,¬e) == XTC_OK);
|
||||
}
|
||||
assert(xtc_project_duplicate_clip(p,clip,track,0,&duplicate) == XTC_ERR_CAPACITY);
|
||||
assert(xtc_project_get_counts(p,&tracks,&clips) == XTC_OK && clips == 2);
|
||||
xtc_history_destroy(h); xtc_project_destroy(p);
|
||||
puts("Duplicate source notes/trim, naming/order, undo and capacity rollback passed.");
|
||||
return 0;
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue