diff options
Diffstat (limited to 'TAO/tests/Param_Test/small_union.cpp')
-rw-r--r-- | TAO/tests/Param_Test/small_union.cpp | 208 |
1 files changed, 208 insertions, 0 deletions
diff --git a/TAO/tests/Param_Test/small_union.cpp b/TAO/tests/Param_Test/small_union.cpp new file mode 100644 index 00000000000..d2036b5cb41 --- /dev/null +++ b/TAO/tests/Param_Test/small_union.cpp @@ -0,0 +1,208 @@ +// $Id$ + +// ============================================================================ +// +// = LIBRARY +// TAO/tests/Param_Test +// +// = FILENAME +// small_union.cpp +// +// = DESCRIPTION +// tests Small_Unions +// +// = AUTHORS +// Aniruddha Gokhale +// +// ============================================================================ + +#include "helper.h" +#include "small_union.h" + +ACE_RCSID(Param_Test, small_union, "$Id$") + +// ************************************************************************ +// Test_Small_Union +// ************************************************************************ + +size_t Test_Small_Union::counter = 0; + +Test_Small_Union::Test_Small_Union (void) + : opname_ (CORBA::string_dup ("test_small_union")) +{ +} + +Test_Small_Union::~Test_Small_Union (void) +{ + CORBA::string_free (this->opname_); + this->opname_ = 0; +} + +const char * +Test_Small_Union::opname (void) const +{ + return this->opname_; +} + +void +Test_Small_Union::dii_req_invoke (CORBA::Request *req, + CORBA::Environment &ACE_TRY_ENV) +{ + req->add_in_arg ("s1") <<= this->in_; + req->add_inout_arg ("s2") <<= this->inout_; + req->add_out_arg ("s3") <<= this->out_.in (); + + req->set_return_type (Param_Test::_tc_Small_Union); + + req->invoke (ACE_TRY_ENV); + ACE_CHECK; + + Param_Test::Small_Union *tmp; + req->return_value () >>= tmp; + this->ret_ = new Param_Test::Small_Union (*tmp); + + CORBA::NamedValue_ptr o2 = + req->arguments ()->item (1, ACE_TRY_ENV); + ACE_CHECK; + *o2->value () >>= tmp; + this->inout_ = *tmp; + + CORBA::NamedValue_ptr o3 = + req->arguments ()->item (2, ACE_TRY_ENV); + ACE_CHECK; + *o3->value () >>= tmp; + this->out_ = new Param_Test::Small_Union (*tmp); +} + +int +Test_Small_Union::init_parameters (Param_Test_ptr objref, + CORBA::Environment &ACE_TRY_ENV) +{ + ACE_TRY + { + // get access to a Coffee Object + this->cobj_ = objref->make_coffee (ACE_TRY_ENV); + ACE_TRY_CHECK; + + this->reset_parameters (); + return 0; + } + ACE_CATCH (CORBA::SystemException, sysex) + { + ACE_PRINT_EXCEPTION (sysex,"System Exception doing make_coffee"); + } + ACE_CATCHANY + { + ACE_PRINT_EXCEPTION (ACE_ANY_EXCEPTION, "An exception caught in make_coffee"); + } + ACE_ENDTRY; + return -1; +} + +int +Test_Small_Union::reset_parameters (void) +{ + Generator *gen = GENERATOR::instance (); // value generator + CORBA::ULong index = (counter++ % 2); + + switch (index) + { + case 0: + { + CORBA::Long l = gen->gen_long (); + this->in_.the_long (l); + this->inout_.the_long (l); + } + break; + default: + case 1: + { + CORBA::Short s = gen->gen_short (); + this->in_.the_short (s); + this->inout_.the_short (s); + } + break; + } + this->out_ = new Param_Test::Small_Union (this->in_); + this->ret_ = new Param_Test::Small_Union (this->in_); + return 0; +} + +int +Test_Small_Union::run_sii_test (Param_Test_ptr objref, + CORBA::Environment &ACE_TRY_ENV) +{ + ACE_TRY + { + this->ret_ = objref->test_small_union (this->in_, + this->inout_, + this->out_, + ACE_TRY_ENV); + ACE_TRY_CHECK; + + return 0; + } + ACE_CATCHANY + { + ACE_PRINT_EXCEPTION (ACE_ANY_EXCEPTION, + "Test_Small_Union::run_sii_test\n"); + + } + ACE_ENDTRY; + return -1; +} + +CORBA::Boolean +Test_Small_Union::check_validity (void) +{ + if (this->in_._d () != this->inout_._d () + || this->in_._d () != this->out_->_d () + || this->in_._d () != this->ret_->_d ()) + { + ACE_DEBUG ((LM_DEBUG, "mismatch of discriminators\n")); + return 0; + } + + + switch (this->in_._d ()) + { + case Param_Test::A_LONG: + { + CORBA::Long in = this->in_.the_long (); + CORBA::Long inout = this->inout_.the_long (); + CORBA::Long out = this->out_->the_long (); + CORBA::Long ret = this->ret_->the_long (); + if (in != out || in != inout || in != ret) + return 0; + } + break; + + case Param_Test::A_SHORT: + { + CORBA::Short in = this->in_.the_short (); + CORBA::Short inout = this->inout_.the_short (); + CORBA::Short out = this->out_->the_short (); + CORBA::Short ret = this->ret_->the_short (); + if (in != out || in != inout || in != ret) + return 0; + } + break; + + default: + return 0; + } + + return 1; +} + +CORBA::Boolean +Test_Small_Union::check_validity (CORBA::Request_ptr /*req*/) +{ + //ACE_UNUSED_ARG (req); + return this->check_validity (); +} + +void +Test_Small_Union::print_values (void) +{ +} |