You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

114 lines
3.1KB

  1. #include "MidiEvent.h"
  2. #include "MidiSelectionModel.h"
  3. #include "MidiSequencer.h"
  4. #include "MidiSong.h"
  5. #include "MidiTrack.h"
  6. // selects a note and verifies that one event is selected
  7. static void testSelectionModel1()
  8. {
  9. MidiSelectionModelPtr sel = std::make_shared<MidiSelectionModel>();
  10. MidiSongPtr song = MidiSong::makeTest(MidiTrack::TestContent::eightQNotes, 0);
  11. MidiEventPtr evt = song->getTrack(0)->begin()->second;
  12. assert(evt);
  13. sel->select(evt);
  14. int ct = 0;
  15. for (auto it = sel->begin(); it != sel->end(); ++it) {
  16. ++ct;
  17. MidiNoteEventPtr note = safe_cast<MidiNoteEvent>(*it);
  18. assert(note);
  19. }
  20. assertEQ(ct, 1);
  21. assertEQ(sel->size(), 1);
  22. assert(_mdb > 1);
  23. }
  24. // selects a note and verifies that it is selected
  25. static void testSelectionModel2()
  26. {
  27. MidiSelectionModelPtr sel = std::make_shared<MidiSelectionModel>();
  28. MidiSongPtr song = MidiSong::makeTest(MidiTrack::TestContent::eightQNotes, 0);
  29. MidiEventPtr evt = song->getTrack(0)->begin()->second;
  30. assert(evt);
  31. sel->select(evt);
  32. assert(sel->isSelected(evt));
  33. }
  34. // selects a note and verifies that its clone is not selected
  35. static void testSelectionModel3()
  36. {
  37. MidiSelectionModelPtr sel = std::make_shared<MidiSelectionModel>();
  38. MidiSongPtr song = MidiSong::makeTest(MidiTrack::TestContent::eightQNotes, 0);
  39. MidiEventPtr evt = song->getTrack(0)->begin()->second;
  40. // make a clone of note in note2
  41. MidiNoteEventPtr note = safe_cast<MidiNoteEvent>(evt);
  42. MidiNoteEventPtr note2 = std::make_shared<MidiNoteEvent>();
  43. *note2 = *note;
  44. sel->select(evt);
  45. assert(!sel->isSelected(note2));
  46. }
  47. // selects two notes and verifies that it is selected
  48. static void testSelectionModel4()
  49. {
  50. MidiSelectionModelPtr sel = std::make_shared<MidiSelectionModel>();
  51. MidiSongPtr song = MidiSong::makeTest(MidiTrack::TestContent::eightQNotes, 0);
  52. auto it = song->getTrack(0)->begin();
  53. MidiEventPtr evt = it->second;
  54. assert(evt);
  55. sel->select(evt);
  56. ++it;
  57. MidiEventPtr evt2 = it->second;
  58. sel->extendSelection(evt2);
  59. assertEQ(sel->size(), 2);
  60. assert(sel->isSelected(evt));
  61. assert(sel->isSelected(evt2));
  62. }
  63. static void testMidiSequencer1()
  64. {
  65. MidiSongPtr song = MidiSong::makeTest(MidiTrack::TestContent::eightQNotes, 0);
  66. MidiSequencerPtr seq = std::make_shared<MidiSequencer>(song);
  67. seq->makeEditor();
  68. assert(seq->selection);
  69. auto sel = seq->selection;
  70. assert(sel->begin() == sel->end());
  71. assert(_mdb > 1);
  72. assert( seq->editor);
  73. }
  74. static void testMidiSequencer2()
  75. {
  76. MidiSongPtr song = MidiSong::makeTest(MidiTrack::TestContent::eightQNotes, 0);
  77. MidiSequencerPtr seq = std::make_shared<MidiSequencer>(song);
  78. seq->makeEditor();
  79. assert(seq->editor);
  80. assert(seq->selection);
  81. assert(seq->song);
  82. assert(seq->context);
  83. assert(seq->song->getTrack(0));
  84. }
  85. void testMidiControllers()
  86. {
  87. assertNoMidi(); // check for leaks
  88. testSelectionModel1();
  89. testSelectionModel2();
  90. testSelectionModel3();
  91. testSelectionModel4();
  92. testMidiSequencer1();
  93. testMidiSequencer2();
  94. assertNoMidi(); // check for leaks
  95. }