From 3945f1d29b5d1b3b96950bfcc3a9cc1f8fc09a2c Mon Sep 17 00:00:00 2001 From: Timur Doumler Date: Wed, 30 Nov 2016 16:54:51 +0000 Subject: [PATCH] OSC: added unit tests for round-trip correctness (receiver to sender). --- modules/juce_osc/osc/juce_OSCSender.cpp | 206 ++++++++++++++++++++++++ 1 file changed, 206 insertions(+) diff --git a/modules/juce_osc/osc/juce_OSCSender.cpp b/modules/juce_osc/osc/juce_OSCSender.cpp index 1b0e14e3d5..6caf0a026c 100644 --- a/modules/juce_osc/osc/juce_OSCSender.cpp +++ b/modules/juce_osc/osc/juce_OSCSender.cpp @@ -633,4 +633,210 @@ public: static OSCBinaryWriterTests OSCBinaryWriterUnitTests; +//============================================================================== +class OSCRoundTripTests : public UnitTest +{ +public: + OSCRoundTripTests() : UnitTest ("OSCRoundTripTests class") {} + + void runTest() + { + beginTest ("Empty OSC message"); + { + OSCMessage outMessage ("/test/empty"); + + OSCOutputStream output; + output.writeMessage (outMessage); + + OSCInputStream input (output.getData(), output.getDataSize()); + OSCMessage inMessage = input.readMessage(); + + expectEquals (inMessage.size(), 0); + } + + beginTest ("OSC message with single argument"); + { + OSCMessage outMessage ("/test/one_arg", 42); + + OSCOutputStream output; + output.writeMessage (outMessage); + + OSCInputStream input (output.getData(), output.getDataSize()); + OSCMessage inMessage = input.readMessage(); + + expectEquals (inMessage.size(), 1); + expectEquals (inMessage[0].getInt32(), 42); + } + + beginTest ("OSC message with multiple arguments"); + { + OSCMessage outMessage ("/test/four_args", 42, 0.5f, String ("foo"), String ("bar")); + + OSCOutputStream output; + output.writeMessage (outMessage); + + OSCInputStream input (output.getData(), output.getDataSize()); + OSCMessage inMessage = input.readMessage(); + + expectEquals (inMessage.size(), 4); + expectEquals (inMessage[0].getInt32(), 42); + expectEquals (inMessage[1].getFloat32(), 0.5f); + expectEquals (inMessage[2].getString(), String ("foo")); + expectEquals (inMessage[3].getString(), String ("bar")); + } + + beginTest ("Empty OSC bundle"); + { + OSCBundle outBundle; + + OSCOutputStream output; + output.writeBundle (outBundle); + + OSCInputStream input (output.getData(), output.getDataSize()); + OSCBundle inBundle = input.readBundle(); + + expectEquals (inBundle.size(), 0); + } + + beginTest ("OSC bundle with single message"); + { + OSCMessage outMessage ("/test/one_arg", 42); + OSCBundle outBundle; + outBundle.addElement (outMessage); + + OSCOutputStream output; + output.writeBundle (outBundle); + + OSCInputStream input (output.getData(), output.getDataSize()); + OSCBundle inBundle = input.readBundle(); + + expectEquals (inBundle.size(), 1); + + OSCMessage inMessage = inBundle[0].getMessage(); + + expectEquals (inMessage.getAddressPattern().toString(), String ("/test/one_arg")); + expectEquals (inMessage.size(), 1); + expectEquals (inMessage[0].getInt32(), 42); + } + + beginTest ("OSC bundle with multiple messages"); + { + OSCMessage outMessage1 ("/test/empty"); + OSCMessage outMessage2 ("/test/one_arg", 42); + OSCMessage outMessage3 ("/test/four_args", 42, 0.5f, String ("foo"), String ("bar")); + + OSCBundle outBundle; + outBundle.addElement (outMessage1); + outBundle.addElement (outMessage2); + outBundle.addElement (outMessage3); + + OSCOutputStream output; + output.writeBundle (outBundle); + + OSCInputStream input (output.getData(), output.getDataSize()); + OSCBundle inBundle = input.readBundle(); + + expectEquals (inBundle.size(), 3); + + { + OSCMessage inMessage = inBundle[0].getMessage(); + + expectEquals (inMessage.getAddressPattern().toString(), String ("/test/empty")); + expectEquals (inMessage.size(), 0); + } + { + OSCMessage inMessage = inBundle[1].getMessage(); + + expectEquals (inMessage.getAddressPattern().toString(), String ("/test/one_arg")); + expectEquals (inMessage.size(), 1); + expectEquals (inMessage[0].getInt32(), 42); + } + { + OSCMessage inMessage = inBundle[2].getMessage(); + + expectEquals (inMessage.getAddressPattern().toString(), String ("/test/four_args")); + expectEquals (inMessage.size(), 4); + expectEquals (inMessage[0].getInt32(), 42); + expectEquals (inMessage[1].getFloat32(), 0.5f); + expectEquals (inMessage[2].getString(), String ("foo")); + expectEquals (inMessage[3].getString(), String ("bar")); + } + } + + beginTest ("OSC bundle containing another bundle"); + { + OSCBundle outBundleNested; + outBundleNested.addElement (OSCMessage ("/test/one_arg", 42)); + + OSCBundle outBundle; + outBundle.addElement (outBundleNested); + + OSCOutputStream output; + output.writeBundle (outBundle); + + OSCInputStream input (output.getData(), output.getDataSize()); + OSCBundle inBundle = input.readBundle(); + + expectEquals (inBundle.size(), 1); + expect (inBundle[0].isBundle()); + OSCBundle inBundleNested = inBundle[0].getBundle(); + expectEquals (inBundleNested.size(), 1); + expect (inBundleNested[0].isMessage()); + + OSCMessage msg = inBundleNested[0].getMessage(); + + expectEquals (msg.getAddressPattern().toString(), String ("/test/one_arg")); + expectEquals (msg.size(), 1); + expectEquals (msg[0].getInt32(), 42); + } + + beginTest ("OSC bundle containing multiple other bundles"); + { + OSCBundle outBundleNested1; + outBundleNested1.addElement (OSCMessage ("/test/empty")); + OSCBundle outBundleNested2; + outBundleNested2.addElement (OSCMessage ("/test/one_arg", 42)); + + OSCBundle outBundle; + outBundle.addElement (outBundleNested1); + outBundle.addElement (outBundleNested2); + + OSCOutputStream output; + output.writeBundle (outBundle); + + OSCInputStream input (output.getData(), output.getDataSize()); + OSCBundle inBundle = input.readBundle(); + + expectEquals (inBundle.size(), 2); + + { + expect (inBundle[0].isBundle()); + OSCBundle inBundleNested = inBundle[0].getBundle(); + expectEquals (inBundleNested.size(), 1); + expect (inBundleNested[0].isMessage()); + + OSCMessage msg = inBundleNested[0].getMessage(); + + expectEquals (msg.getAddressPattern().toString(), String ("/test/empty")); + expectEquals (msg.size(), 0); + } + { + expect (inBundle[1].isBundle()); + OSCBundle inBundleNested = inBundle[1].getBundle(); + expectEquals (inBundleNested.size(), 1); + expect (inBundleNested[0].isMessage()); + + OSCMessage msg = inBundleNested[0].getMessage(); + + expectEquals (msg.getAddressPattern().toString(), String ("/test/one_arg")); + expectEquals (msg.size(), 1); + expectEquals (msg[0].getInt32(), 42); + } + } + } +}; + +static OSCRoundTripTests OSCRoundTripUnitTests; + +//============================================================================== #endif // JUCE_UNIT_TESTS