Package org.jacorb.test.orb.dynany

Source Code of org.jacorb.test.orb.dynany.DynAnyFixedTest

package org.jacorb.test.orb.dynany;

/*
*        JacORB  - a free Java ORB
*
*   Copyright (C) 1997-2001  Gerald Brose.
*
*   This library is free software; you can redistribute it and/or
*   modify it under the terms of the GNU Library General Public
*   License as published by the Free Software Foundation; either
*   version 2 of the License, or (at your option) any later version.
*
*   This library is distributed in the hope that it will be useful,
*   but WITHOUT ANY WARRANTY; without even the implied warranty of
*   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
*   Library General Public License for more details.
*
*   You should have received a copy of the GNU Library General Public
*   License along with this library; if not, write to the Free
*   Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/

import junit.framework.*;
import junit.extensions.TestSetup;
import org.jacorb.test.common.ORBSetup;

import java.math.BigDecimal;
import java.lang.reflect.Method;

/**
* DynAnyFixedTest.java
*
* DynAny tests for fixed types.
*
*/

public class DynAnyFixedTest extends TestCase
{
   private static org.omg.DynamicAny.DynAnyFactory factory = null;
   private static org.omg.CORBA.ORB orb = null;


   public DynAnyFixedTest (String name)
   {
      super (name);
   }


   public static Test suite ()
   {
      TestSuite suite = new TestSuite ("DynFixed Tests");
      Setup setup = new Setup (suite);
      ORBSetup osetup = new ORBSetup (setup);

      suite.addTest (new DynAnyFixedTest ("testFactoryCreateFromAny"));
      suite.addTest (new DynAnyFixedTest ("testFactoryCreateFromTypeCode"));
      suite.addTest (new DynAnyFixedTest ("testCompareDynAny"));
      suite.addTest (new DynAnyFixedTest ("testAccessFixedValue"));
      suite.addTest (new DynAnyFixedTest ("testAccessTypeMismatchEx"));
      suite.addTest (new DynAnyFixedTest ("testAccessInvalidValueEx"));
      suite.addTest (new DynAnyFixedTest ("testDynAnyTypeCode"));
      suite.addTest (new DynAnyFixedTest ("testInitDynAnyFromDynAny"));
      suite.addTest (new DynAnyFixedTest ("testInitDynAnyFromAny"));
      suite.addTest (new DynAnyFixedTest ("testInitFromAnyTypeMismatchEx"));
      suite.addTest (new DynAnyFixedTest ("testGenerateAnyFromDynAny"));
      suite.addTest (new DynAnyFixedTest ("testDestroyDynAny"));
      suite.addTest (new DynAnyFixedTest ("testCopyDynAny"));
      suite.addTest (new DynAnyFixedTest ("testIterateDynAny"));

      return osetup;
   }


   /**
    * Tests creating a DynAny object from an Any object using the
    * DynAnyFactory object.
    */
   public void testFactoryCreateFromAny ()
   {
      BigDecimal fixedVal;
      org.omg.CORBA.Any any = null;
      org.omg.CORBA.TypeCode tc = null;

      tc = orb.create_fixed_tc ((short) 2, (short) 1);
      fixedVal = new BigDecimal ("1.0");
      any = orb.create_any ();
      any.insert_fixed (fixedVal, tc);

      createDynAnyFromAny (any);
   }


   /**
    * Tests creating a DynAny object from a TypeCode object using the
    * DynAnyFactory object.
    */
   public void testFactoryCreateFromTypeCode ()
   {
      org.omg.CORBA.TypeCode tc = null;

      tc = orb.create_fixed_tc ((short) 2, (short) 1);

      createDynAnyFromTypeCode (tc);
   }


