summaryrefslogtreecommitdiffstats
path: root/src/test/segmenttransposecommand.cpp
diff options
context:
space:
mode:
authortpearson <tpearson@283d02a7-25f6-0310-bc7c-ecb5cbfe19da>2010-03-01 18:37:05 +0000
committertpearson <tpearson@283d02a7-25f6-0310-bc7c-ecb5cbfe19da>2010-03-01 18:37:05 +0000
commit145364a8af6a1fec06556221e66d4b724a62fc9a (patch)
tree53bd71a544008c518034f208d64c932dc2883f50 /src/test/segmenttransposecommand.cpp
downloadrosegarden-145364a8af6a1fec06556221e66d4b724a62fc9a.tar.gz
rosegarden-145364a8af6a1fec06556221e66d4b724a62fc9a.zip
Added old abandoned KDE3 version of the RoseGarden MIDI tool
git-svn-id: svn://anonsvn.kde.org/home/kde/branches/trinity/applications/rosegarden@1097595 283d02a7-25f6-0310-bc7c-ecb5cbfe19da
Diffstat (limited to 'src/test/segmenttransposecommand.cpp')
-rw-r--r--src/test/segmenttransposecommand.cpp161
1 files changed, 161 insertions, 0 deletions
diff --git a/src/test/segmenttransposecommand.cpp b/src/test/segmenttransposecommand.cpp
new file mode 100644
index 0000000..0025529
--- /dev/null
+++ b/src/test/segmenttransposecommand.cpp
@@ -0,0 +1,161 @@
+// -*- c-basic-offset: 4 -*-
+
+#include "commands/segment/SegmentTransposeCommand.h"
+#include "base/NotationTypes.h"
+#include "base/Segment.h"
+#include "base/Selection.h"
+
+using namespace Rosegarden;
+using std::cout;
+
+/**
+ * Bb in Bb major became E# in F major, due to segment
+ * transposition
+ *
+ * Should be F
+ */
+int testSegmentBbtoF()
+{
+ Segment * segment1 = new Segment();
+ Note * n = new Note(Note::QuarterNote);
+ Event * bes = n->getAsNoteEvent(1, 10);
+ segment1->insert(bes);
+ segment1->insert(Key("Bb major").getAsEvent(0));
+ SegmentTransposeCommand * mockCommand =
+ new SegmentTransposeCommand(*segment1,
+ true, -3, -5, true);
+ mockCommand->execute();
+
+ EventSelection m_selection(*segment1, segment1->getStartTime(), segment1->getEndMarkerTime());
+ EventSelection::eventcontainer::iterator i;
+ for (i = m_selection.getSegmentEvents().begin();
+ i != m_selection.getSegmentEvents().end(); ++i) {
+ if ((*i)->isa(Note::EventType)) {
+ Pitch resultPitch(**i);
+ std::cout << "Resulting pitch is: " << resultPitch.getPerformancePitch() << std::endl;
+ std::cout << "accidental: " << resultPitch.getDisplayAccidental(Key("F major")) << std::endl;
+ std::cout << "DisplayAccidental: " << resultPitch.getDisplayAccidental(Key("F major")) << std::endl;
+ if (resultPitch.getDisplayAccidental(Key("F major")) != Accidentals::NoAccidental)
+ {
+ return -1;
+ }
+ }
+ }
+
+ return 0;
+}
+
+/**
+ * G# in E major became Bb in F major, due to segment
+ * transposition (by using the 'segment transposition' combobox)
+ *
+ * Should be A#
+ */
+int testGistoAis()
+{
+ Segment * segment1 = new Segment();
+ Note * n = new Note(Note::QuarterNote);
+ Event * gis = n->getAsNoteEvent(1, 8);
+ segment1->insert(gis);
+ segment1->insert(Key("E major").getAsEvent(0));
+ SegmentTransposeCommand * mockCommand =
+ new SegmentTransposeCommand(*segment1,
+ true, 1, 2, true);
+ mockCommand->execute();
+
+ EventSelection m_selection(*segment1, segment1->getStartTime(), segment1->getEndMarkerTime());
+ EventSelection::eventcontainer::iterator i;
+ for (i = m_selection.getSegmentEvents().begin();
+ i != m_selection.getSegmentEvents().end(); ++i) {
+ if ((*i)->isa(Note::EventType)) {
+ Pitch resultPitch(**i);
+ std::cout << "Resulting pitch is: " << resultPitch.getPerformancePitch() << std::endl;
+ std::cout << "accidental: " << resultPitch.getDisplayAccidental(Key("F# major")) << std::endl;
+ std::cout << "DisplayAccidental: " << resultPitch.getDisplayAccidental(Key("F# major")) << std::endl;
+ if (resultPitch.getDisplayAccidental(Key("F# major")) != Accidentals::NoAccidental)
+ {
+ std::cout << "Gis in E major does not become A#-in-F#-major (no-accidental) when transposed upwards by a small second" << std::endl;
+ return -1;
+ }
+ }
+ }
+
+ return 0;
+}
+
+/**
+ * A C# in the key of C# major somehow became a B# in the key of C
+ */
+int testSegmentCisToC()
+{
+ Segment * segment1 = new Segment();
+ Note * n = new Note(Note::QuarterNote);
+ Event * cis = n->getAsNoteEvent(1, 13);
+ segment1->insert(cis);
+ segment1->insert(Key("C# major").getAsEvent(0));
+ SegmentTransposeCommand * mockCommand =
+ new SegmentTransposeCommand(*segment1,
+ true, 0, -1, true);
+ mockCommand->execute();
+
+ EventSelection m_selection(*segment1, segment1->getStartTime(), segment1->getEndMarkerTime());
+ EventSelection::eventcontainer::iterator i;
+ for (i = m_selection.getSegmentEvents().begin();
+ i != m_selection.getSegmentEvents().end(); ++i) {
+ if ((*i)->isa(Note::EventType)) {
+ Pitch resultPitch(**i);
+ std::cout << "Resulting pitch is: " << resultPitch.getPerformancePitch() << std::endl;
+ std::cout << "accidental: " << resultPitch.getDisplayAccidental(Key("C major")) << std::endl;
+ std::cout << "DisplayAccidental: " << resultPitch.getDisplayAccidental(Key("C major")) << std::endl;
+ if (resultPitch.getDisplayAccidental(Key("C major")) != Accidentals::NoAccidental)
+ {
+ std::cout << "C# in C# major does not lose accidental when transposed downwards by 1 semitone" << std::endl;
+ return -1;
+ }
+ }
+ }
+
+ return 0;
+}
+
+int testUndo()
+{
+ Segment * segment1 = new Segment();
+ Segment * segment2 = new Segment();
+
+ // transpose once
+ SegmentTransposeCommand * mockCommand1a =
+ new SegmentTransposeCommand(*segment1,
+ true, -1, -2, true);
+ mockCommand1a->execute();
+ SegmentTransposeCommand * mockCommand1b =
+ new SegmentTransposeCommand(*segment2,
+ true, -1, -2, true);
+ mockCommand1b->execute();
+
+ // transpose twice
+ SegmentTransposeCommand * mockCommand2a =
+ new SegmentTransposeCommand(*segment1,
+ true, -1, -2, true);
+ mockCommand2a->execute();
+ SegmentTransposeCommand * mockCommand2b =
+ new SegmentTransposeCommand(*segment2,
+ true, -1, -2, true);
+ mockCommand2b->execute();
+
+ mockCommand2b->unexecute();
+ mockCommand2a->unexecute();
+ mockCommand1b->unexecute();
+ mockCommand1a->unexecute();
+
+ return 0;
+}
+
+int test_segmenttransposecommand(int argc, char** argv)
+{
+ return
+ testGistoAis() +
+ testSegmentCisToC() +
+ testUndo() +
+ testSegmentBbtoF();
+}