summaryrefslogtreecommitdiff
path: root/trunk/TAO/tests/DynAny_Test/test_dynany.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'trunk/TAO/tests/DynAny_Test/test_dynany.cpp')
-rw-r--r--trunk/TAO/tests/DynAny_Test/test_dynany.cpp321
1 files changed, 321 insertions, 0 deletions
diff --git a/trunk/TAO/tests/DynAny_Test/test_dynany.cpp b/trunk/TAO/tests/DynAny_Test/test_dynany.cpp
new file mode 100644
index 00000000000..35d7e1d1677
--- /dev/null
+++ b/trunk/TAO/tests/DynAny_Test/test_dynany.cpp
@@ -0,0 +1,321 @@
+//=============================================================================
+/**
+ * @file test_dynany.cpp
+ *
+ * $Id$
+ *
+ * Implementation of the basic test for simple DynAnys
+ *
+ * @author Jeff Parsons <parsons@cs.wustl.edu>
+ */
+//=============================================================================
+
+#include "tao/AnyTypeCode/AnyTypeCode_methods.h"
+#include "tao/AnyTypeCode/ShortSeqA.h"
+#include "tao/DynamicAny/DynamicAny.h"
+
+#include "test_dynany.h"
+#include "data.h"
+#include "analyzer.h"
+
+Test_DynAny::Test_DynAny (CORBA::ORB_var orb, int debug)
+ : orb_ (orb),
+ test_name_ (CORBA::string_dup ("test_dynany")),
+ error_count_ (0),
+ debug_ (debug)
+{
+}
+
+Test_DynAny::~Test_DynAny (void)
+{
+ CORBA::string_free (this->test_name_);
+ this->test_name_ = 0;
+}
+
+const char*
+Test_DynAny::test_name (void) const
+{
+ return this->test_name_;
+}
+
+int
+Test_DynAny::run_test (void)
+{
+ Data data (this->orb_);
+
+ ACE_TRY_NEW_ENV
+ {
+ ACE_DEBUG ((LM_DEBUG,
+ "\t*=*=*=*= %s =*=*=*=*\n",
+ data.labels[8]));
+
+ ACE_DEBUG ((LM_DEBUG,
+ "testing: constructor(Any)/insert/get\n"));
+
+ CORBA::Object_var factory_obj =
+ this->orb_->resolve_initial_references ("DynAnyFactory"
+ ACE_ENV_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+
+ DynamicAny::DynAnyFactory_var dynany_factory =
+ DynamicAny::DynAnyFactory::_narrow (factory_obj.in ()
+ ACE_ENV_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+
+ if (CORBA::is_nil (dynany_factory.in ()))
+ {
+ ACE_ERROR_RETURN ((LM_ERROR,
+ "Nil dynamic any factory after narrow\n"),
+ -1);
+ }
+
+ DynAnyAnalyzer analyzer (this->orb_.in (),
+ dynany_factory.in (),
+ debug_);
+
+ CORBA::Any in1;
+ in1 <<= data.m_double2;
+ DynamicAny::DynAny_var fa1 =
+ dynany_factory->create_dyn_any (in1 ACE_ENV_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+
+ fa1->insert_double (data.m_double1
+ ACE_ENV_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+
+ CORBA::Double d_out =
+ fa1->get_double (ACE_ENV_SINGLE_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+
+ if (d_out == data.m_double1)
+ {
+ ACE_DEBUG ((LM_DEBUG,
+ "++ OK ++\n"));
+ }
+ else
+ {
+ ++this->error_count_;
+ }
+
+ ACE_DEBUG ((LM_DEBUG,
+ "testing: constructor(TypeCode)/from_any/to_any\n"));
+
+ d_out = data.m_double2;
+ DynamicAny::DynAny_var ftc1 =
+ dynany_factory->create_dyn_any_from_type_code (CORBA::_tc_double
+ ACE_ENV_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+ CORBA::Any in_any1;
+ in_any1 <<= data.m_double1;
+ ftc1->from_any (in_any1
+ ACE_ENV_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+ analyzer.analyze (ftc1.in() ACE_ENV_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+ CORBA::Any_var out_any1 = ftc1->to_any (ACE_ENV_SINGLE_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+ out_any1 >>= d_out;
+
+ if (d_out == data.m_double1)
+ {
+ ACE_DEBUG ((LM_DEBUG,
+ "++ OK ++\n"));
+ }
+ else
+ {
+ ++this->error_count_;
+ }
+
+ fa1->destroy (ACE_ENV_SINGLE_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+ ftc1->destroy (ACE_ENV_SINGLE_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+
+ ACE_DEBUG ((LM_DEBUG,
+ "\t*=*=*=*= %s =*=*=*=*\n",
+ data.labels[12]));
+
+ ACE_DEBUG ((LM_DEBUG,
+ "testing: constructor(Any)/insert/get\n"));
+
+ CORBA::Any in;
+ in <<= data.m_typecode2;
+ DynamicAny::DynAny_var fa2 =
+ dynany_factory->create_dyn_any (in
+ ACE_ENV_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+ fa2->insert_typecode (data.m_typecode1
+ ACE_ENV_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+ CORBA::TypeCode_var tc_out =
+ fa2->get_typecode (ACE_ENV_SINGLE_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+
+ if (tc_out->equal (data.m_typecode1
+ ACE_ENV_ARG_PARAMETER))
+ {
+ ACE_DEBUG ((LM_DEBUG,
+ "++ OK ++\n"));
+ }
+ else
+ {
+ ++this->error_count_;
+ }
+
+ ACE_TRY_CHECK;
+
+ ACE_DEBUG ((LM_DEBUG,
+ "testing: constructor(TypeCode)/from_any/to_any\n"));
+
+ DynamicAny::DynAny_var ftc2 =
+ dynany_factory->create_dyn_any_from_type_code (CORBA::_tc_TypeCode
+ ACE_ENV_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+ CORBA::Any in_any2;
+ in_any2 <<= data.m_typecode1;
+ ftc2->from_any (in_any2
+ ACE_ENV_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+ analyzer.analyze (ftc2.in() ACE_ENV_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+ CORBA::Any_var out_any2 = ftc2->to_any (ACE_ENV_SINGLE_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+ CORBA::TypeCode_ptr out_tc;
+ out_any2 >>= out_tc;
+
+ CORBA::Boolean equal = out_tc->equal (data.m_typecode1
+ ACE_ENV_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+
+ if (equal)
+ {
+ ACE_DEBUG ((LM_DEBUG,
+ "++ OK ++\n"));
+ }
+ else
+ {
+ ++this->error_count_;
+ }
+
+ ACE_TRY_CHECK;
+
+ fa2->destroy (ACE_ENV_SINGLE_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+ ftc2->destroy (ACE_ENV_SINGLE_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+
+ ACE_DEBUG ((LM_DEBUG,
+ "\t*=*=*=*= %s =*=*=*=*\n",
+ data.labels[16]));
+
+ ACE_DEBUG ((LM_DEBUG,
+ "testing: constructor(Any)/insert/get\n"));
+
+ CORBA::Any in3;
+ CORBA::ShortSeq ss;
+ ss.length (0UL);
+ in3 <<= ss;
+ DynamicAny::DynAny_var fa3 =
+ dynany_factory->create_dyn_any (in3
+ ACE_ENV_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+ fa3->insert_short_seq (data.m_shortseq1
+ ACE_ENV_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+ data.m_shortseq2 =
+ fa3->get_short_seq (ACE_ENV_SINGLE_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+
+ bool good =
+ data.m_shortseq2->length () == data.m_shortseq1.length ();
+
+ if (good)
+ {
+ for (CORBA::ULong i = 0; i < data.m_shortseq1.length (); ++i)
+ {
+ if (data.m_shortseq2[i] != data.m_shortseq1[i])
+ {
+ good = false;
+ break;
+ }
+ }
+ }
+
+ if (good)
+ {
+ ACE_DEBUG ((LM_DEBUG,
+ "++ OK ++\n"));
+ }
+ else
+ {
+ ++this->error_count_;
+ }
+
+ ACE_TRY_CHECK;
+
+ ACE_DEBUG ((LM_DEBUG,
+ "testing: constructor(TypeCode)/from_any/to_any\n"));
+
+ DynamicAny::DynAny_var ftc3 =
+ dynany_factory->create_dyn_any_from_type_code (CORBA::_tc_ShortSeq
+ ACE_ENV_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+ CORBA::Any in_any3;
+ in_any3 <<= data.m_shortseq1;
+ ftc3->from_any (in_any3
+ ACE_ENV_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+ analyzer.analyze (ftc3.in () ACE_ENV_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+ CORBA::Any_var out_any3 = ftc3->to_any (ACE_ENV_SINGLE_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+
+ CORBA::ShortSeq *outseq = 0;
+ out_any3.in () >>= outseq;
+
+ good =
+ outseq->length () == data.m_shortseq1.length ();
+
+ if (good)
+ {
+ for (CORBA::ULong i = 0; i < data.m_shortseq1.length (); ++i)
+ {
+ if ((*outseq)[i] != data.m_shortseq1[i])
+ {
+ good = false;
+ break;
+ }
+ }
+ }
+
+ if (good)
+ {
+ ACE_DEBUG ((LM_DEBUG,
+ "++ OK ++\n"));
+ }
+ else
+ {
+ ++this->error_count_;
+ }
+
+ ACE_TRY_CHECK;
+
+ fa3->destroy (ACE_ENV_SINGLE_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+ ftc3->destroy (ACE_ENV_SINGLE_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+ }
+ ACE_CATCHANY
+ {
+ ACE_PRINT_EXCEPTION (ACE_ANY_EXCEPTION,
+ "test_dynany::run_test");
+ return -1;
+ }
+ ACE_ENDTRY;
+
+ ACE_DEBUG ((LM_DEBUG,
+ "\n%d errors\n",
+ this->error_count_));
+
+ return 0;
+}