   /**
    * Test comparing DynAny values.
    */
   public void testCompareDynAny ()
   {
      String msg;
      BigDecimal fixedVal;
      org.omg.CORBA.Any any = null;
      org.omg.CORBA.TypeCode tc = null;
      org.omg.DynamicAny.DynFixed dynAny = null;
      org.omg.DynamicAny.DynFixed dynAny2 = null;
     
      tc = orb.create_fixed_tc ((short) 2, (short) 1);
      fixedVal = new BigDecimal ("1.0");
      any = orb.create_any ();
      any.insert_fixed (fixedVal, tc);
      dynAny = createDynAnyFromAny (any);
      dynAny2 = createDynAnyFromAny (any);
     
      msg = "Comparing two equal DynAny values using DynAny::equal failed";
      assertTrue (msg, dynAny.equal (dynAny2));
   }


   /**
    * Test accessing a value in a DynFixed object.
    */
   public void testAccessFixedValue ()
   {
      String msg;
      Boolean setVal;
      BigDecimal fixedVal;
      BigDecimal fixedVal2;
      org.omg.CORBA.TypeCode tc = null;
      org.omg.DynamicAny.DynFixed dynAny = null;

      // use reflection to avoid ORB portability issues
      Class fixedClass = null;
      Method method = null;
      Class [] paramTypes = new Class [1];
      Object [] params = new Object [1];

      fixedVal = new BigDecimal ("1.0");
      fixedVal2 = null;
      tc = orb.create_fixed_tc ((short) 2, (short) 1);
      dynAny = createDynAnyFromTypeCode (tc);
     
      fixedClass = dynAny.getClass ();
      paramTypes [0] = String.class;
      params [0] = fixedVal.toString ();

      // get method to invoke via reflection
      try
      {
         method = fixedClass.getDeclaredMethod ("set_value", paramTypes);
      }
      catch (Throwable ex)
      {
         fail ("Unexpected error trying to obtain method to invoke: " + ex);
      }

      msg = "Failed to set value of DynFixed object with ";
      msg += "DynFixed::set_value operation when truncation was not required";
      setVal = null;
      try
      {
         setVal = (Boolean) method.invoke (dynAny, params);
      }
      catch (Throwable ex)
      {
         fail (msg + ": " + ex);
      }
      // verify return type if not void
      if (setVal != null)
      {
         assertTrue (msg, setVal.booleanValue ());
      }
     
      fixedVal = new BigDecimal ("1.01");
      params [0] = fixedVal.toString ();

      msg = "Failed to set value of DynFixed object with ";
      msg += "DynFixed::set_value operation when truncation was required";
      setVal = null;
      try
      {
         setVal = (Boolean) method.invoke (dynAny, params);
      }
      catch (Throwable ex)
      {
         fail (msg + ": " + ex);
      }
      // verify return type if not void
      if (setVal != null)
      {
         assertTrue (msg, !setVal.booleanValue ());
      }

      try
      {
         fixedVal2 = new BigDecimal (dynAny.get_value ());
      }
      catch (Throwable ex)
      {
         msg = "Failed to get value of DynFixed object with ";
         msg += "DynFixed::get_value operation";
         fail (msg + ": " + ex);
      }
      msg = "Value inserted into DynAny object is not equal to value ";
      msg += "extracted from same DynAny object";
      assertTrue (msg, fixedVal2.toString ().equals ("1.0"));
   }


   /**
    * Test that a TypeMismatch exception is raised if the fixed value is
    * invalid.
    */
   public void testAccessTypeMismatchEx ()
   {
      String msg;
      String badFixedVal;
      org.omg.CORBA.TypeCode tc = null;
      org.omg.DynamicAny.DynFixed dynAny = null;

      badFixedVal = "j.0";
      tc = orb.create_fixed_tc ((short) 2, (short) 1);
      dynAny = createDynAnyFromTypeCode (tc);

      msg = "TypeMismatch exception not thrown by DynFixed::set_value ";
      msg += "operation when a DynFixed object is set to an invalid value";
      try
      {
         dynAny.set_value (badFixedVal);

         fail (msg);
      }
      catch (org.omg.DynamicAny.DynAnyPackage.TypeMismatch ex)
      {
         // success
      }
      catch (org.omg.DynamicAny.DynAnyPackage.InvalidValue ex)
      {
         fail (msg + ": " + ex);
      }
   }


