tests/libjava-mauve/src/gnu/testlet/org/omg/DynamicAny/DynAny/BasicTest.java
branchjk_new_structure
changeset 1541 75c2e24dea9a
parent 1540 92ac284961c1
child 1542 be11db817bcf
equal deleted inserted replaced
1540:92ac284961c1 1541:75c2e24dea9a
     1 // Tags: JDK1.4
       
     2 // Uses: ../../PortableServer/POA/TestBase
       
     3 
       
     4 // Copyright (c) IONA Technologies, 2001.
       
     5 
       
     6 // Adapted for Mauve by Audrius Meskauskas <audriusa@bluewin.ch>
       
     7 
       
     8 // This file is part of Mauve.
       
     9 
       
    10 // Mauve is free software; you can redistribute it and/or modify
       
    11 // it under the terms of the GNU General Public License as published by
       
    12 // the Free Software Foundation; either version 2, or (at your option)
       
    13 // any later version.
       
    14 
       
    15 // Mauve is distributed in the hope that it will be useful,
       
    16 // but WITHOUT ANY WARRANTY; without even the implied warranty of
       
    17 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
       
    18 // GNU General Public License for more details.
       
    19 
       
    20 // You should have received a copy of the GNU General Public License
       
    21 // along with Mauve; see the file COPYING.  If not, write to
       
    22 // the Free Software Foundation, 59 Temple Place - Suite 330,
       
    23 // Boston, MA 02111-1307, USA.
       
    24 
       
    25 /*
       
    26 This code originally came from the OMG's CORBA Open Source Testing project,
       
    27 which lived at cost.omg.org. That site no longer exists.
       
    28 
       
    29 All the contributing companies agreed to release their tests under the
       
    30 terms of the GNU Lesser General Public License, available in the file
       
    31 COPYING.LIB.
       
    32 
       
    33 The code has been modified integrating into Mauve test environment and
       
    34 removing tests that are not yet supported by Suns jre 1.4. Hence the license
       
    35 is now GPL.
       
    36 
       
    37 We downloaded the code from http://sourceforge.net/projects/corba-cost/,
       
    38 administrated by Duncan Grisby.
       
    39 */
       
    40 
       
    41 
       
    42 // **********************************************************************
       
    43 //
       
    44 // Copyright (c) 2001
       
    45 // IONA Technologies, Inc.
       
    46 // Waltham, MA, USA
       
    47 //
       
    48 // All Rights Reserved
       
    49 //
       
    50 // **********************************************************************
       
    51 
       
    52 
       
    53 package gnu.testlet.org.omg.DynamicAny.DynAny;
       
    54 
       
    55 import gnu.testlet.TestHarness;
       
    56 import gnu.testlet.Testlet;
       
    57 import gnu.testlet.org.omg.DynamicAny.DynAny.Iona.TestEnum;
       
    58 import gnu.testlet.org.omg.DynamicAny.DynAny.Iona.TestEnumHelper;
       
    59 import gnu.testlet.org.omg.DynamicAny.DynAny.Iona.TestStruct;
       
    60 import gnu.testlet.org.omg.DynamicAny.DynAny.Iona.TestStructHelper;
       
    61 import gnu.testlet.org.omg.PortableServer.POA.TestBase;
       
    62 
       
    63 import org.omg.CORBA.Any;
       
    64 import org.omg.CORBA.ORB;
       
    65 import org.omg.CORBA.Object;
       
    66 import org.omg.CORBA.TCKind;
       
    67 import org.omg.CORBA.TypeCode;
       
    68 import org.omg.DynamicAny.DynAny;
       
    69 import org.omg.DynamicAny.DynAnyFactory;
       
    70 import org.omg.DynamicAny.DynAnyFactoryHelper;
       
    71 import org.omg.DynamicAny.DynEnum;
       
    72 import org.omg.DynamicAny.DynEnumHelper;
       
    73 import org.omg.DynamicAny.DynFixed;
       
    74 import org.omg.DynamicAny.DynFixedHelper;
       
    75 import org.omg.DynamicAny.DynStruct;
       
    76 import org.omg.DynamicAny.DynStructHelper;
       
    77 import org.omg.DynamicAny.NameDynAnyPair;
       
    78 import org.omg.DynamicAny.NameValuePair;
       
    79 
       
    80 import java.math.BigDecimal;
       
    81 
       
    82 public class BasicTest
       
    83   extends TestBase
       
    84   implements Testlet
       
    85 {
       
    86   final String ANY_VALUE = "This is a string in an any";
       
    87   final String STRING_VALUE = "This is a string";
       
    88   final String WSTRING_VALUE = "This is a wstring";
       
    89   final boolean BOOLEAN_VALUE = true;
       
    90   final byte OCTET_VALUE = (byte) 155;
       
    91   final char CHAR_VALUE = 'Y';
       
    92   final double DOUBLE_VALUE = 7.31e29;
       
    93   final float FLOAT_VALUE = (float) 1.9183;
       
    94   final int LONG_VALUE = -300000;
       
    95   final int ULONG_VALUE = 500000;
       
    96   final short SHORT_VALUE = (short) -10000;
       
    97   final short USHORT_VALUE = (short) 40000;
       
    98 
       
    99   //
       
   100   // Can't do this, because it causes a failure under JDK 1.2.2.
       
   101   // The problem is that ORB.init() is called before main() has
       
   102   // a chance to set the ORB properties, so the JDK ORB's
       
   103   // singleton implementation is used instead. This will result
       
   104   // in a NullPointerException due to a bug in that ORB.
       
   105   //
       
   106   // final TypeCode TYPECODE_VALUE =
       
   107   // ORB.init().get_primitive_tc(TCKind.tk_float);
       
   108   TypeCode TYPECODE_VALUE;
       
   109   final char WCHAR_VALUE = 'Z';
       
   110   final long LONGLONG_VALUE = -1234567890L;
       
   111   final long ULONGLONG_VALUE = 9876543210L;
       
   112   DynAnyFactory factory;
       
   113   ORB orb;
       
   114 
       
   115   public void setUp()
       
   116   {
       
   117     orb = org.omg.CORBA.ORB.init(new String[ 0 ], null);
       
   118     TYPECODE_VALUE = orb.get_primitive_tc(TCKind.tk_float);
       
   119 
       
   120     org.omg.CORBA.Object obj = null;
       
   121 
       
   122     try
       
   123       {
       
   124         obj = orb.resolve_initial_references("DynAnyFactory");
       
   125         TEST(obj != null);
       
   126         factory = DynAnyFactoryHelper.narrow(obj);
       
   127       }
       
   128     catch (org.omg.CORBA.ORBPackage.InvalidName ex)
       
   129       {
       
   130         TEST(false, ex.getMessage());
       
   131       }
       
   132   }
       
   133 
       
   134   public void allTests(ORB orb, Object o)
       
   135   {
       
   136     DynAnyFactory factory = DynAnyFactoryHelper.narrow(o);
       
   137 
       
   138     testBasic();
       
   139     testFixed();
       
   140     testEnum();
       
   141     testStruct();
       
   142   }
       
   143 
       
   144   public void test(TestHarness a_harness)
       
   145   {
       
   146     harness = a_harness;
       
   147     setUp();
       
   148     allTests(orb, factory);
       
   149     tearDown();
       
   150   }
       
   151 
       
   152   public void testBasic()
       
   153   {
       
   154     try
       
   155       {
       
   156         org.omg.CORBA.Object obj;
       
   157         Any any = orb.create_any();
       
   158         Any av;
       
   159         DynAny d1 = null;
       
   160         DynAny d2 = null;
       
   161         DynAny copy = null;
       
   162         TypeCode type;
       
   163         TypeCode tc;
       
   164 
       
   165         //
       
   166         // Test: short
       
   167         //
       
   168         type = orb.get_primitive_tc(TCKind.tk_short);
       
   169         d1 = factory.create_dyn_any_from_type_code(type);
       
   170         TEST(d1.get_short() == (short) 0);
       
   171         d1.insert_short((short) -53);
       
   172         TEST(d1.get_short() == (short) -53);
       
   173         d1.insert_short((short) 32000);
       
   174         TEST(d1.get_short() == (short) 32000);
       
   175 
       
   176         av = d1.to_any();
       
   177 
       
   178         short shortVal = av.extract_short();
       
   179         TEST(shortVal == (short) 32000);
       
   180 
       
   181         any.insert_short((short) 32000);
       
   182         d2 = factory.create_dyn_any(any);
       
   183         TEST(d1.equal(d2));
       
   184 
       
   185         copy = d1.copy();
       
   186         TEST(d1.equal(copy));
       
   187         TEST(copy.get_short() == (short) 32000);
       
   188 
       
   189         any.insert_short((short) -99);
       
   190         d2.from_any(any);
       
   191         d1.assign(d2);
       
   192         TEST(d1.equal(d2));
       
   193 
       
   194         d1.destroy();
       
   195         d2.destroy();
       
   196         copy.destroy();
       
   197 
       
   198         testOps(orb, factory, type, false);
       
   199 
       
   200         //
       
   201         // Test: unsigned short
       
   202         //
       
   203         type = orb.get_primitive_tc(TCKind.tk_ushort);
       
   204         d1 = factory.create_dyn_any_from_type_code(type);
       
   205         TEST(d1.get_ushort() == (short) 0);
       
   206         d1.insert_ushort((short) 199);
       
   207         TEST(d1.get_ushort() == (short) 199);
       
   208         d1.insert_ushort((short) 65001);
       
   209         TEST(d1.get_ushort() == (short) 65001);
       
   210 
       
   211         av = d1.to_any();
       
   212 
       
   213         short ushortVal = av.extract_ushort();
       
   214         TEST(ushortVal == (short) 65001);
       
   215 
       
   216         any.insert_ushort((short) 65001);
       
   217         d2 = factory.create_dyn_any(any);
       
   218         TEST(d1.equal(d2));
       
   219 
       
   220         copy = d1.copy();
       
   221         TEST(d1.equal(copy));
       
   222         TEST(copy.get_ushort() == (short) 65001);
       
   223 
       
   224         any.insert_ushort((short) 501);
       
   225         d2.from_any(any);
       
   226         d1.assign(d2);
       
   227         TEST(d1.equal(d2));
       
   228 
       
   229         d1.destroy();
       
   230         d2.destroy();
       
   231         copy.destroy();
       
   232 
       
   233         testOps(orb, factory, type, false);
       
   234 
       
   235         //
       
   236         // Test: long
       
   237         //
       
   238         type = orb.get_primitive_tc(TCKind.tk_long);
       
   239         d1 = factory.create_dyn_any_from_type_code(type);
       
   240         TEST(d1.get_long() == 0);
       
   241         d1.insert_long(-530000);
       
   242         TEST(d1.get_long() == -530000);
       
   243         d1.insert_long(3200000);
       
   244         TEST(d1.get_long() == 3200000);
       
   245 
       
   246         av = d1.to_any();
       
   247 
       
   248         int longVal = av.extract_long();
       
   249         TEST(longVal == 3200000);
       
   250 
       
   251         any.insert_long(3200000);
       
   252         d2 = factory.create_dyn_any(any);
       
   253         TEST(d1.equal(d2));
       
   254 
       
   255         copy = d1.copy();
       
   256         TEST(d1.equal(copy));
       
   257         TEST(copy.get_long() == 3200000);
       
   258 
       
   259         any.insert_long(-99000);
       
   260         d2.from_any(any);
       
   261         d1.assign(d2);
       
   262         TEST(d1.equal(d2));
       
   263 
       
   264         d1.destroy();
       
   265         d2.destroy();
       
   266         copy.destroy();
       
   267 
       
   268         testOps(orb, factory, type, false);
       
   269 
       
   270         //
       
   271         // Test: unsigned long
       
   272         //
       
   273         type = orb.get_primitive_tc(TCKind.tk_ulong);
       
   274         d1 = factory.create_dyn_any_from_type_code(type);
       
   275         TEST(d1.get_ulong() == 0);
       
   276         d1.insert_ulong(199000);
       
   277         TEST(d1.get_ulong() == 199000);
       
   278         d1.insert_ulong(65001000);
       
   279         TEST(d1.get_ulong() == 65001000);
       
   280 
       
   281         av = d1.to_any();
       
   282 
       
   283         int ulongVal = av.extract_ulong();
       
   284         TEST(ulongVal == 65001000);
       
   285 
       
   286         any.insert_ulong(65001000);
       
   287         d2 = factory.create_dyn_any(any);
       
   288         TEST(d1.equal(d2));
       
   289 
       
   290         copy = d1.copy();
       
   291         TEST(d1.equal(copy));
       
   292         TEST(copy.get_ulong() == 65001000);
       
   293 
       
   294         any.insert_ulong(501000);
       
   295         d2.from_any(any);
       
   296         d1.assign(d2);
       
   297         TEST(d1.equal(d2));
       
   298 
       
   299         d1.destroy();
       
   300         d2.destroy();
       
   301         copy.destroy();
       
   302 
       
   303         testOps(orb, factory, type, false);
       
   304 
       
   305         //
       
   306         // Test: float
       
   307         //
       
   308         type = orb.get_primitive_tc(TCKind.tk_float);
       
   309         d1 = factory.create_dyn_any_from_type_code(type);
       
   310         TEST(d1.get_float() == 0.0f);
       
   311         d1.insert_float(199.001f);
       
   312         TEST(d1.get_float() > 199.0f && d1.get_float() < 199.1f);
       
   313         d1.insert_float(6500.10001f);
       
   314         TEST(d1.get_float() > 6500.0f && d1.get_float() < 6501.0f);
       
   315 
       
   316         av = d1.to_any();
       
   317 
       
   318         float floatVal = av.extract_float();
       
   319         TEST(floatVal > 6500.1 && floatVal < 6500.2);
       
   320 
       
   321         any.insert_float((float) 6500.10001);
       
   322         d2 = factory.create_dyn_any(any);
       
   323         TEST(d1.equal(d2));
       
   324 
       
   325         copy = d1.copy();
       
   326         TEST(d1.equal(copy));
       
   327         TEST(copy.get_float() > 6500.1 && copy.get_float() < 6500.2);
       
   328 
       
   329         any.insert_float((float) 501.001);
       
   330         d2.from_any(any);
       
   331         d1.assign(d2);
       
   332         TEST(d1.equal(d2));
       
   333 
       
   334         d1.destroy();
       
   335         d2.destroy();
       
   336         copy.destroy();
       
   337 
       
   338         testOps(orb, factory, type, false);
       
   339 
       
   340         //
       
   341         // Test: double
       
   342         //
       
   343         type = orb.get_primitive_tc(TCKind.tk_double);
       
   344         d1 = factory.create_dyn_any_from_type_code(type);
       
   345         TEST(d1.get_double() == 0.0);
       
   346         d1.insert_double(199000.001);
       
   347         TEST(d1.get_double() > 199000.0 && d1.get_double() < 199000.1);
       
   348         d1.insert_double(6500000.10001);
       
   349         TEST(d1.get_double() > 6500000.1 && d1.get_double() < 6500000.2);
       
   350 
       
   351         av = d1.to_any();
       
   352 
       
   353         double doubleVal = av.extract_double();
       
   354         TEST(doubleVal > 6500000.1 && doubleVal < 6500000.2);
       
   355 
       
   356         any.insert_double(6500000.10001);
       
   357         d2 = factory.create_dyn_any(any);
       
   358         TEST(d1.equal(d2));
       
   359 
       
   360         copy = d1.copy();
       
   361         TEST(d1.equal(copy));
       
   362         TEST(copy.get_double() > 6500000.1 && copy.get_double() < 6500000.2);
       
   363 
       
   364         any.insert_double(501000.001);
       
   365         d2.from_any(any);
       
   366         d1.assign(d2);
       
   367         TEST(d1.equal(d2));
       
   368 
       
   369         d1.destroy();
       
   370         d2.destroy();
       
   371         copy.destroy();
       
   372 
       
   373         testOps(orb, factory, type, false);
       
   374 
       
   375         //
       
   376         // Test: boolean
       
   377         //
       
   378         type = orb.get_primitive_tc(TCKind.tk_boolean);
       
   379         d1 = factory.create_dyn_any_from_type_code(type);
       
   380         TEST(d1.get_boolean() == false);
       
   381         d1.insert_boolean(false);
       
   382         TEST(d1.get_boolean() == false);
       
   383         d1.insert_boolean(true);
       
   384         TEST(d1.get_boolean() == true);
       
   385 
       
   386         av = d1.to_any();
       
   387 
       
   388         boolean boolVal = av.extract_boolean();
       
   389         TEST(boolVal == true);
       
   390 
       
   391         any.insert_boolean(true);
       
   392         d2 = factory.create_dyn_any(any);
       
   393         TEST(d1.equal(d2));
       
   394 
       
   395         copy = d1.copy();
       
   396         TEST(d1.equal(copy));
       
   397         TEST(copy.get_boolean() == true);
       
   398 
       
   399         any.insert_boolean(false);
       
   400         d2.from_any(any);
       
   401         d1.assign(d2);
       
   402         TEST(d1.equal(d2));
       
   403 
       
   404         d1.destroy();
       
   405         d2.destroy();
       
   406         copy.destroy();
       
   407 
       
   408         testOps(orb, factory, type, false);
       
   409 
       
   410         //
       
   411         // Test: char
       
   412         //
       
   413         type = orb.get_primitive_tc(TCKind.tk_char);
       
   414         d1 = factory.create_dyn_any_from_type_code(type);
       
   415         TEST(d1.get_char() == 0);
       
   416         d1.insert_char('A');
       
   417         TEST(d1.get_char() == 'A');
       
   418         d1.insert_char('z');
       
   419         TEST(d1.get_char() == 'z');
       
   420 
       
   421         av = d1.to_any();
       
   422 
       
   423         char charVal = av.extract_char();
       
   424         TEST(charVal == 'z');
       
   425 
       
   426         any.insert_char('z');
       
   427         d2 = factory.create_dyn_any(any);
       
   428         TEST(d1.equal(d2));
       
   429 
       
   430         copy = d1.copy();
       
   431         TEST(d1.equal(copy));
       
   432         TEST(copy.get_char() == 'z');
       
   433 
       
   434         any.insert_char('@');
       
   435         d2.from_any(any);
       
   436         d1.assign(d2);
       
   437         TEST(d1.equal(d2));
       
   438 
       
   439         d1.destroy();
       
   440         d2.destroy();
       
   441         copy.destroy();
       
   442 
       
   443         testOps(orb, factory, type, false);
       
   444 
       
   445         //
       
   446         // Test: octet
       
   447         //
       
   448         type = orb.get_primitive_tc(TCKind.tk_octet);
       
   449         d1 = factory.create_dyn_any_from_type_code(type);
       
   450         TEST(d1.get_octet() == 0);
       
   451         d1.insert_octet((byte) 255);
       
   452         TEST(d1.get_octet() == (byte) 255);
       
   453         d1.insert_octet((byte) 1);
       
   454         TEST(d1.get_octet() == (byte) 1);
       
   455 
       
   456         av = d1.to_any();
       
   457 
       
   458         byte octetVal = av.extract_octet();
       
   459         TEST(octetVal == (byte) 1);
       
   460 
       
   461         any.insert_octet((byte) 1);
       
   462         d2 = factory.create_dyn_any(any);
       
   463         TEST(d1.equal(d2));
       
   464 
       
   465         copy = d1.copy();
       
   466         TEST(d1.equal(copy));
       
   467         TEST(copy.get_octet() == (byte) 1);
       
   468 
       
   469         any.insert_octet((byte) 127);
       
   470         d2.from_any(any);
       
   471         d1.assign(d2);
       
   472         TEST(d1.equal(d2));
       
   473 
       
   474         d1.destroy();
       
   475         d2.destroy();
       
   476         copy.destroy();
       
   477 
       
   478         testOps(orb, factory, type, false);
       
   479 
       
   480         //
       
   481         // Test: any
       
   482         //
       
   483         type = orb.get_primitive_tc(TCKind.tk_any);
       
   484         d1 = factory.create_dyn_any_from_type_code(type);
       
   485         any.insert_long(345678);
       
   486         d1.insert_any(any);
       
   487         av = d1.get_any();
       
   488         longVal = av.extract_long();
       
   489         TEST(longVal == 345678);
       
   490 
       
   491         any = orb.create_any();
       
   492 
       
   493         Any anyVal = orb.create_any();
       
   494         anyVal.insert_long(345678);
       
   495         any.insert_any(anyVal);
       
   496         d2 = factory.create_dyn_any(any);
       
   497         TEST(d1.equal(d2));
       
   498 
       
   499         av = d1.to_any();
       
   500 
       
   501         Any cap = av.extract_any();
       
   502         longVal = cap.extract_long();
       
   503         TEST(longVal == 345678);
       
   504 
       
   505         anyVal.insert_string("anyValue");
       
   506         any.insert_any(anyVal);
       
   507         d2.from_any(any);
       
   508         d1.assign(d2);
       
   509         TEST(d1.equal(d2));
       
   510 
       
   511         copy = d1.copy();
       
   512         TEST(d1.equal(copy));
       
   513 
       
   514         d1.destroy();
       
   515         d2.destroy();
       
   516         copy.destroy();
       
   517 
       
   518         testOps(orb, factory, type, false);
       
   519       }
       
   520     catch (org.omg.DynamicAny.DynAnyFactoryPackage.InconsistentTypeCode ex)
       
   521       {
       
   522         TEST(false);
       
   523       }
       
   524     catch (org.omg.DynamicAny.DynAnyPackage.TypeMismatch ex)
       
   525       {
       
   526         ex.printStackTrace();
       
   527         TEST(false, ex.getMessage());
       
   528       }
       
   529     catch (org.omg.DynamicAny.DynAnyPackage.InvalidValue ex)
       
   530       {
       
   531         TEST(false);
       
   532       }
       
   533   }
       
   534 
       
   535   public void testEnum()
       
   536   {
       
   537     try
       
   538       {
       
   539         Any any = orb.create_any();
       
   540         Any av;
       
   541         DynAny d1 = null;
       
   542         DynAny d2 = null;
       
   543         DynAny copy = null;
       
   544         String str;
       
   545         DynEnum e1;
       
   546         DynEnum e2;
       
   547         TestEnum e;
       
   548         TypeCode type = TestEnumHelper.type();
       
   549 
       
   550         //
       
   551         // Test: initial value
       
   552         //
       
   553         d1 = factory.create_dyn_any_from_type_code(type);
       
   554         e1 = DynEnumHelper.narrow(d1);
       
   555         TEST(e1.get_as_ulong() == 0);
       
   556         str = e1.get_as_string();
       
   557         TEST(str.equals("red"));
       
   558 
       
   559         //
       
   560         // Test: set_as_string()
       
   561         //
       
   562         e1.set_as_string("green");
       
   563         TEST(e1.get_as_ulong() == 1);
       
   564         str = e1.get_as_string();
       
   565         TEST(str.equals("green"));
       
   566         e1.set_as_string("blue");
       
   567         TEST(e1.get_as_ulong() == 2);
       
   568         str = e1.get_as_string();
       
   569         TEST(str.equals("blue"));
       
   570 
       
   571         //
       
   572         // Test: set_as_ulong()
       
   573         //
       
   574         e1.set_as_ulong(1);
       
   575         TEST(e1.get_as_ulong() == 1);
       
   576         str = e1.get_as_string();
       
   577         TEST(str.equals("green"));
       
   578         e1.set_as_ulong(2);
       
   579         TEST(e1.get_as_ulong() == 2);
       
   580         str = e1.get_as_string();
       
   581         TEST(str.equals("blue"));
       
   582 
       
   583         //
       
   584         // Test: from_any()
       
   585         //
       
   586         TestEnumHelper.insert(any, TestEnum.green);
       
   587         e1.from_any(any);
       
   588 
       
   589         //
       
   590         // Test: to_any()
       
   591         //
       
   592         av = e1.to_any();
       
   593         e = TestEnumHelper.extract(av);
       
   594         TEST(e == TestEnum.green);
       
   595 
       
   596         //
       
   597         // Test: copy
       
   598         //
       
   599         copy = e1.copy();
       
   600         TEST(e1.equal(copy));
       
   601 
       
   602         e1.destroy();
       
   603         copy.destroy();
       
   604 
       
   605         //
       
   606         // Test: set_as_ulong() InvalidValue exception
       
   607         //
       
   608         try
       
   609           {
       
   610             d1 = factory.create_dyn_any_from_type_code(type);
       
   611             e1 = DynEnumHelper.narrow(d1);
       
   612             e1.set_as_ulong(3);
       
   613             TEST("set_as_ulong() should not have succeeded" == null);
       
   614           }
       
   615         catch (org.omg.DynamicAny.DynAnyPackage.InvalidValue ex)
       
   616           {
       
   617             // expected
       
   618             d1.destroy();
       
   619           }
       
   620         try
       
   621           {
       
   622             d1 = factory.create_dyn_any_from_type_code(type);
       
   623             e1 = DynEnumHelper.narrow(d1);
       
   624 
       
   625             //
       
   626             // In Java there is no *unsigned* int, so we need an
       
   627             // additional test case not required for C++.
       
   628             //
       
   629             e1.set_as_ulong(-1);
       
   630             TEST("set_as_ulong() should not have succeeded" == null);
       
   631           }
       
   632         catch (org.omg.DynamicAny.DynAnyPackage.InvalidValue ex)
       
   633           {
       
   634             // expected
       
   635             d1.destroy();
       
   636           }
       
   637 
       
   638         //
       
   639         // Test: set_as_string() InvalidValue exception
       
   640         //
       
   641         try
       
   642           {
       
   643             d1 = factory.create_dyn_any_from_type_code(type);
       
   644             e1 = DynEnumHelper.narrow(d1);
       
   645             e1.set_as_string("alizarin");
       
   646             TEST("set_as_string() should not have succeeded" == null);
       
   647           }
       
   648         catch (org.omg.DynamicAny.DynAnyPackage.InvalidValue ex)
       
   649           {
       
   650             // expected
       
   651             d1.destroy();
       
   652           }
       
   653 
       
   654         testOps(orb, factory, TestEnumHelper.type(), false);
       
   655       }
       
   656     catch (org.omg.DynamicAny.DynAnyFactoryPackage.InconsistentTypeCode ex)
       
   657       {
       
   658         TEST(false);
       
   659       }
       
   660     catch (org.omg.DynamicAny.DynAnyPackage.TypeMismatch ex)
       
   661       {
       
   662         TEST(false);
       
   663       }
       
   664     catch (org.omg.DynamicAny.DynAnyPackage.InvalidValue ex)
       
   665       {
       
   666         TEST(false);
       
   667       }
       
   668   }
       
   669 
       
   670   public void testFixed()
       
   671   {
       
   672     try
       
   673       {
       
   674         Any any = orb.create_any();
       
   675         Any av;
       
   676         DynAny d1 = null;
       
   677         DynAny d2 = null;
       
   678         DynAny copy = null;
       
   679         TypeCode tc;
       
   680         String str;
       
   681         DynFixed f1;
       
   682         DynFixed f2;
       
   683         BigDecimal f;
       
   684 
       
   685         //
       
   686         // Create TypeCode
       
   687         //
       
   688         tc = orb.create_fixed_tc((short) 5, (short) 2);
       
   689 
       
   690         //
       
   691         // Test: get_value()
       
   692         //
       
   693         d1 = factory.create_dyn_any_from_type_code(tc);
       
   694         f1 = DynFixedHelper.narrow(d1);
       
   695         str = f1.get_value();
       
   696         f = new BigDecimal(str);
       
   697         TEST(Math.abs(f.floatValue() - 0.0) < Float.MIN_VALUE);
       
   698 
       
   699         //
       
   700         // Test: set_value()
       
   701         //
       
   702         TEST(f1.set_value("1.1"));
       
   703         TEST(f1.set_value("123.1"));
       
   704         TEST(f1.set_value("123.12"));
       
   705         TEST(!f1.set_value("123.123"));
       
   706 
       
   707         //
       
   708         // Test: from_any()
       
   709         //
       
   710         f = new BigDecimal("98");
       
   711         any.insert_fixed(f, tc);
       
   712         f1.from_any(any);
       
   713 
       
   714         //
       
   715         // Test: to_any()
       
   716         //
       
   717         av = f1.to_any();
       
   718         f = av.extract_fixed();
       
   719         TEST(f.equals(new BigDecimal("98")));
       
   720 
       
   721         //
       
   722         // Test: copy
       
   723         //
       
   724         copy = f1.copy();
       
   725         TEST(f1.equal(copy));
       
   726 
       
   727         f1.destroy();
       
   728         copy.destroy();
       
   729 
       
   730         //
       
   731         // Test: set_value() InvalidValue exception (part 1)
       
   732         //
       
   733         try
       
   734           {
       
   735             d1 = factory.create_dyn_any_from_type_code(tc);
       
   736             f1 = DynFixedHelper.narrow(d1);
       
   737             f1.set_value("");
       
   738             harness.fail("set_value() should not have succeeded");
       
   739           }
       
   740         catch (Exception ex)
       
   741           {
       
   742             // expected
       
   743             d1.destroy();
       
   744           }
       
   745 
       
   746         //
       
   747         // Test: assign() TypeMismatch exception
       
   748         //
       
   749         try
       
   750           {
       
   751             f = new BigDecimal("99");
       
   752             any.insert_fixed(f, orb.create_fixed_tc((short) 4, (short) 2));
       
   753             d1 = factory.create_dyn_any(any);
       
   754             d2 = factory.create_dyn_any_from_type_code(tc);
       
   755             d2.assign(d1);
       
   756             harness.fail("assign() should not have succeeded");
       
   757           }
       
   758         catch (org.omg.DynamicAny.DynAnyPackage.TypeMismatch ex)
       
   759           {
       
   760             // expected
       
   761             d1.destroy();
       
   762             d2.destroy();
       
   763           }
       
   764 
       
   765         //
       
   766         // Test: from_any() TypeMismatch exception
       
   767         //
       
   768         try
       
   769           {
       
   770             f = new BigDecimal("99");
       
   771             any.insert_fixed(f, orb.create_fixed_tc((short) 4, (short) 2));
       
   772             d1 = factory.create_dyn_any_from_type_code(tc);
       
   773             d1.from_any(any);
       
   774             harness.fail("from_any() should not have succeeded");
       
   775           }
       
   776         catch (org.omg.DynamicAny.DynAnyPackage.TypeMismatch ex)
       
   777           {
       
   778             // expected
       
   779             d1.destroy();
       
   780           }
       
   781 
       
   782         testOps(orb, factory, tc, false);
       
   783       }
       
   784     catch (Exception ex)
       
   785       {
       
   786         ex.printStackTrace();
       
   787         fail(ex);
       
   788       }
       
   789   }
       
   790 
       
   791   public void testStruct()
       
   792   {
       
   793     try
       
   794       {
       
   795         int i;
       
   796         Any any = orb.create_any();
       
   797         Any av;
       
   798         DynAny d1;
       
   799         DynAny d2;
       
   800         DynAny copy;
       
   801         String str;
       
   802         String wstr;
       
   803         DynStruct s1;
       
   804         DynStruct s2;
       
   805         String cp;
       
   806         TypeCode type;
       
   807         TypeCode tc;
       
   808         TestStruct ts = new TestStruct();
       
   809         TestStruct pts;
       
   810         NameValuePair[] nvpseq;
       
   811         NameDynAnyPair[] ndpseq;
       
   812 
       
   813         type = TestStructHelper.type();
       
   814         d1 = factory.create_dyn_any_from_type_code(type);
       
   815         s1 = DynStructHelper.narrow(d1);
       
   816 
       
   817         //
       
   818         // Test: current_member_name, current_member_kind
       
   819         //
       
   820         str = s1.current_member_name();
       
   821         TEST(str.equals("shortVal"));
       
   822         TEST(s1.current_member_kind() == TCKind.tk_short);
       
   823         s1.next();
       
   824         str = s1.current_member_name();
       
   825         TEST(str.equals("ushortVal"));
       
   826         TEST(s1.current_member_kind() == TCKind.tk_ushort);
       
   827         s1.next();
       
   828         str = s1.current_member_name();
       
   829         TEST(str.equals("longVal"));
       
   830         TEST(s1.current_member_kind() == TCKind.tk_long);
       
   831         s1.next();
       
   832         str = s1.current_member_name();
       
   833         TEST(str.equals("ulongVal"));
       
   834         TEST(s1.current_member_kind() == TCKind.tk_ulong);
       
   835         s1.next();
       
   836         str = s1.current_member_name();
       
   837         TEST(str.equals("floatVal"));
       
   838         TEST(s1.current_member_kind() == TCKind.tk_float);
       
   839         s1.next();
       
   840         str = s1.current_member_name();
       
   841         TEST(str.equals("doubleVal"));
       
   842         TEST(s1.current_member_kind() == TCKind.tk_double);
       
   843         s1.next();
       
   844         str = s1.current_member_name();
       
   845         TEST(str.equals("boolVal"));
       
   846         TEST(s1.current_member_kind() == TCKind.tk_boolean);
       
   847         s1.next();
       
   848         str = s1.current_member_name();
       
   849         TEST(str.equals("charVal"));
       
   850         TEST(s1.current_member_kind() == TCKind.tk_char);
       
   851         s1.next();
       
   852         str = s1.current_member_name();
       
   853         TEST(str.equals("octetVal"));
       
   854         TEST(s1.current_member_kind() == TCKind.tk_octet);
       
   855         s1.next();
       
   856         str = s1.current_member_name();
       
   857         TEST(str.equals("anyVal"));
       
   858         TEST(s1.current_member_kind() == TCKind.tk_any);
       
   859         s1.next();
       
   860         str = s1.current_member_name();
       
   861         TEST(str.equals("tcVal"));
       
   862         TEST(s1.current_member_kind() == TCKind.tk_TypeCode);
       
   863         s1.next();
       
   864         str = s1.current_member_name();
       
   865         TEST(str.equals("objectVal"));
       
   866         TEST(s1.current_member_kind() == TCKind.tk_objref);
       
   867         s1.next();
       
   868         str = s1.current_member_name();
       
   869         TEST(str.equals("stringVal"));
       
   870         TEST(s1.current_member_kind() == TCKind.tk_string);
       
   871         s1.next();
       
   872         str = s1.current_member_name();
       
   873         TEST(str.equals("longlongVal"));
       
   874         TEST(s1.current_member_kind() == TCKind.tk_longlong);
       
   875         s1.next();
       
   876         str = s1.current_member_name();
       
   877         TEST(str.equals("ulonglongVal"));
       
   878         TEST(s1.current_member_kind() == TCKind.tk_ulonglong);
       
   879         s1.next();
       
   880         str = s1.current_member_name();
       
   881         TEST(str.equals("wcharVal"));
       
   882         TEST(s1.current_member_kind() == TCKind.tk_wchar);
       
   883         s1.next();
       
   884         str = s1.current_member_name();
       
   885         TEST(str.equals("wstringVal"));
       
   886         TEST(s1.current_member_kind() == TCKind.tk_wstring);
       
   887 
       
   888         //
       
   889         // Test: insert values into members
       
   890         //
       
   891         s1.rewind();
       
   892         s1.insert_short(SHORT_VALUE);
       
   893         s1.next();
       
   894         s1.insert_ushort(USHORT_VALUE);
       
   895         s1.next();
       
   896         s1.insert_long(LONG_VALUE);
       
   897         s1.next();
       
   898         s1.insert_ulong(ULONG_VALUE);
       
   899         s1.next();
       
   900         s1.insert_float(FLOAT_VALUE);
       
   901         s1.next();
       
   902         s1.insert_double(DOUBLE_VALUE);
       
   903         s1.next();
       
   904         s1.insert_boolean(BOOLEAN_VALUE);
       
   905         s1.next();
       
   906         s1.insert_char(CHAR_VALUE);
       
   907         s1.next();
       
   908         s1.insert_octet(OCTET_VALUE);
       
   909         s1.next();
       
   910 
       
   911         DynAny d1c = d1.current_component();
       
   912 
       
   913         any.insert_string(ANY_VALUE);
       
   914         s1.insert_any(any);
       
   915         s1.next();
       
   916         s1.insert_typecode(TYPECODE_VALUE);
       
   917         s1.next();
       
   918         s1.insert_reference(null);
       
   919         s1.next();
       
   920         s1.insert_string(STRING_VALUE);
       
   921         s1.next();
       
   922         s1.insert_longlong(LONGLONG_VALUE);
       
   923         s1.next();
       
   924         s1.insert_ulonglong(ULONGLONG_VALUE);
       
   925         s1.next();
       
   926         s1.insert_wchar(WCHAR_VALUE);
       
   927         s1.next();
       
   928         s1.insert_wstring(WSTRING_VALUE);
       
   929         s1.next();
       
   930 
       
   931         //
       
   932         // Test: get values from members
       
   933         //
       
   934         s1.rewind();
       
   935         TEST(s1.get_short() == SHORT_VALUE);
       
   936         s1.next();
       
   937         TEST(s1.get_ushort() == USHORT_VALUE);
       
   938         s1.next();
       
   939         TEST(s1.get_long() == LONG_VALUE);
       
   940         s1.next();
       
   941         TEST(s1.get_ulong() == ULONG_VALUE);
       
   942         s1.next();
       
   943         TEST(s1.get_float() == FLOAT_VALUE);
       
   944         s1.next();
       
   945         TEST(s1.get_double() == DOUBLE_VALUE);
       
   946         s1.next();
       
   947         TEST(s1.get_boolean() == BOOLEAN_VALUE);
       
   948         s1.next();
       
   949         TEST(s1.get_char() == CHAR_VALUE);
       
   950         s1.next();
       
   951         TEST(s1.get_octet() == OCTET_VALUE);
       
   952         s1.next();
       
   953         av = s1.get_any();
       
   954 
       
   955         TEST(av.extract_string().equals(ANY_VALUE));
       
   956         s1.next();
       
   957         tc = s1.get_typecode();
       
   958         s1.next();
       
   959         TEST(tc.equal(TYPECODE_VALUE));
       
   960         TEST(s1.get_reference() == null);
       
   961         s1.next();
       
   962         str = s1.get_string();
       
   963         s1.next();
       
   964         TEST(str.equals(STRING_VALUE));
       
   965         TEST(s1.get_longlong() == LONGLONG_VALUE);
       
   966         s1.next();
       
   967         TEST(s1.get_ulonglong() == ULONGLONG_VALUE);
       
   968         s1.next();
       
   969         TEST(s1.get_wchar() == WCHAR_VALUE);
       
   970         s1.next();
       
   971         wstr = s1.get_wstring();
       
   972         s1.next();
       
   973         TEST(wstr.equals(WSTRING_VALUE));
       
   974 
       
   975         //
       
   976         // Test: get_members
       
   977         //
       
   978         nvpseq = s1.get_members();
       
   979         s1.rewind();
       
   980         for (i = 0; i < 11; i++)
       
   981           {
       
   982             str = s1.current_member_name();
       
   983             TEST(str.equals(nvpseq [ i ].id));
       
   984 
       
   985             DynAny dv = factory.create_dyn_any(nvpseq [ i ].value);
       
   986             DynAny comp = s1.current_component();
       
   987             TEST(dv.equal(comp));
       
   988             dv.destroy();
       
   989             s1.next();
       
   990           }
       
   991 
       
   992         //
       
   993         // Test: get_members_as_dyn_any
       
   994         //
       
   995         ndpseq = s1.get_members_as_dyn_any();
       
   996         s1.rewind();
       
   997         for (i = 0; i < 11; i++)
       
   998           {
       
   999             str = s1.current_member_name();
       
  1000             TEST(str.equals(ndpseq [ i ].id));
       
  1001             s1.next();
       
  1002           }
       
  1003       }
       
  1004     catch (Exception ex)
       
  1005       {
       
  1006         ex.printStackTrace();
       
  1007         fail(ex);
       
  1008       }
       
  1009   }
       
  1010 
       
  1011   protected void tearDown()
       
  1012   {
       
  1013     orb.destroy();
       
  1014   }
       
  1015 
       
  1016   void checkStruct(final TestStruct ts)
       
  1017   {
       
  1018     TEST(ts.shortVal == SHORT_VALUE);
       
  1019     TEST(ts.ushortVal == USHORT_VALUE);
       
  1020     TEST(ts.longVal == LONG_VALUE);
       
  1021     TEST(ts.ulongVal == ULONG_VALUE);
       
  1022     TEST(ts.floatVal == FLOAT_VALUE);
       
  1023     TEST(ts.doubleVal == DOUBLE_VALUE);
       
  1024     TEST(ts.boolVal == BOOLEAN_VALUE);
       
  1025     TEST(ts.charVal == CHAR_VALUE);
       
  1026     TEST(ts.octetVal == OCTET_VALUE);
       
  1027     TEST(ts.anyVal.extract_string().equals(ANY_VALUE));
       
  1028     TEST(ts.tcVal.equal(TYPECODE_VALUE));
       
  1029     TEST(ts.objectVal == null);
       
  1030     TEST(ts.stringVal.equals(STRING_VALUE));
       
  1031     TEST(ts.longlongVal == LONGLONG_VALUE);
       
  1032     TEST(ts.ulonglongVal == ULONGLONG_VALUE);
       
  1033     TEST(ts.wcharVal == WCHAR_VALUE);
       
  1034     TEST(ts.wstringVal.equals(WSTRING_VALUE));
       
  1035   }
       
  1036 
       
  1037   void loadStruct(ORB orb, TestStruct ts)
       
  1038   {
       
  1039     ts.shortVal = SHORT_VALUE;
       
  1040     ts.ushortVal = USHORT_VALUE;
       
  1041     ts.longVal = LONG_VALUE;
       
  1042     ts.ulongVal = ULONG_VALUE;
       
  1043     ts.floatVal = FLOAT_VALUE;
       
  1044     ts.doubleVal = DOUBLE_VALUE;
       
  1045     ts.boolVal = BOOLEAN_VALUE;
       
  1046     ts.charVal = CHAR_VALUE;
       
  1047     ts.octetVal = OCTET_VALUE;
       
  1048     ts.anyVal = orb.create_any();
       
  1049     ts.anyVal.insert_string(ANY_VALUE);
       
  1050     ts.tcVal = TYPECODE_VALUE;
       
  1051     ts.objectVal = null;
       
  1052     ts.stringVal = STRING_VALUE;
       
  1053     ts.longlongVal = LONGLONG_VALUE;
       
  1054     ts.ulonglongVal = ULONGLONG_VALUE;
       
  1055     ts.wcharVal = WCHAR_VALUE;
       
  1056     ts.wstringVal = WSTRING_VALUE;
       
  1057   }
       
  1058 
       
  1059   //
       
  1060   // Test generic operations
       
  1061   //
       
  1062   void testOps(ORB orb, DynAnyFactory factory, TypeCode tc,
       
  1063                boolean hasComponents
       
  1064               )
       
  1065   {
       
  1066     try
       
  1067       {
       
  1068         Any badAny = orb.create_any();
       
  1069         DynAny d1 = null;
       
  1070         DynAny d2 = null;
       
  1071         DynAny d3 = null;
       
  1072         DynAny copy = null;
       
  1073         TypeCode origTC = getOrigType(tc);
       
  1074 
       
  1075         //
       
  1076         // Create an any having a TypeCode that will not match tc
       
  1077         //
       
  1078         if (tc.kind() != TCKind.tk_short)
       
  1079           badAny.insert_short((short) 0);
       
  1080         else
       
  1081           badAny.insert_ushort((short) 0);
       
  1082 
       
  1083         //
       
  1084         // Test: type()
       
  1085         //
       
  1086         d1 = factory.create_dyn_any_from_type_code(tc);
       
  1087 
       
  1088         TypeCode tcv = d1.type();
       
  1089         TEST(tc.equal(tcv));
       
  1090         d1.destroy();
       
  1091 
       
  1092         //
       
  1093         // Test: assign() TypeMismatch exception
       
  1094         //
       
  1095         try
       
  1096           {
       
  1097             d1 = factory.create_dyn_any_from_type_code(tc);
       
  1098             d2 = factory.create_dyn_any(badAny);
       
  1099             d1.assign(d2);
       
  1100             TEST("assign() should not have succeeded" == null);
       
  1101           }
       
  1102         catch (org.omg.DynamicAny.DynAnyPackage.TypeMismatch ex)
       
  1103           {
       
  1104             // expected
       
  1105             d1.destroy();
       
  1106             d2.destroy();
       
  1107           }
       
  1108 
       
  1109         //
       
  1110         // Test: from_any() TypeMismatch exception
       
  1111         //
       
  1112         try
       
  1113           {
       
  1114             d1 = factory.create_dyn_any_from_type_code(tc);
       
  1115             d1.from_any(badAny);
       
  1116             TEST("from_any() should not have succeeded" == null);
       
  1117           }
       
  1118         catch (org.omg.DynamicAny.DynAnyPackage.TypeMismatch ex)
       
  1119           {
       
  1120             // expected
       
  1121             d1.destroy();
       
  1122           }
       
  1123 
       
  1124         //
       
  1125         // Test: from_any() InvalidValue exception
       
  1126         //
       
  1127         switch (origTC.kind().value())
       
  1128           {
       
  1129             case TCKind._tk_null :
       
  1130             case TCKind._tk_void :
       
  1131             case TCKind._tk_TypeCode :
       
  1132             case TCKind._tk_Principal :
       
  1133             case TCKind._tk_objref :
       
  1134             case TCKind._tk_value :
       
  1135             case TCKind._tk_value_box :
       
  1136 
       
  1137               // nothing to do
       
  1138               break;
       
  1139 
       
  1140             default :
       
  1141               try
       
  1142                 {
       
  1143                   Any a = orb.create_any();
       
  1144                   a.type(tc);
       
  1145                   d1 = factory.create_dyn_any_from_type_code(tc);
       
  1146                   d1.from_any(a);
       
  1147                   harness.fail("from_any() should not have succeeded");
       
  1148                 }
       
  1149               catch (org.omg.DynamicAny.DynAnyPackage.InvalidValue ex)
       
  1150                 {
       
  1151                   // expected
       
  1152                   d1.destroy();
       
  1153                 }
       
  1154           }
       
  1155 
       
  1156         if (hasComponents)
       
  1157           {
       
  1158             int count;
       
  1159 
       
  1160             d1 = factory.create_dyn_any_from_type_code(tc);
       
  1161 
       
  1162             if (origTC.kind() == TCKind.tk_union)
       
  1163               count = d1.component_count();
       
  1164             else
       
  1165               count = origTC.member_count();
       
  1166             TEST(count > 0);
       
  1167 
       
  1168             //
       
  1169             // Test: seek
       
  1170             //
       
  1171             TEST(d1.seek(0) == true);
       
  1172             TEST(d1.seek(-1) == false);
       
  1173             TEST(d1.seek(count) == false);
       
  1174             TEST(d1.seek(count - 1) == true);
       
  1175 
       
  1176             //
       
  1177             // Test: next
       
  1178             //
       
  1179             d1.seek(-1);
       
  1180             TEST(d1.next() == true);
       
  1181             d1.seek(count - 1);
       
  1182             TEST(d1.next() == false);
       
  1183 
       
  1184             //
       
  1185             // Test: component_count()
       
  1186             //
       
  1187             TEST(d1.component_count() == count);
       
  1188 
       
  1189             //
       
  1190             // Test: current_component
       
  1191             //
       
  1192             d1.rewind();
       
  1193             d2 = d1.current_component();
       
  1194             TEST(d2 != null);
       
  1195 
       
  1196             //
       
  1197             // Test: destroy
       
  1198             //
       
  1199             d2.destroy(); // should do nothing because it's a child
       
  1200             d2.destroy(); // ditto
       
  1201 
       
  1202             //
       
  1203             // Test: current_component
       
  1204             //
       
  1205             d1.seek(-9);
       
  1206             d3 = d1.current_component();
       
  1207             TEST(d3 == null);
       
  1208 
       
  1209             d1.destroy();
       
  1210           }
       
  1211         else
       
  1212           {
       
  1213             d1 = factory.create_dyn_any_from_type_code(tc);
       
  1214 
       
  1215             //
       
  1216             // Test: seek
       
  1217             //
       
  1218             TEST(d1.seek(0) == false);
       
  1219             TEST(d1.seek(-1) == false);
       
  1220 
       
  1221             //
       
  1222             // Test: next
       
  1223             //
       
  1224             TEST(d1.next() == false);
       
  1225 
       
  1226             //
       
  1227             // Test: component_count()
       
  1228             //
       
  1229             TEST(d1.component_count() == 0);
       
  1230           }
       
  1231       }
       
  1232     catch (Exception ex)
       
  1233       {
       
  1234         fail(ex);
       
  1235       }
       
  1236   }
       
  1237 }