diff --git a/res/Examples/MIDI_LibValidator/MIDI_LibValidator.ino b/res/Examples/MIDI_LibValidator/MIDI_LibValidator.ino index 99821c2..f82ecf3 100644 --- a/res/Examples/MIDI_LibValidator/MIDI_LibValidator.ino +++ b/res/Examples/MIDI_LibValidator/MIDI_LibValidator.ino @@ -16,7 +16,6 @@ void setup() setupSerialDebug(); setupLCD(); setupLEDs(); - setupMidiInstances(); setupTesters(); } @@ -24,5 +23,14 @@ void setup() void loop() { - launchTests(); + if (launchTests() == true) + { + setLedsFinal(true); + Serial.println("All tests passed."); + } + else + { + setLedsFinal(false); + Serial.println("Some tests failed!"); + } } diff --git a/res/Examples/MIDI_LibValidator/midi_ValidatorInstances.h b/res/Examples/MIDI_LibValidator/midi_ValidatorInstances.h index 21a2bb9..ebf8c99 100644 --- a/res/Examples/MIDI_LibValidator/midi_ValidatorInstances.h +++ b/res/Examples/MIDI_LibValidator/midi_ValidatorInstances.h @@ -6,5 +6,3 @@ extern midi::MidiInterface midiHW; extern midi::MidiInterface midiSW; - -void setupMidiInstances(); diff --git a/res/Examples/MIDI_LibValidator/midi_ValidatorInstances.ino b/res/Examples/MIDI_LibValidator/midi_ValidatorInstances.ino index 565f771..16c94c5 100644 --- a/res/Examples/MIDI_LibValidator/midi_ValidatorInstances.ino +++ b/res/Examples/MIDI_LibValidator/midi_ValidatorInstances.ino @@ -15,20 +15,3 @@ SoftwareSerial softSerial(2, 3); // \todo Create instance for USB if available -// ----------------------------------------------------------------------------- - -template -void setupMidiInstance(MIDI_CLASS(SerialClass)& inInstance) -{ - inInstance.begin(MIDI_CHANNEL_OMNI); - inInstance.turnThruOff(); -} - -// ----------------------------------------------------------------------------- - -void setupMidiInstances() -{ - setupMidiInstance(midiHW); - setupMidiInstance(midiSW); -} - diff --git a/res/Examples/MIDI_LibValidator/midi_ValidatorSerialDebug.h b/res/Examples/MIDI_LibValidator/midi_ValidatorSerialDebug.h index 717923a..1d8c3c0 100644 --- a/res/Examples/MIDI_LibValidator/midi_ValidatorSerialDebug.h +++ b/res/Examples/MIDI_LibValidator/midi_ValidatorSerialDebug.h @@ -1,5 +1,3 @@ #pragma once void setupSerialDebug(); - -void print(const char* inString); diff --git a/res/Examples/MIDI_LibValidator/midi_ValidatorSerialDebug.ino b/res/Examples/MIDI_LibValidator/midi_ValidatorSerialDebug.ino index f2eb443..13153ad 100644 --- a/res/Examples/MIDI_LibValidator/midi_ValidatorSerialDebug.ino +++ b/res/Examples/MIDI_LibValidator/midi_ValidatorSerialDebug.ino @@ -5,8 +5,3 @@ void setupSerialDebug() Serial.begin(38400); } -void print(const char* inString) -{ - Serial.println(inString); -} - diff --git a/res/Examples/MIDI_LibValidator/midi_ValidatorTester.h b/res/Examples/MIDI_LibValidator/midi_ValidatorTester.h index 300f7c1..e6eceea 100644 --- a/res/Examples/MIDI_LibValidator/midi_ValidatorTester.h +++ b/res/Examples/MIDI_LibValidator/midi_ValidatorTester.h @@ -1,4 +1,7 @@ #pragma once void setupTesters(); -void launchTests(); +bool launchTests(); + + + diff --git a/res/Examples/MIDI_LibValidator/midi_ValidatorTester.ino b/res/Examples/MIDI_LibValidator/midi_ValidatorTester.ino index 64e0b0f..8af8984 100644 --- a/res/Examples/MIDI_LibValidator/midi_ValidatorTester.ino +++ b/res/Examples/MIDI_LibValidator/midi_ValidatorTester.ino @@ -1,140 +1,92 @@ #include "midi_ValidatorTester.h" #include "midi_ValidatorInstances.h" -/* -// ----------------------------------------------------------------------------- - -BEGIN_MIDI_NAMESPACE - -template -class TestFixture -{ -public: - typedef const char* String; - typedef bool (*Functor) (MidiInterface&); - -public: - TestFixture(String inTestName, - Functor inFunctor) - : mTestName(inTestName) - , mFunctor(inFunctor) - { - } - -public: - inline bool operator() (void) - { - return mFunctor(); - } - - inline String getName() const - { - return mTestName; - } - -private: - String mTestName; - Functor mFunctor; -}; +#include "midi_ValidatorTests.h" // ----------------------------------------------------------------------------- template -class MidiTester +class Tester { +public: + typedef bool (*Functor) (MIDI_CLASS(SerialClass)&); + public: - explicit MidiTester(MidiInterface& inInstance) - : mInstance(inInstance) + explicit Tester(MIDI_CLASS(SerialClass)& inInstance) + : mMidiInstance(inInstance) + , mProgress(0) { } - virtual ~MidiTester() + void setup() { + mProgress = 0; + mMidiInstance.begin(MIDI_CHANNEL_OMNI); + mMidiInstance.turnThruOff(); } public: - inline bool performTestFixture(TestFixture* inFixture) + inline bool performTest(Functor inTestMethod) { - if (inFixture != 0) + if (inTestMethod != 0) { - return (*inFixture)(); + const bool result = expect((*inTestMethod)(mMidiInstance)); + setProgressBar(++mProgress, NUM_TESTS); + return result; } return false; } inline bool expect(bool inCondition) const { + Serial.print(testNames[mProgress]); + Serial.print(": "); if (inCondition == false) + { + Serial.println("Failed! /!\\"); blinkFail(); + } else + { + Serial.println("Passed."); blinkPass(); + } return inCondition; } -public: - inline void registerTest(TestFixture* inFixture) + bool run() { - mTests[mNumActiveTests++] = inFixture; - } - - bool runTests() - { - for (unsigned i = 0; i < mNumActiveTests; ++i) - { - if (mTests[i] != 0) - { - if (expect(performTestFixture(mTests[i]) == false)) - { - // \todo Display message - // \todo Store error number and continue. - return false; - } - } - setProgressBar(i, mNumActiveTests); - } - return true; + performTest(testNoteOn); + performTest(testNoteOff); + performTest(testControlChange); + performTest(testProgramChange); } private: - MidiInterface& mInstance; - TestFixture* mTests[NUM_TESTS]; - unsigned mNumActiveTests; + MIDI_CLASS(SerialClass)& mMidiInstance; + unsigned mProgress; }; // ----------------------------------------------------------------------------- -template -bool testNoteOn(MIDI_CLASS(SerialClass)& inMidi) -{ - inMidi.sendNoteOn(12, 42); - return true; -} +Tester testerHW(midiHW); +Tester testerSW(midiSW); // ----------------------------------------------------------------------------- -END_MIDI_NAMESPACE - -midi::MidiTester testerHW(midiHW); -midi::MidiTester testerSW(midiSW); - -// ----------------------------------------------------------------------------- - -template -void setupTester(MIDI_CLASS(SerialClass)& inTester) -{ - inTester.registerTest(new midi::TestFixture("Note On", midi::testNoteOn)); -} - -// ----------------------------------------------------------------------------- -*/ void setupTesters() { - //setupTester(testerHW); - //setupTester(testerSW); + testerHW.setup(); + testerSW.setup(); } -void launchTests() +bool launchTests() { - //testerHW.runTests(); - //testerSW.runTests(); + Serial.println("Testing HW:"); + if (testerHW.run() == false) + return false; + Serial.println("Testing SW:"); + if (testerSW.run() == false) + return false; + return true; } diff --git a/res/Examples/MIDI_LibValidator/midi_ValidatorTests.h b/res/Examples/MIDI_LibValidator/midi_ValidatorTests.h new file mode 100644 index 0000000..3979af2 --- /dev/null +++ b/res/Examples/MIDI_LibValidator/midi_ValidatorTests.h @@ -0,0 +1,34 @@ +#pragma once + +// ----------------------------------------------------------------------------- + +#define NUM_TESTS 4 + +// ----------------------------------------------------------------------------- + +#define DECLARE_MIDI_TEST(Name) \ + template \ + bool Name(MIDI_CLASS(SerialClass)& inMidi) + +#define IMPLEMENT_MIDI_TEST(Name, Instance) \ + template \ + bool Name(MIDI_CLASS(SerialClass)& Instance) + +// ----------------------------------------------------------------------------- + +static const char * testNames[] = +{ + // 0123456789ABCDEF + "NoteOn ", + "NoteOff ", + "ControlChange ", + "ProgramChange ", + +}; + +// ----------------------------------------------------------------------------- + +DECLARE_MIDI_TEST(testNoteOn); +DECLARE_MIDI_TEST(testNoteOff); +DECLARE_MIDI_TEST(testControlChange); +DECLARE_MIDI_TEST(testProgramChange); diff --git a/res/Examples/MIDI_LibValidator/midi_ValidatorTests.ino b/res/Examples/MIDI_LibValidator/midi_ValidatorTests.ino new file mode 100644 index 0000000..b4224b5 --- /dev/null +++ b/res/Examples/MIDI_LibValidator/midi_ValidatorTests.ino @@ -0,0 +1,52 @@ + +#include "midi_ValidatorTests.h" + +// ----------------------------------------------------------------------------- + +IMPLEMENT_MIDI_TEST(testNoteOn, inMidi) +{ + inMidi.sendNoteOn(12, 42, 3); + while (inMidi.read() == false) { } + + bool result = inMidi.getType() == midi::NoteOn && + inMidi.getData1() == 12 && + inMidi.getData2() == 42 && + inMidi.getChannel() == 3; + return result; +} + +IMPLEMENT_MIDI_TEST(testNoteOff, inMidi) +{ + inMidi.sendNoteOff(12, 42, 3); + while (inMidi.read() == false) { } + + bool result = inMidi.getType() == midi::NoteOff && + inMidi.getData1() == 12 && + inMidi.getData2() == 42 && + inMidi.getChannel() == 3; + return result; +} + +IMPLEMENT_MIDI_TEST(testControlChange, inMidi) +{ + inMidi.sendControlChange(12, 42, 3); + while (inMidi.read() == false) { } + + bool result = inMidi.getType() == midi::ControlChange && + inMidi.getData1() == 12 && + inMidi.getData2() == 42 && + inMidi.getChannel() == 3; + return result; +} + +IMPLEMENT_MIDI_TEST(testProgramChange, inMidi) +{ + inMidi.sendProgramChange(12, 3); + while (inMidi.read() == false) { } + + bool result = inMidi.getType() == midi::ProgramChange && + inMidi.getData1() == 12 && + inMidi.getData2() == 42 && + inMidi.getChannel() == 3; + return result; +}