   /**
    * Test that an InvalidValue exception is raised if there are too many
    * digits in the fixed value.
    */
   public void testAccessInvalidValueEx ()
   {
      String msg;
      BigDecimal fixedVal;
      org.omg.CORBA.TypeCode tc = null;
      org.omg.DynamicAny.DynFixed dynAny = null;

      fixedVal = new BigDecimal ("10.01");
      tc = orb.create_fixed_tc ((short) 2, (short) 1);
      dynAny = createDynAnyFromTypeCode (tc);

      msg = "InvalidValue exception not thrown by DynFixed::set_value ";
      msg += "operation when there are too many digits in the fixed value";
      try
      {
         dynAny.set_value (fixedVal.toString ());

         fail (msg);
      }
      catch (org.omg.DynamicAny.DynAnyPackage.InvalidValue ex)
      {
         // success
      }
      catch (org.omg.DynamicAny.DynAnyPackage.TypeMismatch ex)
      {
         fail (msg + ": " + ex);
      }
   }

  
   /**
    * Test obtaining the TypeCode associated with a DynAny object.
    */
   public void testDynAnyTypeCode ()
   {
      String msg;
      org.omg.CORBA.TypeCode tc = null;
      org.omg.DynamicAny.DynFixed dynAny = null;

      tc = orb.create_fixed_tc ((short) 2, (short) 1);
      dynAny = createDynAnyFromTypeCode (tc);
        
      msg = "Incorrect TypeCode retrieved from DynAny::type operation";
      assertTrue (msg, dynAny.type ().equal (tc));
   }


   /**
    * Test initializing a DynAny object from another DynAny object.
    */
   public void testInitDynAnyFromDynAny ()
   {
      String msg;
      BigDecimal fixedVal;
      org.omg.CORBA.Any any = null;
      org.omg.CORBA.TypeCode tc = null;
      org.omg.DynamicAny.DynFixed dynAny = null;
      org.omg.DynamicAny.DynFixed dynAny2 = null;     

      tc = orb.create_fixed_tc ((short) 2, (short) 1);
      dynAny = createDynAnyFromTypeCode (tc);

      fixedVal = new BigDecimal ("1.0");
      any = orb.create_any ();
      any.insert_fixed (fixedVal, tc);
      dynAny2 = createDynAnyFromAny (any);

      msg = "Failed to initialize a DynAny object from another DynAny ";
      msg += "object using the DynAny::assign operation";
      try
      {
         dynAny.assign (dynAny2);
      }
      catch (Throwable ex)
      {
         fail (msg + ": " + ex);
      }
      assertTrue (msg, dynAny.equal (dynAny2));
   }


   /**
    * Test initializing a DynAny object from an Any value.
    */
   public void testInitDynAnyFromAny ()
   {
      String msg;
      BigDecimal fixedVal;
      org.omg.CORBA.Any any = null;
      org.omg.CORBA.TypeCode tc = null;
      org.omg.DynamicAny.DynFixed dynAny = null;
      org.omg.DynamicAny.DynFixed dynAny2 = null;
     
      tc = orb.create_fixed_tc ((short) 2, (short) 1);
      dynAny = createDynAnyFromTypeCode (tc);

      fixedVal = new BigDecimal ("1.0");
      any = orb.create_any ();
      any.insert_fixed (fixedVal, tc);
      dynAny2 = createDynAnyFromAny (any);

      msg = "Failed to initialize a DynAny object from an Any object ";
      msg += "using the DynAny::from_any operation";
      try
      {
         dynAny.from_any (any);
      }
      catch (Throwable ex)
      {
         fail (msg + ": " + ex);
      }
      assertTrue (msg, dynAny.equal (dynAny2));
   }


