tomwalters@570
|
1 /*
|
tomwalters@570
|
2 oscpack -- Open Sound Control packet manipulation library
|
tomwalters@570
|
3 http://www.audiomulch.com/~rossb/oscpack
|
tomwalters@570
|
4
|
tomwalters@570
|
5 Copyright (c) 2004-2005 Ross Bencina <rossb@audiomulch.com>
|
tomwalters@570
|
6
|
tomwalters@570
|
7 Permission is hereby granted, free of charge, to any person obtaining
|
tomwalters@570
|
8 a copy of this software and associated documentation files
|
tomwalters@570
|
9 (the "Software"), to deal in the Software without restriction,
|
tomwalters@570
|
10 including without limitation the rights to use, copy, modify, merge,
|
tomwalters@570
|
11 publish, distribute, sublicense, and/or sell copies of the Software,
|
tomwalters@570
|
12 and to permit persons to whom the Software is furnished to do so,
|
tomwalters@570
|
13 subject to the following conditions:
|
tomwalters@570
|
14
|
tomwalters@570
|
15 The above copyright notice and this permission notice shall be
|
tomwalters@570
|
16 included in all copies or substantial portions of the Software.
|
tomwalters@570
|
17
|
tomwalters@570
|
18 Any person wishing to distribute modifications to the Software is
|
tomwalters@570
|
19 requested to send the modifications to the original developer so that
|
tomwalters@570
|
20 they can be incorporated into the canonical version.
|
tomwalters@570
|
21
|
tomwalters@570
|
22 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
tomwalters@570
|
23 EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
tomwalters@570
|
24 MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
tomwalters@570
|
25 IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR
|
tomwalters@570
|
26 ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF
|
tomwalters@570
|
27 CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
tomwalters@570
|
28 WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
tomwalters@570
|
29 */
|
tomwalters@570
|
30 #include "OscUnitTests.h"
|
tomwalters@570
|
31
|
tomwalters@570
|
32 #include <iostream>
|
tomwalters@570
|
33 #include <iomanip>
|
tomwalters@570
|
34
|
tomwalters@570
|
35 #include "osc/OscReceivedElements.h"
|
tomwalters@570
|
36 #include "osc/OscPrintReceivedElements.h"
|
tomwalters@570
|
37 #include "osc/OscOutboundPacketStream.h"
|
tomwalters@570
|
38
|
tomwalters@570
|
39
|
tomwalters@570
|
40 namespace osc{
|
tomwalters@570
|
41
|
tomwalters@570
|
42 static int passCount_=0, failCount_=0;
|
tomwalters@570
|
43
|
tomwalters@570
|
44 void PrintTestSummary()
|
tomwalters@570
|
45 {
|
tomwalters@570
|
46 std::cout << (passCount_+failCount_) << " tests run, " << passCount_ << " passed, " << failCount_ << " failed.\n";
|
tomwalters@570
|
47 }
|
tomwalters@570
|
48
|
tomwalters@570
|
49 void pass_equality( const char *slhs, const char *srhs, const char *file, int line )
|
tomwalters@570
|
50 {
|
tomwalters@570
|
51 ++passCount_;
|
tomwalters@570
|
52 std::cout << file << "(" << line << "): PASSED : " << slhs << " == " << srhs << "\n";
|
tomwalters@570
|
53 }
|
tomwalters@570
|
54
|
tomwalters@570
|
55 void fail_equality( const char *slhs, const char *srhs, const char *file, int line )
|
tomwalters@570
|
56 {
|
tomwalters@570
|
57 ++failCount_;
|
tomwalters@570
|
58 std::cout << file << "(" << line << "): FAILED : " << slhs << " != " << srhs << "\n";
|
tomwalters@570
|
59 }
|
tomwalters@570
|
60
|
tomwalters@570
|
61 template <typename T>
|
tomwalters@570
|
62 void assertEqual_( const T& lhs, const T& rhs, const char *slhs, const char *srhs, const char *file, int line )
|
tomwalters@570
|
63 {
|
tomwalters@570
|
64 if( lhs == rhs )
|
tomwalters@570
|
65 pass_equality( slhs, srhs, file, line );
|
tomwalters@570
|
66 else
|
tomwalters@570
|
67 fail_equality( slhs, srhs, file, line );
|
tomwalters@570
|
68 }
|
tomwalters@570
|
69
|
tomwalters@570
|
70 template <typename T>
|
tomwalters@570
|
71 void assertEqual_( const T* lhs, const T* rhs, const char *slhs, const char *srhs, const char *file, int line )
|
tomwalters@570
|
72 {
|
tomwalters@570
|
73 if( lhs == rhs )
|
tomwalters@570
|
74 pass_equality( slhs, srhs, file, line );
|
tomwalters@570
|
75 else
|
tomwalters@570
|
76 fail_equality( slhs, srhs, file, line );
|
tomwalters@570
|
77 }
|
tomwalters@570
|
78
|
tomwalters@570
|
79 template <>
|
tomwalters@570
|
80 void assertEqual_( const char* lhs, const char* rhs, const char *slhs, const char *srhs, const char *file, int line )
|
tomwalters@570
|
81 {
|
tomwalters@570
|
82 if( strcmp( lhs, rhs ) == 0 )
|
tomwalters@570
|
83 pass_equality( slhs, srhs, file, line );
|
tomwalters@570
|
84 else
|
tomwalters@570
|
85 fail_equality( slhs, srhs, file, line );
|
tomwalters@570
|
86 }
|
tomwalters@570
|
87
|
tomwalters@570
|
88
|
tomwalters@570
|
89 #define assertEqual( a, b ) assertEqual_( (a), (b), #a, #b, __FILE__, __LINE__ )
|
tomwalters@570
|
90
|
tomwalters@570
|
91 //---------------------------------------------------------------------------
|
tomwalters@570
|
92 char * AllocateAligned4( unsigned long size )
|
tomwalters@570
|
93 {
|
tomwalters@570
|
94 char *s = new char[ size + 4 ]; //allocate on stack to get 4 byte alignment
|
tomwalters@570
|
95 return (char*)((long)(s-1) & (~0x03L)) + 4;
|
tomwalters@570
|
96 }
|
tomwalters@570
|
97
|
tomwalters@570
|
98 // allocate a 4 byte aligned copy of s
|
tomwalters@570
|
99 char * NewMessageBuffer( const char *s, unsigned long length )
|
tomwalters@570
|
100 {
|
tomwalters@570
|
101 char *p = AllocateAligned4( length );
|
tomwalters@570
|
102 memcpy( p, s, length );
|
tomwalters@570
|
103 return p;
|
tomwalters@570
|
104 }
|
tomwalters@570
|
105
|
tomwalters@570
|
106 void test1()
|
tomwalters@570
|
107 {
|
tomwalters@570
|
108 const char s[] = "/test\0\0\0,fiT\0\0\0\0\0\0\0\0\0\0\0A";
|
tomwalters@570
|
109 char *buffer = NewMessageBuffer( s, sizeof(s)-1 );
|
tomwalters@570
|
110
|
tomwalters@570
|
111 // test argument iterator interface
|
tomwalters@570
|
112 bool unexpectedExceptionCaught = false;
|
tomwalters@570
|
113 try{
|
tomwalters@570
|
114 ReceivedMessage m( ReceivedPacket(buffer, sizeof(s)-1) );
|
tomwalters@570
|
115
|
tomwalters@570
|
116 assertEqual( strcmp( m.AddressPattern(), "/test" ), 0 );
|
tomwalters@570
|
117 assertEqual( strcmp( m.TypeTags(), "fiT" ), 0 );
|
tomwalters@570
|
118
|
tomwalters@570
|
119 ReceivedMessage::const_iterator i = m.ArgumentsBegin();
|
tomwalters@570
|
120 ++i;
|
tomwalters@570
|
121 ++i;
|
tomwalters@570
|
122 ++i;
|
tomwalters@570
|
123 assertEqual( i, m.ArgumentsEnd() );
|
tomwalters@570
|
124
|
tomwalters@570
|
125 i = m.ArgumentsBegin();
|
tomwalters@570
|
126 float f = (i++)->AsFloat();
|
tomwalters@570
|
127 (void)f;
|
tomwalters@570
|
128 int n = (i++)->AsInt32();
|
tomwalters@570
|
129 (void)n;
|
tomwalters@570
|
130 bool b = (i++)->AsBool();
|
tomwalters@570
|
131 (void)b;
|
tomwalters@570
|
132
|
tomwalters@570
|
133 i = m.ArgumentsBegin();
|
tomwalters@570
|
134 bool exceptionThrown = false;
|
tomwalters@570
|
135 try{
|
tomwalters@570
|
136 int n = (i++)->AsInt32();
|
tomwalters@570
|
137 (void)n;
|
tomwalters@570
|
138 }catch( Exception& ){
|
tomwalters@570
|
139 exceptionThrown = true;
|
tomwalters@570
|
140 }
|
tomwalters@570
|
141 assertEqual( exceptionThrown, true );
|
tomwalters@570
|
142
|
tomwalters@570
|
143 }catch( Exception& e ){
|
tomwalters@570
|
144 std::cout << "unexpected exception: " << e.what() << "\n";
|
tomwalters@570
|
145 unexpectedExceptionCaught = true;
|
tomwalters@570
|
146 }
|
tomwalters@570
|
147 assertEqual( unexpectedExceptionCaught, false );
|
tomwalters@570
|
148
|
tomwalters@570
|
149
|
tomwalters@570
|
150 // test argument stream interface
|
tomwalters@570
|
151 unexpectedExceptionCaught = false;
|
tomwalters@570
|
152 try{
|
tomwalters@570
|
153 ReceivedMessage m( ReceivedPacket(buffer, sizeof(s)-1) );
|
tomwalters@570
|
154 ReceivedMessageArgumentStream args = m.ArgumentStream();
|
tomwalters@570
|
155 assertEqual( args.Eos(), false );
|
tomwalters@570
|
156
|
tomwalters@570
|
157 float f;
|
tomwalters@570
|
158 long n;
|
tomwalters@570
|
159 bool b;
|
tomwalters@570
|
160 args >> f >> n >> b;
|
tomwalters@570
|
161
|
tomwalters@570
|
162 (void) f;
|
tomwalters@570
|
163 (void) n;
|
tomwalters@570
|
164 (void) b;
|
tomwalters@570
|
165
|
tomwalters@570
|
166 assertEqual( args.Eos(), true );
|
tomwalters@570
|
167
|
tomwalters@570
|
168 }catch( Exception& e ){
|
tomwalters@570
|
169 std::cout << "unexpected exception: " << e.what() << "\n";
|
tomwalters@570
|
170 unexpectedExceptionCaught = true;
|
tomwalters@570
|
171 }
|
tomwalters@570
|
172 assertEqual( unexpectedExceptionCaught, false );
|
tomwalters@570
|
173 }
|
tomwalters@570
|
174
|
tomwalters@570
|
175 //---------------------------------------------------------------------------
|
tomwalters@570
|
176
|
tomwalters@570
|
177
|
tomwalters@570
|
178 #define TEST2_PRINT( ss )\
|
tomwalters@570
|
179 {\
|
tomwalters@570
|
180 const char s[] = ss;\
|
tomwalters@570
|
181 ReceivedPacket p( NewMessageBuffer( s, sizeof(s)-1 ), sizeof(s)-1 ); \
|
tomwalters@570
|
182 ReceivedMessage m( p );\
|
tomwalters@570
|
183 std::cout << m << "\n";\
|
tomwalters@570
|
184 }
|
tomwalters@570
|
185
|
tomwalters@570
|
186 void test2()
|
tomwalters@570
|
187 {
|
tomwalters@570
|
188 bool unexpectedExceptionCaught = false;
|
tomwalters@570
|
189 try{
|
tomwalters@570
|
190 // 012301230 1 2 3
|
tomwalters@570
|
191 TEST2_PRINT( "/no_args\0\0\0\0" );
|
tomwalters@570
|
192
|
tomwalters@570
|
193 // 012301230 1 2 3 01 2 3
|
tomwalters@570
|
194 TEST2_PRINT( "/no_args\0\0\0\0,\0\0\0" );
|
tomwalters@570
|
195
|
tomwalters@570
|
196 // 01230123 012 3 0 1 2 3
|
tomwalters@570
|
197 TEST2_PRINT( "/an_int\0,i\0\0\0\0\0A" );
|
tomwalters@570
|
198 // 012301230 1 2 3 012 3 0 1 2 3
|
tomwalters@570
|
199 TEST2_PRINT( "/a_float\0\0\0\0,f\0\0\0\0\0\0" );
|
tomwalters@570
|
200 // 0123012301 2 3 012 3 012301230123
|
tomwalters@570
|
201 TEST2_PRINT( "/a_string\0\0\0,s\0\0hello world\0" );
|
tomwalters@570
|
202 // 01230123 012 3 0 1 2 3 0 1 2 3
|
tomwalters@570
|
203 TEST2_PRINT( "/a_blob\0,b\0\0\0\0\0\x4\x0\x1\x2\x3" );
|
tomwalters@570
|
204
|
tomwalters@570
|
205 // 0123012301 2 3 012 3 0 1 2 3 0 1 2 3
|
tomwalters@570
|
206 TEST2_PRINT( "/an_int64\0\0\0,h\0\0\0\0\0\0\0\0\0\x1" );
|
tomwalters@570
|
207 // 01230123012 3 012 3 0 1 2 3 0 1 2 3
|
tomwalters@570
|
208 TEST2_PRINT( "/a_timetag\0\0,t\0\0\0\0\0\0\0\0\0\x1" );
|
tomwalters@570
|
209 // 0123012301 2 3 012 3 0 1 2 3 0 1 2 3
|
tomwalters@570
|
210 TEST2_PRINT( "/a_double\0\0\0,d\0\0\0\0\0\0\0\0\0\0" );
|
tomwalters@570
|
211 // 0123012301 2 3 012 3 012301230123
|
tomwalters@570
|
212 TEST2_PRINT( "/a_symbol\0\0\0,S\0\0hello world\0" );
|
tomwalters@570
|
213 // 01230123 012 3 0 1 2 3
|
tomwalters@570
|
214 TEST2_PRINT( "/a_char\0,c\0\0\0\0\0A" );
|
tomwalters@570
|
215 // 012301230 1 2 3 012 3 0 1 2 3
|
tomwalters@570
|
216 TEST2_PRINT( "/a_color\0\0\0\0,r\0\0\0\0\0\0" );
|
tomwalters@570
|
217 // 012301230123012 3 012 3 0 1 2 3
|
tomwalters@570
|
218 TEST2_PRINT( "/a_midimessage\0\0,m\0\0\0\0\0\0" );
|
tomwalters@570
|
219 // 01230123 012 3
|
tomwalters@570
|
220 TEST2_PRINT( "/a_bool\0,T\0\0" );
|
tomwalters@570
|
221 // 01230123 012 3
|
tomwalters@570
|
222 TEST2_PRINT( "/a_bool\0,F\0\0" );
|
tomwalters@570
|
223 // 01230 1 2 3 012 3
|
tomwalters@570
|
224 TEST2_PRINT( "/Nil\0\0\0\0,N\0\0" );
|
tomwalters@570
|
225 // 01230 1 2 3 012 3
|
tomwalters@570
|
226 TEST2_PRINT( "/Inf\0\0\0\0,I\0\0" );
|
tomwalters@570
|
227
|
tomwalters@570
|
228 TEST2_PRINT( "/test\0\0\0,fiT\0\0\0\0\0\0\0\0\0\0\0A" );
|
tomwalters@570
|
229
|
tomwalters@570
|
230 bool exceptionThrown = false;
|
tomwalters@570
|
231 try{
|
tomwalters@570
|
232 TEST2_PRINT( "/a_char\0,x\0\0\0\0\0A" ); // unknown type tag 'x'
|
tomwalters@570
|
233 }catch( Exception& ){
|
tomwalters@570
|
234 exceptionThrown = true;
|
tomwalters@570
|
235 }
|
tomwalters@570
|
236 assertEqual( exceptionThrown, true );
|
tomwalters@570
|
237
|
tomwalters@570
|
238 }catch( Exception& e ){
|
tomwalters@570
|
239 std::cout << "unexpected exception: " << e.what() << "\n";
|
tomwalters@570
|
240 unexpectedExceptionCaught = true;
|
tomwalters@570
|
241 }
|
tomwalters@570
|
242 assertEqual( unexpectedExceptionCaught, false );
|
tomwalters@570
|
243 }
|
tomwalters@570
|
244
|
tomwalters@570
|
245 //-----------------------------------------------------------------------
|
tomwalters@570
|
246
|
tomwalters@570
|
247 // pack a message and then unpack it and check that the result is the same
|
tomwalters@570
|
248 // also print each message
|
tomwalters@570
|
249 // repeat the process inside a bundle
|
tomwalters@570
|
250
|
tomwalters@570
|
251 #define TEST_PACK_UNPACK0( addressPattern, argument, value, recieveGetter ) \
|
tomwalters@570
|
252 { \
|
tomwalters@570
|
253 memset( buffer, 0x74, bufferSize ); \
|
tomwalters@570
|
254 OutboundPacketStream ps( buffer, bufferSize ); \
|
tomwalters@570
|
255 ps << BeginMessage( addressPattern ) \
|
tomwalters@570
|
256 << argument \
|
tomwalters@570
|
257 << EndMessage;\
|
tomwalters@570
|
258 assertEqual( ps.IsReady(), true );\
|
tomwalters@570
|
259 ReceivedMessage m( ReceivedPacket(ps.Data(), ps.Size()) );\
|
tomwalters@570
|
260 std::cout << m << "\n";\
|
tomwalters@570
|
261 assertEqual( m.ArgumentsBegin()-> recieveGetter () , value );\
|
tomwalters@570
|
262 } \
|
tomwalters@570
|
263 { \
|
tomwalters@570
|
264 memset( buffer, 0x74, bufferSize ); \
|
tomwalters@570
|
265 OutboundPacketStream ps( buffer, bufferSize ); \
|
tomwalters@570
|
266 ps << BeginBundle( 1234 ) \
|
tomwalters@570
|
267 << BeginMessage( addressPattern ) \
|
tomwalters@570
|
268 << argument \
|
tomwalters@570
|
269 << EndMessage \
|
tomwalters@570
|
270 << EndBundle;\
|
tomwalters@570
|
271 assertEqual( ps.IsReady(), true );\
|
tomwalters@570
|
272 ReceivedBundle b( ReceivedPacket(ps.Data(), ps.Size()) );\
|
tomwalters@570
|
273 ReceivedMessage m( *b.ElementsBegin() );\
|
tomwalters@570
|
274 std::cout << m << "\n";\
|
tomwalters@570
|
275 assertEqual( m.ArgumentsBegin()-> recieveGetter () , value );\
|
tomwalters@570
|
276 }
|
tomwalters@570
|
277
|
tomwalters@570
|
278 #define TEST_PACK_UNPACK( addressPattern, argument, type, recieveGetter ) \
|
tomwalters@570
|
279 { \
|
tomwalters@570
|
280 memset( buffer, 0x74, bufferSize ); \
|
tomwalters@570
|
281 OutboundPacketStream ps( buffer, bufferSize ); \
|
tomwalters@570
|
282 ps << BeginMessage( addressPattern ) \
|
tomwalters@570
|
283 << argument \
|
tomwalters@570
|
284 << EndMessage;\
|
tomwalters@570
|
285 assertEqual( ps.IsReady(), true );\
|
tomwalters@570
|
286 ReceivedMessage m( ReceivedPacket(ps.Data(), ps.Size()) );\
|
tomwalters@570
|
287 std::cout << m << "\n";\
|
tomwalters@570
|
288 assertEqual( m.ArgumentsBegin()-> recieveGetter () , ( type ) argument );\
|
tomwalters@570
|
289 } \
|
tomwalters@570
|
290 { \
|
tomwalters@570
|
291 memset( buffer, 0x74, bufferSize ); \
|
tomwalters@570
|
292 OutboundPacketStream ps( buffer, bufferSize ); \
|
tomwalters@570
|
293 ps << BeginBundle( 1234 ) \
|
tomwalters@570
|
294 << BeginMessage( addressPattern ) \
|
tomwalters@570
|
295 << argument \
|
tomwalters@570
|
296 << EndMessage \
|
tomwalters@570
|
297 << EndBundle;\
|
tomwalters@570
|
298 assertEqual( ps.IsReady(), true );\
|
tomwalters@570
|
299 ReceivedBundle b( ReceivedPacket(ps.Data(), ps.Size()) );\
|
tomwalters@570
|
300 ReceivedMessage m( *b.ElementsBegin() );\
|
tomwalters@570
|
301 std::cout << m << "\n";\
|
tomwalters@570
|
302 assertEqual( m.ArgumentsBegin()-> recieveGetter () , ( type ) argument );\
|
tomwalters@570
|
303 }
|
tomwalters@570
|
304
|
tomwalters@570
|
305 void test3()
|
tomwalters@570
|
306 {
|
tomwalters@570
|
307 int bufferSize = 1000;
|
tomwalters@570
|
308 char *buffer = AllocateAligned4( bufferSize );
|
tomwalters@570
|
309
|
tomwalters@570
|
310 // single message tests
|
tomwalters@570
|
311 // empty message
|
tomwalters@570
|
312 {
|
tomwalters@570
|
313 memset( buffer, 0x74, bufferSize );
|
tomwalters@570
|
314 OutboundPacketStream ps( buffer, bufferSize );
|
tomwalters@570
|
315 ps << BeginMessage( "/no_arguments" )
|
tomwalters@570
|
316 << EndMessage;
|
tomwalters@570
|
317 assertEqual( ps.IsReady(), true );
|
tomwalters@570
|
318 ReceivedMessage m( ReceivedPacket(ps.Data(), ps.Size()) );
|
tomwalters@570
|
319 std::cout << m << "\n";\
|
tomwalters@570
|
320 }
|
tomwalters@570
|
321
|
tomwalters@570
|
322 TEST_PACK_UNPACK( "/a_bool", true, bool, AsBool );
|
tomwalters@570
|
323 TEST_PACK_UNPACK( "/a_bool", false, bool, AsBool );
|
tomwalters@570
|
324 TEST_PACK_UNPACK( "/a_bool", (bool)1, bool, AsBool );
|
tomwalters@570
|
325
|
tomwalters@570
|
326 TEST_PACK_UNPACK0( "/nil", Nil, true, IsNil );
|
tomwalters@570
|
327 TEST_PACK_UNPACK0( "/inf", Infinitum, true, IsInfinitum );
|
tomwalters@570
|
328
|
tomwalters@570
|
329 TEST_PACK_UNPACK( "/an_int", (int32)1234, int32, AsInt32 );
|
tomwalters@570
|
330
|
tomwalters@570
|
331 TEST_PACK_UNPACK( "/a_float", 3.1415926f, float, AsFloat );
|
tomwalters@570
|
332
|
tomwalters@570
|
333 TEST_PACK_UNPACK( "/a_char", 'c', char, AsChar );
|
tomwalters@570
|
334
|
tomwalters@570
|
335 TEST_PACK_UNPACK( "/an_rgba_color", RgbaColor(0x22334455), uint32, AsRgbaColor );
|
tomwalters@570
|
336
|
tomwalters@570
|
337 TEST_PACK_UNPACK( "/a_midi_message", MidiMessage(0x7F), uint32, AsMidiMessage );
|
tomwalters@570
|
338
|
tomwalters@570
|
339 TEST_PACK_UNPACK( "/an_int64", (int64)(0xFFFFFFFF), int64, AsInt64 );
|
tomwalters@570
|
340
|
tomwalters@570
|
341 TEST_PACK_UNPACK( "/a_time_tag", TimeTag(0xFFFFFFFF), uint64, AsTimeTag );
|
tomwalters@570
|
342
|
tomwalters@570
|
343 TEST_PACK_UNPACK( "/a_double", (double)3.1415926, double, AsDouble );
|
tomwalters@570
|
344
|
tomwalters@570
|
345 // blob
|
tomwalters@570
|
346 {
|
tomwalters@570
|
347 char blobData[] = "abcd";
|
tomwalters@570
|
348 memset( buffer, 0x74, bufferSize );
|
tomwalters@570
|
349 OutboundPacketStream ps( buffer, bufferSize );
|
tomwalters@570
|
350 ps << BeginMessage( "/a_blob" )
|
tomwalters@570
|
351 << Blob( blobData, 4 )
|
tomwalters@570
|
352 << EndMessage;
|
tomwalters@570
|
353 assertEqual( ps.IsReady(), true );
|
tomwalters@570
|
354 ReceivedMessage m( ReceivedPacket(ps.Data(), ps.Size()) );
|
tomwalters@570
|
355 std::cout << m << "\n";
|
tomwalters@570
|
356
|
tomwalters@570
|
357 const void *value;
|
tomwalters@570
|
358 unsigned long size;
|
tomwalters@570
|
359 m.ArgumentsBegin()->AsBlob( value, size );
|
tomwalters@570
|
360 assertEqual( size, (unsigned long)4 );
|
tomwalters@570
|
361 assertEqual( (memcmp( value, blobData, 4 ) == 0), true );
|
tomwalters@570
|
362 }
|
tomwalters@570
|
363
|
tomwalters@570
|
364
|
tomwalters@570
|
365 TEST_PACK_UNPACK( "/a_string", "hello world", const char*, AsString );
|
tomwalters@570
|
366
|
tomwalters@570
|
367 TEST_PACK_UNPACK( "/a_symbol", Symbol("foobar"), const char*, AsSymbol );
|
tomwalters@570
|
368
|
tomwalters@570
|
369
|
tomwalters@570
|
370 // nested bundles, and multiple messages in bundles...
|
tomwalters@570
|
371
|
tomwalters@570
|
372 {
|
tomwalters@570
|
373 memset( buffer, 0x74, bufferSize );
|
tomwalters@570
|
374 OutboundPacketStream ps( buffer, bufferSize );
|
tomwalters@570
|
375 ps << BeginBundle()
|
tomwalters@570
|
376 << BeginMessage( "/message_one" ) << 1 << 2 << 3 << 4 << EndMessage
|
tomwalters@570
|
377 << BeginMessage( "/message_two" ) << 1 << 2 << 3 << 4 << EndMessage
|
tomwalters@570
|
378 << BeginMessage( "/message_three" ) << 1 << 2 << 3 << 4 << EndMessage
|
tomwalters@570
|
379 << BeginMessage( "/message_four" ) << 1 << 2 << 3 << 4 << EndMessage
|
tomwalters@570
|
380 << EndBundle;
|
tomwalters@570
|
381 assertEqual( ps.IsReady(), true );
|
tomwalters@570
|
382 ReceivedBundle b( ReceivedPacket(ps.Data(), ps.Size()) );
|
tomwalters@570
|
383 std::cout << b << "\n";
|
tomwalters@570
|
384 }
|
tomwalters@570
|
385 }
|
tomwalters@570
|
386
|
tomwalters@570
|
387
|
tomwalters@570
|
388 void RunUnitTests()
|
tomwalters@570
|
389 {
|
tomwalters@570
|
390 test1();
|
tomwalters@570
|
391 test2();
|
tomwalters@570
|
392 test3();
|
tomwalters@570
|
393 PrintTestSummary();
|
tomwalters@570
|
394 }
|
tomwalters@570
|
395
|
tomwalters@570
|
396 } // namespace osc
|
tomwalters@570
|
397
|
tomwalters@570
|
398
|
tomwalters@570
|
399 #ifndef NO_OSC_TEST_MAIN
|
tomwalters@570
|
400
|
tomwalters@570
|
401 int main(int argc, char* argv[])
|
tomwalters@570
|
402 {
|
tomwalters@570
|
403 (void)argc;
|
tomwalters@570
|
404 (void)argv;
|
tomwalters@570
|
405
|
tomwalters@570
|
406 osc::RunUnitTests();
|
tomwalters@570
|
407 }
|
tomwalters@570
|
408
|
tomwalters@570
|
409 #endif
|