package org.jacorb.test.orb.giop;
/*
* JacORB - a free Java ORB
*
* Copyright (C) 2000-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.assertNotNull;
import static org.junit.Assert.fail;
import org.jacorb.orb.CodeSet;
import org.jacorb.test.harness.ORBTestCase;
import org.junit.Test;
import org.omg.CONV_FRAME.CodeSetComponent;
import org.omg.CONV_FRAME.CodeSetComponentInfo;
import org.omg.CORBA.CODESET_INCOMPATIBLE;
/**
* @author <a href="mailto:russell.gold@oracle.com">Russell Gold</a>
*/
public class CodeSetTest extends ORBTestCase
{
private static final int ISO8859_1_ID = 0x00010001;
private static final int UTF8_ID = 0x05010001;
private static final int UTF16_ID = 0x00010109;
private static final int UCS2 = 0x00010100;
private static final int UNKNOWN_ID = -1;
/**
* Verifies the ability to recognize the supported codeset names.
*/
@Test
public void testNameRecognition() throws Exception
{
assertEquals( "Latin-1 set id", ISO8859_1_ID, CodeSet.getCodeSet( "iso8859_1" ).getId() );
assertEquals( "UTF-8 set id", UTF8_ID, CodeSet.getCodeSet( "utf8" ).getId() );
assertEquals( "UTF-16 set id", UTF16_ID, CodeSet.getCodeSet( "Utf16" ).getId() );
assertEquals( "Unknown set id", UNKNOWN_ID, CodeSet.getCodeSet( "JUNK" ).getId() );
assertEquals( "Literal id", ISO8859_1_ID, CodeSet.getCodeSet( "00010001" ).getId() );
assertEquals( "Uknown id", UNKNOWN_ID, CodeSet.getCodeSet( "01010101" ).getId() );
}
/**
* Verifies the ability to convert an id to a name.
*/
@Test
public void testNameSelection() throws Exception
{
assertEquals( "Latin-1 set name", "ISO8859_1", CodeSet.csName( ISO8859_1_ID ) );
assertEquals( "UTF-8 set name", "UTF8", CodeSet.csName( UTF8_ID ) );
assertEquals( "UTF-16 set name", "UTF16", CodeSet.csName( UTF16_ID ) );
assertEquals( "Unknown set name", "Unknown TCS: 0xbabe", CodeSet.csName( 0x0000BABE ) );
}
/**
* Verifies detection of the platform standard encoding for char and string.
*/
@Test
public void testDefaultCharEncoding() throws Exception
{
int encoding = getORB().getTCSDefault().getId();
if (encoding != ISO8859_1_ID && encoding != UTF8_ID) fail( "Default codeset must be iso8859-1 or UTF-8" );
}
/**
* Verifies failure to match native code sets.
*/
@Test
public void testCodeSetNativeSetsDoNotMatch() throws Exception
{
CodeSetComponent local = new CodeSetComponent( 1, new int[0] );
CodeSetComponent remote = new CodeSetComponent( 0x21, new int[0] );
try
{
CodeSet.getMatchingCodeSet( local, remote, /* wide */ true );
fail( "Should have reported failure to match" );
} catch (CODESET_INCOMPATIBLE e)
{
assertEquals( "exception message", "No matching wide code set found. Client knows {0x00000001}. Server offered {0x00000021}", e.getMessage() );
}
}
/**
* Verifies success in matching native code sets.
*/
@Test
public void testCodeSetNativeSetsMatch() throws Exception
{
CodeSetComponent local = new CodeSetComponent( UTF8_ID, new int[0] );
CodeSetComponent remote = new CodeSetComponent( UTF8_ID, new int[0] );
assertEquals( "Matched code set", UTF8_ID, CodeSet.getMatchingCodeSet( local, remote, /* wide */ false ).getId() );
}
/**
* Verifies success in matching local native code set to remote conversion set.
*/
@Test
public void testCodeSetNativeSetMatchesRemoteConversion() throws Exception
{
CodeSetComponent local = new CodeSetComponent( UTF8_ID, new int[]{UTF16_ID} );
CodeSetComponent remote = new CodeSetComponent( UTF16_ID, new int[]{UTF8_ID} );
assertEquals( "Matched code set", UTF8_ID, CodeSet.getMatchingCodeSet( local, remote, /* wide */ false ).getId() );
}
/**
* Verifies success in matching local conversion code set to remote native set.
*/
@Test
public void testConversionCodeSetMatchesRemoteNative() throws Exception
{
CodeSetComponent local = new CodeSetComponent( ISO8859_1_ID, new int[]{UTF16_ID} );
CodeSetComponent remote = new CodeSetComponent( UTF16_ID, new int[]{UTF16_ID} );
assertEquals( "Matched code set", UTF16_ID, CodeSet.getMatchingCodeSet( local, remote, /* wide */ false ).getId() );
}
/**
* Verifies success in matching conversion code sets.
*/
@Test
public void testConversionCodeSetsMatch() throws Exception
{
CodeSetComponent local = new CodeSetComponent( 12, new int[]{UTF16_ID} );
CodeSetComponent remote = new CodeSetComponent( 5, new int[]{UTF16_ID} );
assertEquals( "Matched code set", UTF16_ID, CodeSet.getMatchingCodeSet( local, remote, /* wide */ false ).getId() );
}
/**
* Verifies failure to match any code sets.
*/
@Test
public void testCodeSetsDoNotMatch() throws Exception
{
CodeSetComponent local = new CodeSetComponent( 1, new int[]{0x123, 0x345} );
CodeSetComponent remote = new CodeSetComponent( 0x21, new int[]{0x34, 0x567, 0x890} );
try
{
CodeSet.getMatchingCodeSet( local, remote, /* wide */ true );
fail( "Should have reported failure to match" );
} catch (CODESET_INCOMPATIBLE e)
{
assertEquals( "exception message", "No matching wide code set found. Client knows {0x00000001,0x00000123,0x00000345}. Server offered {0x00000021,0x00000034,0x00000567,0x00000890}", e.getMessage() );
}
}
/**
* Verify that the local code set components offer the appropriate code sets.
*/
@Test
public void testLocalCodeSets() throws Exception
{
CodeSetComponentInfo info = getORB().getLocalCodeSetComponentInfo();
assertNotNull( "iso 8859-1 not supported for char", CodeSet.getCodeSetIfMatched( ISO8859_1_ID, info.ForCharData ) );
assertNotNull( "utf-8 not supported for char", CodeSet.getCodeSetIfMatched( UTF8_ID, info.ForCharData ) );
assertNotNull( "utf-8 not supported for wchar", CodeSet.getCodeSetIfMatched( UTF8_ID, info.ForWcharData ) );
assertNotNull( "utf-16 not supported for wchar", CodeSet.getCodeSetIfMatched( UTF16_ID, info.ForWcharData ) );
assertNotNull( "ucs-2 not supported for wchar", CodeSet.getCodeSetIfMatched( UCS2, info.ForWcharData ) );
}
}