c2-utopia/lib/OSC/test/OSCBundle_test/OSCBundle_test.ino

124 lines
3.3 KiB
C++

#include <ArduinoUnit.h>
#include <OSCBundle.h>
#include "TestPrint.h"
#define HAS_DOUBLE sizeof(double) == 8
test(bundle_address){
OSCBundle bundle;
bundle.add("/address").add(1);
assertEqual(bundle.size(), 1);
OSCMessage msg = bundle.getOSCMessage("/address");
assertTrue(msg.isInt(0));
assertEqual(msg.getInt(0), 1);
}
test(bundle_message_position){
OSCBundle bundle;
bundle.add("/one").add(1);
bundle.add("/two").add(2);
assertEqual(bundle.size(), 2);
OSCMessage msg0 = bundle.getOSCMessage(0);
assertTrue(msg0.isInt(0));
assertEqual(msg0.getInt(0), 1);
OSCMessage msg1 = bundle.getOSCMessage(1);
assertTrue(msg1.isInt(0));
assertEqual(msg1.getInt(0), 2);
}
test(bundle_add_message){
OSCMessage msg("/msg");
OSCBundle bundle;
bundle.add(msg).add(1);
assertEqual(bundle.size(), 1);
OSCMessage test_msg = bundle.getOSCMessage(0);
assertTrue(test_msg.isInt(0));
assertEqual(test_msg.getInt(0), 1);
}
void routeA(OSCMessage & msg, int offset){
assertTrue(msg.isInt(0));
assertEqual(msg.getInt(0), 1);
}
void routeB(OSCMessage & msg, int offset){
assertTrue(msg.isInt(0));
assertEqual(msg.getInt(0), 2);
}
test(bundle_route){
OSCMessage msg("/msg");
OSCBundle bundle;
bundle.add("/a").add(1);
bundle.add("/b/1").add(2);
assertEqual(bundle.size(), 2);
assertTrue(bundle.route("/a", routeA));
assertTrue(bundle.route("/b", routeB));
}
void dispatchA(OSCMessage & msg){
assertTrue(msg.isInt(0));
assertEqual(msg.getInt(0), 1);
}
void dispatchB(OSCMessage & msg){
assertTrue(msg.isInt(0));
assertEqual(msg.getInt(0), 2);
}
test(bundle_dispatch){
OSCMessage msg("/msg");
OSCBundle bundle;
bundle.add("/a").add(1);
bundle.add("/b").add(2);
assertEqual(bundle.size(), 2);
assertTrue(bundle.route("/a", routeA));
assertTrue(bundle.route("/b", routeB));
}
test(bundle_encode){
TestPrint printer;
//this is the desired output
uint8_t testBuffer[] = {35, 98, 117, 110, 100, 108, 101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 47, 97, 0, 0, 44, 105, 0, 0, 0, 0, 0, 1, 0, 0, 0, 12, 47, 98, 0, 0, 44, 105, 0, 0, 0, 0, 0, 2};
OSCBundle bundle;
bundle.add("/a").add(1);
bundle.add("/b").add(2);
bundle.send(printer);
assertEqual(printer.size(), sizeof(testBuffer));
for (int i = 0; i < sizeof(testBuffer); i++){
assertEqual(testBuffer[i], printer.at(i));
}
}
test(bundle_decode){
uint8_t testBuffer[] = {35, 98, 117, 110, 100, 108, 101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 47, 97, 0, 0, 44, 105, 0, 0, 0, 0, 0, 1, 0, 0, 0, 12, 47, 98, 0, 0, 44, 105, 0, 0, 0, 0, 0, 2};
OSCBundle bundle;
bundle.fill(testBuffer, sizeof(testBuffer));
assertEqual(bundle.size(), 2);
OSCMessage msgA = bundle.getOSCMessage("/a");
assertTrue(msgA.isInt(0));
assertEqual(msgA.getInt(0), 1);
OSCMessage msgB = bundle.getOSCMessage("/b");
assertTrue(msgB.isInt(0));
assertEqual(msgB.getInt(0), 2);
}
test(bundle_decode_invalid){
uint8_t testBuffer[] = {35, 98, 117, 110, 100, 108, 101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 47, 97, 0, 0, 44, 105, 0, 0, 0, 0, 0, 1, 0, 0, 0, 12, 47, 98, 0, 0, 44, 105, 0, 0, 0, 0, 2};
OSCBundle bundle;
bundle.fill(testBuffer, sizeof(testBuffer));
assertTrue(bundle.hasError());
}
void setup()
{
Serial.begin(9600);
while(!Serial); // for the Arduino Leonardo/Micro only
}
void loop()
{
Test::run();
}