   /**
    * Test that a TypeMismatch exception is raised if there is a type
    * mismatch between the DynAny and Any types in an assignment.
    */
   public void testInitFromAnyTypeMismatchEx ()
   {
      String msg;
      org.omg.CORBA.Any any = null;
      org.omg.CORBA.TypeCode tc = null;
      org.omg.DynamicAny.DynFixed dynAny = null;
     
      any = orb.create_any ();
      any.insert_string ("Hello");

      tc = orb.create_fixed_tc ((short) 2, (short) 1);
      dynAny = createDynAnyFromTypeCode (tc);
           
      msg = "TypeMismatch exception not thrown by DynAny::from_any ";
      msg += "operation when DynAny and Any operands have different types";
      try
      {
         dynAny.from_any (any);

         fail (msg);
      }
      catch (org.omg.DynamicAny.DynAnyPackage.TypeMismatch ex)
      {
         // success
      }
      catch (org.omg.DynamicAny.DynAnyPackage.InvalidValue ex)
      {
         fail (msg + ": " + ex);
      }
   }


   /**
    * Test generating an Any value from a DynAny object.
    */
   public void testGenerateAnyFromDynAny ()
   {
      String msg;
      BigDecimal fixedVal;
      org.omg.CORBA.Any any = null;
      org.omg.CORBA.TypeCode tc = null;
      org.omg.DynamicAny.DynFixed dynAny = null;
      org.omg.DynamicAny.DynFixed dynAny2 = null;
     
      tc = orb.create_fixed_tc ((short) 2, (short) 1);
      fixedVal = new BigDecimal ("1.0");
      dynAny = createDynAnyFromTypeCode (tc);

      any = orb.create_any ();
      any = dynAny.to_any ();
      dynAny2 = createDynAnyFromAny (any);
     
      msg = "The DynAny::to_any operation failed to create an Any ";
      msg += "object with the same value as the DynAny object";
      assertTrue (msg, dynAny.equal (dynAny2));
   }


   /**
    * Test destroying a DynAny object.
    */
   public void testDestroyDynAny ()
   {
      String msg;
      BigDecimal fixedVal;
      org.omg.CORBA.Any any = null;
      org.omg.CORBA.TypeCode tc = null;
      org.omg.DynamicAny.DynFixed dynAny = null;
     
      tc = orb.create_fixed_tc ((short) 2, (short) 1);
      fixedVal = new BigDecimal ("1.0");
      any = orb.create_any ();
      any.insert_fixed (fixedVal, tc);
      dynAny = createDynAnyFromAny (any);
      dynAny.destroy ();

      try
      {
         dynAny.type ();

         msg = "Failed to destroy DynAny using DynAny::destroy operation - ";
         msg += "calling DynAny::type operation on a destroyed DynAny object ";
         msg += "did not raise OBJECT_NOT_EXIST exception";
         fail (msg);
      }
      catch (org.omg.CORBA.OBJECT_NOT_EXIST ex)
      {
         // success
      }

      msg = "Failed to destroy DynAny using DynAny::destroy operation - ";
      msg += "calling DynAny::current_component operation on a destroyed ";
      msg += "DynAny object did not raise OBJECT_NOT_EXIST exception";
      try
      {
         dynAny.current_component ();

         fail (msg);
      }
      catch (org.omg.CORBA.OBJECT_NOT_EXIST ex)
      {
         // success
      }     
      catch (org.omg.DynamicAny.DynAnyPackage.TypeMismatch ex)
      {
         fail (msg + ": " + ex);
      }
   }


   /**
    * Test creating a copy of a DynAny object.
    */
   public void testCopyDynAny ()
   {
      String msg;
      BigDecimal fixedVal;
      org.omg.CORBA.TypeCode tc = null;
      org.omg.DynamicAny.DynFixed dynAny = null;
      org.omg.DynamicAny.DynFixed dynAny2 = null;
     
      fixedVal = new BigDecimal ("1.0");
      tc = orb.create_fixed_tc ((short) 2, (short) 1);
      dynAny = createDynAnyFromTypeCode (tc);

      try
      {
         dynAny.set_value (fixedVal.toString ());
      }
      catch (Throwable ex)
      {
         fail ("Failed to insert value into DynAny object: " + ex);
      }     
      dynAny2 = (org.omg.DynamicAny.DynFixed) dynAny.copy ();

      msg = "The DynAny object created with the DynAny::copy operation ";
      msg += "is not equal to the DynAny object it was copied from";
      assertTrue (msg, dynAny.equal (dynAny2));
   }


