package org.jacorb.test.bugs.bugjac683;
import static org.junit.Assert.fail;
import org.jacorb.test.harness.ClientServerSetup;
import org.jacorb.test.harness.ClientServerTestCase;
import org.jacorb.test.orb.AnyServer;
import org.jacorb.test.orb.AnyServerHelper;
import org.jacorb.test.orb.AnyServerImpl;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;
import org.omg.CORBA.ORBPackage.InvalidName;
import org.omg.DynamicAny.DynAnyFactoryPackage.InconsistentTypeCode;
public class BugJac683Test extends ClientServerTestCase
{
private AnyServer server;
@BeforeClass
public static void beforeClassSetUp() throws Exception
{
setup = new ClientServerSetup(AnyServerImpl.class.getName());
}
@Before
public void setUp() throws Exception
{
server = AnyServerHelper.narrow(setup.getServerObject());
}
@Test
public void testSetValue ()
{
org.omg.CORBA.Object obj = null;
org.omg.DynamicAny.DynAnyFactory factory = null;
org.omg.DynamicAny.DynFixed dynFixed = null;
try
{
obj = setup.getClientOrb().resolve_initial_references( "DynAnyFactory" );
}
catch (InvalidName e)
{
fail("Failed on DynAnyFactory getting: " + e.getMessage());
}
factory = org.omg.DynamicAny.DynAnyFactoryHelper.narrow( obj );
try
{
dynFixed = ( org.omg.DynamicAny.DynFixed ) factory.create_dyn_any_from_type_code(
setup.getClientOrb().create_fixed_tc( ( short ) 6, ( short ) 3 ) );
}
catch (InconsistentTypeCode e)
{
fail("Failed on fixed typecode creation: " + e.getMessage());
}
// should be ok
checkLocalValue(dynFixed, "0123.450d");
checkLocalValue(dynFixed, "+556.02");
checkLocalValue(dynFixed, "-556.23");
// incorrect value
checkLocalValue(dynFixed, "-2526.23", true);
}
@Test
public void testGetValue()
{
org.omg.CORBA.Object obj = null;
org.omg.DynamicAny.DynAnyFactory factory = null;
org.omg.DynamicAny.DynFixed dynFixed = null;
try
{
obj = setup.getClientOrb().resolve_initial_references( "DynAnyFactory" );
}
catch (InvalidName e)
{
fail("Failed on DynAnyFactory getting: " + e.getMessage());
}
factory = org.omg.DynamicAny.DynAnyFactoryHelper.narrow( obj );
try
{
dynFixed = ( org.omg.DynamicAny.DynFixed ) factory.create_dyn_any_from_type_code(
setup.getClientOrb().create_fixed_tc( ( short ) 6, ( short ) 2 ) );
}
catch (InconsistentTypeCode e)
{
fail("Failed on fixed typecode creation: " + e.getMessage());
}
checkRemoteValue(dynFixed, "0123.450d");
checkRemoteValue(dynFixed, "+556.02");
checkRemoteValue(dynFixed, "-556.23");
}
private void checkRemoteValue(org.omg.DynamicAny.DynFixed dynFixed, String value)
{
org.omg.CORBA.Any any = null;
org.omg.CORBA.Any returned = null;
any = setup.getClientOrb().create_any();
try
{
dynFixed.set_value(value);
any = dynFixed.to_any();
}
catch (Exception e)
{
fail("Incorrect value: '" + value + "' in value's setting: " + e.getMessage());
}
try
{
returned = server.bounce_any(any);
dynFixed.from_any(returned);
}
catch (Exception e)
{
fail("Returned value '" + returned.toString() + "' is incorrect: " + e.getMessage());
}
}
private void checkLocalValue(org.omg.DynamicAny.DynFixed dynFixed, String value)
{
checkLocalValue(dynFixed, value, false);
}
private void checkLocalValue(org.omg.DynamicAny.DynFixed dynFixed, String value, boolean expectedFail)
{
try
{
dynFixed.set_value(value);
if (expectedFail)
{
fail( "Value '" + value + "' should be unacceptable. InvalidValue exception should be thrown.");
}
}
catch (Exception e)
{
if (!expectedFail)
{
fail("Failed during set_value '" + value + "': " + e.getMessage());
}
}
}
}