package org.jacorb.test.orb;
/*
* JacORB - a free Java ORB
*
* Copyright (C) 1997-2014 Gerald Brose / The JacORB Team.
*
* 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 static org.junit.Assert.assertEquals;
import static org.junit.Assert.fail;
import org.jacorb.test.CharServer;
import org.jacorb.test.CharServerHelper;
import org.jacorb.test.CharServerPackage.DataFlavour;
import org.jacorb.test.CharServerPackage.DataFlavourHelper;
import org.jacorb.test.CharServerPackage.NameValuePair;
import org.jacorb.test.CharServerPackage.wcharSeqHolder;
import org.jacorb.test.harness.ClientServerSetup;
import org.jacorb.test.harness.ClientServerTestCase;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;
import org.omg.CORBA.CharHolder;
public class CharTest extends ClientServerTestCase
{
private CharServer server;
// a few character constants for testing
public static final char E_ACUTE = '\u00e9'; // in Latin-1
public static final char EURO_SIGN = '\u20AC'; // not in Latin-1
@Before
public void setUp() throws Exception
{
server = CharServerHelper.narrow( setup.getServerObject() );
}
@BeforeClass
public static void beforeClassSetUp() throws Exception
{
setup = new ClientServerSetup("org.jacorb.test.orb.CharServerImpl" );
}
// char tests
@Test
public void test_pass_in_char()
{
for (short c=0; c<255; c++)
{
short result = server.pass_in_char( (char)c );
assertEquals( c, result );
}
}
@Test
public void test_pass_in_char_illegal()
{
try
{
server.pass_in_char( (char)256 );
fail( "exception expected for (char)256" );
}
catch( org.omg.CORBA.DATA_CONVERSION e ) { }
catch( Exception e )
{
fail( "unexpected exception: " + e );
}
try
{
server.pass_in_char( EURO_SIGN );
fail( "exception expected for euro sign" );
}
catch( org.omg.CORBA.DATA_CONVERSION e ) { }
catch( Exception e )
{
fail( "unexpected exception: " + e );
}
try
{
server.pass_in_char( (char)0xffff );
fail( "exception expected for (char)0xffff" );
}
catch( org.omg.CORBA.DATA_CONVERSION e ) { }
catch( Exception e )
{
fail( "unexpected exception: " + e );
}
}
@Test
public void test_pass_out_char()
{
CharHolder x = new CharHolder ( 'a' );
server.pass_out_char( (short)'c', x );
assertEquals( 'c', x.value );
server.pass_out_char( (short)E_ACUTE, x );
assertEquals( E_ACUTE, x.value );
}
@Test
public void test_pass_out_char_illegal()
{
CharHolder x = new CharHolder ( 'a' );
try
{
server.pass_out_char( (short)EURO_SIGN, x );
fail( "exception expected for euro sign" );
}
catch( org.omg.CORBA.DATA_CONVERSION e ) { }
catch( Exception e )
{
fail( "unexpected exception: " + e );
}
try
{
server.pass_out_char( (short)0x8fff, x );
fail( "exception expected for (char)0x8fff" );
}
catch( org.omg.CORBA.DATA_CONVERSION e ) { }
catch( Exception e )
{
fail( "unexpected exception: " + e );
}
}
@Test
public void test_pass_inout_char()
{
CharHolder x = new CharHolder( 'a' );
server.pass_inout_char( x );
assertEquals( 'A', x.value );
x.value = E_ACUTE;
server.pass_inout_char( x );
// expect capital E_ACUTE
assertEquals( '\u00c9', x.value );
}
@Test
public void test_pass_inout_char_illegal()
{
CharHolder x = new CharHolder( EURO_SIGN );
try
{
server.pass_inout_char( x );
fail( "exception expected for euro sign" );
}
catch( org.omg.CORBA.DATA_CONVERSION e ) { }
catch( Exception e )
{
fail( "unexpected exception: " + e );
}
}
@Test
public void test_return_char()
{
for (short c = 0; c < 255; c++)
{
char result = server.return_char( c );
assertEquals( (char)c, result );
}
}
@Test
public void test_return_char_illegal()
{
try
{
server.return_char( (short)EURO_SIGN );
fail( "exception expected for euro sign" );
}
catch( org.omg.CORBA.DATA_CONVERSION e ) { }
catch( Exception e )
{
fail( "unexpected exception: " + e );
}
}
@Test
public void test_bounce_char()
{
char result = server.bounce_char( 'a' );
assertEquals( 'a', result );
}
// wchar tests
@Test
public void test_pass_in_wchar()
{
short result = server.pass_in_wchar( 'a' );
assertEquals( (short)'a', result );
result = server.pass_in_wchar( E_ACUTE );
assertEquals( (short)E_ACUTE, result );
result = server.pass_in_wchar( EURO_SIGN );
assertEquals( (short)EURO_SIGN, result );
result = server.pass_in_wchar( '\uA000' );
assertEquals( (short)0xA000, result );
}
@Test
public void test_pass_out_wchar()
{
CharHolder x = new CharHolder( 'a' );
server.pass_out_wchar( (short)'s', x );
assertEquals( 's', x.value );
server.pass_out_wchar( (short)E_ACUTE, x );
assertEquals( E_ACUTE, x.value );
server.pass_out_wchar( (short)EURO_SIGN, x );
assertEquals( EURO_SIGN, x.value );
server.pass_out_wchar( (short)0xA000, x );
assertEquals( '\uA000', x.value );
}
@Test
public void test_pass_inout_wchar()
{
CharHolder x = new CharHolder( E_ACUTE );
server.pass_inout_wchar( x );
assertEquals ( '\u00c9', x.value ); // capital e acute
}
@Test
public void test_return_wchar()
{
char result = server.return_wchar( (short)'a' );
assertEquals( 'a', result );
result = server.return_wchar( (short)E_ACUTE );
assertEquals( E_ACUTE, result );
result = server.return_wchar( (short)EURO_SIGN );
assertEquals( EURO_SIGN, result );
result = server.return_wchar( (short)0xA000 );
assertEquals( '\uA000', result );
}
@Test
public void test_bounce_wchar()
{
char result = server.bounce_wchar( EURO_SIGN );
assertEquals( EURO_SIGN, result );
}
@Test
public void test_wchar_seq()
{
try
{
wcharSeqHolder argout = new wcharSeqHolder();
wcharSeqHolder arginout = new wcharSeqHolder( new char[]{ 'a', 'a' } );
for( int i = 0; i < 1000; i++ )
{
//call remote op
test( server.test_wchar_seq( new char[]{ 'a', 'a' },
argout,
arginout ));
test( argout.value);
}
}
catch( Exception e )
{
fail( "unexpected exception: " + e );
}
}
@Test
public void test_return_dataflavour_inany()
{
try
{
DataFlavour flavour = new DataFlavour
("Test_Flavour", new NameValuePair[0]);
org.omg.CORBA.Any data = server.return_dataflavour_inany( flavour );
DataFlavour flavour2 = DataFlavourHelper.extract( data );
assertEquals( flavour2.name, "Test_Flavour" );
}
catch( Exception e )
{
fail( "unexpected exception: " + e );
}
}
private static void test( char[] arg )
{
assertEquals( arg[ 0 ], 'a' );
assertEquals( arg[ 1 ], 'a' );
}
}