4 * @brief Unit test for unbounded sequences of octet types
6 * @author Johnny Willemsen
9 #include "testing_allocation_traits.hpp"
10 #include "testing_range_checking.hpp"
12 #include "tao/Unbounded_Value_Sequence_T.h"
14 #include "value_sequence_tester.hpp"
16 #include "test_macros.h"
18 #include "tao/Basic_Types.h"
21 using namespace TAO_VERSIONED_NAMESPACE_NAME::TAO
;
24 typedef unbounded_value_sequence
<CORBA::Octet
> tested_sequence
;
25 typedef tested_sequence::element_traits tested_element_traits
;
26 typedef tested_sequence::allocation_traits tested_allocation_traits
;
27 typedef details::range_checking
<CORBA::Octet
,true> range
;
31 typedef tested_sequence::value_type value_type
;
33 int test_copy_constructor_from_ulong()
35 expected_calls
a(tested_allocation_traits::allocbuf_calls
);
36 expected_calls
f(tested_allocation_traits::freebuf_calls
);
38 tested_sequence
x(16);
39 FAIL_RETURN_IF_NOT(a
.expect(1), a
);
42 CHECK_EQUAL(CORBA::ULong(16), x
.maximum());
43 CHECK_EQUAL(CORBA::ULong(8), x
.length());
44 CHECK_EQUAL(true, x
.release());
47 FAIL_RETURN_IF_NOT(a
.expect(1), a
);
48 CHECK_EQUAL(CORBA::ULong(16), y
.maximum());
49 CHECK_EQUAL(CORBA::ULong(8), y
.length());
50 CHECK_EQUAL(true, y
.release());
52 FAIL_RETURN_IF_NOT(f
.expect(2), f
);
56 int test_assignment_from_ulong()
58 expected_calls
a(tested_allocation_traits::allocbuf_calls
);
59 expected_calls
f(tested_allocation_traits::freebuf_calls
);
61 tested_sequence
x(16);
63 FAIL_RETURN_IF_NOT(a
.expect(1), a
);
64 CHECK_EQUAL(CORBA::ULong(16), x
.maximum());
65 CHECK_EQUAL(CORBA::ULong(8), x
.length());
66 CHECK_EQUAL(true, x
.release());
69 FAIL_RETURN_IF_NOT(a
.expect(0), a
);
72 FAIL_RETURN_IF_NOT(a
.expect(1), a
);
73 FAIL_RETURN_IF_NOT(f
.expect(0), f
);
74 CHECK_EQUAL(CORBA::ULong(16), y
.maximum());
75 CHECK_EQUAL(CORBA::ULong(8), y
.length());
76 CHECK_EQUAL(true, y
.release());
78 FAIL_RETURN_IF_NOT(f
.expect(2), f
);
82 int test_ulong_constructor()
84 expected_calls
a(tested_allocation_traits::allocbuf_calls
);
85 expected_calls
f(tested_allocation_traits::freebuf_calls
);
87 tested_sequence
x(16);
89 CHECK_EQUAL(CORBA::ULong(16), x
.maximum());
90 CHECK_EQUAL(CORBA::ULong(0), x
.length());
91 CHECK_EQUAL(true, x
.release());
93 FAIL_RETURN_IF_NOT(a
.expect(1), a
);
94 FAIL_RETURN_IF_NOT(f
.expect(1), f
);
98 int test_exception_in_ulong_constructor()
100 expected_calls
a(tested_allocation_traits::allocbuf_calls
);
101 expected_calls
f(tested_allocation_traits::freebuf_calls
);
103 tested_allocation_traits::allocbuf_calls
.failure_countdown(1);
104 CHECK_THROW(tested_sequence
x(16), testing_exception
);
105 FAIL_RETURN_IF_NOT(a
.expect(1), a
);
107 FAIL_RETURN_IF_NOT(f
.expect(0), f
);
111 int test_set_length_less_than_maximum()
113 expected_calls
a(tested_allocation_traits::allocbuf_calls
);
114 expected_calls
f(tested_allocation_traits::freebuf_calls
);
116 tested_sequence
x(16);
119 CHECK_EQUAL(CORBA::ULong(16), x
.maximum());
120 CHECK_EQUAL(CORBA::ULong(8), x
.length());
121 CHECK_EQUAL(true, x
.release());
123 FAIL_RETURN_IF_NOT(a
.expect(1), a
);
124 FAIL_RETURN_IF_NOT(f
.expect(1), f
);
128 int test_set_length_more_than_maximum()
130 expected_calls
a(tested_allocation_traits::allocbuf_calls
);
131 expected_calls
f(tested_allocation_traits::freebuf_calls
);
133 tested_sequence
x(16);
134 FAIL_RETURN_IF_NOT(a
.expect(1), a
);
137 FAIL_RETURN_IF_NOT(a
.expect(1), a
);
138 FAIL_RETURN_IF_NOT(f
.expect(1), f
);
140 CHECK_EQUAL(CORBA::ULong(32), x
.maximum());
141 CHECK_EQUAL(CORBA::ULong(32), x
.length());
142 CHECK_EQUAL(true, x
.release());
144 FAIL_RETURN_IF_NOT(f
.expect(1), f
);
148 int test_exception_in_set_length()
150 expected_calls
f(tested_allocation_traits::freebuf_calls
);
154 expected_calls
a(tested_allocation_traits::allocbuf_calls
);
155 tested_allocation_traits::allocbuf_calls
.failure_countdown(1);
156 CHECK_THROW(x
.length(8), testing_exception
);
157 FAIL_RETURN_IF_NOT(a
.expect(1), a
);
159 FAIL_RETURN_IF_NOT(f
.expect(0), f
);
163 value_type
* alloc_and_init_buffer()
165 value_type
* buf
= tested_sequence::allocbuf(8);
166 buf
[0] = 1; buf
[1] = 4; buf
[2] = 9; buf
[3] = 16;
171 int test_buffer_constructor_default()
173 value_type
* buffer
= alloc_and_init_buffer();
175 expected_calls
a(tested_allocation_traits::allocbuf_calls
);
176 expected_calls
f(tested_allocation_traits::freebuf_calls
);
178 tested_sequence
a(8, 4, buffer
);
179 CHECK_EQUAL(CORBA::ULong(8), a
.maximum());
180 CHECK_EQUAL(CORBA::ULong(4), a
.length());
181 CHECK_EQUAL(buffer
, a
.get_buffer());
182 CHECK_EQUAL(CORBA::Octet( 1), a
[0]);
183 CHECK_EQUAL(CORBA::Octet( 4), a
[1]);
184 CHECK_EQUAL(CORBA::Octet( 9), a
[2]);
185 CHECK_EQUAL(CORBA::Octet(16), a
[3]);
186 CHECK_EQUAL(false, a
.release());
188 FAIL_RETURN_IF_NOT(a
.expect(0), a
);
189 FAIL_RETURN_IF_NOT(f
.expect(0), f
);
190 tested_sequence::freebuf(buffer
);
194 int test_buffer_constructor_false()
196 value_type
* buffer
= alloc_and_init_buffer();
197 expected_calls
a(tested_allocation_traits::allocbuf_calls
);
198 expected_calls
f(tested_allocation_traits::freebuf_calls
);
200 tested_sequence
a(8, 4, buffer
, false);
201 CHECK_EQUAL(CORBA::ULong(8), a
.maximum());
202 CHECK_EQUAL(CORBA::ULong(4), a
.length());
203 CHECK_EQUAL(buffer
, a
.get_buffer());
204 CHECK_EQUAL(CORBA::Octet( 1), a
[0]);
205 CHECK_EQUAL(CORBA::Octet( 4), a
[1]);
206 CHECK_EQUAL(CORBA::Octet( 9), a
[2]);
207 CHECK_EQUAL(CORBA::Octet(16), a
[3]);
208 CHECK_EQUAL(false, a
.release());
210 FAIL_RETURN_IF_NOT(a
.expect(0), a
);
211 FAIL_RETURN_IF_NOT(f
.expect(0), f
);
212 tested_sequence::freebuf(buffer
);
216 int test_buffer_constructor_true()
218 value_type
* buffer
= alloc_and_init_buffer();
219 expected_calls
a(tested_allocation_traits::allocbuf_calls
);
220 expected_calls
f(tested_allocation_traits::freebuf_calls
);
222 tested_sequence
a(8, 4, buffer
, true);
223 CHECK_EQUAL(CORBA::ULong(8), a
.maximum());
224 CHECK_EQUAL(CORBA::ULong(4), a
.length());
225 CHECK_EQUAL(buffer
, a
.get_buffer());
226 CHECK_EQUAL(CORBA::Octet( 1), a
[0]);
227 CHECK_EQUAL(CORBA::Octet( 4), a
[1]);
228 CHECK_EQUAL(CORBA::Octet( 9), a
[2]);
229 CHECK_EQUAL(CORBA::Octet(16), a
[3]);
230 CHECK_EQUAL(true, a
.release());
232 FAIL_RETURN_IF_NOT(a
.expect(0), a
);
233 FAIL_RETURN_IF_NOT(f
.expect(1), f
);
237 int test_replace_default()
239 value_type
* buffer
= alloc_and_init_buffer();
241 expected_calls
c(tested_allocation_traits::allocbuf_calls
);
242 expected_calls
f(tested_allocation_traits::freebuf_calls
);
245 a
.replace(8, 4, buffer
);
246 FAIL_RETURN_IF_NOT(c
.expect(0), c
);
247 FAIL_RETURN_IF_NOT(f
.expect(0), f
);
249 CHECK_EQUAL(CORBA::ULong(8), a
.maximum());
250 CHECK_EQUAL(CORBA::ULong(4), a
.length());
251 CHECK_EQUAL(buffer
, a
.get_buffer());
252 CHECK_EQUAL(CORBA::Octet( 1), a
[0]);
253 CHECK_EQUAL(CORBA::Octet( 4), a
[1]);
254 CHECK_EQUAL(CORBA::Octet( 9), a
[2]);
255 CHECK_EQUAL(CORBA::Octet(16), a
[3]);
256 CHECK_EQUAL(false, a
.release());
258 FAIL_RETURN_IF_NOT(c
.expect(0), c
);
259 FAIL_RETURN_IF_NOT(f
.expect(0), f
);
260 tested_sequence::freebuf(buffer
);
264 int test_replace_false()
266 value_type
* buffer
= alloc_and_init_buffer();
267 expected_calls
c(tested_allocation_traits::allocbuf_calls
);
268 expected_calls
f(tested_allocation_traits::freebuf_calls
);
272 a
.replace(8, 4, buffer
, false);
273 FAIL_RETURN_IF_NOT(c
.expect(0), c
);
274 FAIL_RETURN_IF_NOT(f
.expect(0), f
);
276 CHECK_EQUAL(CORBA::ULong(8), a
.maximum());
277 CHECK_EQUAL(CORBA::ULong(4), a
.length());
278 CHECK_EQUAL(buffer
, a
.get_buffer());
279 CHECK_EQUAL(CORBA::Octet( 1), a
[0]);
280 CHECK_EQUAL(CORBA::Octet( 4), a
[1]);
281 CHECK_EQUAL(CORBA::Octet( 9), a
[2]);
282 CHECK_EQUAL(CORBA::Octet(16), a
[3]);
283 CHECK_EQUAL(false, a
.release());
285 FAIL_RETURN_IF_NOT(c
.expect(0), c
);
286 FAIL_RETURN_IF_NOT(f
.expect(0), f
);
287 tested_sequence::freebuf(buffer
);
291 int test_replace_true()
293 value_type
* buffer
= alloc_and_init_buffer();
294 expected_calls
c(tested_allocation_traits::allocbuf_calls
);
295 expected_calls
f(tested_allocation_traits::freebuf_calls
);
299 a
.replace(8, 4, buffer
, true);
300 FAIL_RETURN_IF_NOT(c
.expect(0), c
);
301 FAIL_RETURN_IF_NOT(f
.expect(0), f
);
303 CHECK_EQUAL(CORBA::ULong(8), a
.maximum());
304 CHECK_EQUAL(CORBA::ULong(4), a
.length());
305 CHECK_EQUAL(buffer
, a
.get_buffer());
306 CHECK_EQUAL(CORBA::Octet( 1), a
[0]);
307 CHECK_EQUAL(CORBA::Octet( 4), a
[1]);
308 CHECK_EQUAL(CORBA::Octet( 9), a
[2]);
309 CHECK_EQUAL(CORBA::Octet(16), a
[3]);
310 CHECK_EQUAL(true, a
.release());
312 FAIL_RETURN_IF_NOT(c
.expect(0), c
);
313 // Since we've given away the ownership the buffer is deallocated by
315 FAIL_RETURN_IF_NOT(f
.expect(1), f
);
319 int test_get_buffer_default()
321 value_type
* buffer
= alloc_and_init_buffer();
322 tested_sequence
a(8, 4, buffer
, true);
323 CHECK_EQUAL(a
.get_buffer(), buffer
);
327 int test_get_buffer_false()
329 value_type
* buffer
= alloc_and_init_buffer();
330 tested_sequence
a(8, 4, buffer
, true);
331 CHECK_EQUAL(a
.get_buffer(), buffer
);
335 int test_get_buffer_true_with_release_false()
337 value_type
* buffer
= alloc_and_init_buffer();
338 tested_sequence
a(8, 4, buffer
, false);
339 CHECK(0 == a
.get_buffer(true));
340 tested_sequence::freebuf(buffer
);
344 int test_get_buffer_true_with_release_true()
346 value_type
* buffer
= alloc_and_init_buffer();
347 expected_calls
c(tested_allocation_traits::allocbuf_calls
);
348 expected_calls
f(tested_allocation_traits::freebuf_calls
);
350 tested_sequence
a(8, 4, buffer
, true);
351 CHECK_EQUAL(buffer
, a
.get_buffer(true));
353 tested_sequence
const & b
= a
;
354 CHECK_EQUAL(0UL, b
.maximum());
355 CHECK_EQUAL(0UL, b
.length());
356 CHECK(0 != b
.get_buffer());
357 CHECK_EQUAL(true, b
.release());
359 FAIL_RETURN_IF_NOT(c
.expect(1), c
);
361 CHECK(buffer
!= b
.get_buffer());
363 FAIL_RETURN_IF_NOT(c
.expect(0), c
);
364 FAIL_RETURN_IF_NOT(f
.expect(1), f
);
365 tested_sequence::freebuf(buffer
);
373 status
+= this->test_ulong_constructor();
374 status
+= this->test_copy_constructor_from_ulong();
375 status
+= this->test_assignment_from_ulong();
376 status
+= this->test_exception_in_ulong_constructor();
377 status
+= this->test_set_length_less_than_maximum();
378 status
+= this->test_set_length_more_than_maximum();
379 status
+= this->test_exception_in_set_length();
380 status
+= this->test_buffer_constructor_default();
381 status
+= this->test_buffer_constructor_false();
382 status
+= this->test_buffer_constructor_true();
383 status
+= this->test_replace_default();
384 status
+= this->test_replace_false();
385 status
+= this->test_replace_true();
386 status
+= this->test_get_buffer_false();
387 status
+= this->test_get_buffer_true_with_release_false();
388 status
+= this->test_get_buffer_true_with_release_true();
395 int ACE_TMAIN(int,ACE_TCHAR
*[])
402 status
+= tester
.test_all ();
406 typedef value_sequence_tester
<tested_sequence
,tested_allocation_traits
> common
;
408 status
+= tester
.test_all ();
411 catch (const ::CORBA::Exception
&ex
)
413 ex
._tao_print_exception("ERROR : unexpected CORBA exception caugth :");