   /**
    * Test iterating through components of a DynAny.
    */
   public void testIterateDynAny ()
   {
      String msg;
      int compCount = -1;
      boolean seek;
      org.omg.CORBA.TypeCode tc = null;
      org.omg.DynamicAny.DynFixed dynAny = null;
     
      tc = orb.create_fixed_tc ((short) 2, (short) 1);
      dynAny = createDynAnyFromTypeCode (tc);

      // test the component count
      try
      {
         compCount = dynAny.component_count ();
      }
      catch (Throwable ex)
      {
         // should not be needed, but it prevents compiler errors
         fail ("Unexpected error raised by DynAny::component_count operation");
      }
      msg = "The number of components returned from the ";
      msg += "DynAny::component_count operation is incorrect";
      assertEquals (msg, 0, compCount);
     
      // test if there is a first component
      msg = "The DynAny::seek operation indicates that a valid component ";
      msg += "exists but the DynAny should have no components";
      seek = dynAny.seek (0);
      assertTrue (msg, !seek);
     
      // test getting the current component
      try
      {
         dynAny = (org.omg.DynamicAny.DynFixed) dynAny.current_component ();

         msg = "A TypeMismatch exception was not raised by the ";        
         msg += "DynAny::current_component operation when trying to access ";
         msg += "the current component of a DynAny with no components";
         fail (msg);
      }
      catch (org.omg.DynamicAny.DynAnyPackage.TypeMismatch ex)
      {
         // success
      }
   }


   private static class Setup extends TestSetup
   {
      public Setup (Test test)
      {
         super (test);
      }

      protected void setUp ()
      {
         org.omg.CORBA.Object obj = null;

         orb = ORBSetup.getORB ();
         try
         {
            obj = orb.resolve_initial_references ("DynAnyFactory");
         }
         catch (org.omg.CORBA.ORBPackage.InvalidName ex)
         {
            fail ("Failed to resolve DynAnyFactory: " + ex);
         }
         try
         {
            factory = org.omg.DynamicAny.DynAnyFactoryHelper.narrow (obj);
         }
         catch (Throwable ex)
         {
            fail ("Failed to narrow to DynAnyFactory: " + ex);
         }
      }

      protected void tearDown ()
      {
      }
   }


   /**
    * Create a DynAny object from an Any object.
    */  
   private static org.omg.DynamicAny.DynFixed createDynAnyFromAny
      (org.omg.CORBA.Any any)
   {     
      String msg;
      org.omg.DynamicAny.DynFixed dynAny = null;

      try
      {
         dynAny = (org.omg.DynamicAny.DynFixed) factory.create_dyn_any (any);
      }
      catch (Throwable ex)
      {
         msg = "Factory failed to create DynAny from Any using ";
         msg += "DynAny::create_dyn_any operation: " + ex;
         fail (msg);
      }
      return dynAny;
   }


   /**
    * Create a DynAny object from a TypeCode object.
    */  
   private static org.omg.DynamicAny.DynFixed createDynAnyFromTypeCode
      (org.omg.CORBA.TypeCode tc)
   {
      String msg;     
      org.omg.DynamicAny.DynFixed dynAny = null;

      try
      {
         dynAny = (org.omg.DynamicAny.DynFixed)
            factory.create_dyn_any_from_type_code (tc);
      }
      catch (Throwable ex)
      {
         msg = "Factory failed to create DynAny from TypeCode using ";
         msg += "DynAny::create_dyn_any_from_type_code operation: " + ex;
         fail (msg);
      }
      return dynAny;
   }
  
}
TOP

Related Classes of org.jacorb.test.orb.dynany.DynAnyFixedTest

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.