59 if (
other.isMessage())
76 return message !=
nullptr;
81 return bundle !=
nullptr;
87 if (message ==
nullptr)
100 if (bundle ==
nullptr)
119 :
UnitTest (
"OSCBundle class", UnitTestCategories::osc)
122 void runTest()
override
124 beginTest (
"Construction");
130 beginTest (
"Construction with time tag");
132 Time in100Seconds = (Time (Time::currentTimeMillis()) + RelativeTime (100.0));
133 OSCBundle bundle (in100Seconds);
134 expect (! bundle.getTimeTag().isImmediately());
135 expect (bundle.getTimeTag().toTime() == in100Seconds);
138 beginTest (
"Usage when containing messages");
140 OSCBundle testBundle = generateTestBundle();
141 expectBundleEqualsTestBundle (testBundle);
145 beginTest (
"Usage when containing other bundles (recursively)");
147 OSCBundle complexTestBundle;
148 complexTestBundle.addElement (generateTestBundle());
149 complexTestBundle.addElement (OSCMessage (
"/test/"));
150 complexTestBundle.addElement (generateTestBundle());
152 expect (complexTestBundle.size() == 3);
154 OSCBundle::Element* elements = complexTestBundle.begin();
156 expect (! elements[0].isMessage());
157 expect (elements[0].isBundle());
158 expect (elements[1].isMessage());
159 expect (! elements[1].isBundle());
160 expect (! elements[2].isMessage());
161 expect (elements[2].isBundle());
163 expectBundleEqualsTestBundle (elements[0].getBundle());
164 expect (elements[1].getMessage().
size() == 0);
165 expect (elements[1].getMessage().getAddressPattern().
toString() ==
"/test");
166 expectBundleEqualsTestBundle (elements[2].getBundle());
173 float testFloat = 1.5;
175 OSCBundle generateTestBundle()
179 OSCMessage msg1 (
"/test/fader");
180 msg1.addInt32 (testInt);
182 OSCMessage msg2 (
"/test/foo");
183 msg2.addString (
"bar");
184 msg2.addFloat32 (testFloat);
186 bundle.addElement (msg1);
187 bundle.addElement (msg2);
192 void expectBundleEqualsTestBundle (
const OSCBundle& bundle)
194 expect (bundle.size() == 2);
195 expect (bundle[0].isMessage());
196 expect (! bundle[0].isBundle());
197 expect (bundle[1].isMessage());
198 expect (! bundle[1].isBundle());
200 int numElementsCounted = 0;
201 for (
auto& element : bundle)
203 expect (element.isMessage());
204 expect (! element.isBundle());
205 ++numElementsCounted;
207 expectEquals (numElementsCounted, 2);
209 auto* e = bundle.begin();
210 expect (e[0].getMessage().
size() == 1);
211 expect (e[0].getMessage().
begin()->getInt32() == testInt);
212 expect (e[1].getMessage().
size() == 2);
213 expectEquals (e[1].getMessage()[1].getFloat32(), testFloat);
223 OSCBundleElementTests()
224 : UnitTest (
"OSCBundle::Element class", UnitTestCategories::osc)
227 void runTest()
override
229 beginTest (
"Construction from OSCMessage");
231 float testFloat = -0.125;
232 OSCMessage msg (
"/test");
233 msg.addFloat32 (testFloat);
235 OSCBundle::Element element (msg);
237 expect (element.isMessage());
238 expect (element.getMessage().size() == 1);
239 expect (element.getMessage()[0].getType() == OSCTypes::float32);
240 expectEquals (element.getMessage()[0].getFloat32(), testFloat);
bool isBundle() const noexcept
Returns true if the OSCBundle element is an OSCBundle.
bool isMessage() const noexcept
Returns true if the OSCBundle element is an OSCMessage.
Element(OSCMessage message)
Constructs an OSCBundle Element from an OSCMessage.
const OSCMessage & getMessage() const
Returns a reference to the contained OSCMessage.
const OSCBundle & getBundle() const
Returns a reference to the contained OSCBundle.
OSCTimeTag getTimeTag() const noexcept
Returns the OSCBundle's OSC time tag.
OSCBundle()
Constructs an OSCBundle with no content and a default time tag ("immediately").
This is a base class for classes that perform a unit test.
Type unalignedPointerCast(void *ptr) noexcept
Casts a pointer to another type via void*, which suppresses the cast-align warning which sometimes ar...
std::u16string toString(NumberT value)
convert an number to an UTF-16 string
Exception type thrown in cases of unexpected errors in the OSC module.